File: color.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (95 lines) | stat: -rw-r--r-- 2,275 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
;
; 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