73 lines
2.4 KiB
OpenEdge ABL
73 lines
2.4 KiB
OpenEdge ABL
; erase complete tetromino
|
|
eraseTetromino GetTetrominoBase oindex orotation
|
|
LDWI 0x0000
|
|
STW colour
|
|
|
|
LDW tetrominoBase ; skip w, h, xo, yo
|
|
ADDI 0x05
|
|
STW tetrominoBase
|
|
|
|
LDI 0x04 ; 4 blocks per tetromino
|
|
ST ii
|
|
|
|
eraseT_loop LDW tetrominoBase ; x position
|
|
ADDI 0x01
|
|
STW tetrominoBase
|
|
PEEK
|
|
ADDW ox
|
|
ST xx
|
|
BLT eraseT_skip ; < 0 skip
|
|
SUBI xTetris
|
|
BGE eraseT_skip ; >= xTetris skip
|
|
|
|
LDW tetrominoBase ; y position
|
|
ADDI 0x01
|
|
STW tetrominoBase
|
|
PEEK
|
|
ADDW oy
|
|
SUBW ov ; yy = oy - ov, (offset within tetromino)
|
|
ST yy
|
|
BLT eraseT_skip ; < 0 skip
|
|
SUBI yTetris
|
|
BGE eraseT_skip ; >= yTetris skip
|
|
|
|
PUSH ; save return address, (this is needed if you nest CALL's)
|
|
CALL setTetrisBlock
|
|
POP ; restore return address
|
|
|
|
eraseT_skip LoopCounter ii eraseT_loop
|
|
RET
|
|
|
|
|
|
; erase top right corner
|
|
eraseTrCorner LDWI SYS_Draw4_30 ; setup 4 pixel SYS routine
|
|
STW giga_sysFn
|
|
LDWI bgColourW
|
|
STW giga_sysArg0
|
|
STW giga_sysArg2
|
|
|
|
LDI 6
|
|
ST ii
|
|
LDI xOffset + xPixels - 2
|
|
ST giga_sysArg4
|
|
LDI (yOffset-6) + giga_vram/256
|
|
ST giga_sysArg4 + 1
|
|
|
|
eraseTr_loop SYS 30
|
|
LDW giga_sysArg4
|
|
SUBI 0x01
|
|
STW scratch
|
|
LDI bgColourB
|
|
POKE scratch
|
|
LDW scratch
|
|
SUBI 0x01
|
|
STW scratch
|
|
LDI bgColourB
|
|
POKE scratch
|
|
LD giga_sysArg4 + 1
|
|
ADDI 0x01
|
|
ST giga_sysArg4 + 1
|
|
LoopCounter ii eraseTr_loop
|
|
|
|
RET
|