; ; 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