Complete redesign of the CBM610 support.
Use wrappers to call the kernal in bank 15 instead of implementing kernal functionality within the cc65 libs (eats performance but is much smaller and simpler). Improved startup/shutdown code allows a return to the system bank without calling the BASIC cold start vector. git-svn-id: svn://svn.cc65.org/cc65/trunk@2793 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -5,44 +5,69 @@
|
||||
;
|
||||
|
||||
.export _cgetc
|
||||
.import plot, write_crtc
|
||||
.import plot, write_crtc, sys_bank, restore_bank
|
||||
.import cursor
|
||||
.import sysp0: zp, sysp3: zp
|
||||
|
||||
.include "cbm610.inc"
|
||||
|
||||
|
||||
_cgetc: lda KeyIndex ; Get number of characters
|
||||
_cgetc: lda IndReg
|
||||
pha
|
||||
lda #$0F
|
||||
sta IndReg ; Switch to the system bank
|
||||
|
||||
ldy #$D1
|
||||
lda (sysp0),y ; Get number of keys in keyboard buffer
|
||||
bne L2 ; Jump if there are already chars waiting
|
||||
|
||||
; Switch on the cursor if needed
|
||||
|
||||
lda cursor
|
||||
beq L1 ; Jump if no cursor
|
||||
beq L0 ; Jump if no cursor
|
||||
|
||||
jsr plot ; Set the current cursor position
|
||||
ldy #$D4
|
||||
lda (sysp0),y ; Get the cursor format
|
||||
ldy #10
|
||||
lda Config ; Cursor format
|
||||
jsr write_crtc ; Set the cursor formar
|
||||
jsr write_crtc ; Set the cursor format
|
||||
|
||||
L1: lda KeyIndex
|
||||
beq L1
|
||||
L0: ldy #$D1
|
||||
L1: lda (sysp0),y ; Get the number of keys in the buffer
|
||||
beq L1 ; Wait until we have some keys
|
||||
|
||||
ldy #10
|
||||
lda #$20 ; Cursor off
|
||||
jsr write_crtc
|
||||
|
||||
L2: ldx #$00 ; Get index
|
||||
ldy KeyBuf ; Get first character in the buffer
|
||||
sei
|
||||
L3: lda KeyBuf+1,x ; Move up the remaining chars
|
||||
sta KeyBuf,x
|
||||
inx
|
||||
cpx KeyIndex
|
||||
bne L3
|
||||
dec KeyIndex
|
||||
cli
|
||||
L2: ldy #$D1
|
||||
lda (sysp0),y ; Get number of chars in buffer
|
||||
tax
|
||||
ldy #$AB
|
||||
lda (sysp3),y ; Get first char from keyboard buffer
|
||||
sta c ; Save for return
|
||||
dex
|
||||
txa
|
||||
ldy #$D1
|
||||
sta (sysp0),y
|
||||
sei
|
||||
jmp L4
|
||||
L3: iny
|
||||
lda (sysp3),y
|
||||
dey
|
||||
sta (sysp3),y
|
||||
iny
|
||||
L4: dex
|
||||
bpl L3
|
||||
cli
|
||||
|
||||
pla
|
||||
sta IndReg ; Restore old segment
|
||||
|
||||
ldx #$00 ; High byte
|
||||
tya ; First char from buffer
|
||||
lda c ; First char from buffer
|
||||
rts
|
||||
|
||||
.bss
|
||||
|
||||
c: .byte 0
|
||||
|
||||
Reference in New Issue
Block a user