Files
GB-GameOfLife/Code/joypad.asm

70 lines
1.1 KiB
NASM

INCLUDE "hardware.inc"
Section "Joypad memory", HRAM
; Bits 0..7 are A, B, Select, Start, Right, Left, Up, Down
JoypadPressed: ds 1
JoypadWasPressed: ds 1
JoypadDown: ds 1
EXPORT ReadJoypad
SECTION "Read Joypad", ROM0
ReadJoypad:
; read directions
ld a, P1F_5
ldh [rP1], a
ldh a, [rP1]
ldh a, [rP1]
ldh a, [rP1]
ldh a, [rP1]
and a, $0F
swap a ; move into high nibble
ld b, a
; read buttons
ld a, P1F_4
ldh [rP1], a
ldh a, [rP1]
ldh a, [rP1]
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
; 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
; update was pressed
ld a, b
ldh [JoypadWasPressed], a
ret
EXPORT InitJoypad
SECTION "Init joypad", ROM0
InitJoypad:
xor a
ldh [JoypadDown], a
ldh [JoypadPressed], a
ldh [JoypadWasPressed], a
ret