read joypad in vbl so that inputs are more reactive

This commit is contained in:
2019-01-06 09:26:20 +01:00
parent 505227d5aa
commit 5753a7c1e7
2 changed files with 30 additions and 15 deletions

View File

@@ -2,11 +2,13 @@ INCLUDE "hardware.inc"
Section "Joypad memory", HRAM Section "Joypad memory", HRAM
; Bits 0..7 are A, B, Select, Start, Right, Left, Up, Down ; Bits 0..7 are A, B, Select, Start, Right, Left, Up, Down
JoypadDown: ds 1
JoypadPressed: ds 1 JoypadPressed: ds 1
JoypadWasPressed: ds 1
JoypadDown: ds 1
SECTION "Update joypad", ROM0 EXPORT ReadJoypad
UpdateJoypad: SECTION "Read Joypad", ROM0
ReadJoypad:
; read directions ; read directions
ld a, P1F_5 ld a, P1F_5
ldh [rP1], a ldh [rP1], a
@@ -32,22 +34,29 @@ UpdateJoypad:
or a, b or a, b
cpl 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 ; store currently pressed buttons
ld a, b
ldh [JoypadPressed], a ldh [JoypadPressed], a
; reset joypad ; reset joypad
ld a, $30 ld a, $30
ldh [rP1], a 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 ret
Section "Edit memory", HRAM Section "Edit memory", HRAM
@@ -64,6 +73,7 @@ InitEdit:
xor a xor a
ldh [JoypadDown], a ldh [JoypadDown], a
ldh [JoypadPressed], a ldh [JoypadPressed], a
ldh [JoypadWasPressed], a
ret ret

View File

@@ -12,7 +12,11 @@ Rendered: ds 2 ; progressing pointer in old buffer
SECTION "V-Blank Interrupt Handler", ROM0[$40] SECTION "V-Blank Interrupt Handler", ROM0[$40]
VBlankInterruptHandler: VBlankInterruptHandler:
jr LCDStatInterruptHandler ; save registers
push af
push bc
call ReadJoypad
jr LCDStatInterruptHandler.start
SECTION "LCD Stat Interrupt Handler", ROM0[$48] SECTION "LCD Stat Interrupt Handler", ROM0[$48]
LCDStatInterruptHandler: LCDStatInterruptHandler:
@@ -20,6 +24,7 @@ LCDStatInterruptHandler:
push af push af
push bc push bc
.start
; check there are tiles to render ; check there are tiles to render
ldh a, [LinesLeft] ldh a, [LinesLeft]
or a or a