1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-15 02:29:32 +00:00

kbhit() function and scrolling.

Patch provided by Jeff Tranter.
This commit is contained in:
Stephan Mühlstrasser 2015-02-19 22:19:21 +01:00
parent cbb6f82b99
commit b1969ac16a
3 changed files with 39 additions and 2 deletions

View File

@ -48,8 +48,16 @@ newline:
lda CURS_Y
cmp #SCR_HEIGHT ; screen height
bne plot
lda #0 ; wrap around to line 0
sta CURS_Y
dec CURS_Y ; bottom of screen reached, scroll
ldx #0
scroll: lda SCRNBASE+$00A5,x
sta SCRNBASE+$0085,x
lda SCRNBASE+$01A5,x
sta SCRNBASE+$0185,x
lda SCRNBASE+$02A5,x
sta SCRNBASE+$0285,x
inx
bne scroll
plot: ldy CURS_Y
lda ScrLo,y

28
libsrc/osic1p/kbhit.s Normal file
View File

@ -0,0 +1,28 @@
;
; unsigned char kbhit (void);
;
.export _kbhit
.include "osic1p.inc"
_kbhit:
lda #%11111110 ; Select first keyboard row
scan:
sta KBD ; Select keyboard row
tax ; Save A
lda KBD ; Read keyboard columns
ora #$01 ; Mask out lsb (Shift Lock), since we ignore it
cmp #$FF ; No keys pressed?
bne keypressed
txa ; Restore A
sec ; Want to shift in ones
rol a ; Rotate row select to next bit position
cmp #$FF ; Done?
bne scan ; If not, continue
ldx #$00 ; High byte of return is always zero
lda #$00 ; Return false
rts
keypressed:
ldx #$00 ; High byte of return is always zero
lda #$01 ; Return true
rts

View File

@ -2,6 +2,7 @@
SCRNBASE := $D000 ; Base of video RAM
INPUTC := $FD00 ; Input character from keyboard
RESET := $FF00 ; Reset address, show boot prompt
KBD := $DF00 ; Polled keyboard register
; Other definitions
VIDEORAMSIZE = $0400 ; Size of C1P video RAM (1 kB)