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:
cuz
2003-12-20 23:13:26 +00:00
parent 018a68a2fe
commit a7042ddbe4
28 changed files with 1086 additions and 1033 deletions

View File

@@ -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