gigatron/rom/Contrib/at67/gbas/runtime/clear_screen_ROMv5a.i
2025-01-28 19:17:01 +03:00

145 lines
5.3 KiB
OpenEdge ABL

; do *NOT* use register4 to register7 during time slicing
xreset EQU register0
xcount EQU register1
ycount EQU register2
treset EQU register3
breset EQU register8
top EQU register9
bot EQU register10
vramAddr EQU register11
evenAddr EQU register12
clsAddress EQU register13
clsLines EQU register14
varAddress EQU register13
clrAddress EQU register13
clrLines EQU register14
clrWidth EQU register15
%SUB resetVars
resetVars LDI 0
DOKE varAddress
INC varAddress
INC varAddress
LD varAddress
XORI giga_One ; end of user vars
BNE resetVars
RET
%ENDS
%SUB resetVideoFlags
resetVideoFlags LDI giga_CursorX ; starting cursor position
STW cursorXY
LDWI ON_BOTTOM_ROW_MSK
ANDW miscFlags
STW miscFlags ; reset on bottom row flag
RET
%ENDS
%SUB resetVideoTable
; resets video table pointers
resetVideoTable PUSH
LDI 8
STW vramAddr
LDWI giga_videoTable
STW evenAddr
resetVT_loop LDW vramAddr
DOKE evenAddr
INC evenAddr
INC evenAddr
INC vramAddr
LD vramAddr
SUBI giga_yres + 8
BLT resetVT_loop
CALLI resetVideoFlags
POP
RET
%ENDS
%SUB initClearFuncs
initClearFuncs PUSH
CALLI resetVideoFlags
LDWI SYS_SetMemory_v2_54 ; setup fill memory SYS routine
STW giga_sysFn
LD fgbgColour
ST giga_sysArg1 ; fill value
POP
RET
%ENDS
%SUB clearScreen
; clears the viewable screen
clearScreen PUSH
CALLI initClearFuncs
LD clsAddress + 1
ST giga_sysArg3
LDI 120
clearCS_loopy ST clsLines
LDI giga_xres
ST giga_sysArg0
LD clsAddress
ST giga_sysArg2
SYS 54 ; fill memory
INC giga_sysArg3 ; next line
LD clsLines
SUBI 1
BNE clearCS_loopy
POP
RET
%ENDS
%SUB clearRect
; clears a rectangle on the viewable screen
clearRect PUSH
CALLI initClearFuncs
LD clrAddress + 1
ST giga_sysArg3
LD clrLines
clearR_loop ST clrLines
LD clrWidth
ST giga_sysArg0
LD clrAddress
ST giga_sysArg2
SYS 54 ; fill memory
INC giga_sysArg3 ; next line
LD clrLines
SUBI 1
BNE clearR_loop
POP
RET
%ENDS
%SUB clearVertBlinds
; clears the viewable screen using a vertical blinds effect
clearVertBlinds PUSH
CALLI initClearFuncs
LDI giga_vram >> 8
STW top
clearVB_loopy LDI giga_xres
ST giga_sysArg0
LDI 0
ST giga_sysArg2 ; low start address
LD top
ST giga_sysArg3 ; top line
SYS 54 ; fill memory
LDI giga_xres
ST giga_sysArg0
LDI 0
ST giga_sysArg2 ; low start address
LDWI giga_yres - 1 + 16
SUBW top
ST giga_sysArg3 ; bottom line
SYS 54 ; fill memory
INC top ; next top line
LD top
SUBI giga_yres / 2 + 8
BLT clearVB_loopy
POP
RET
%ENDS