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
; 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
@@ -26,28 +28,35 @@ UpdateJoypad:
ldh a, [rP1]
ldh a, [rP1]
and a, $0F
; merge directions and buttons
; complement so that active buttons read as 1
or a, b
cpl
; backup all buttons in B
ld b, a
; store just pressed buttons
; store currently pressed buttons
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
; store currently pressed buttons
; update was pressed
ld a, b
ldh [JoypadPressed], a
ldh [JoypadWasPressed], a
; reset joypad
ld a, $30
ldh [rP1], a
ret
Section "Edit memory", HRAM
@@ -64,6 +73,7 @@ InitEdit:
xor a
ldh [JoypadDown], a
ldh [JoypadPressed], a
ldh [JoypadWasPressed], a
ret

View File

@@ -12,14 +12,19 @@ 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:
; save registers
push af
push bc
.start
; check there are tiles to render
ldh a, [LinesLeft]
or a