1
0
mirror of https://github.com/cc65/cc65.git synced 2024-11-08 13:04:52 +00:00
cc65/libsrc/cbm510/kscnkey.s

147 lines
2.4 KiB
ArmAsm
Raw Normal View History

;
; Ullrich von Bassewitz, 13.09.2001
;
; Keyboard polling stuff for the 510.
;
.export k_scnkey
.importzp tpi2, ktab1, ktab2, ktab3, ktab4
.include "zeropage.inc"
.include "io.inc"
.include "page3.inc"
.proc k_scnkey
lda #$FF
sta ModKey
sta NorKey
lda #$00
sta KbdScanBuf
ldy #tpiPortB
sta (tpi2),y
ldy #tpiPortA
sta (tpi2),y
jsr Poll
and #$3F
eor #$3F
bne L1
jmp NoKey
L1: lda #$FF
ldy #tpiPortA
sta (tpi2),y
asl a
ldy #tpiPortB
sta (tpi2),y
jsr Poll
pha
sta ModKey
ora #$30
bne L3 ; Branch always
L2: jsr Poll
L3: ldx #$05
ldy #$00
L4: lsr a
bcc L5
inc KbdScanBuf
dex
bpl L4
sec
ldy #tpiPortB
lda (tpi2),y
rol a
sta (tpi2),y
ldy #tpiPortA
lda (tpi2),y
rol a
sta (tpi2),y
bcs L2
pla
bcc NoKey ; Branch always
L5: ldy KbdScanBuf
sty NorKey
pla
asl a
asl a
asl a
bcc L6
bmi L7
lda (ktab2),y ; Shifted normal key
ldx GrafMode
beq L8
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?
beq Done
cpy LastIndex
beq Repeat
ldx #$13
stx RepeatDelay
ldx KeyIndex
cpx #$09
beq NoKey
cpy #$59
bne PutKey
cpx #$08
beq NoKey
sta KeyBuf,x
inx
bne PutKey
NoKey: ldy #$FF
Done: sty LastIndex
End: lda #$7F
ldy #tpiPortA
sta (tpi2),y
ldy #tpiPortB
lda #$FF
sta (tpi2),y
rts
Repeat: dec RepeatDelay
bpl End
inc RepeatDelay
dec RepeatCount
bpl End
inc RepeatCount
ldx KeyIndex
bne End
PutKey: sta KeyBuf,x
inx
stx KeyIndex
ldx #$03
stx RepeatCount
bne Done
.endproc
; Poll the keyboard port until it's stable
.proc Poll
ldy #tpiPortC
L1: lda (tpi2),y
sta KeySave
lda (tpi2),y
cmp KeySave
bne L1
rts
.endproc
.bss
KeySave: .res 1