63 lines
1.2 KiB
ArmAsm
63 lines
1.2 KiB
ArmAsm
// Clear screen and initialise line link table
|
|
// (Compute's Mapping the 64 p215-216)
|
|
|
|
clear_screen_real:
|
|
|
|
// XXX it is probably a good idea to hide cursor first
|
|
|
|
// Clear line link table
|
|
// (Compute's Mapping the 64 p215)
|
|
|
|
lda #$00
|
|
ldy #24
|
|
clearscreen_l1:
|
|
sta LDTBL,y
|
|
dey
|
|
bpl clearscreen_l1
|
|
|
|
// Y now = #$FF
|
|
|
|
// Clear screen RAM.
|
|
// We should do this at HIBASE, which annoyingly
|
|
// is no ZP, so we need to make a vector
|
|
// (Compute's Mapping the 64 p216)
|
|
// Get pointer to the screen into PNT
|
|
// as it is the first appropriate place for it found when
|
|
// searching through the ZP allocations listed in
|
|
// Compute's Mapping the 64
|
|
sta PNT+0
|
|
lda HIBASE
|
|
sta PNT+1
|
|
ldx #$03 // countdown for pages to update
|
|
iny // Y now = #$00
|
|
lda #$20 // space character
|
|
clearscreen_l2:
|
|
sta (PNT),y
|
|
iny
|
|
bne clearscreen_l2
|
|
// To draw only 1000 bytes, add 250 to address each time
|
|
lda PNT
|
|
clc
|
|
adc #<250
|
|
sta PNT
|
|
lda PNT+1
|
|
adc #>250
|
|
sta PNT+1
|
|
lda #$20 // get space character again
|
|
dex
|
|
bpl clearscreen_l2
|
|
|
|
// Clear colour RAM
|
|
// (Compute's Mapping the 64 p216)
|
|
lda COLOR
|
|
clearscreen_l3:
|
|
sta $d800,y
|
|
sta $d900,y
|
|
sta $da00,y
|
|
sta $db00-24,y // so we only erase 1000 bytes
|
|
iny
|
|
bne clearscreen_l3
|
|
|
|
// (Compute's Mapping the 64 p216)
|
|
jmp cursor_home
|