cx16: txt.fill_screen, txt.clear_screenchars, clear_screencolors are now romable

This commit is contained in:
Irmen de Jong
2025-04-16 22:59:36 +02:00
parent 1f996e3b8b
commit d2e8ee8269
2 changed files with 18 additions and 48 deletions

View File

@@ -95,21 +95,22 @@ asmsub get_cursor() -> ubyte @X, ubyte @Y {
asmsub fill_screen (ubyte character @ A, ubyte color @ Y) clobbers(A, X) { asmsub fill_screen (ubyte character @ A, ubyte color @ Y) clobbers(A, X) {
; ---- fill the character screen with the given fill character and character color. ; ---- fill the character screen with the given fill character and character color.
; TODO: Romable
%asm {{ %asm {{
sty _ly+1 _color = P8ZP_SCRATCH_B1
_numrows = P8ZP_SCRATCH_REG
sty _color
pha pha
jsr cbm.SCREEN ; get dimensions in X/Y jsr cbm.SCREEN ; get dimensions in X/Y
txa txa
lsr a lsr a
lsr a lsr a
sta _lx+1 sta _numrows
lda #%00010000 lda #%00010000
jsr set_vera_textmatrix_addresses jsr set_vera_textmatrix_addresses
pla pla
_lx ldx #0 ; modified _more ldx _numrows
phy phy
_ly ldy #1 ; modified ldy _color
- sta cx16.VERA_DATA0 - sta cx16.VERA_DATA0
sty cx16.VERA_DATA0 sty cx16.VERA_DATA0
sta cx16.VERA_DATA0 sta cx16.VERA_DATA0
@@ -125,7 +126,7 @@ _ly ldy #1 ; modified
beq + beq +
stz cx16.VERA_ADDR_L stz cx16.VERA_ADDR_L
inc cx16.VERA_ADDR_M ; next line inc cx16.VERA_ADDR_M ; next line
bra _lx bra _more
+ rts + rts
set_vera_textmatrix_addresses: set_vera_textmatrix_addresses:
@@ -143,18 +144,17 @@ set_vera_textmatrix_addresses:
asmsub clear_screenchars (ubyte character @ A) clobbers(X, Y) { asmsub clear_screenchars (ubyte character @ A) clobbers(X, Y) {
; ---- clear the character screen with the given fill character (leaves colors) ; ---- clear the character screen with the given fill character (leaves colors)
; (assumes screen matrix is at the default address) ; (assumes screen matrix is at the default address)
; TODO: Romable
%asm {{ %asm {{
pha pha
jsr cbm.SCREEN ; get dimensions in X/Y jsr cbm.SCREEN ; get dimensions in X/Y
txa txa
lsr a lsr a
lsr a lsr a
sta _lx+1 sta P8ZP_SCRATCH_REG
lda #%00100000 lda #%00100000
jsr fill_screen.set_vera_textmatrix_addresses jsr fill_screen.set_vera_textmatrix_addresses
pla pla
_lx ldx #0 ; modified _more ldx P8ZP_SCRATCH_REG
- sta cx16.VERA_DATA0 - sta cx16.VERA_DATA0
sta cx16.VERA_DATA0 sta cx16.VERA_DATA0
sta cx16.VERA_DATA0 sta cx16.VERA_DATA0
@@ -165,7 +165,7 @@ _lx ldx #0 ; modified
beq + beq +
stz cx16.VERA_ADDR_L stz cx16.VERA_ADDR_L
inc cx16.VERA_ADDR_M ; next line inc cx16.VERA_ADDR_M ; next line
bra _lx bra _more
+ rts + rts
}} }}
} }
@@ -173,20 +173,21 @@ _lx ldx #0 ; modified
asmsub clear_screencolors (ubyte color @ A) clobbers(X, Y) { asmsub clear_screencolors (ubyte color @ A) clobbers(X, Y) {
; ---- clear the character screen colors with the given color (leaves characters). ; ---- clear the character screen colors with the given color (leaves characters).
; (assumes color matrix is at the default address) ; (assumes color matrix is at the default address)
; TODO: Romable
%asm {{ %asm {{
sta _la+1 _color = P8ZP_SCRATCH_B1
_numrows = P8ZP_SCRATCH_REG
sta _color
jsr cbm.SCREEN ; get dimensions in X/Y jsr cbm.SCREEN ; get dimensions in X/Y
txa txa
lsr a lsr a
lsr a lsr a
sta _lx+1 sta _numrows
stz cx16.VERA_CTRL stz cx16.VERA_CTRL
lda #%00100000 lda #%00100000
jsr fill_screen.set_vera_textmatrix_addresses jsr fill_screen.set_vera_textmatrix_addresses
inc cx16.VERA_ADDR_L ; start at (1,0) - the color attribute byte inc cx16.VERA_ADDR_L ; start at (1,0) - the color attribute byte
_lx ldx #0 ; modified _more ldx _numrows
_la lda #0 ; modified lda _color
- sta cx16.VERA_DATA0 - sta cx16.VERA_DATA0
sta cx16.VERA_DATA0 sta cx16.VERA_DATA0
sta cx16.VERA_DATA0 sta cx16.VERA_DATA0
@@ -198,7 +199,7 @@ _la lda #0 ; modified
lda #1 lda #1
sta cx16.VERA_ADDR_L sta cx16.VERA_ADDR_L
inc cx16.VERA_ADDR_M ; next line inc cx16.VERA_ADDR_M ; next line
bra _lx bra _more
+ rts + rts
}} }}
} }

View File

@@ -1,40 +1,9 @@
%import textio %import textio
%import compression
%zeropage basicsafe %zeropage basicsafe
%option no_sysinit %option no_sysinit
main { main {
sub start() { sub start() {
str data = "a..........irmen????????zzzzz!" txt.clear_screencolors($f7)
str output = "?" * 100
str decompressed = "\x00" * 100
uword ptr
uword csize = compression.encode_rle(data, len(data), output, true)
txt.print_ub(len(data))
txt.spc()
txt.print_uw(csize)
txt.nl()
txt.nl()
ptr = &output - 1
csize = compression.decode_rle_srcfunc(&srcfunc, decompressed, len(decompressed))
txt.print_uw(csize)
txt.nl()
txt.print(data)
txt.nl()
txt.print(decompressed)
txt.nl()
asmsub srcfunc() -> ubyte @A {
%asm {{
inc p8v_ptr
bne +
inc p8v_ptr+1
+ ldy #0
lda (p8v_ptr),y
rts
}}
}
} }
} }