diff --git a/src/aliases/,aliases_ram_lowmem_m65.s b/src/aliases/,aliases_ram_lowmem_m65.s index 9fc12e3b..ee955201 100644 --- a/src/aliases/,aliases_ram_lowmem_m65.s +++ b/src/aliases/,aliases_ram_lowmem_m65.s @@ -55,12 +55,11 @@ !addr M65_SCRCOLMAX = $594 ; maximum allowed column !addr M65_KB_BUCKY = $595 ; result of bucky keys scan !addr M65_KB_COLSCAN = $596 ; $596-$59E results of keyboard scan, columns 0-8 - !addr M65_KB_COLSUM = $59F ; sum (OR) of the M65_KB_COLSCAN + !addr M65_JOYCRSR = $59F ; joystick to be used for cursor movement !addr M65_KB_PRESSED = $560 ; $560-$562 keys pressed, used during scanning keyboard !addr M65_KB_PRESSED_OLD = $563 ; $563-$565 keys pressed during previous scan !addr M65_KB_PRESSED_NEW = $566 ; $566-$568 set of M65_KB_PRESSED minus M65_KB_PRESSED_OLD - !addr M65_JOYCRSR = $569 ; joystick to be used for cursor movement - ; $56A-$5EB -- UNUSED -- + ; $569-$5EB -- UNUSED -- !addr M65_DMAGIC_LIST = $5F1 ; $5EF-$5FF reserved for DMAgic list, 15 bytes (modulo bytes are not needed) !addr M65_RS232_INBUF = $600 ; $600-$6FF -- reserved for RS-232 input buffer -- !addr M65_RS232_OUTBUF = $700 ; $700-$7FF -- reserved for RS-232 output buffer -- diff --git a/src/kernal/keyboard_m65/mega65_scnkey.s b/src/kernal/keyboard_m65/mega65_scnkey.s index 50bb7e70..419034a9 100644 --- a/src/kernal/keyboard_m65/mega65_scnkey.s +++ b/src/kernal/keyboard_m65/mega65_scnkey.s @@ -4,13 +4,21 @@ m65_scnkey: + ; Initialize work variables for scanning the keyboard + + lda M65_KB_PRESSED+0 + sta M65_KB_PRESSED_OLD+0 + lda M65_KB_PRESSED+1 + sta M65_KB_PRESSED_OLD+1 + lda M65_KB_PRESSED+2 + sta M65_KB_PRESSED_OLD+2 + + jsr m65_scnkey_init_pressed + ; ; Scan the whole keyboard, store results in memory ; - lda #$00 - sta M65_KB_COLSUM - ldx #$08 lda #%01111111 @@ -25,8 +33,6 @@ m65_scnkey_fetch_loop: lda KBSCN_PEEK eor #$FF ; let bit 1 mean 'pressed', not the otherwise sta M65_KB_COLSCAN, x - ora M65_KB_COLSUM - sta M65_KB_COLSUM dex bpl m65_scnkey_fetch_loop @@ -80,16 +86,15 @@ m65_scnkey_keytab_set_done: ; Scan the keyboard matrix stored in memory to determine which keys were pressed ; - lda M65_KB_PRESSED+0 - sta M65_KB_PRESSED_OLD+0 - lda M65_KB_PRESSED+1 - sta M65_KB_PRESSED_OLD+1 - lda M65_KB_PRESSED+2 - sta M65_KB_PRESSED_OLD+2 - - jsr m65_scnkey_init_pressed - - lda M65_KB_COLSUM + lda M65_KB_COLSCAN+0 ; no loop here - for performance purposes + ora M65_KB_COLSCAN+1 + ora M65_KB_COLSCAN+2 + ora M65_KB_COLSCAN+3 + ora M65_KB_COLSCAN+4 + ora M65_KB_COLSCAN+5 + ora M65_KB_COLSCAN+6 + ora M65_KB_COLSCAN+7 + ora M65_KB_COLSCAN+8 beq m65_scnkey_try_joystick ; branch if no key was pressed ldx #$08