screen clearing fixes
This commit is contained in:
1 parent
3b9bfde993
commit
9ef81db3d4
2 files changed
+74
-49
No files matched your search
@@ -1,70 +1,69 @@
|
|||||||
// Clear screen and initialise line link table
|
|
||||||
// (Compute's Mapping the 64 p215-216)
|
//
|
||||||
|
// Clear screen and initialise line link table, described in:
|
||||||
|
//
|
||||||
|
// - [CM64] Computes Mapping the Commodore 64 - pages 215-216
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
clear_screen_real:
|
clear_screen_real:
|
||||||
rts
|
|
||||||
|
|
||||||
/* YYY disabled for rework
|
// First disable the cursor
|
||||||
|
jsr cursor_disable
|
||||||
|
|
||||||
clear_screen_real:
|
// Clear the line link table - cheecked on original ROMs,
|
||||||
|
// the highest bit set means that the line is NOT a logical
|
||||||
|
// continuation of the previous one
|
||||||
|
|
||||||
// XXX it is probably a good idea to hide cursor first
|
lda #$80
|
||||||
|
|
||||||
// Clear line link table
|
|
||||||
// (Compute's Mapping the 64 p215)
|
|
||||||
|
|
||||||
lda #$00
|
|
||||||
ldy #24
|
ldy #24
|
||||||
clearscreen_l1:
|
!:
|
||||||
sta LDTBL,y
|
sta LDTBL,y
|
||||||
dey
|
dey
|
||||||
bpl clearscreen_l1
|
bpl !-
|
||||||
|
|
||||||
// Y now = #$FF
|
// YYY flow can probably be size-optimized, by clearing a single row each time (we will need such a subroutine)
|
||||||
|
|
||||||
// Clear screen RAM.
|
// Clear screen character RAM. Unfortunately, the HIBASE value is not on the zero page,
|
||||||
// We should do this at HIBASE, which annoyingly
|
// we will reuse PNT (it will be overridden in a moment nevertheless) as the pointer
|
||||||
// is no ZP, so we need to make a vector
|
|
||||||
// (Compute's Mapping the 64 p216)
|
iny // sets .Y to 0
|
||||||
// Get pointer to the screen into PNT
|
sty PNT+0
|
||||||
// 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
|
lda HIBASE
|
||||||
sta PNT+1
|
sta PNT+1
|
||||||
ldx #$03 // countdown for pages to update
|
|
||||||
iny // Y now = #$00
|
ldx #$03 // countdown for pages to update
|
||||||
lda #$20 // space character
|
|
||||||
clearscreen_l2:
|
clear_screen_loop:
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
|
lda #$01 // space character screen code
|
||||||
|
!:
|
||||||
sta (PNT),y
|
sta (PNT),y
|
||||||
iny
|
iny
|
||||||
bne clearscreen_l2
|
cpy #250 // clear 250 bytes only, do not cross 1000 bytes barrier
|
||||||
// To draw only 1000 bytes, add 250 to address each time
|
bne !-
|
||||||
lda PNT
|
|
||||||
|
lda PNT+0
|
||||||
clc
|
clc
|
||||||
adc #<250
|
adc #250
|
||||||
sta PNT
|
sta PNT+0
|
||||||
lda PNT+1
|
bcc !+
|
||||||
adc #>250
|
inc PNT+1
|
||||||
sta PNT+1
|
!:
|
||||||
lda #$20 // get space character again
|
|
||||||
dex
|
dex
|
||||||
bpl clearscreen_l2
|
bpl clear_screen_loop
|
||||||
|
|
||||||
|
// Now clear the colour RAM - .Y is now 250, make use of this fact
|
||||||
|
|
||||||
// Clear colour RAM
|
|
||||||
// (Compute's Mapping the 64 p216)
|
|
||||||
lda COLOR
|
lda COLOR
|
||||||
clearscreen_l3:
|
!:
|
||||||
sta $d800,y
|
sta $D800 - 1 + 250 * 0, y
|
||||||
sta $d900,y
|
sta $D800 - 1 + 250 * 1, y
|
||||||
sta $da00,y
|
sta $D800 - 1 + 250 * 2, y
|
||||||
sta $db00-24,y // so we only erase 1000 bytes
|
sta $D800 - 1 + 250 * 3, y
|
||||||
iny
|
dey
|
||||||
bne clearscreen_l3
|
bne !-
|
||||||
|
|
||||||
// (Compute's Mapping the 64 p216)
|
// Fall to cursor home routine
|
||||||
jmp cursor_home
|
jmp cursor_home
|
||||||
|
|
||||||
*/
|
|
||||||
@@ -3,6 +3,32 @@
|
|||||||
// Home the cursor (Compute's Mapping the 64 p216)
|
// Home the cursor (Compute's Mapping the 64 p216)
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// Variables: (http://sta.c64.org/cbm64mem.html)
|
||||||
|
// - $C7 - RVS - reverse mode switch
|
||||||
|
// - $C8 - INDX - length of line minus 1 during screen input. Values: $27, 39; $4F, 79.
|
||||||
|
// - $C9 - LXSP+0 - cursor row during screen input. Values: $00-$18, 0-24.
|
||||||
|
// - $CA - LXSP+1 - cursor column during screen input. Values: $00-$27, 0-39.
|
||||||
|
// - $CC - BLNSW - cursor visibility switch. Values: $01-$FF: Cursor is off.
|
||||||
|
// - $CD - BLNCT - delay counter for changing cursor phase. Values:
|
||||||
|
// - $CE - GDBLN - screen code of character under cursor
|
||||||
|
// - $CF - BLNON - cursor phase switch
|
||||||
|
// - $D0 - CRSW - end of line switch during screen input
|
||||||
|
// - $D1-$D2 - PNT - pointer to current line in screen memory.
|
||||||
|
// - $D3 - PNTR - current cursor column. Values: $00-$27, 0-39.
|
||||||
|
// - $D4 - QTSW - quotation mode switch
|
||||||
|
// - $D5 - LNMX - length of current screen line minus 1. Values: $27, 39; $4F, 79.
|
||||||
|
// - $D6 - TBLX - current cursor row. Values: $00-$18, 0-24.
|
||||||
|
// - $D8 - INSRT - number of insertions
|
||||||
|
// - $D9-$F1 - LDTBL - link table
|
||||||
|
// - $F2 - temporary value for screen scroll
|
||||||
|
// - $F3-$F4 - USER - pointer to current line in Color RAM.
|
||||||
|
// - $02A5 - TLNIDX - number of line currently being scrolled during scrolling the screen
|
||||||
|
|
||||||
|
|
||||||
|
cursor_home:
|
||||||
|
jmp cursor_home
|
||||||
|
|
||||||
|
|
||||||
/* YYY disabled for rework
|
/* YYY disabled for rework
|
||||||
cursor_home:
|
cursor_home:
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user