--- /dev/null
+ ; poll inputs
+ ; returns:
+ ; new inputs in [curr_inputs]
+ ; previous inputs in [prev_inputs]
+poll_inputs:
+ ld a, [curr_inputs]
+ ld [prev_inputs], a
+
+ ld a, P1FDPAD
+ call poll_p1
+ swap a
+ ld b, a
+
+ ld a, P1FBTN
+ call poll_p1
+ or a, b
+
+
+ ld [curr_inputs], a
+ ld a, b
+
+ ret
+
+
+ ; poll p1
+ ; inputs:
+ ; a: P1 key matrix flag
+ ; returns
+ ; a: A0-3 -> inputs
+poll_p1:
+ ld [RP1], a
+ ; wait for values to become stable
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1]
+ ldh a, [RP1] ; last read counts
+ xor a, 0x0F
+ and a, 0x0F
+
+ ld d, a
+ ; reset P1F
+ ld a, P1FNONE
+ ldh [RP1], a
+ ld a, d
+
+ ret
vblank:
call OAMDMAFN
+ call poll_inputs
+
; test puts
ld hl, STR_TITLE
ld de, SCRN0
call puts
+
ret
+ ; wait for next vblank
vblank_wait:
ld a, [RLY]
cp a, 144
jp c, vblank_wait
ret
+ ; turns off the lcd
lcd_off:
; *never* turn off LCD without waiting
; for vblank!
ret
+ ; turns on the lcd
lcd_on:
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_OBJON
ld [RLCD], a
ret
+ ; init video system
video_init:
call copy_tiles