; Keyboard polling stuff for the 510.
;
- .export SCNKEY
- .importzp tpi2, ktab1, ktab2, ktab3, ktab4
+ .export scnkey
+ .importzp tpi2, ktab1, ktab2, ktab3, ktab4
+ .importzp keyidx, keybuf, keyscanbuf, keysave, modkey, norkey
+ .importzp graphmode, lastidx, rptdelay, rptcount
- .include "cbm510.inc"
+ .include "cbm510.inc"
-.proc SCNKEY
+.proc scnkey
lda #$FF
- sta ModKey
- sta NorKey
- lda #$00
- sta KbdScanBuf
- ldy #TPI::PRB
- sta (tpi2),y
- ldy #TPI::PRA
- sta (tpi2),y
+ sta modkey
+ sta norkey
+ lda #$00
+ sta keyscanbuf
+ ldy #TPI::PRB
+ sta (tpi2),y
+ ldy #TPI::PRA
+ sta (tpi2),y
jsr Poll
and #$3F
eor #$3F
bne L1
jmp NoKey
-L1: lda #$FF
- ldy #TPI::PRA
- sta (tpi2),y
+L1: lda #$FF
+ ldy #TPI::PRA
+ sta (tpi2),y
asl a
- ldy #TPI::PRB
- sta (tpi2),y
+ ldy #TPI::PRB
+ sta (tpi2),y
jsr Poll
pha
- sta ModKey
+ sta modkey
ora #$30
- bne L3 ; Branch always
+ bne L3 ; Branch always
-L2: jsr Poll
-L3: ldx #$05
- ldy #$00
-L4: lsr a
+L2: jsr Poll
+L3: ldx #$05
+ ldy #$00
+L4: lsr a
bcc L5
- inc KbdScanBuf
+ inc keyscanbuf
dex
bpl L4
sec
- ldy TPI::PRB
- lda (tpi2),y
- rol a
- sta (tpi2),y
- ldy #TPI::PRA
- lda (tpi2),y
- rol a
- sta (tpi2),y
+ ldy #TPI::PRB
+ lda (tpi2),y
+ rol a
+ sta (tpi2),y
+ ldy #TPI::PRA
+ lda (tpi2),y
+ rol a
+ sta (tpi2),y
bcs L2
pla
- bcc NoKey ; Branch always
+ bcc NoKey ; Branch always
-L5: ldy KbdScanBuf
- sty NorKey
+L5: ldy keyscanbuf
+ sty norkey
pla
asl a
asl a
asl a
bcc L6
bmi L7
- lda (ktab2),y ; Shifted normal key
- ldx GrafMode
+ lda (ktab2),y ; Shifted normal key
+ ldx graphmode
beq L8
- lda (ktab3),y ; Shifted key in graph mode
+ lda (ktab3),y ; Shifted key in graph mode
bne L8
-L6: lda (ktab4),y ; Key with ctrl pressed
- bne L8
-L7: lda (ktab1),y ; Normal key
-L8: tax
- cpx #$FF ; Valid key?
+L6: lda (ktab4),y ; Key with ctrl pressed
+ bne L8
+L7: lda (ktab1),y ; Normal key
+L8: tax
+ cpx #$FF ; Valid key?
beq Done
- cpy LastIndex
+ cpy lastidx
beq Repeat
ldx #$13
- stx RepeatDelay
- ldx KeyIndex
+ stx rptdelay
+ ldx keyidx
cpx #$09
beq NoKey
cpy #$59
bne PutKey
cpx #$08
beq NoKey
- sta KeyBuf,x
+ sta keybuf,x
inx
bne PutKey
-NoKey: ldy #$FF
-Done: sty LastIndex
-End: lda #$7F
- ldy #TPI::PRA
- sta (tpi2),y
- ldy #TPI::PRB
- lda #$FF
- sta (tpi2),y
+NoKey: ldy #$FF
+Done: sty lastidx
+End: lda #$7F
+ ldy #TPI::PRA
+ sta (tpi2),y
+ ldy #TPI::PRB
+ lda #$FF
+ sta (tpi2),y
rts
-Repeat: dec RepeatDelay
+Repeat: dec rptdelay
bpl End
- inc RepeatDelay
- dec RepeatCount
+ inc rptdelay
+ dec rptcount
bpl End
- inc RepeatCount
- ldx KeyIndex
+ inc rptcount
+ ldx keyidx
bne End
-PutKey: sta KeyBuf,x
+PutKey: sta keybuf,x
inx
- stx KeyIndex
+ stx keyidx
ldx #$03
- stx RepeatCount
+ stx rptcount
bne Done
.endproc
; Poll the keyboard port until it's stable
-.proc Poll
- ldy TPI::PRC
-L1: lda (tpi2),y
- sta KeySave
- lda (tpi2),y
- cmp KeySave
- bne L1
- rts
+.proc Poll
+ ldy #TPI::PRC
+L1: lda (tpi2),y
+ sta keysave
+ lda (tpi2),y
+ cmp keysave
+ bne L1
+ rts
.endproc
-.bss
-
-KeySave: .res 1