diff --git a/Code/edit.asm b/Code/edit.asm index 5a67eed..0d4f2e0 100644 --- a/Code/edit.asm +++ b/Code/edit.asm @@ -2,11 +2,13 @@ INCLUDE "hardware.inc" Section "Joypad memory", HRAM ; Bits 0..7 are A, B, Select, Start, Right, Left, Up, Down -JoypadDown: ds 1 JoypadPressed: ds 1 +JoypadWasPressed: ds 1 +JoypadDown: ds 1 -SECTION "Update joypad", ROM0 -UpdateJoypad: +EXPORT ReadJoypad +SECTION "Read Joypad", ROM0 +ReadJoypad: ; read directions ld a, P1F_5 ldh [rP1], a @@ -26,28 +28,35 @@ UpdateJoypad: 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 - ; backup all buttons in B - ld b, a - - ; store just pressed buttons + ; 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 - ; store currently pressed buttons + ; update was pressed ld a, b - ldh [JoypadPressed], a + ldh [JoypadWasPressed], a - ; reset joypad - ld a, $30 - ldh [rP1], a ret Section "Edit memory", HRAM @@ -64,6 +73,7 @@ InitEdit: xor a ldh [JoypadDown], a ldh [JoypadPressed], a + ldh [JoypadWasPressed], a ret diff --git a/Code/render.asm b/Code/render.asm index 9256572..ab6f75a 100644 --- a/Code/render.asm +++ b/Code/render.asm @@ -12,14 +12,19 @@ Rendered: ds 2 ; progressing pointer in old buffer SECTION "V-Blank Interrupt Handler", ROM0[$40] VBlankInterruptHandler: - jr LCDStatInterruptHandler + ; save registers + push af + push bc + call ReadJoypad + jr LCDStatInterruptHandler.start SECTION "LCD Stat Interrupt Handler", ROM0[$48] LCDStatInterruptHandler: ; save registers push af push bc - + +.start ; check there are tiles to render ldh a, [LinesLeft] or a