From 67b2f3fc7d655216099a6035f5b7a6e17f1e753b Mon Sep 17 00:00:00 2001 From: Paul Gardner-Stephen Date: Sat, 20 Apr 2019 00:59:09 +0930 Subject: [PATCH] refactor keyboard scanner somewhat, and have no variables in ROM(!) --- c64/kernal/irq_handler.s | 9 +++++++++ c64/kernal/scan_keyboard.s | 26 +++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/c64/kernal/irq_handler.s b/c64/kernal/irq_handler.s index 8d8294c5..1db6d0db 100644 --- a/c64/kernal/irq_handler.s +++ b/c64/kernal/irq_handler.s @@ -27,5 +27,14 @@ default_irq_handler: jsr blink_cursor jsr scan_keyboard + + lda KeyQuantity + sta $0400 + lda Buffer+0 + sta $0401 + lda Buffer+1 + sta $0402 + lda Buffer+2 + sta $0403 jmp return_from_interrupt diff --git a/c64/kernal/scan_keyboard.s b/c64/kernal/scan_keyboard.s index 035096d4..4b81e6ee 100644 --- a/c64/kernal/scan_keyboard.s +++ b/c64/kernal/scan_keyboard.s @@ -156,6 +156,15 @@ .alias TempZP $B6 ;// 1 byte .alias SimultaneousKeys $F7 ;// 1 byte + ;; Reuse RS232 variables, since they should not be used + ;; by other things + ;; These are initialised in cinit all to $FF + .alias BufferOld $293 ; 3 bytes + .alias Buffer $297 ; 4 bytes + .alias BufferQuantity $29B ; 1 byte + + + ;// Operational Variables .alias MaxKeyRollover 3 @@ -180,7 +189,8 @@ KeyInRow: asl bcs nokey0 jsr KeyFound -nokey0: +nokey0: + inx asl bcs nokey1 jsr KeyFound @@ -233,11 +243,10 @@ KeyFound: ;; was: ldy KeyTable,x pha txa - tay - pla ldx KeyQuantity - sty BufferNew,x + sta BufferNew,x + pla ldx TempZP rts @@ -536,12 +545,3 @@ TooManyNewKeys: sec rts -BufferOld: - .byte $ff, $ff, $ff - -Buffer: - .byte $ff, $ff, $ff, $ff - -BufferQuantity: - .byte $ff -