diff options
| -rw-r--r-- | .nasm/memory.txt | 1 | ||||
| -rw-r--r-- | include/joypad.s | 5 | ||||
| -rw-r--r-- | src/driver.s | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/.nasm/memory.txt b/.nasm/memory.txt index c47526d..95b5ea9 100644 --- a/.nasm/memory.txt +++ b/.nasm/memory.txt @@ -11,6 +11,7 @@ $0A: zp_rand $10: zp_displayed $11: zp_timer $20: zp_flags +$21: zp_prev $22: zp_buttons1 $23: zp_buttons2 $24: zp_level diff --git a/include/joypad.s b/include/joypad.s index f7268e8..cc15d02 100644 --- a/include/joypad.s +++ b/include/joypad.s @@ -13,6 +13,9 @@ m_joypad1 = $4016 ;; m_joypad2 = $4017 + ;; The previous reading from the latest read controller. + zp_prev = $21 + ;; After running a `read_*` function these two variables will contain the ;; given result. zp_buttons1 = $22 @@ -68,5 +71,7 @@ ;; Shortcut for reading the joypad from the first player safely. .macro READ_JOYPAD1 ldx #$00 + lda Joypad::zp_buttons1 + sta Joypad::zp_prev jsr Joypad::read_x .endmacro diff --git a/src/driver.s b/src/driver.s index c4bd8e7..2b61e17 100644 --- a/src/driver.s +++ b/src/driver.s @@ -173,8 +173,13 @@ lda zp_pause_timer bne @skip_pause_handling - ;; The timer is zero and the player asked to pause, let's reset the - ;; timer. + ;; The timer reached zero, but is the player actually just holding the + ;; button? If so ignore it until it unholds it. + eor Joypad::zp_prev + and #(Joypad::BUTTON_START | Joypad::BUTTON_SELECT) + bne @skip_pause_handling + + ;; Let's reset the timer. lda #PAUSE_TIMER_VALUE sta zp_pause_timer |
