mirror of
https://github.com/cc65/cc65.git
synced 2025-01-12 02:30:44 +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:
parent
8775a9da8a
commit
181748bf03
@ -5,10 +5,15 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _cgetc
|
.export _cgetc
|
||||||
|
.constructor initcgetc
|
||||||
|
.destructor donecgetc
|
||||||
|
|
||||||
.import cursor
|
.import cursor
|
||||||
|
|
||||||
.include "c128.inc"
|
.include "c128.inc"
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------------
|
||||||
|
|
||||||
_cgetc: lda KEY_COUNT ; Get number of characters
|
_cgetc: lda KEY_COUNT ; Get number of characters
|
||||||
bne L2 ; Jump if there are already chars waiting
|
bne L2 ; Jump if there are already chars waiting
|
||||||
|
|
||||||
@ -28,4 +33,38 @@ L2: lda KEY_COUNT ; Check characters again
|
|||||||
ldx #0
|
ldx #0
|
||||||
rts
|
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
|
||||||
|
|
||||||
|
@ -7,19 +7,24 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _textcolor, _bgcolor, _bordercolor
|
.export _textcolor, _bgcolor, _bordercolor
|
||||||
|
.import return0
|
||||||
|
|
||||||
.include "c128.inc"
|
.include "c128.inc"
|
||||||
|
|
||||||
|
|
||||||
.proc _textcolor
|
_textcolor:
|
||||||
|
|
||||||
bit MODE ; Check 80/40 column mode
|
bit MODE ; Check 80/40 column mode
|
||||||
bmi @L1 ; Jump if 40 columns
|
bmi @L1 ; Jump if 80 columns
|
||||||
ldx CHARCOLOR ; get old value
|
|
||||||
sta CHARCOLOR ; set new value
|
; 40 column mode
|
||||||
txa
|
|
||||||
ldx #$00
|
ldx CHARCOLOR ; Get the old color
|
||||||
rts
|
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
|
@L1: tax ; Move new color to X
|
||||||
lda CHARCOLOR ; Get old color + attributes
|
lda CHARCOLOR ; Get old color + attributes
|
||||||
@ -30,12 +35,24 @@
|
|||||||
txa ; Old color -> A
|
txa ; Old color -> A
|
||||||
and #$0F ; Mask out attributes
|
and #$0F ; Mask out attributes
|
||||||
ldx #$00 ; Load high byte
|
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
|
ldx VIC_BG_COLOR0 ; get old value
|
||||||
sta VIC_BG_COLOR0 ; set new value
|
sta VIC_BG_COLOR0 ; set new value
|
||||||
@ -43,10 +60,28 @@
|
|||||||
ldx #$00
|
ldx #$00
|
||||||
rts
|
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
|
ldx VIC_BORDERCOLOR ; get old value
|
||||||
sta VIC_BORDERCOLOR ; set new value
|
sta VIC_BORDERCOLOR ; set new value
|
||||||
@ -54,5 +89,7 @@
|
|||||||
ldx #$00
|
ldx #$00
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.endproc
|
; 80 column mode
|
||||||
|
|
||||||
|
@L1: jmp return0
|
||||||
|
|
||||||
|
@ -4,45 +4,7 @@
|
|||||||
; Low level stuff for screen output/console input
|
; Low level stuff for screen output/console input
|
||||||
;
|
;
|
||||||
|
|
||||||
.export initconio, doneconio
|
|
||||||
.exportzp CURS_X, CURS_Y
|
.exportzp CURS_X, CURS_Y
|
||||||
.import xsize, ysize
|
|
||||||
|
|
||||||
.include "c128.inc"
|
.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
|
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
.export _cputcxy, _cputc, cputdirect, putchar
|
.export _cputcxy, _cputc, cputdirect, putchar
|
||||||
.export newline, plot
|
.export newline, plot
|
||||||
|
.constructor initcputc
|
||||||
|
.destructor donecputc
|
||||||
.import popa, _gotoxy
|
.import popa, _gotoxy
|
||||||
.import PLOT
|
.import PLOT
|
||||||
|
|
||||||
@ -41,3 +43,15 @@ plot: ldy CURS_X
|
|||||||
; position in Y
|
; position in Y
|
||||||
|
|
||||||
putchar = $CC2F
|
putchar = $CC2F
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------------
|
||||||
|
; Module constructor/destructor
|
||||||
|
|
||||||
|
initcputc:
|
||||||
|
lda #$80
|
||||||
|
.byte $2C
|
||||||
|
donecputc:
|
||||||
|
lda #$00
|
||||||
|
sta SCROLL
|
||||||
|
rts
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
.export _exit
|
.export _exit
|
||||||
.import condes, initlib, donelib
|
.import condes, initlib, donelib
|
||||||
.import initconio, doneconio, zerobss
|
.import zerobss
|
||||||
.import push0, _main
|
.import push0, _main
|
||||||
.import RESTOR, BSOUT, CLRCH
|
.import RESTOR, BSOUT, CLRCH
|
||||||
.import __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
|
.import __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
|
||||||
@ -93,10 +93,6 @@ L1: lda sp,x
|
|||||||
|
|
||||||
jsr initlib
|
jsr initlib
|
||||||
|
|
||||||
; Initialize conio stuff
|
|
||||||
|
|
||||||
jsr initconio
|
|
||||||
|
|
||||||
; If we have IRQ functions, chain our stub into the IRQ vector
|
; If we have IRQ functions, chain our stub into the IRQ vector
|
||||||
|
|
||||||
lda #<__IRQFUNC_COUNT__
|
lda #<__IRQFUNC_COUNT__
|
||||||
@ -136,10 +132,6 @@ _exit: lda #<__IRQFUNC_COUNT__
|
|||||||
|
|
||||||
NoIRQ2: jsr donelib
|
NoIRQ2: jsr donelib
|
||||||
|
|
||||||
; Reset the conio stuff
|
|
||||||
|
|
||||||
jsr doneconio
|
|
||||||
|
|
||||||
; Reset the stack
|
; Reset the stack
|
||||||
|
|
||||||
ldx spsave
|
ldx spsave
|
||||||
|
Loading…
x
Reference in New Issue
Block a user