Files
open-roms/src/kernal/screen_m65/mega65_clrscr.s
T

127 lines
2.1 KiB
ArmAsm

// #LAYOUT# M65 KERNAL_1 #TAKE
// #LAYOUT# * * #IGNORE
// XXX deduplicate pointer manipulation
M65_CLRSCR:
// Clear additional attributes from the color code
lda COLOR
and #$0F
sta COLOR
// Disable the window mode
lda #$00
sta M64_SCRWINMODE
// FALLTROUGH
m65_clrscr_takeover:
// Set the viewport to the beginning of screen memory - variables:
// - M65_SCRVIEW, M65_COLVIEW
// To clear the screen, two zeropage long pointers will be used, initialize them too
// - M65_LPNT_SCR for screen memory
// - M65_LPNT_KERN for colour memory (starts from $FF80000) // XXX preserve this on stack, restore afterwards
sta M65_COLVIEW+0
sta M65_COLVIEW+1
sta M65_LPNT_KERN+0
sta M65_LPNT_KERN+1
lda #$F8
sta M65_LPNT_KERN+2
lda #$0F
sta M65_LPNT_KERN+3
lda M65_SCRSEG+0
sta M65_SCRVIEW+0
lda M65_SCRSEG+1
sta M65_SCRVIEW+1
lda M65_SCRBASE+0
sta M65_LPNT_SCR+0
lda M65_SCRBASE+1
sta M65_LPNT_SCR+1
lda M65_SCRSEG+0
sta M65_LPNT_SCR+2
lda M65_SCRSEG+1
sta M65_LPNT_SCR+3
// Clear the whole screen+color memory
phz
// FALLTROUGH
m65_clrscr_loop:
// Clear 80 characters
ldz #$4F // 80 bytes
!:
lda #$20
sta_lp (M65_LPNT_SCR),z
lda COLOR
sta_lp (M65_LPNT_KERN),z
dez
bpl !-
// Move M65_LPNT_SCR and M65_LPNT_KERN 80 characters forward
// XXX deduplicate with window clearing
clc
lda M65_LPNT_SCR+0
adc #$50
sta M65_LPNT_SCR+0
bcc !+
inc M65_LPNT_SCR+1
!:
clc
lda M65_LPNT_KERN+0
adc #$50
sta M65_LPNT_KERN+0
bcc !+
inc M65_LPNT_KERN+1
!:
// Check if we have more rows to clear
lda M65_LPNT_SCR+1
cmp M65_SCRGUARD+1
bne m65_clrscr_loop
lda M65_LPNT_SCR+0
cmp M65_SCRGUARD+0
bne m65_clrscr_loop
// Restore .Z register
plz
// Set screen+color base address in VIC IV
// XXX deduplicate with mode setting routine
lda #$00
sta VIC_COLPTR+0
sta VIC_COLPTR+1
lda M65_SCRBASE+0
sta VIC_SCRNPTR+0
lda M65_SCRBASE+1
sta VIC_SCRNPTR+1
// Set screen variables
// XXX provide proper implementation, together with HOME
lda #$00
sta M65__TXTROW
sta M65__TXTCOL
sta M65_TXTROW_OFF+0
sta M65_TXTROW_OFF+1
rts