Browse Source

sms/pad: easily detect change in button config

pull/10/head
Virgil Dupras 5 years ago
parent
commit
c5a0a6ff54
1 changed files with 19 additions and 1 deletions
  1. +19
    -1
      kernel/sms/pad.asm

+ 19
- 1
kernel/sms/pad.asm View File

@@ -18,12 +18,23 @@

; *** Variables ***
;
; Previous result of padStatusA
.equ PAD_PREVSTAT_A PAD_RAMSTART
.equ PAD_RAMEND PAD_PREVSTAT_A+1

; *** Code ***

padInit:
ld a, 0xff
ld (PAD_PREVSTAT_A), a
ret

; Put status for port A in register A. Bits, from MSB to LSB:
; Start - A - C - B - Right - Left - Down - Up
; Each bit is high when button is unpressed and low if button is pressed. For
; example, when no button is pressed, 0xff is returned.
; Moreover, sets Z according to whether the status changed since the last call.
; Z is set if status is the same, unset if different.
padStatusA:
; This logic below is for the Genesis controller, which is modal. TH is
; an output pin that swiches the meaning of TL and TR. When TH is high
@@ -44,6 +55,13 @@ padStatusA:
sla a
sla a
or b
; we're good now!
pop bc

; set Z according to whether status has change. Also, update saved
; status.
push hl
ld hl, PAD_PREVSTAT_A
cp (hl) ; Sets Z to proper value
ld (hl), a
pop hl
ret

Loading…
Cancel
Save