rlm@117: rlm@117: (defn count-frames* [] rlm@117: (-> (tick (mid-game)) rlm@117: (IE! 0) ; disable interrupts rlm@117: (inject-item-assembly rlm@117: ;; write 00010000 to 0xFF00 to select joypad rlm@117: [0x18 ;D31D ; jump over rlm@117: 0x02 ;D31E ; the next 2 bytes rlm@117: 0x00 ;D31F ; frame-count rlm@117: 0x00 ;D320 ; v-blank-prev rlm@117: rlm@117: rlm@117: 0xFA ;D321 rlm@117: 0x41 ;D322 ; load (FF41) into A rlm@117: 0xFF ;D323 ; this contains mode flags rlm@117: rlm@117: 0x47 ;; copy A -> B rlm@117: rlm@117: 0xCB rlm@117: 0x3F ;; shift A right rlm@117: 0x2F ;; complement A rlm@117: rlm@117: 0xA0 ;; A & B -> A. rlm@117: 0x47 ;; copy A -> B. Now the first bit of B is (VB == 1) rlm@117: rlm@117: 0xFA rlm@117: 0x20 rlm@117: 0xD3 ;; load v-blank-prev into A rlm@117: rlm@117: 0xA0 ;; A & B -> A. rlm@117: 0x4F ;; copy A to C. Now C contains increment-counter? rlm@117: rlm@117: 0xFA rlm@117: 0x1F rlm@117: 0xD3 ;; load frame-count into A rlm@117: rlm@117: 0x81 ;; add increment-counter? to frame-count rlm@117: 0xEA ;; store A into frame-count rlm@117: 0x1F rlm@117: 0xD3 rlm@117: rlm@117: 0x3E ;; load 1 into A rlm@117: 0x01 rlm@117: 0xA0 ;; A & B -> A. Now A is (VB==1) rlm@117: 0xEA ;; store A into v-blank-prev rlm@117: 0x20 rlm@117: 0xD3 rlm@117: rlm@117: 0xC3 ;D348 ; return to beginning rlm@117: 0x1D ;D349 rlm@117: 0xD3 ;D34A rlm@117: rlm@117: rlm@117: ])))