From 67dabb8489759a789e1b778dfa313441e8fe16bf Mon Sep 17 00:00:00 2001 From: mrdudz Date: Tue, 6 Oct 2015 20:18:40 +0200 Subject: [PATCH] attempted fix for the color problem noticed by oliver --- libsrc/c64/soft80_color.s | 100 ++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/libsrc/c64/soft80_color.s b/libsrc/c64/soft80_color.s index 8475cc05c..ee226633a 100644 --- a/libsrc/c64/soft80_color.s +++ b/libsrc/c64/soft80_color.s @@ -7,7 +7,7 @@ .export soft80_textcolor, soft80_bgcolor, soft80_bordercolor .export __textcolor, __bgcolor - .importzp tmp1,tmp2 + .importzp tmp1, tmp2 .import soft80_checkchar @@ -15,73 +15,89 @@ .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 -- 2.39.5