1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-09 16:40:38 +00:00

Precompiled sprite test

This commit is contained in:
David Schmenk 2024-09-10 08:00:25 -07:00
parent d79695270e
commit c8e3173348
3 changed files with 75 additions and 46 deletions

View File

@ -40,6 +40,7 @@ import dcgrlib
predef dcgrFillBl7Mem(x7, y, w7, h, dstptr, dstspan)#0
predef dcgrVLB#0
predef dcgrOpScr(op)#0
predef dcgrOpMem(op)#0
predef dcgrAllocBl7Mem(w, h)#3
predef dcgrMode(mode)
end

View File

@ -1149,6 +1149,17 @@ asm _clipXMemBl7Mem
LDA #$00
ADC ESTKH-9,X
STA DSTH
LDA ESTKL-1,X ; X COORD
ASL
ASL
;CLC
ADC DSTL ; DSTPTR += X7 * 4
STA DSTL
LDA #$00
ADC DSTH
STA DSTH
ASL ESTKL-3,X ; WIDTH = WIDTH7 * 4
ASL ESTKL-3,X
LDA ESTKL-8,X ; DSTHEIGHT
end
asm _clipYMemBl7Mem
@ -1165,8 +1176,12 @@ asm _clipYMemBl7Mem
STA SRCH
DEY
BNE -
+ LDY ESTKL-2,X ; Y COORD
+ LDA ESTKL-2,X ; Y COORD
BEQ +
TAY
CLC
ADC ESTKL-4,X ; HEIGHT
STA ESTKL-4,X ; -> BOTTOM EDGE
- CLC ; ADVANCE TO DST Y SCANLINE
LDA ESTKL-10,X ; DSTSPAN
ADC DSTL
@ -1176,34 +1191,15 @@ asm _clipYMemBl7Mem
STA DSTH
DEY
BNE -
+ LDA ESTKL-2,X ; Y COORD
CLC
ADC ESTKL-4,X ; HEIGHT
STA ESTKL-4,X ; -> BOTTOM EDGE
LDA ESTKL-1,X ; X COORD
ASL
ASL
;CLC
ADC DSTL ; DSTPTR += X7 * 4
STA DSTL
LDA #$00
ADC DSTH
STA DSTH
ASL ESTKL-3,X ; WIDTH = WIDTH7 * 4
ASL ESTKL-3,X
end
asm _jmpOpMemBl7Mem
JMP $F000
+ JMP $F000
end
asm _dcgrMemBl7MemB
DEC SRCL
BNE YM7M
DEC SRCH
YM7M LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BEQ RETM7M
INC ESTKL-2,X ; Y COORD++
LDY ESTKL-3,X ; WIDTH7
YM7M LDY ESTKL-3,X ; WIDTH7
XM7M LDA (SRC),Y
DEY
STA (DST),Y
@ -1230,21 +1226,21 @@ NXTM7M CLC
LDA ESTKH-10,X
ADC DSTH
STA DSTH
BNE YM7M ; BRA
INC ESTKL-2,X ; Y COORD++
LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BNE YM7M
RETM7M RTS
end
asm _dcgrOpMemBl7MemB
YOM7M LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BEQ RETM7M
INC ESTKL-2,X ; Y COORD++
LDY ESTKL-3,X ; WIDTH7
YOM7M LDY ESTKL-3,X ; WIDTH7
XOM7M DEY
LDA (SRC),Y
end
asm _dcgrOpMemBl7MemC
EOR (DST),Y
STA (DST),Y
DEY
LDA (SRC),Y
end
asm _dcgrOpMemBl7MemD
@ -1277,8 +1273,11 @@ NXTOM7M CLC
LDA ESTKH-10,X
ADC DSTH
STA DSTH
INC ESTKL-2,X ; Y COORD++
LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BNE YOM7M ; BRA
RETOM7M RTS
RTS
end
export asm dcgrFillBl7Scr(x7, y, w7, h)#0
INX
@ -1345,6 +1344,8 @@ export asm dcgrFillBl7Mem(x7, y, w7, h, dstptr, dstspan)#0
CLC
ADC #6
TAX
ASL ESTKL-3,X ; WIDTH7 * 4
ASL ESTKL-3,X
LDA ESTKL-1,X ; X7 * 4
ASL
ASL
@ -1355,12 +1356,12 @@ export asm dcgrFillBl7Mem(x7, y, w7, h, dstptr, dstspan)#0
ADC ESTKH-5,X
STA DSTH
LDA ESTKL-2,X ; Y COORD
BEQ +
BEQ YFILM
TAY
;CLC
ADC ESTKL-4,X ; HEIGHT
STA ESTKL-4,X ; -> BOTTOM EDGE
- ;CLC ; ADVANCE TO DST Y SCANLINE
- ;CLC ; ADVANCE TO DST Y SCANLINE
LDA ESTKL-6,X ; DSTSPAN
ADC DSTL
STA DSTL
@ -1369,13 +1370,7 @@ export asm dcgrFillBl7Mem(x7, y, w7, h, dstptr, dstspan)#0
STA DSTH
DEY
BNE -
+ ASL ESTKL-3,X ; WIDTH7 * 4
ASL ESTKL-3,X
YFILM LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BEQ RETFILM
INC ESTKL-2,X ; Y COORD++
LDY ESTKL-3,X ; WIDTH7
YFILM LDY ESTKL-3,X ; WIDTH7
end
asm _dcgrFillBl7MemB
XFILM LDA $3003 ; MEMCLRH
@ -1391,15 +1386,18 @@ XFILM LDA $3003 ; MEMCLRH
DEY
STA (DST),Y
BNE XFILM
NXTFILM CLC
CLC
LDA ESTKL-6,X ; DSTSPAN
ADC DSTL
STA DSTL
LDA ESTKH-6,X
ADC DSTH
STA DSTH
BNE YFILM ; BRA
RETFILM RTS
INC ESTKL-2,X ; Y COORD++
LDA ESTKL-2,X ; Y COORD
CMP ESTKL-4,X ; AT BOTTOM?
BNE YFILM
RTS
end
//
// Wait for VLB

