]> git.sur5r.net Git - cc65/commitdiff
attempted fix for the color problem noticed by oliver
authormrdudz <mrdudz@users.noreply.github.com>
Tue, 6 Oct 2015 18:18:40 +0000 (20:18 +0200)
committermrdudz <mrdudz@users.noreply.github.com>
Tue, 6 Oct 2015 18:18:40 +0000 (20:18 +0200)
libsrc/c64/soft80_color.s

index 8475cc05c9f103b9a93eaca6e6638aa3cdbe959d..ee226633a209c6d9cec69d573fed76b1fe4c6252 100644 (file)
@@ -7,7 +7,7 @@
         .export         soft80_textcolor, soft80_bgcolor, soft80_bordercolor
         .export         __textcolor, __bgcolor
 
-        .importzp       tmp1,tmp2
+        .importzp       tmp1, tmp2
 
         .import         soft80_checkchar
 
         .include        "soft80.inc"
 
 soft80_textcolor:
-
         ldx     __textcolor             ; get old value
         sta     __textcolor             ; set new value
 
-        lda     __bgcolor
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ora     __textcolor
-        sta     CHARCOLOR               ; text/bg combo for new chars
+        jsr     mkcharcolor
 
         txa                             ; get old value
         rts
 
-
 soft80_bgcolor:
         ldx     __bgcolor               ; get old value
+        stx     tmp2                    ; save old value
         sta     __bgcolor               ; set new value
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        sta     tmp2                    ; shifted new value
-        ora     __textcolor
-        sta     CHARCOLOR               ; text/bg combo for new chars
-        txa
-        pha                             ; save old value
-        sta     tmp1
-
-        sei
-        lda     $01
-        pha
 
-        lda     #$34
-        sta     $01
+        jsr     mkcharcolor
 
+        ; if the old bg color is equal to color ram of that cell, then also
+        ; update the color ram to the new value.
+        ; FIXME: perhaps we must also check if the non visible character is not
+        ;        a space, and NOT update the color ram in that case.
         ldx     #$00
-
-lp2:
-        .repeat $4,page
+lp1:
+        .repeat $3,page
+        .scope
+        lda     soft80_colram+(page*$100),x
+        and     #$0f
+        cmp     tmp2                    ; old bg color
+        bne     @sk1
+        lda     __bgcolor
+        sta     soft80_colram+(page*$100),x
+@sk1:
+        .endscope
+        .endrepeat
 
         .scope
-        lda     soft80_vram+(page*$100),x
+        lda     soft80_colram+$2e8,x
         and     #$0f
-        ;cmp     tmp1                    ; old bg color
-        ;bne     as
-        ; is old bg color
-        ; is space
-        ;lda __bgcolor
-as:
-        ora     tmp2                    ; new bg color
-        sta     soft80_vram+(page*$100),x
+        cmp     tmp2                    ; old bg color
+        bne     @sk1
+        lda     __bgcolor
+        sta     soft80_colram+$2e8,x
+@sk1:
         .endscope
 
+        inx
+        bne     lp1
+
+        sei
+        ldy     $01
+        lda     #$34                    ; disable I/O
+        sta     $01
+
+        ldx     #$00
+@lp2:
+        .repeat $3,page
+        lda     soft80_vram+(page*$100),x
+        and     #$0f
+        ora     tmp1                    ; new bg color (high nibble)
+        sta     soft80_vram+(page*$100),x
         .endrepeat
+        lda     soft80_vram+$2e8,x
+        and     #$0f
+        ora     tmp1                    ; new bg color (high nibble)
+        sta     soft80_vram+$2e8,x
 
         inx
-        bne     lp2
+        bne     @lp2
 
-        pla
-        sta     $01
+        sty     $01                     ; enable I/O
         cli
 
-        pla                             ; get old value
+        lda     tmp2                    ; get old value
         rts
 
+mkcharcolor:
+        lda     __bgcolor
+        asl     a
+        asl     a
+        asl     a
+        asl     a
+        sta     tmp1                    ; remember new bg color (high nibble)
+        ora     __textcolor
+        sta     CHARCOLOR               ; text/bg combo for new chars
+        rts
 
 soft80_bordercolor:
         ldx     VIC_BORDERCOLOR         ; get old value