From: cuz Date: Thu, 19 Dec 2002 22:53:13 +0000 (+0000) Subject: Move the initialization code from conio.s as constructor/destructor code X-Git-Tag: V2.12.0~1882 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=181748bf03845d262a3706ae55cd84a3a54d64c2;p=cc65 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 --- diff --git a/libsrc/c128/cgetc.s b/libsrc/c128/cgetc.s index 391a25fd2..aea20f983 100644 --- a/libsrc/c128/cgetc.s +++ b/libsrc/c128/cgetc.s @@ -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 + diff --git a/libsrc/c128/color.s b/libsrc/c128/color.s index 1e7d577b2..e6a488245 100644 --- a/libsrc/c128/color.s +++ b/libsrc/c128/color.s @@ -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 + +_bordercolor: + bit MODE + bmi @L1 -.proc _bordercolor +; 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 diff --git a/libsrc/c128/conio.s b/libsrc/c128/conio.s index 11da92941..42df1437a 100644 --- a/libsrc/c128/conio.s +++ b/libsrc/c128/conio.s @@ -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 diff --git a/libsrc/c128/cputc.s b/libsrc/c128/cputc.s index c3b835e13..d5ee8046d 100644 --- a/libsrc/c128/cputc.s +++ b/libsrc/c128/cputc.s @@ -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 + diff --git a/libsrc/c128/crt0.s b/libsrc/c128/crt0.s index 62501722a..2e09a3f73 100644 --- a/libsrc/c128/crt0.s +++ b/libsrc/c128/crt0.s @@ -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