From b1969ac16a656d9cd18e755b9e0e6b07085befe4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stephan=20M=C3=BChlstrasser?= Date: Thu, 19 Feb 2015 22:19:21 +0100 Subject: [PATCH] kbhit() function and scrolling. Patch provided by Jeff Tranter. --- libsrc/osic1p/cputc.s | 12 ++++++++++-- libsrc/osic1p/kbhit.s | 28 ++++++++++++++++++++++++++++ libsrc/osic1p/osic1p.inc | 1 + 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 libsrc/osic1p/kbhit.s diff --git a/libsrc/osic1p/cputc.s b/libsrc/osic1p/cputc.s index f6f285301..47969df15 100644 --- a/libsrc/osic1p/cputc.s +++ b/libsrc/osic1p/cputc.s @@ -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 diff --git a/libsrc/osic1p/kbhit.s b/libsrc/osic1p/kbhit.s new file mode 100644 index 000000000..c064fec47 --- /dev/null +++ b/libsrc/osic1p/kbhit.s @@ -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 diff --git a/libsrc/osic1p/osic1p.inc b/libsrc/osic1p/osic1p.inc index 9a0c346b6..e95db637e 100644 --- a/libsrc/osic1p/osic1p.inc +++ b/libsrc/osic1p/osic1p.inc @@ -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) -- 2.39.5