View File

@ -24,6 +24,31 @@ byte[] = $55,$00,$00,$AA,$AA,$00,$00,$55
byte[] = $55,$55,$00,$00,$00,$00,$55,$55
byte[] = $55,$55,$55,$05,$50,$55,$55,$55
word sprite7mask[7]
word sprite7[7]
word sprite7span, sprite7width
def compileSprite#0
byte i
for i = 0 to 6
sprite7[i], sprite7span, sprite7width = dcgrAllocBl7Mem(16, 16)
sprite7mask[i], sprite7span, sprite7width = dcgrAllocBl7Mem(16, 16)
dcgrColor(DCLR_BLACK)
dcgrFillBl7Mem(0, 0, sprite7width, 16, sprite7[i], sprite7span)
dcgrColor(DCLR_WHITE)
dcgrFillBl7Mem(0, 0, sprite7width, 16, sprite7mask[i], sprite7span)
dcgrOpMem(OP_SRC)
dcgrPixMem(i + 2, 0, 16, 16, @sprite, sprite7width * 7, 16, sprite7[i], sprite7span)
dcgrPixMem(i + 2, 0, 16, 16, @sprite, sprite7width * 7, 16, sprite7mask[i], sprite7span)
dcgrOpMem(OP_XOR)
dcgrPixMem(i + 2, 0, 16, 16, @sprite, sprite7width * 7, 16, sprite7mask[i], sprite7span)
dcgrMemBl7Scr(0, i*16, sprite7width, 16, sprite7[i], sprite7span)
dcgrMemBl7Scr(3, i*16, sprite7width, 16, sprite7mask[i], sprite7span)
next
dcgrOpMem(OP_SRC)
end
def dcgrTest#0
word i, j, k, ok7, om7, inci, incj, inck
word backblk, backspan, backw7
@ -55,15 +80,19 @@ def dcgrTest#0
restrw = restrw7 * 7
while ^$C000 < 128
ok7, om7 = divmod(k, 7)
if om7 < 0; om7 = 6+om7; fin
dcgrMemBl7Mem(0, 0, restrw7, 16, backblk + ok7 * 4, backspan, restrw7, 16, restrblk, restrspan)
dcgrPixMem(om7 + 2, 0, 16, 16, @sprite, restrw, 16, restrblk, restrspan)
//dcgrColor(i)
//dcgrFillBl7Mem(0, 0, restrw7, 16, restrblk, restrspan)
dcgrOpMem(OP_AND)
dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7mask[om7], sprite7span, restrw7, 16, restrblk, restrspan)
dcgrOpMem(OP_XOR)
dcgrMemBl7Mem(0, 0, sprite7width, 16, sprite7[om7], sprite7span, restrw7, 16, restrblk, restrspan)
dcgrOpMem(OP_SRC)
//dcgrPixMem(om7 + 2, 0, 16, 16, @sprite, restrw, 16, restrblk, restrspan)
dcgrMemBl7Scr(ok7, 170, restrw7, 16, restrblk, restrspan)
//dcgrFillBl7Scr(ok7, 170, restrw7, 16)
if k < 0; getc; fin
if k > 136 or k < -16; inck = -inck; fin
k = k + inck
dcgrPixScr(i, j, 16, 16, @sprite)
//dcgrPixScr(i, j, 16, 16, @sprite)
if i > 102 or i < 23; inci = -inci; fin
i = i + inci
if j > 145 or j < 32; incj = -incj; fin
@ -74,6 +103,7 @@ def dcgrTest#0
end
dcgrMode(0)
compileSprite
dcgrTest
dcgrMode(-1)
done