115 lines
3.6 KiB
OpenEdge ABL
115 lines
3.6 KiB
OpenEdge ABL
; clears the tetris playfield
|
|
clearBoard LDWI SYS_Draw4_30 ; setup 4 pixel SYS routine
|
|
STW giga_sysFn
|
|
|
|
LDWI 0x0000 ; 4 pixels of colour
|
|
STW giga_sysArg0
|
|
STW giga_sysArg2
|
|
|
|
LDI yOffset ; origin
|
|
ST yy
|
|
LDI xOffset
|
|
ST xx
|
|
|
|
LDI yTetris*4 ; counters
|
|
ST jj
|
|
LDI xTetris
|
|
ST ii
|
|
|
|
clearB_loop LDW vbase ; vram address
|
|
ADDW xx
|
|
STW giga_sysArg4
|
|
SYS 30
|
|
|
|
LD xx ; 4 horizontal pixels
|
|
ADDI 0x04
|
|
ST xx
|
|
|
|
LoopCounter ii clearB_loop
|
|
|
|
LD yy ; next line
|
|
ADDI 0x01
|
|
ST yy
|
|
LDI xOffset
|
|
ST xx
|
|
|
|
PUSH
|
|
CALL playMidi
|
|
POP
|
|
|
|
LDI xTetris
|
|
ST ii
|
|
LoopCounter jj clearB_loop
|
|
RET
|
|
|
|
|
|
; clears the viewable screen
|
|
clearScreen LDWI SYS_Draw4_30 ; setup 4 pixel SYS routine
|
|
STW giga_sysFn
|
|
LDWI 0x0000 ; 4 pixels of colour
|
|
STW giga_sysArg0
|
|
STW giga_sysArg2
|
|
|
|
LDI giga_yres / 2 ; counters
|
|
ST jj
|
|
LDI giga_xres / 4
|
|
ST ii
|
|
|
|
LDWI 0x0800 ; top line
|
|
STW xx
|
|
LDWI 0x7F00 ; bottom line
|
|
STW kk
|
|
PUSH ; save clearScreen's caller return address
|
|
CALL clearScreen_0 ; jump to clearScreen_0
|
|
|
|
; clear left and right edge single pixel vertical strips, (for screen shake)
|
|
clearStrips STW scratch
|
|
LDI 0x00
|
|
POKE scratch
|
|
LDW scratch
|
|
ADDI 0x5F
|
|
STW scratch
|
|
LDI 0x00
|
|
POKE scratch
|
|
RET
|
|
|
|
clearScreen_0 POP ; restore clearScreen's caller return address
|
|
clearS_loop LDW xx
|
|
STW giga_sysArg4 ; top line
|
|
SYS 30
|
|
|
|
LDW kk
|
|
STW giga_sysArg4 ; bottom line
|
|
SYS 30
|
|
|
|
LD xx ; 4 horizontal pixels
|
|
ADDI 0x04
|
|
ST xx
|
|
LD kk ; 4 horizontal pixels
|
|
ADDI 0x04
|
|
ST kk
|
|
LoopCounter ii clearS_loop
|
|
|
|
; clear one extra pixel wide stripes for screen shake
|
|
PUSH ; top
|
|
LDW xx
|
|
CALL clearStrips
|
|
POP
|
|
PUSH ; bottom
|
|
LDW kk
|
|
CALL clearStrips
|
|
POP
|
|
|
|
INC yy ; next top line
|
|
LD ll ; next bottom line
|
|
SUBI 0x01
|
|
ST ll
|
|
|
|
LDI 0x00 ; reset xx, kk and ii
|
|
ST xx
|
|
ST kk
|
|
LDI giga_xres / 4
|
|
ST ii
|
|
LoopCounter jj clearS_loop
|
|
RET
|