mirror of
https://github.com/cc65/cc65.git
synced 2024-10-30 12:28:25 +00:00
96 lines
2.2 KiB
ArmAsm
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
|
|
|