;
.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
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
+
;
.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
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
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
ldx #$00
rts
-.endproc
+; 80 column mode
+
+@L1: jmp return0
; 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
.export _cputcxy, _cputc, cputdirect, putchar
.export newline, plot
+ .constructor initcputc
+ .destructor donecputc
.import popa, _gotoxy
.import PLOT
; position in Y
putchar = $CC2F
+
+;--------------------------------------------------------------------------
+; Module constructor/destructor
+
+initcputc:
+ lda #$80
+ .byte $2C
+donecputc:
+ lda #$00
+ sta SCROLL
+ rts
+
.export _exit
.import condes, initlib, donelib
- .import initconio, doneconio, zerobss
+ .import zerobss
.import push0, _main
.import RESTOR, BSOUT, CLRCH
.import __IRQFUNC_TABLE__, __IRQFUNC_COUNT__
jsr initlib
-; Initialize conio stuff
-
- jsr initconio
-
; If we have IRQ functions, chain our stub into the IRQ vector
lda #<__IRQFUNC_COUNT__
NoIRQ2: jsr donelib
-; Reset the conio stuff
-
- jsr doneconio
-
; Reset the stack
ldx spsave