Use labels instead of constants for HRAM
Use explicit ldh instruction to access HRAM locations, don't rely on optimizing ld
This commit is contained in:
126
home/joypad.asm
126
home/joypad.asm
@@ -8,9 +8,9 @@ JoypadInt::
|
||||
ClearJoypad::
|
||||
xor a
|
||||
; Pressed this frame (delta)
|
||||
ld [hJoyPressed], a
|
||||
ldh [hJoyPressed], a
|
||||
; Currently pressed
|
||||
ld [hJoyDown], a
|
||||
ldh [hJoyDown], a
|
||||
ret
|
||||
|
||||
Joypad::
|
||||
@@ -38,10 +38,10 @@ Joypad::
|
||||
; We can only get four inputs at a time.
|
||||
; We take d-pad first for no particular reason.
|
||||
ld a, R_DPAD
|
||||
ld [rJOYP], a
|
||||
ldh [rJOYP], a
|
||||
; Read twice to give the request time to take.
|
||||
ld a, [rJOYP]
|
||||
ld a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
|
||||
; The Joypad register output is in the lo nybble (inversed).
|
||||
; We make the hi nybble of our new container d-pad input.
|
||||
@@ -55,10 +55,10 @@ Joypad::
|
||||
; Buttons make 8 total inputs (A, B, Select, Start).
|
||||
; We can fit this into one byte.
|
||||
ld a, R_BUTTONS
|
||||
ld [rJOYP], a
|
||||
ldh [rJOYP], a
|
||||
; Wait for input to stabilize.
|
||||
rept 6
|
||||
ld a, [rJOYP]
|
||||
ldh a, [rJOYP]
|
||||
endr
|
||||
; Buttons take the lo nybble.
|
||||
cpl
|
||||
@@ -68,30 +68,30 @@ endr
|
||||
|
||||
; Reset the joypad register since we're done with it.
|
||||
ld a, $30
|
||||
ld [rJOYP], a
|
||||
ldh [rJOYP], a
|
||||
|
||||
; To get the delta we xor the last frame's input with the new one.
|
||||
ld a, [hJoypadDown] ; last frame
|
||||
ldh a, [hJoypadDown] ; last frame
|
||||
ld e, a
|
||||
xor b
|
||||
ld d, a
|
||||
; Released this frame:
|
||||
and e
|
||||
ld [hJoypadReleased], a
|
||||
ldh [hJoypadReleased], a
|
||||
; Pressed this frame:
|
||||
ld a, d
|
||||
and b
|
||||
ld [hJoypadPressed], a
|
||||
ldh [hJoypadPressed], a
|
||||
|
||||
; Add any new presses to the list of collective presses:
|
||||
ld c, a
|
||||
ld a, [hJoypadSum]
|
||||
ldh a, [hJoypadSum]
|
||||
or c
|
||||
ld [hJoypadSum], a
|
||||
ldh [hJoypadSum], a
|
||||
|
||||
; Currently pressed:
|
||||
ld a, b
|
||||
ld [hJoypadDown], a
|
||||
ldh [hJoypadDown], a
|
||||
|
||||
; Now that we have the input, we can do stuff with it.
|
||||
|
||||
@@ -130,28 +130,28 @@ GetJoypad::
|
||||
jr z, .auto
|
||||
|
||||
; To get deltas, take this and last frame's input.
|
||||
ld a, [hJoypadDown] ; real input
|
||||
ldh a, [hJoypadDown] ; real input
|
||||
ld b, a
|
||||
ld a, [hJoyDown] ; last frame mirror
|
||||
ldh a, [hJoyDown] ; last frame mirror
|
||||
ld e, a
|
||||
|
||||
; Released this frame:
|
||||
xor b
|
||||
ld d, a
|
||||
and e
|
||||
ld [hJoyReleased], a
|
||||
ldh [hJoyReleased], a
|
||||
|
||||
; Pressed this frame:
|
||||
ld a, d
|
||||
and b
|
||||
ld [hJoyPressed], a
|
||||
ldh [hJoyPressed], a
|
||||
|
||||
; It looks like the collective presses got commented out here.
|
||||
ld c, a
|
||||
|
||||
; Currently pressed:
|
||||
ld a, b
|
||||
ld [hJoyDown], a ; frame input
|
||||
ldh [hJoyDown], a ; frame input
|
||||
|
||||
.quit
|
||||
pop bc
|
||||
@@ -167,7 +167,7 @@ GetJoypad::
|
||||
; A value of $ff will immediately end the stream.
|
||||
|
||||
; Read from the input stream.
|
||||
ld a, [hROMBank]
|
||||
ldh a, [hROMBank]
|
||||
push af
|
||||
ld a, [wAutoInputBank]
|
||||
rst Bankswitch
|
||||
@@ -224,8 +224,8 @@ GetJoypad::
|
||||
pop af
|
||||
rst Bankswitch
|
||||
ld a, b
|
||||
ld [hJoyPressed], a ; pressed
|
||||
ld [hJoyDown], a ; input
|
||||
ldh [hJoyPressed], a ; pressed
|
||||
ldh [hJoyDown], a ; input
|
||||
jr .quit
|
||||
|
||||
StartAutoInput::
|
||||
@@ -241,9 +241,9 @@ StartAutoInput::
|
||||
ld [wAutoInputLength], a
|
||||
; Reset input mirrors.
|
||||
xor a
|
||||
ld [hJoyPressed], a ; pressed this frame
|
||||
ld [hJoyReleased], a ; released this frame
|
||||
ld [hJoyDown], a ; currently pressed
|
||||
ldh [hJoyPressed], a ; pressed this frame
|
||||
ldh [hJoyReleased], a ; released this frame
|
||||
ldh [hJoyDown], a ; currently pressed
|
||||
|
||||
ld a, AUTO_INPUT
|
||||
ld [wInputType], a
|
||||
@@ -269,11 +269,11 @@ JoyTitleScreenInput::
|
||||
call JoyTextDelay
|
||||
pop bc
|
||||
|
||||
ld a, [hJoyDown]
|
||||
ldh a, [hJoyDown]
|
||||
cp D_UP | SELECT | B_BUTTON
|
||||
jr z, .keycombo
|
||||
|
||||
ld a, [hJoyLast]
|
||||
ldh a, [hJoyLast]
|
||||
and START | A_BUTTON
|
||||
jr nz, .keycombo
|
||||
|
||||
@@ -291,33 +291,33 @@ JoyWaitAorB::
|
||||
.loop
|
||||
call DelayFrame
|
||||
call GetJoypad
|
||||
ld a, [hJoyPressed]
|
||||
ldh a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
ret nz
|
||||
call RTC
|
||||
jr .loop
|
||||
|
||||
WaitButton::
|
||||
ld a, [hOAMUpdate]
|
||||
ldh a, [hOAMUpdate]
|
||||
push af
|
||||
ld a, 1
|
||||
ld [hOAMUpdate], a
|
||||
ldh [hOAMUpdate], a
|
||||
call WaitBGMap
|
||||
call JoyWaitAorB
|
||||
pop af
|
||||
ld [hOAMUpdate], a
|
||||
ldh [hOAMUpdate], a
|
||||
ret
|
||||
|
||||
JoyTextDelay::
|
||||
call GetJoypad
|
||||
ld a, [hInMenu]
|
||||
ldh a, [hInMenu]
|
||||
and a
|
||||
ld a, [hJoyPressed]
|
||||
ldh a, [hJoyPressed]
|
||||
jr z, .ok
|
||||
ld a, [hJoyDown]
|
||||
ldh a, [hJoyDown]
|
||||
.ok
|
||||
ld [hJoyLast], a
|
||||
ld a, [hJoyPressed]
|
||||
ldh [hJoyLast], a
|
||||
ldh a, [hJoyPressed]
|
||||
and a
|
||||
jr z, .checkframedelay
|
||||
ld a, 15
|
||||
@@ -329,7 +329,7 @@ JoyTextDelay::
|
||||
and a
|
||||
jr z, .restartframedelay
|
||||
xor a
|
||||
ld [hJoyLast], a
|
||||
ldh [hJoyLast], a
|
||||
ret
|
||||
|
||||
.restartframedelay
|
||||
@@ -338,14 +338,14 @@ JoyTextDelay::
|
||||
ret
|
||||
|
||||
WaitPressAorB_BlinkCursor::
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
ldh a, [hMapObjectIndexBuffer]
|
||||
push af
|
||||
ld a, [hObjectStructIndexBuffer]
|
||||
ldh a, [hObjectStructIndexBuffer]
|
||||
push af
|
||||
xor a
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ld a, 6
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
|
||||
.loop
|
||||
push hl
|
||||
@@ -354,20 +354,20 @@ WaitPressAorB_BlinkCursor::
|
||||
pop hl
|
||||
|
||||
call JoyTextDelay
|
||||
ld a, [hJoyLast]
|
||||
ldh a, [hJoyLast]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr z, .loop
|
||||
|
||||
pop af
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
pop af
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ret
|
||||
|
||||
SimpleWaitPressAorB::
|
||||
.loop
|
||||
call JoyTextDelay
|
||||
ld a, [hJoyLast]
|
||||
ldh a, [hJoyLast]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr z, .loop
|
||||
ret
|
||||
@@ -388,10 +388,10 @@ ButtonSound::
|
||||
jp DelayFrames
|
||||
|
||||
.wait_input
|
||||
ld a, [hOAMUpdate]
|
||||
ldh a, [hOAMUpdate]
|
||||
push af
|
||||
ld a, $1
|
||||
ld [hOAMUpdate], a
|
||||
ldh [hOAMUpdate], a
|
||||
ld a, [wInputType]
|
||||
or a
|
||||
jr z, .input_wait_loop
|
||||
@@ -400,22 +400,22 @@ ButtonSound::
|
||||
.input_wait_loop
|
||||
call .blink_cursor
|
||||
call JoyTextDelay
|
||||
ld a, [hJoyPressed]
|
||||
ldh a, [hJoyPressed]
|
||||
and A_BUTTON | B_BUTTON
|
||||
jr nz, .received_input
|
||||
call RTC
|
||||
ld a, $1
|
||||
ld [hBGMapMode], a
|
||||
ldh [hBGMapMode], a
|
||||
call DelayFrame
|
||||
jr .input_wait_loop
|
||||
|
||||
.received_input
|
||||
pop af
|
||||
ld [hOAMUpdate], a
|
||||
ldh [hOAMUpdate], a
|
||||
ret
|
||||
|
||||
.blink_cursor
|
||||
ld a, [hVBlankCounter]
|
||||
ldh a, [hVBlankCounter]
|
||||
and %00010000 ; bit 4, a
|
||||
jr z, .cursor_off
|
||||
ld a, "▼"
|
||||
@@ -436,37 +436,37 @@ BlinkCursor::
|
||||
cp b
|
||||
pop bc
|
||||
jr nz, .place_arrow
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
ldh a, [hMapObjectIndexBuffer]
|
||||
dec a
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ret nz
|
||||
ld a, [hObjectStructIndexBuffer]
|
||||
ldh a, [hObjectStructIndexBuffer]
|
||||
dec a
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
ret nz
|
||||
ld a, "─"
|
||||
ld [hl], a
|
||||
ld a, -1
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ld a, 6
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
ret
|
||||
|
||||
.place_arrow
|
||||
ld a, [hMapObjectIndexBuffer]
|
||||
ldh a, [hMapObjectIndexBuffer]
|
||||
and a
|
||||
ret z
|
||||
dec a
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ret nz
|
||||
dec a
|
||||
ld [hMapObjectIndexBuffer], a
|
||||
ld a, [hObjectStructIndexBuffer]
|
||||
ldh [hMapObjectIndexBuffer], a
|
||||
ldh a, [hObjectStructIndexBuffer]
|
||||
dec a
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
ret nz
|
||||
ld a, 6
|
||||
ld [hObjectStructIndexBuffer], a
|
||||
ldh [hObjectStructIndexBuffer], a
|
||||
ld a, "▼"
|
||||
ld [hl], a
|
||||
ret
|
||||
|
Reference in New Issue
Block a user