cc65/libsrc/c128/color.s

96 lines
2.2 KiB
ArmAsm

;
; Ullrich von Bassewitz, 06.08.1998
;
; unsigned char __fastcall__ textcolor (unsigned char color);
; unsigned char __fastcall__ bgcolor (unsigned char color);
; unsigned char __fastcall__ bordercolor (unsigned char color);
;
.export _textcolor, _bgcolor, _bordercolor
.import return0
.include "c128.inc"
_textcolor:
bit MODE ; Check 80/40 column mode
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