mirror of
https://github.com/cc65/cc65.git
synced 2024-11-18 15:05:14 +00:00
some more rework, second attempt on fixing the color issues. added ifdefs to disable the color voodoo alltogether for debugging purposes.
This commit is contained in:
parent
67dabb8489
commit
e54ad81ce8
@ -21,3 +21,10 @@ CH_BTEE = 177
|
|||||||
CH_TTEE = 178
|
CH_TTEE = 178
|
||||||
CH_RTEE = 179
|
CH_RTEE = 179
|
||||||
CH_LRCORNER = 189
|
CH_LRCORNER = 189
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; set to 0 to disable the color-ram "voodoo" for debugging purposes
|
||||||
|
.define SOFT80COLORVOODOO 1
|
||||||
|
; set to 0 to disable special case optimization for the "space" character
|
||||||
|
.define SOFT80FASTSPACE 1
|
||||||
|
|
||||||
|
@ -4,87 +4,66 @@
|
|||||||
|
|
||||||
.export soft80_cgetc
|
.export soft80_cgetc
|
||||||
.import cursor
|
.import cursor
|
||||||
.import soft80_putcolor
|
|
||||||
|
|
||||||
.include "c64.inc"
|
.include "c64.inc"
|
||||||
.include "soft80.inc"
|
.include "soft80.inc"
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
|
.import soft80_putcolor
|
||||||
|
.endif
|
||||||
|
|
||||||
soft80_cgetc:
|
soft80_cgetc:
|
||||||
lda KEY_COUNT ; Get number of characters
|
lda KEY_COUNT ; Get number of characters
|
||||||
bne L3 ; Jump if there are already chars waiting
|
bne L3 ; Jump if there are already chars waiting
|
||||||
|
|
||||||
; Switch on the cursor if needed
|
jsr invertcursor ; set cursor on or off accordingly
|
||||||
|
|
||||||
lda cursor
|
|
||||||
jsr setcursor ; set cursor on or off accordingly
|
|
||||||
|
|
||||||
L1: lda KEY_COUNT ; wait for key
|
L1: lda KEY_COUNT ; wait for key
|
||||||
beq L1
|
beq L1
|
||||||
|
|
||||||
ldx #0
|
jsr invertcursor ; set cursor on or off accordingly
|
||||||
lda CURS_FLAG
|
|
||||||
bne L2
|
|
||||||
inx
|
|
||||||
L2: txa
|
|
||||||
jsr setcursor
|
|
||||||
|
|
||||||
L3: jsr KBDREAD ; Read char and return in A
|
L3: jsr KBDREAD ; Read char and return in A
|
||||||
ldx #0
|
ldx #0
|
||||||
rts
|
rts
|
||||||
|
|
||||||
; Switch the cursor on or off
|
; Switch the cursor on or off (invert)
|
||||||
|
|
||||||
; A= 0: cursor off
|
invertcursor:
|
||||||
; 1: cursor on
|
lda cursor
|
||||||
|
bne @invert
|
||||||
.proc setcursor
|
|
||||||
|
|
||||||
; On or off?
|
|
||||||
cmp CURS_STATE
|
|
||||||
bne @set
|
|
||||||
rts
|
rts
|
||||||
@set:
|
@invert:
|
||||||
sta CURS_STATE
|
|
||||||
|
|
||||||
sei
|
sei
|
||||||
lda $01
|
lda $01
|
||||||
pha
|
pha
|
||||||
lda #$34
|
lda #$34 ; enable RAM under I/O
|
||||||
sta $01
|
sta $01
|
||||||
|
|
||||||
jsr soft80_putcolor
|
|
||||||
|
|
||||||
ldy #$00
|
ldy #$00
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
|
jsr soft80_putcolor
|
||||||
|
.else
|
||||||
|
lda CHARCOLOR
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
.endif
|
||||||
|
|
||||||
lda CURS_X
|
lda CURS_X
|
||||||
and #$01
|
and #$01
|
||||||
bne @l1
|
tax
|
||||||
|
@lp1:
|
||||||
.repeat 8,line
|
|
||||||
lda (SCREEN_PTR),y
|
lda (SCREEN_PTR),y
|
||||||
eor #$f0
|
eor nibble,x
|
||||||
sta (SCREEN_PTR),y
|
sta (SCREEN_PTR),y
|
||||||
.if (line < 7)
|
|
||||||
iny
|
iny
|
||||||
.endif
|
cpy #8
|
||||||
.endrepeat
|
bne @lp1
|
||||||
|
|
||||||
@back:
|
|
||||||
pla
|
pla
|
||||||
sta $01
|
sta $01
|
||||||
cli
|
cli
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@l1:
|
.rodata
|
||||||
.repeat 8,line
|
nibble: .byte $f0, $0f
|
||||||
lda (SCREEN_PTR),y
|
|
||||||
eor #$0f
|
|
||||||
sta (SCREEN_PTR),y
|
|
||||||
.if line < 7
|
|
||||||
iny
|
|
||||||
.endif
|
|
||||||
.endrepeat
|
|
||||||
|
|
||||||
jmp @back
|
|
||||||
|
|
||||||
.endproc
|
|
||||||
|
@ -30,57 +30,54 @@ soft80_bgcolor:
|
|||||||
|
|
||||||
jsr mkcharcolor
|
jsr mkcharcolor
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
; if the old bg color is equal to color ram of that cell, then also
|
; if the old bg color is equal to color ram of that cell, then also
|
||||||
; update the color ram to the new value.
|
; update the color ram to the new value.
|
||||||
; FIXME: perhaps we must also check if the non visible character is not
|
; FIXME: perhaps we must also check if the non visible character is not
|
||||||
; a space, and NOT update the color ram in that case.
|
; a space, and NOT update the color ram in that case.
|
||||||
ldx #$00
|
ldx #$00
|
||||||
lp1:
|
lp1:
|
||||||
.repeat $3,page
|
.repeat $4,page
|
||||||
.scope
|
.scope
|
||||||
lda soft80_colram+(page*$100),x
|
lda soft80_colram+(page*250),x
|
||||||
and #$0f
|
and #$0f
|
||||||
cmp tmp2 ; old bg color
|
cmp tmp2 ; old bg color
|
||||||
bne @sk1
|
bne @sk1
|
||||||
lda __bgcolor
|
lda __bgcolor ; new bg color
|
||||||
sta soft80_colram+(page*$100),x
|
sta soft80_colram+(page*250),x
|
||||||
@sk1:
|
@sk1:
|
||||||
.endscope
|
.endscope
|
||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
.scope
|
|
||||||
lda soft80_colram+$2e8,x
|
|
||||||
and #$0f
|
|
||||||
cmp tmp2 ; old bg color
|
|
||||||
bne @sk1
|
|
||||||
lda __bgcolor
|
|
||||||
sta soft80_colram+$2e8,x
|
|
||||||
@sk1:
|
|
||||||
.endscope
|
|
||||||
|
|
||||||
inx
|
inx
|
||||||
bne lp1
|
bne lp1
|
||||||
|
.endif
|
||||||
|
|
||||||
sei
|
sei
|
||||||
ldy $01
|
ldy $01
|
||||||
lda #$34 ; disable I/O
|
lda #$34 ; disable I/O
|
||||||
sta $01
|
sta $01
|
||||||
|
|
||||||
|
; if the old bg color is equal to text color in this cell, then also
|
||||||
|
; update the text color to the new value.
|
||||||
|
; FIXME: perhaps we need to check for space, see note above
|
||||||
ldx #$00
|
ldx #$00
|
||||||
@lp2:
|
lp2:
|
||||||
.repeat $3,page
|
.repeat $4,page
|
||||||
lda soft80_vram+(page*$100),x
|
.scope
|
||||||
|
lda soft80_vram+(page*250),x
|
||||||
and #$0f
|
and #$0f
|
||||||
|
cmp tmp2 ; old bg color
|
||||||
|
bne @sk2
|
||||||
|
lda __bgcolor ; new bg color
|
||||||
|
@sk2:
|
||||||
ora tmp1 ; new bg color (high nibble)
|
ora tmp1 ; new bg color (high nibble)
|
||||||
sta soft80_vram+(page*$100),x
|
sta soft80_vram+(page*250),x
|
||||||
|
.endscope
|
||||||
.endrepeat
|
.endrepeat
|
||||||
lda soft80_vram+$2e8,x
|
|
||||||
and #$0f
|
|
||||||
ora tmp1 ; new bg color (high nibble)
|
|
||||||
sta soft80_vram+$2e8,x
|
|
||||||
|
|
||||||
inx
|
inx
|
||||||
bne @lp2
|
bne lp2
|
||||||
|
|
||||||
sty $01 ; enable I/O
|
sty $01 ; enable I/O
|
||||||
cli
|
cli
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.destructor soft80_shutdown
|
.destructor soft80_shutdown
|
||||||
|
|
||||||
.import soft80_kclrscr
|
.import soft80_kclrscr
|
||||||
.import soft80_textcolor, soft80_bgcolor
|
.import __textcolor, __bgcolor
|
||||||
|
|
||||||
.importzp ptr1, ptr2, ptr3
|
.importzp ptr1, ptr2, ptr3
|
||||||
|
|
||||||
@ -67,11 +67,18 @@ soft80_init:
|
|||||||
cli
|
cli
|
||||||
|
|
||||||
lda 646 ; use current textcolor
|
lda 646 ; use current textcolor
|
||||||
jsr soft80_textcolor
|
and #$0f
|
||||||
|
sta __textcolor
|
||||||
|
|
||||||
lda VIC_BG_COLOR0 ; use current bgcolor
|
lda VIC_BG_COLOR0 ; use current bgcolor
|
||||||
and #$0f
|
and #$0f
|
||||||
jsr soft80_bgcolor
|
sta __bgcolor
|
||||||
|
asl a
|
||||||
|
asl a
|
||||||
|
asl a
|
||||||
|
asl a
|
||||||
|
ora __textcolor
|
||||||
|
sta CHARCOLOR
|
||||||
|
|
||||||
jmp soft80_kclrscr
|
jmp soft80_kclrscr
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
.export soft80_cputcxy, soft80_cputc
|
.export soft80_cputcxy, soft80_cputc
|
||||||
.export soft80_cputdirect, soft80_putchar
|
.export soft80_cputdirect, soft80_putchar
|
||||||
.export soft80_putcolor
|
|
||||||
.export soft80_newline, soft80_plot
|
.export soft80_newline, soft80_plot
|
||||||
|
|
||||||
.import popa, _gotoxy
|
.import popa, _gotoxy
|
||||||
@ -20,6 +19,10 @@
|
|||||||
.include "c64.inc"
|
.include "c64.inc"
|
||||||
.include "soft80.inc"
|
.include "soft80.inc"
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
|
.export soft80_putcolor
|
||||||
|
.endif
|
||||||
|
|
||||||
soft80_cputcxy:
|
soft80_cputcxy:
|
||||||
pha ; Save C
|
pha ; Save C
|
||||||
jsr popa ; Get Y
|
jsr popa ; Get Y
|
||||||
@ -125,163 +128,17 @@ L5:
|
|||||||
; returns: Y: cursor X position
|
; returns: Y: cursor X position
|
||||||
; this function is going to be used a lot so we unroll it a bit for speed
|
; this function is going to be used a lot so we unroll it a bit for speed
|
||||||
|
|
||||||
;--- start color vodoo
|
.if SOFT80FASTSPACE = 1
|
||||||
|
|
||||||
; remove color from cell
|
|
||||||
; y unmodified
|
|
||||||
remcolor:
|
|
||||||
|
|
||||||
;ldy #$00 ; is still $00
|
|
||||||
|
|
||||||
lda (CRAM_PTR),y ; vram
|
|
||||||
and #$0f
|
|
||||||
cmp __bgcolor
|
|
||||||
jeq @l2b ; vram==bgcolor
|
|
||||||
|
|
||||||
inc $01
|
|
||||||
lda (CRAM_PTR),y ; colram
|
|
||||||
stx $01 ;$34
|
|
||||||
and #$0f
|
|
||||||
cmp __bgcolor
|
|
||||||
beq @l2s ; colram==bgcolor
|
|
||||||
|
|
||||||
; vram = colram
|
|
||||||
;inc $01
|
|
||||||
;lda (CRAM_PTR),y ; colram
|
|
||||||
;stx $01 ;$34
|
|
||||||
;and #$0f
|
|
||||||
|
|
||||||
sta tmp3
|
|
||||||
lda (CRAM_PTR),y ; vram
|
|
||||||
and #$f0
|
|
||||||
ora tmp3
|
|
||||||
sta (CRAM_PTR),y ; vram
|
|
||||||
|
|
||||||
; colram = bgcolor
|
|
||||||
lda __bgcolor
|
|
||||||
inc $01
|
|
||||||
sta (CRAM_PTR),y ; colram
|
|
||||||
stx $01 ;$34
|
|
||||||
|
|
||||||
jmp @l2b
|
|
||||||
|
|
||||||
@l2s:
|
|
||||||
; colram is bgcolor
|
|
||||||
; => only one char in cell used
|
|
||||||
|
|
||||||
jsr soft80_checkchar
|
|
||||||
bcc @l2b ; space at current position
|
|
||||||
|
|
||||||
; vram = bgcolor
|
|
||||||
lda (CRAM_PTR),y ; vram
|
|
||||||
and #$f0
|
|
||||||
ora __bgcolor
|
|
||||||
sta (CRAM_PTR),y ; vram
|
|
||||||
@l2b:
|
|
||||||
rts
|
|
||||||
|
|
||||||
; put color to cell
|
|
||||||
; y unmodified
|
|
||||||
soft80_putcolor:
|
|
||||||
|
|
||||||
;ldy #$00 ; is still $00
|
|
||||||
|
|
||||||
lda (CRAM_PTR),y ; vram
|
|
||||||
and #$0f
|
|
||||||
cmp __bgcolor
|
|
||||||
beq @l2s ; vram==bgcolor => first char in cell
|
|
||||||
|
|
||||||
; vram!=bgcolor => second char in cell
|
|
||||||
|
|
||||||
inc $01 ;$35
|
|
||||||
lda (CRAM_PTR),y ; colram
|
|
||||||
stx $01 ;$34
|
|
||||||
and #$0f
|
|
||||||
cmp __bgcolor
|
|
||||||
bne @l2s ; colram!=bgcolor
|
|
||||||
|
|
||||||
; colram==bgcolor => second char in cell or overwrite 1st char
|
|
||||||
|
|
||||||
jsr soft80_checkchar
|
|
||||||
bcs @l2a ; char at current position => overwrite 1st
|
|
||||||
|
|
||||||
; colram=vram
|
|
||||||
lda (CRAM_PTR),y ; vram
|
|
||||||
inc $01
|
|
||||||
sta (CRAM_PTR),y ; colram
|
|
||||||
stx $01 ;$34
|
|
||||||
|
|
||||||
;jmp @l2a
|
|
||||||
|
|
||||||
@l2s:
|
|
||||||
; colram!=bgcolor => alread 2 chars in cell
|
|
||||||
@l2a:
|
|
||||||
|
|
||||||
; Set color
|
|
||||||
lda CHARCOLOR
|
|
||||||
sta (CRAM_PTR),y ; vram
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
;--- end color vodoo
|
|
||||||
|
|
||||||
.export soft80_checkchar
|
|
||||||
|
|
||||||
; test if there is a space or a character at current position
|
|
||||||
; CLC: space SEC: character
|
|
||||||
soft80_checkchar:
|
|
||||||
|
|
||||||
;ldy #$00 ; is still $00
|
|
||||||
|
|
||||||
lda CURS_X
|
|
||||||
and #$01
|
|
||||||
jne @l1a
|
|
||||||
|
|
||||||
.repeat 8,line
|
|
||||||
lda (SCREEN_PTR),y
|
|
||||||
and #$f0
|
|
||||||
cmp #$f0
|
|
||||||
bne @l2b
|
|
||||||
.if (line < 7)
|
|
||||||
iny
|
|
||||||
.endif
|
|
||||||
.endrepeat
|
|
||||||
|
|
||||||
ldy #$00
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
@l2b:
|
|
||||||
ldy #$00
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
@l1a:
|
|
||||||
.repeat 8,line
|
|
||||||
lda (SCREEN_PTR),y
|
|
||||||
and #$0f
|
|
||||||
cmp #$0f
|
|
||||||
bne @l2bb
|
|
||||||
.if line < 7
|
|
||||||
iny
|
|
||||||
.endif
|
|
||||||
.endrepeat
|
|
||||||
ldy #$00
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
@l2bb:
|
|
||||||
ldy #$00
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
; output space
|
; output space
|
||||||
|
; in: y must be $00
|
||||||
_space:
|
_space:
|
||||||
|
|
||||||
lda RVS
|
lda RVS
|
||||||
jne _spaceinvers
|
jne _spaceinvers
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
jsr remcolor
|
jsr remcolor
|
||||||
|
.endif
|
||||||
;ldy #$00 ; is still $00
|
;ldy #$00 ; is still $00
|
||||||
|
|
||||||
lda CURS_X
|
lda CURS_X
|
||||||
@ -310,10 +167,15 @@ _space:
|
|||||||
jmp _back
|
jmp _back
|
||||||
|
|
||||||
; output inverted space
|
; output inverted space
|
||||||
|
; in: y must be $00
|
||||||
_spaceinvers:
|
_spaceinvers:
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
jsr soft80_putcolor
|
jsr soft80_putcolor
|
||||||
|
.else
|
||||||
|
lda CHARCOLOR
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
.endif
|
||||||
|
|
||||||
lda CURS_X
|
lda CURS_X
|
||||||
and #$01
|
and #$01
|
||||||
@ -339,11 +201,12 @@ _spaceinvers:
|
|||||||
.endrepeat
|
.endrepeat
|
||||||
|
|
||||||
jmp _back
|
jmp _back
|
||||||
|
.endif
|
||||||
|
|
||||||
; output a character
|
; output a character
|
||||||
|
|
||||||
soft80_putchar:
|
soft80_putchar:
|
||||||
sta tmp3
|
sta tmp3 ; remember charcode
|
||||||
|
|
||||||
sei
|
sei
|
||||||
ldx $01
|
ldx $01
|
||||||
@ -353,14 +216,20 @@ soft80_putchar:
|
|||||||
stx $01 ; will stay $34 for space
|
stx $01 ; will stay $34 for space
|
||||||
ldy #$00 ; will be $00 from now on
|
ldy #$00 ; will be $00 from now on
|
||||||
|
|
||||||
|
.if SOFT80FASTSPACE = 1
|
||||||
cmp #' ' ; space is a special (optimized) case
|
cmp #' ' ; space is a special (optimized) case
|
||||||
jeq _space
|
jeq _space
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
jsr soft80_putcolor
|
jsr soft80_putcolor
|
||||||
|
.else
|
||||||
|
lda CHARCOLOR
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
.endif
|
||||||
|
; output character
|
||||||
|
|
||||||
; output character
|
ldx tmp3 ; get charcode
|
||||||
char:
|
|
||||||
ldx tmp3
|
|
||||||
|
|
||||||
lda RVS
|
lda RVS
|
||||||
jne _invers
|
jne _invers
|
||||||
@ -429,3 +298,166 @@ _invers:
|
|||||||
.endif
|
.endif
|
||||||
.endrepeat
|
.endrepeat
|
||||||
jmp _back
|
jmp _back
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
|
;--- start color vodoo
|
||||||
|
|
||||||
|
; remove color from cell, called before putting a "space" character to the bitmap
|
||||||
|
; y unmodified
|
||||||
|
remcolor:
|
||||||
|
|
||||||
|
;ldy #$00 ; is still $00
|
||||||
|
|
||||||
|
; if the textcolor in vram is equal to the background color, then
|
||||||
|
; no (visible) character is in the current cell and we can exit
|
||||||
|
; immediately.
|
||||||
|
lda (CRAM_PTR),y ; vram (textcolor)
|
||||||
|
and #$0f
|
||||||
|
cmp __bgcolor
|
||||||
|
jeq @l2b ; yes, vram==bgcolor
|
||||||
|
|
||||||
|
; now check if the textcolor in color ram is equal the background color,
|
||||||
|
; if yes then there is only one (visible) character in the current cell
|
||||||
|
inc $01
|
||||||
|
lda (CRAM_PTR),y ; colram (2nd textcolor)
|
||||||
|
stx $01 ;$34
|
||||||
|
and #$0f
|
||||||
|
cmp __bgcolor
|
||||||
|
beq @l2s ; yes, colram==bgcolor
|
||||||
|
|
||||||
|
; two characters in the current cell, of which one will get removed
|
||||||
|
|
||||||
|
; vram = colram
|
||||||
|
;inc $01
|
||||||
|
;lda (CRAM_PTR),y ; colram
|
||||||
|
;stx $01 ;$34
|
||||||
|
;and #$0f
|
||||||
|
|
||||||
|
; move 2nd text color to vram
|
||||||
|
sta tmp3
|
||||||
|
lda (CRAM_PTR),y ; vram
|
||||||
|
and #$f0
|
||||||
|
ora tmp3
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
|
||||||
|
; colram = bgcolor
|
||||||
|
lda __bgcolor
|
||||||
|
inc $01
|
||||||
|
sta (CRAM_PTR),y ; colram
|
||||||
|
stx $01 ;$34
|
||||||
|
|
||||||
|
jmp @l2b
|
||||||
|
|
||||||
|
@l2s:
|
||||||
|
; colram is bgcolor
|
||||||
|
; => only one char in cell used
|
||||||
|
|
||||||
|
jsr soft80_checkchar
|
||||||
|
bcc @l2b ; space at current position
|
||||||
|
|
||||||
|
; vram (textcolor) = bgcolor
|
||||||
|
lda (CRAM_PTR),y ; vram
|
||||||
|
and #$f0
|
||||||
|
ora __bgcolor
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
@l2b:
|
||||||
|
rts
|
||||||
|
|
||||||
|
; put color to cell
|
||||||
|
; in: $01 is $34 (RAM under I/O) when entering
|
||||||
|
; y must be $00
|
||||||
|
; out: y = $00
|
||||||
|
soft80_putcolor:
|
||||||
|
|
||||||
|
;ldy #$00 ; is still $00
|
||||||
|
|
||||||
|
lda (CRAM_PTR),y ; vram
|
||||||
|
and #$0f
|
||||||
|
cmp __bgcolor
|
||||||
|
beq @l2s ; vram==bgcolor => first char in cell
|
||||||
|
|
||||||
|
; vram!=bgcolor => second char in cell
|
||||||
|
|
||||||
|
inc $01 ;$35
|
||||||
|
lda (CRAM_PTR),y ; colram
|
||||||
|
stx $01 ;$34
|
||||||
|
and #$0f
|
||||||
|
cmp __bgcolor
|
||||||
|
bne @l2s ; colram!=bgcolor
|
||||||
|
|
||||||
|
; colram==bgcolor => second char in cell or overwrite 1st char
|
||||||
|
|
||||||
|
jsr soft80_checkchar
|
||||||
|
bcs @l2a ; char at current position => overwrite 1st
|
||||||
|
|
||||||
|
; colram=vram
|
||||||
|
lda (CRAM_PTR),y ; vram
|
||||||
|
inc $01
|
||||||
|
sta (CRAM_PTR),y ; colram
|
||||||
|
stx $01 ;$34
|
||||||
|
|
||||||
|
;jmp @l2a
|
||||||
|
|
||||||
|
@l2s:
|
||||||
|
; colram!=bgcolor => alread 2 chars in cell
|
||||||
|
@l2a:
|
||||||
|
|
||||||
|
; Set color
|
||||||
|
lda CHARCOLOR
|
||||||
|
sta (CRAM_PTR),y ; vram
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
;.export soft80_checkchar
|
||||||
|
|
||||||
|
; test if there is a space or a character at current position
|
||||||
|
; in: y must be $00
|
||||||
|
; out: CLC: space SEC: character
|
||||||
|
; y = $00
|
||||||
|
soft80_checkchar:
|
||||||
|
|
||||||
|
;ldy #$00 ; is still $00
|
||||||
|
|
||||||
|
lda CURS_X
|
||||||
|
and #$01
|
||||||
|
jne @l1a
|
||||||
|
|
||||||
|
.repeat 8,line
|
||||||
|
lda (SCREEN_PTR),y
|
||||||
|
and #$f0
|
||||||
|
cmp #$f0
|
||||||
|
bne @l2b
|
||||||
|
.if (line < 7)
|
||||||
|
iny
|
||||||
|
.endif
|
||||||
|
.endrepeat
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
@l2b:
|
||||||
|
ldy #$00
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
@l1a:
|
||||||
|
.repeat 8,line
|
||||||
|
lda (SCREEN_PTR),y
|
||||||
|
and #$0f
|
||||||
|
cmp #$0f
|
||||||
|
bne @l2bb
|
||||||
|
.if line < 7
|
||||||
|
iny
|
||||||
|
.endif
|
||||||
|
.endrepeat
|
||||||
|
ldy #$00
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
@l2bb:
|
||||||
|
ldy #$00
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
;--- end color vodoo
|
||||||
|
.endif
|
||||||
|
@ -33,9 +33,14 @@ soft80_kclrscr:
|
|||||||
inx
|
inx
|
||||||
bne @lp3
|
bne @lp3
|
||||||
|
|
||||||
|
.if SOFT80COLORVOODOO = 1
|
||||||
|
lda __bgcolor
|
||||||
|
jsr clear ; clear color ram
|
||||||
|
.endif
|
||||||
|
|
||||||
sei
|
sei
|
||||||
ldy $01
|
ldy $01
|
||||||
lda #$34
|
lda #$34 ; enable RAM under I/O
|
||||||
sta $01
|
sta $01
|
||||||
|
|
||||||
lda CHARCOLOR
|
lda CHARCOLOR
|
||||||
@ -43,11 +48,6 @@ soft80_kclrscr:
|
|||||||
ora __bgcolor
|
ora __bgcolor
|
||||||
jsr clear ; clear vram
|
jsr clear ; clear vram
|
||||||
|
|
||||||
inc $01 ; -> $35
|
|
||||||
|
|
||||||
lda __bgcolor
|
|
||||||
jsr clear ; clear color ram
|
|
||||||
|
|
||||||
sty $01
|
sty $01
|
||||||
cli
|
cli
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user