;
.export _textcolor, _bgcolor, _bordercolor
+ .import return0
.include "c128.inc"
_textcolor:
bit MODE ; Check 80/40 column mode
- bpl @L1 ; Jump if 40 columns
- tax
- lda $CE5C,x ; Translate VIC color -> VDC color
-@L1: ldx CHARCOLOR ; get old value
- sta CHARCOLOR ; set new value
- txa
+ 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
+ and #$F0 ; Keep old attributes
+ ora $CE5C,x ; Translate VIC color -> VDC color
+ ldx CHARCOLOR ; Get the old color
+ sta CHARCOLOR ; Set the new color + old attributes
+ txa ; Old color -> A
+ and #$0F ; Mask out attributes
+ ldx #$00 ; Load high byte
+
+; translate vdc->vic colour
+
+vdctovic:
+ ldy #16
+@L2: cmp $CE5C-1,y
+ beq @L3
+ dey
+ bne @L2
+@L3: tya
rts
_bgcolor:
+ bit MODE
+ bmi @L1
+
+; 40 column mode
+
ldx VIC_BG_COLOR0 ; get old value
sta VIC_BG_COLOR0 ; set new value
txa
+ ldx #$00
+ rts
+
+; 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
+
+; 40 column mode
+
ldx VIC_BORDERCOLOR ; get old value
sta VIC_BORDERCOLOR ; set new value
txa
+ ldx #$00
rts
+; 80 column mode
+
+@L1: jmp return0
+