INCLUDE "hardware.inc"
|
|
|
|
Section "Input Data", WRAM0
|
|
|
|
lastKeys:: db
|
|
keys:: db
|
|
|
|
Section "Input Code", ROM0
|
|
|
|
; Initialize input
|
|
; NOTE: Inline if needed
|
|
Keys_Init::
|
|
ld hl, lastKeys
|
|
xor a
|
|
ld [hl+], a
|
|
ld [hl], a
|
|
|
|
; Update the input state
|
|
Keys_Update::
|
|
ld a, P1F_GET_BTN
|
|
ld [rP1], a
|
|
|
|
; wait a few cycles
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
|
|
; extract btn bits into top of B
|
|
cpl
|
|
and $f
|
|
swap a
|
|
ld b, a
|
|
ld a, P1F_GET_DPAD
|
|
ld [rP1], a
|
|
|
|
; wait more cycles
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
ld a, [rP1]
|
|
|
|
; extract dpad bits into bottom of B
|
|
cpl
|
|
and $f
|
|
or b
|
|
ld b, a
|
|
|
|
; swap to use flag macros from hardware.inc
|
|
; TODO: optimize this code to avoid swap (very small win)
|
|
swap b
|
|
|
|
; lastKeys <- keys ; keys <- B
|
|
ld hl, keys
|
|
ld a, [hl]
|
|
ld [hl], b
|
|
dec hl
|
|
ld [hl], a
|
|
|
|
ret
|