mirror of
https://github.com/irmen/prog8.git
synced 2025-11-02 13:16:07 +00:00
cx16: txt.fill_screen, txt.clear_screenchars, clear_screencolors are now romable
This commit is contained in:
@@ -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
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user