; ; Ullrich von Bassewitz, 13.09.2001 ; ; Keyboard polling stuff for the 510. ; .export scnkey .importzp tpi2, ktab1, ktab2, ktab3, ktab4 .importzp keyidx, keybuf, keyscanbuf, keysave, modkey, norkey .importzp graphmode, lastidx, rptdelay, rptcount .include "cbm510.inc" .proc scnkey lda #$FF 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 asl a ldy #TPI::PRB 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 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 bcs L2 pla bcc NoKey ; Branch always L5: ldy keyscanbuf sty norkey pla asl a asl a asl a bcc L6 bmi L7 lda (ktab2),y ; Shifted normal key ldx graphmode 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 lastidx beq Repeat ldx #$13 stx rptdelay ldx keyidx cpx #$09 beq NoKey cpy #$59 bne PutKey cpx #$08 beq NoKey sta keybuf,x inx bne PutKey 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 rptdelay bpl End inc rptdelay dec rptcount bpl End inc rptcount ldx keyidx bne End PutKey: sta keybuf,x inx stx keyidx ldx #$03 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 .endproc