ReadJoypad_:: ; c000 (3:4000) ; Poll joypad input. ; Unlike the hardware register, button ; presses are indicated by a set bit. ld a, [hDisableJoypadPolling] and a ret nz ld a, 1 << 5 ; select direction keys ;ld c, 0 ld [rJOYP], a ld a, [rJOYP] ld a, [rJOYP] cpl and %1111 swap a ld b, a ld a, 1 << 4 ; select button keys ld [rJOYP], a rept 6 ld a, [rJOYP] endr cpl and %1111 or b ld [hJoyInput], a ld a, 1 << 4 + 1 << 5 ; deselect keys ld [rJOYP], a ret _Joypad:: ; c02d (3:402d) ; hJoyReleased: (hJoyLast ^ hJoyInput) & hJoyLast ; hJoyPressed: (hJoyLast ^ hJoyInput) & hJoyInput ld a, [hJoyInput] ld b,a and $4F cp A_BUTTON + B_BUTTON + SELECT + START ; soft reset jp z, TrySoftReset ld a, [hJoyLast] ld e, a xor b ld d, a and e ld [hJoyReleased], a ld a, d and b ld [hJoyPressed], a ld a, b ld [hJoyLast], a ld a, [wd730] bit 5, a jr nz, DiscardButtonPresses ld a, [hJoyLast] ld [hJoyHeld], a ld a, [wJoyIgnore] and a ret z cpl ld b, a ld a, [hJoyHeld] and b ld [hJoyHeld], a ld a, [hJoyPressed] and b ld [hJoyPressed], a ret DiscardButtonPresses: xor a ld [hJoyHeld], a ld [hJoyPressed], a ld [hJoyReleased], a ret TrySoftReset: call DelayFrame ; deselect (redundant) ld a, $30 ld [rJOYP], a ld hl, hSoftReset dec [hl] jp z, SoftReset jp Joypad