1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-04-25 20:19:23 +00:00

Slight PixMap speedups and better FadeOut

This commit is contained in:
David Schmenk
2024-09-17 18:10:21 -07:00
parent 7da4ff8713
commit bec33a2e88
2 changed files with 57 additions and 35 deletions
+23 -22
View File
@@ -624,7 +624,7 @@ asm dcgrPixMapScr(x, y, pixw, pixh, pixptr)#0
LDA ESTKL-1,X ; X COORD LDA ESTKL-1,X ; X COORD
CLC CLC
ADC ESTKL-3,X ; WIDTH ADC ESTKL-3,X ; WIDTH
STA ESTKL-3,X ; -> RIGHT EDGE STA ESTKH-3,X ; -> RIGHT EDGE
YPIXS LDY ESTKL-2,X ; Y COORD YPIXS LDY ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++ INC ESTKL-2,X ; Y COORD++
CPY #192 ; OFF SCREEN? CPY #192 ; OFF SCREEN?
@@ -646,10 +646,10 @@ asm _dcgrPixmapScrA
STA DSTH STA DSTH
LDA ESTKL-1,X ; X COORD LDA ESTKL-1,X ; X COORD
STA TMPL STA TMPL
LDY #$00
PIXSCRL CMP #140 ; OFF SCREEN? PIXSCRL CMP #140 ; OFF SCREEN?
BCS PIXSCRH BCS PIXSCRH
LDY #$00 ; LO NIBBLE SRC PIXEL LDA (SRC),Y ; LO NIBBLE SRC PIXEL
LDA (SRC),Y
AND #$0F AND #$0F
CMP #$05 ; TRANSPARENT? CMP #$05 ; TRANSPARENT?
BEQ PIXSCRH BEQ PIXSCRH
@@ -661,14 +661,13 @@ asm _dcgrPixmapScrB
end end
asm _dcgrPixmapScrC asm _dcgrPixmapScrC
JSR $1000 ; PLOT PIXEL JSR $1000 ; PLOT PIXEL
LDY #$00
PIXSCRH INC TMPL PIXSCRH INC TMPL
LDA TMPL LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE? CMP ESTKH-3,X ; AT RIGHT EDGE?
BEQ YPIXS ; NEXT ROW
CMP #140 ; OFF SCREEN? CMP #140 ; OFF SCREEN?
BCS + BCS +
LDY #$00 ; HI NIBBLE SRC PIXEL LDA (SRC),Y ; HI NIBBLE SRC PIXEL
LDA (SRC),Y
LSR LSR
LSR LSR
LSR LSR
@@ -683,12 +682,13 @@ asm _dcgrPixmapScrD
end end
asm _dcgrPixmapScrE asm _dcgrPixmapScrE
JSR $1000 ; PLOT PIXEL JSR $1000 ; PLOT PIXEL
LDY #$00
+ INC SRCL + INC SRCL
BNE + BNE +
INC SRCH INC SRCH
+ INC TMPL + INC TMPL
LDA TMPL LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE? CMP ESTKH-3,X ; AT RIGHT EDGE?
BNE PIXSCRL BNE PIXSCRL
NXTPIXS DEC ESTKL-4,X ; HEIGHT NXTPIXS DEC ESTKL-4,X ; HEIGHT
BNE YPIXS ; NEXT ROW BNE YPIXS ; NEXT ROW
@@ -714,7 +714,7 @@ asm dcgrPlotMem(x, y, memptr, memspan)#0
LDA ESTKL-4,X ; SPAN LDA ESTKL-4,X ; SPAN
ADC DSTL ADC DSTL
STA DSTL STA DSTL
LDA ESTKH-4,X LDA #$00 ; ESTKH-4,X
ADC DSTH ADC DSTH
STA DSTH STA DSTH
DEY DEY
@@ -1037,7 +1037,7 @@ asm dcgrPixMapMem(x, y, pixw, pixh, pixptr, memw, memh, memptr, memspan)#0
LDA ESTKL-1,X ; X COORD LDA ESTKL-1,X ; X COORD
CLC CLC
ADC ESTKL-3,X ; WIDTH ADC ESTKL-3,X ; WIDTH
STA ESTKL-3,X ; -> RIGHT EDGE STA ESTKH-3,X ; -> RIGHT EDGE
YPIXM LDA ESTKL-2,X ; Y COORD YPIXM LDA ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++ INC ESTKL-2,X ; Y COORD++
CMP ESTKL-7,X ; OUT OF DST BOUNDS? CMP ESTKL-7,X ; OUT OF DST BOUNDS?
@@ -1055,10 +1055,10 @@ end
asm _dcgrPixmapMemA asm _dcgrPixmapMemA
+ LDA ESTKL-1,X ; X COORD + LDA ESTKL-1,X ; X COORD
STA TMPL STA TMPL
LDY #$00
PIXMEML CMP ESTKL-6,X ; OUT OF DST BOUNDS? PIXMEML CMP ESTKL-6,X ; OUT OF DST BOUNDS?
BCS PIXMEMH BCS PIXMEMH
LDY #$00 ; LO NIBBLE SRC PIXEL LDA (SRC),Y ; LO NIBBLE SRC PIXEL
LDA (SRC),Y
AND #$0F AND #$0F
CMP #$05 ; TRANSPARENT? CMP #$05 ; TRANSPARENT?
BEQ PIXMEMH BEQ PIXMEMH
@@ -1071,14 +1071,14 @@ asm _dcgrPixmapMemB
end end
asm _dcgrPixmapMemC asm _dcgrPixmapMemC
JSR $1000 ; PLOT PIXEL JSR $1000 ; PLOT PIXEL
LDY #$00
PIXMEMH INC TMPL PIXMEMH INC TMPL
LDA TMPL LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE? CMP ESTKH-3,X ; AT RIGHT EDGE?
BEQ NXTPIXM ; NEXT ROW BEQ NXTPIXM ; NEXT ROW
CMP ESTKL-6,X ; OUT OF DST BOUNDS? CMP ESTKL-6,X ; OUT OF DST BOUNDS?
BCS + BCS +
LDY #$00 ; HI NIBBLE SRC PIXEL LDA (SRC),Y ; HI NIBBLE SRC PIXEL
LDA (SRC),Y
LSR LSR
LSR LSR
LSR LSR
@@ -1094,12 +1094,13 @@ asm _dcgrPixmapMemD
end end
asm _dcgrPixmapMemE asm _dcgrPixmapMemE
JSR $1000 ; PLOT PIXEL JSR $1000 ; PLOT PIXEL
LDY #$00
+ INC SRCL ; PIXPTR + INC SRCL ; PIXPTR
BNE + BNE +
INC SRCH INC SRCH
+ INC TMPL + INC TMPL
LDA TMPL LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE? CMP ESTKH-3,X ; AT RIGHT EDGE?
BNE PIXMEML BNE PIXMEML
NXTPIXM CLC NXTPIXM CLC
LDA ESTKL-9,X ; SPAN LDA ESTKL-9,X ; SPAN
@@ -1620,7 +1621,7 @@ asm dcgrClearBl7Mem(x7, y, w7, h, memptr, memspan)#0
LDA ESTKL-6,X ; SPAN LDA ESTKL-6,X ; SPAN
ADC DSTL ADC DSTL
STA DSTL STA DSTL
LDA ESTKH-6,X LDA #$00 ; ESTKH-6,X
ADC DSTH ADC DSTH
STA DSTH STA DSTH
DEY DEY
@@ -1629,14 +1630,14 @@ asm dcgrClearBl7Mem(x7, y, w7, h, memptr, memspan)#0
BNE + BNE +
DEC DSTH DEC DSTH
+ DEC DSTL + DEC DSTL
LDA ESTKH-6,X ; SRC POINTS TO MEM HALF OF SCANLINE ;LDA ESTKH-6,X ; SRC POINTS TO MEM HALF OF SCANLINE
LSR ;LSR
PHA ;PHA
LDA ESTKL-6,X ; SPAN LDA ESTKL-6,X ; SPAN
ROR ; SPAN / 2 LSR ; ROR SPAN / 2
ADC DSTL ADC DSTL
STA SRCL STA SRCL
PLA LDA #$00 ; PLA
ADC DSTH ADC DSTH
STA SRCH STA SRCH
BNE + ; BRA BNE + ; BRA
+34 -13
View File
@@ -162,11 +162,19 @@ word sprite7span, sprite7w
// //
// Dither matrices // Dither matrices
// //
byte[] dither25 = $00, $00, $AA, $AA, $00, $00, $AA, $AA
byte[] = $00, $00, $AA, $AA, $00, $00, $AA, $AA
byte[] = $00, $00, $AA, $AA, $00, $00, $AA, $AA
byte[] = $00, $00, $AA, $AA, $00, $00, $AA, $AA
byte[] dither50 = $55, $55, $AA, $AA, $55, $55, $AA, $AA byte[] dither50 = $55, $55, $AA, $AA, $55, $55, $AA, $AA
byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA
byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA
byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA byte[] = $55, $55, $AA, $AA, $55, $55, $AA, $AA
byte[] dither75 = $55, $55, $FF, $FF, $55, $55, $FF, $FF
byte[] = $55, $55, $FF, $FF, $55, $55, $FF, $FF
byte[] = $55, $55, $FF, $FF, $55, $55, $FF, $FF
byte[] = $55, $55, $FF, $FF, $55, $55, $FF, $FF
word[] dither = @dither25, @dither50, @dither75
// //
// Sliding sprite Y coordinate // Sliding sprite Y coordinate
// //
@@ -237,7 +245,7 @@ end
// // // //
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
def dcgrTest#0 def dcgrTest#0
word i, j, k, i7, im7, k7, km7, s7w, inci, incj, inck word i, j, k, oi, oj, i7, im7, k7, km7, s7w, inci, incj, inck
word backblk, backspan word backblk, backspan
word restrblk, restrspan, restr7w, restrw word restrblk, restrspan, restr7w, restrw
byte mode byte mode
@@ -331,26 +339,39 @@ def dcgrTest#0
dcgrSurfScr(OP_SRC) dcgrSurfScr(OP_SRC)
dcgrPixMap(i, j, SPRW, SPRH, @sprite) dcgrPixMap(i, j, SPRW, SPRH, @sprite)
break break
is 9
dcgrSurfScr(OP_XOR)
dcgrPixMap(oi, oj, SPRW, SPRH, @sprite)
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
break
wend wend
if k > 136 or k < -16; inck = -inck; fin if k > 136 or k < -16; inck = -inck; fin
k = k + inck k = k + inck
oi = i; oj = j
if i > 102 or i < 22; inci = -inci; fin if i > 102 or i < 22; inci = -inci; fin
i = i + inci i = i + inci
if j > 145 or j < 32; incj = -incj; fin if j > 145 or j < 32; incj = -incj; fin
j = j + incj j = j + incj
loop loop
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan) //
dcgrColor(CLR_WHITE) // Re-use the back buffer for a stipple pattern to mask the screen
dcgrClearBl7(0, 0, SCR_WIDTH7, SPRH) //
dcgrColor(CLR_BLACK) for k = 0 to 2
for i = 0 to 139 step 16 dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
dcgrBitMap(i, 0, 16, 16, @dither50) dcgrColor(CLR_WHITE)
dcgrClearBl7(0, 0, SCR_WIDTH7, SPRH)
dcgrColor(CLR_BLACK)
for i = 0 to 139 step 16
dcgrBitMap(i, 0, 16, 16, dither[k])
next
dcgrSurfScr(OP_AND)
for j = 0 to 95 step 16
dcgrMemBl7(0, j, SCR_WIDTH7, 16, backblk, backspan)
dcgrMemBl7(0, 175 - j, SCR_WIDTH7, 16, backblk, backspan)
next
next next
dcgrSurfScr(OP_AND) dcgrSurfScr(OP_SRC)
for j = 0 to 191 step 16 dcgrClearBl7(0, 0, SCR_WIDTH7, SCR_HEIGHT)
dcgrMemBl7(0, j, SCR_WIDTH7, 16, backblk, backspan)
next
getc
end end
dcgrMode(0) dcgrMode(0)
dcgrCompSprite dcgrCompSprite