@ -0,0 +1,8 @@ | |||||
DEF BTN_START EQU $80 | |||||
DEF BTN_SELECT EQU $40 | |||||
DEF BTN_B EQU $20 | |||||
DEF BTN_A EQU $10 | |||||
DEF BTN_DOWN EQU $8 | |||||
DEF BTN_UP EQU $4 | |||||
DEF BTN_LEFT EQU $2 | |||||
DEF BTN_RIGHT EQU $1 |
@ -0,0 +1,56 @@ | |||||
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 | |||||
; lastKeys <- keys ; keys <- B | |||||
ld hl, keys | |||||
ld a, [hl] | |||||
ld [hl], b | |||||
dec hl | |||||
ld [hl], a | |||||
ret |
@ -0,0 +1,38 @@ | |||||
INCLUDE "hardware.inc" | |||||
SECTION "OAM Mirror", WRAM0, ALIGN[8] | |||||
_OAM:: ds 40 * 4 | |||||
_OAM_end: | |||||
SECTION "OAM DMA routine", ROM0 | |||||
; Initialize OAM | |||||
OAM_Init:: | |||||
; Clear internal OAM | |||||
ld hl, _OAM | |||||
xor a | |||||
ld c, _OAM_end - _OAM | |||||
call memset | |||||
; Copy DMA transfer routine to HRAM | |||||
ld hl, waitForDMA | |||||
ld bc, DMA_Start | |||||
ld d, waitForDMA_end - waitForDMA | |||||
call memcpy | |||||
ret | |||||
waitForDMA: | |||||
ld [rDMA], a | |||||
ld a, 40 | |||||
.wait: | |||||
dec a | |||||
jr nz, .wait | |||||
ret | |||||
waitForDMA_end: | |||||
SECTION "OAM DMA", HRAM | |||||
DMA_Start:: | |||||
ds waitForDMA_end - waitForDMA |