03-24-2012, 09:03 PM
I adapted some Screen clearing routines posted on WOS here: <!-- m --><a class="postlink" href="http://www.worldofspectrum.org/forums/showthread.php?t=38426">http://www.worldofspectrum.org/forums/s ... hp?t=38426</a><!-- m --> for ZXBC. Maybe useful for other coders:
Code:
sub ShiftClearScr()
asm
ld b,8 ;'8 bits to rotate out per byte
CLSNloop:
call clearscreennice
djnz CLSNloop
jr CLSNEnd
clearscreennice:
ld hl,16383 ;'just before display file
CLSNcloop:
inc hl
ld a,h
cp 88 ;'into address 22528 yet?
ret z ;'yep return
sla (hl) ;'nope, shift the byte
jr CLSNcloop ;'keep going
CLSNEnd:
end asm
end sub
Code:
sub SpiralTrailClearScr()
asm
ei
ld hl,patterns01
loop1:
halt
ld a,(hl)
inc hl
or a
jp z,end02
ld c,a
and 127
ld d,a
ld b,3
ld e,0
loop2:
ld a,(de)
bit 7,c
jr z,tmp1
or (hl)
jr tmp2
tmp1:
and (hl)
tmp2:
ld (de),a
inc e
jr nz,loop2
ld a,d
add a,8
ld d,a
djnz loop2
inc hl
jr loop1
jp end02
patterns01:
db 64+128,128,64+128,64,64+128,32,64+128,16
db 64+128,8,64,127,64+128,4,64,191
db 64+128,2,64,223,64+128,1,64,239
db 65+128,1,64,247,66+128,1,64,251
db 67+128,1,64,253,68+128,1,64,254
db 69+128,1,65,254,70+128,1,66,254
db 71+128,1,67,254,71+128,2,68,254
db 71+128,4,69,254,71+128,8,70,254
db 71+128,16,71,254,71+128,32,71,253
db 71+128,64,71,251,71+128,128,71,247
db 70+128,128,71,239,69+128,128,71,223
db 68+128,128,71,191,67+128,128,71,127
db 66+128,128,70,127,65+128,128,69,127
db 65+128,64,68,127,65+128,32,67,127
db 65+128,16,66,127,65+128,8,65,127
db 65+128,4,65,191,65+128,2,65,223
db 66+128,2,65,239,67+128,2,65,247
db 68+128,2,65,251,69+128,2,65,253
db 70+128,2,66,253,70+128,4,67,253
db 70+128,8,68,253,70+128,16,69,253
db 70+128,32,70,253,70+128,64,70,251
db 69+128,64,70,247,68+128,64,70,239
db 67+128,64,70,223,66+128,64,70,191
db 66+128,32,69,191,66+128,16,68,191
db 66+128,8,67,191,66+128,4,66,191
db 67+128,4,66,223,68+128,4,66,239
db 69+128,4,66,247,69+128,8,66,251
db 69+128,16,67,251,69+128,32,68,251
db 68+128,32,69,251,67+128,32,69,247
db 67+128,16,69,239,67+128,8,69,223
db 68+128,8,68,223,68+128,16,67,223
db 67,239,67,247,68,247,68,239
db 0
end02:
end asm
end sub
Code:
sub SpiralClearScr()
asm
ei
ld hl,patterns
loop01:
halt
ld a,(hl)
inc hl
or a
jp z,clearend2
ld d,a
ld c,(hl)
inc hl
ld b,3
ld e,0
loop02: ld a,(de)
and c
ld (de),a
inc e
jr nz,loop02
ld a,d
add a,8
ld d,a
djnz loop02
jr loop01
jp clearend2
patterns:
db 64,127, 64,191, 64,223, 64,239
db 64,247, 64,251, 64,253, 64,254
db 65,254, 66,254, 67,254, 68,254
db 69,254, 70,254, 71,254, 71,253
db 71,251, 71,247, 71,239, 71,223
db 71,191, 71,127, 70,127, 69,127
db 68,127, 67,127, 66,127, 65,127
db 65,191, 65,223, 65,239, 65,247
db 65,251, 65,253, 66,253, 67,253
db 68,253, 69,253, 70,253, 70,251
db 70,247, 70,239, 70,223, 70,191
db 69,191, 68,191, 67,191, 66,191
db 66,223, 66,239, 66,247, 66,251
db 67,251, 68,251, 69,251, 69,247
db 69,239, 69,223, 68,223, 67,223
db 67,239, 67,247, 68,247, 68,239
db 0
clearend2:
end asm
end sub
Code:
sub RandomClearScr()
asm
ld hl,0 ;'point hl somewhere in ROM
ld b,6 ;'using 48k ROM you need 5 or more repeats to empty screen
CLSloop1:
call CLSStart1
djnz CLSloop1
jr CLSend1
CLSStart1:
ld de,16383 ;'start of display file-1
CLScloop:
inc de ;'move into and through display file
inc hl ;'and ROM
ld a,d ;'are we out of display file and into attributes yet?
cp 88
ret z ;'yep return
ld a,(de) ;'nope, AND the data together and give the fadeaway effect
and (hl)
ld (de),a
jr CLScloop ;'keep going
CLSend1:
end asm
end sub
------------------------------------------------------------
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!
http://lcd-one.da.ru redirector is dead
Visit my http://members.inode.at/838331/index.html home page!