read joypad in vbl so that inputs are more reactive
This commit is contained in:
@@ -2,11 +2,13 @@ INCLUDE "hardware.inc"
|
||||
|
||||
Section "Joypad memory", HRAM
|
||||
; Bits 0..7 are A, B, Select, Start, Right, Left, Up, Down
|
||||
JoypadDown: ds 1
|
||||
JoypadPressed: ds 1
|
||||
JoypadWasPressed: ds 1
|
||||
JoypadDown: ds 1
|
||||
|
||||
SECTION "Update joypad", ROM0
|
||||
UpdateJoypad:
|
||||
EXPORT ReadJoypad
|
||||
SECTION "Read Joypad", ROM0
|
||||
ReadJoypad:
|
||||
; read directions
|
||||
ld a, P1F_5
|
||||
ldh [rP1], a
|
||||
@@ -32,22 +34,29 @@ UpdateJoypad:
|
||||
or a, b
|
||||
cpl
|
||||
|
||||
; backup all buttons in B
|
||||
ld b, a
|
||||
|
||||
; store just pressed buttons
|
||||
ldh a, [JoypadPressed]
|
||||
cpl
|
||||
and a, b
|
||||
ldh [JoypadDown], a
|
||||
|
||||
; store currently pressed buttons
|
||||
ld a, b
|
||||
ldh [JoypadPressed], a
|
||||
|
||||
; reset joypad
|
||||
ld a, $30
|
||||
ldh [rP1], a
|
||||
|
||||
ret
|
||||
|
||||
SECTION "Update joypad", ROM0
|
||||
UpdateJoypad:
|
||||
; compute & store just pressed buttons
|
||||
ldh a, [JoypadPressed]
|
||||
ld b, a
|
||||
ldh a, [JoypadWasPressed]
|
||||
cpl
|
||||
and a, b
|
||||
ldh [JoypadDown], a
|
||||
|
||||
; update was pressed
|
||||
ld a, b
|
||||
ldh [JoypadWasPressed], a
|
||||
|
||||
ret
|
||||
|
||||
Section "Edit memory", HRAM
|
||||
@@ -64,6 +73,7 @@ InitEdit:
|
||||
xor a
|
||||
ldh [JoypadDown], a
|
||||
ldh [JoypadPressed], a
|
||||
ldh [JoypadWasPressed], a
|
||||
ret
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,11 @@ Rendered: ds 2 ; progressing pointer in old buffer
|
||||
|
||||
SECTION "V-Blank Interrupt Handler", ROM0[$40]
|
||||
VBlankInterruptHandler:
|
||||
jr LCDStatInterruptHandler
|
||||
; save registers
|
||||
push af
|
||||
push bc
|
||||
call ReadJoypad
|
||||
jr LCDStatInterruptHandler.start
|
||||
|
||||
SECTION "LCD Stat Interrupt Handler", ROM0[$48]
|
||||
LCDStatInterruptHandler:
|
||||
@@ -20,6 +24,7 @@ LCDStatInterruptHandler:
|
||||
push af
|
||||
push bc
|
||||
|
||||
.start
|
||||
; check there are tiles to render
|
||||
ldh a, [LinesLeft]
|
||||
or a
|
||||
|
||||
Reference in New Issue
Block a user