1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-09 16:40:38 +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

View File

@ -624,7 +624,7 @@ asm dcgrPixMapScr(x, y, pixw, pixh, pixptr)#0
LDA ESTKL-1,X ; X COORD
CLC
ADC ESTKL-3,X ; WIDTH
STA ESTKL-3,X ; -> RIGHT EDGE
STA ESTKH-3,X ; -> RIGHT EDGE
YPIXS LDY ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++
CPY #192 ; OFF SCREEN?
@ -646,10 +646,10 @@ asm _dcgrPixmapScrA
STA DSTH
LDA ESTKL-1,X ; X COORD
STA TMPL
LDY #$00
PIXSCRL CMP #140 ; OFF SCREEN?
BCS PIXSCRH
LDY #$00 ; LO NIBBLE SRC PIXEL
LDA (SRC),Y
LDA (SRC),Y ; LO NIBBLE SRC PIXEL
AND #$0F
CMP #$05 ; TRANSPARENT?
BEQ PIXSCRH
@ -661,14 +661,13 @@ asm _dcgrPixmapScrB
end
asm _dcgrPixmapScrC
JSR $1000 ; PLOT PIXEL
LDY #$00
PIXSCRH INC TMPL
LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE?
BEQ YPIXS ; NEXT ROW
CMP ESTKH-3,X ; AT RIGHT EDGE?
CMP #140 ; OFF SCREEN?
BCS +
LDY #$00 ; HI NIBBLE SRC PIXEL
LDA (SRC),Y
LDA (SRC),Y ; HI NIBBLE SRC PIXEL
LSR
LSR
LSR
@ -683,12 +682,13 @@ asm _dcgrPixmapScrD
end
asm _dcgrPixmapScrE
JSR $1000 ; PLOT PIXEL
LDY #$00
+ INC SRCL
BNE +
INC SRCH
+ INC TMPL
LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE?
CMP ESTKH-3,X ; AT RIGHT EDGE?
BNE PIXSCRL
NXTPIXS DEC ESTKL-4,X ; HEIGHT
BNE YPIXS ; NEXT ROW
@ -714,7 +714,7 @@ asm dcgrPlotMem(x, y, memptr, memspan)#0
LDA ESTKL-4,X ; SPAN
ADC DSTL
STA DSTL
LDA ESTKH-4,X
LDA #$00 ; ESTKH-4,X
ADC DSTH
STA DSTH
DEY
@ -1037,7 +1037,7 @@ asm dcgrPixMapMem(x, y, pixw, pixh, pixptr, memw, memh, memptr, memspan)#0
LDA ESTKL-1,X ; X COORD
CLC
ADC ESTKL-3,X ; WIDTH
STA ESTKL-3,X ; -> RIGHT EDGE
STA ESTKH-3,X ; -> RIGHT EDGE
YPIXM LDA ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++
CMP ESTKL-7,X ; OUT OF DST BOUNDS?
@ -1055,10 +1055,10 @@ end
asm _dcgrPixmapMemA
+ LDA ESTKL-1,X ; X COORD
STA TMPL
LDY #$00
PIXMEML CMP ESTKL-6,X ; OUT OF DST BOUNDS?
BCS PIXMEMH
LDY #$00 ; LO NIBBLE SRC PIXEL
LDA (SRC),Y
LDA (SRC),Y ; LO NIBBLE SRC PIXEL
AND #$0F
CMP #$05 ; TRANSPARENT?
BEQ PIXMEMH
@ -1071,14 +1071,14 @@ asm _dcgrPixmapMemB
end
asm _dcgrPixmapMemC
JSR $1000 ; PLOT PIXEL
LDY #$00
PIXMEMH INC TMPL
LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE?
CMP ESTKH-3,X ; AT RIGHT EDGE?
BEQ NXTPIXM ; NEXT ROW
CMP ESTKL-6,X ; OUT OF DST BOUNDS?
BCS +
LDY #$00 ; HI NIBBLE SRC PIXEL
LDA (SRC),Y
LDA (SRC),Y ; HI NIBBLE SRC PIXEL
LSR
LSR
LSR
@ -1094,12 +1094,13 @@ asm _dcgrPixmapMemD
end
asm _dcgrPixmapMemE
JSR $1000 ; PLOT PIXEL
LDY #$00
+ INC SRCL ; PIXPTR
BNE +
INC SRCH
+ INC TMPL
LDA TMPL
CMP ESTKL-3,X ; AT RIGHT EDGE?
CMP ESTKH-3,X ; AT RIGHT EDGE?
BNE PIXMEML
NXTPIXM CLC
LDA ESTKL-9,X ; SPAN
@ -1620,7 +1621,7 @@ asm dcgrClearBl7Mem(x7, y, w7, h, memptr, memspan)#0
LDA ESTKL-6,X ; SPAN
ADC DSTL
STA DSTL
LDA ESTKH-6,X
LDA #$00 ; ESTKH-6,X
ADC DSTH
STA DSTH
DEY
@ -1629,14 +1630,14 @@ asm dcgrClearBl7Mem(x7, y, w7, h, memptr, memspan)#0
BNE +
DEC DSTH
+ DEC DSTL
LDA ESTKH-6,X ; SRC POINTS TO MEM HALF OF SCANLINE
LSR
PHA
;LDA ESTKH-6,X ; SRC POINTS TO MEM HALF OF SCANLINE
;LSR
;PHA
LDA ESTKL-6,X ; SPAN
ROR ; SPAN / 2
LSR ; ROR SPAN / 2
ADC DSTL
STA SRCL
PLA
LDA #$00 ; PLA
ADC DSTH
STA SRCH
BNE + ; BRA

View File

@ -162,11 +162,19 @@ word sprite7span, sprite7w
//
// 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[] = $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
//
@ -237,7 +245,7 @@ end
// //
////////////////////////////////////////////////////////////////
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 restrblk, restrspan, restr7w, restrw
byte mode
@ -331,26 +339,39 @@ def dcgrTest#0
dcgrSurfScr(OP_SRC)
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
break
is 9
dcgrSurfScr(OP_XOR)
dcgrPixMap(oi, oj, SPRW, SPRH, @sprite)
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
break
wend
if k > 136 or k < -16; inck = -inck; fin
k = k + inck
oi = i; oj = j
if i > 102 or i < 22; inci = -inci; fin
i = i + inci
if j > 145 or j < 32; incj = -incj; fin
j = j + incj
loop
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
dcgrColor(CLR_WHITE)
dcgrClearBl7(0, 0, SCR_WIDTH7, SPRH)
dcgrColor(CLR_BLACK)
for i = 0 to 139 step 16
dcgrBitMap(i, 0, 16, 16, @dither50)
//
// Re-use the back buffer for a stipple pattern to mask the screen
//
for k = 0 to 2
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
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
dcgrSurfScr(OP_AND)
for j = 0 to 191 step 16
dcgrMemBl7(0, j, SCR_WIDTH7, 16, backblk, backspan)
next
getc
dcgrSurfScr(OP_SRC)
dcgrClearBl7(0, 0, SCR_WIDTH7, SCR_HEIGHT)
end
dcgrMode(0)
dcgrCompSprite