1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-26 05:29:30 +00:00

Move the initialization code from conio.s as constructor/destructor code

into the cgetc and cputc modules.
Fix color routines using additional snippets from MagerValp.


git-svn-id: svn://svn.cc65.org/cc65/trunk@1789 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2002-12-19 22:53:13 +00:00
parent 8775a9da8a
commit 181748bf03
5 changed files with 106 additions and 62 deletions

View File

@ -5,10 +5,15 @@
;
.export _cgetc
.constructor initcgetc
.destructor donecgetc
.import cursor
.include "c128.inc"
;--------------------------------------------------------------------------
_cgetc: lda KEY_COUNT ; Get number of characters
bne L2 ; Jump if there are already chars waiting
@ -28,4 +33,38 @@ L2: lda KEY_COUNT ; Check characters again
ldx #0
rts
;--------------------------------------------------------------------------
; Module constructor/destructor
.bss
keyvec: .res 2
.code
initcgetc:
; Save the old vector
lda KeyStoreVec
sta keyvec
lda KeyStoreVec+1
sta keyvec+1
; Set the new vector. I can only hope that this works for other C128
; versions...
lda #<$C6B7
ldx #>$C6B7
SetVec: sei
sta KeyStoreVec
stx KeyStoreVec+1
cli
rts
donecgetc:
lda #$00
sta SCROLL
lda keyvec
ldx keyvec+1
bne SetVec

View File

@ -7,19 +7,24 @@
;
.export _textcolor, _bgcolor, _bordercolor
.import return0
.include "c128.inc"
.proc _textcolor
_textcolor:
bit MODE ; Check 80/40 column mode
bmi @L1 ; Jump if 40 columns
ldx CHARCOLOR ; get old value
sta CHARCOLOR ; set new value
txa
ldx #$00
rts
bmi @L1 ; Jump if 80 columns
; 40 column mode
ldx CHARCOLOR ; Get the old color
sta CHARCOLOR ; Set the new color
txa ; Old color -> A
ldx #$00 ; Load high byte
rts
; 80 column mode
@L1: tax ; Move new color to X
lda CHARCOLOR ; Get old color + attributes
@ -30,12 +35,24 @@
txa ; Old color -> A
and #$0F ; Mask out attributes
ldx #$00 ; Load high byte
rts
.endproc
; translate vdc->vic colour
vdctovic:
ldy #15
@L2: cmp $CE5C,y
beq @L3
dey
bpl @L2
@L3: tya
rts
.proc _bgcolor
_bgcolor:
bit MODE
bmi @L1
; 40 column mode
ldx VIC_BG_COLOR0 ; get old value
sta VIC_BG_COLOR0 ; set new value
@ -43,10 +60,28 @@
ldx #$00
rts
.endproc
; 80 column mode
@L1: tax ; Move new color to X
lda $CE5C,x ; Translate VIC color -> VDC color
pha
ldx #26
jsr $CDDA ; Read vdc register 26
jsr vdctovic
tay
pla
ldx #26
jsr $CDCC ; Write vdc register 26
tya
ldx #$00
rts
.proc _bordercolor
_bordercolor:
bit MODE
bmi @L1
; 40 column mode
ldx VIC_BORDERCOLOR ; get old value
sta VIC_BORDERCOLOR ; set new value
@ -54,5 +89,7 @@
ldx #$00
rts
.endproc
; 80 column mode
@L1: jmp return0

View File

@ -4,45 +4,7 @@
; Low level stuff for screen output/console input
;
.export initconio, doneconio
.exportzp CURS_X, CURS_Y
.import xsize, ysize
.include "c128.inc"
.include "../cbm/cbm.inc"
.bss
keyvec: .res 2
.code
initconio:
lda #$80
sta SCROLL
; Save the old vector
lda KeyStoreVec
sta keyvec
lda KeyStoreVec+1
sta keyvec+1
; Set the new vector. I can only hope that this works for other C128
; versions...
lda #<$C6B7
ldx #>$C6B7
SetVec: sei
sta KeyStoreVec
stx KeyStoreVec+1
cli
rts
doneconio:
lda keyvec
ldx keyvec+1
bne SetVec

View File

@ -7,6 +7,8 @@
.export _cputcxy, _cputc, cputdirect, putchar
.export newline, plot
.constructor initcputc
.destructor donecputc
.import popa, _gotoxy
.import PLOT
@ -41,3 +43,15 @@ plot: ldy CURS_X
; position in Y
putchar = $CC2F
;--------------------------------------------------------------------------
; Module constructor/destructor
initcputc:
lda #$80
.byte $2C
donecputc:
lda #$00
sta SCROLL
rts

View File

@ -6,7 +6,7 @@
.export _exit
.import condes, initlib, donelib
.import initconio, doneconio, zerobss
.import zerobss
.import push0, _main
.import RESTOR, BSOUT, CLRCH
.import __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
@ -93,10 +93,6 @@ L1: lda sp,x
jsr initlib
; Initialize conio stuff
jsr initconio
; If we have IRQ functions, chain our stub into the IRQ vector
lda #<__IRQFUNC_COUNT__
@ -136,10 +132,6 @@ _exit: lda #<__IRQFUNC_COUNT__
NoIRQ2: jsr donelib
; Reset the conio stuff
jsr doneconio
; Reset the stack
ldx spsave