mirror of
https://github.com/dschmenk/PLASMA.git
synced 2026-04-20 01:16:36 +00:00
Fix bitmaps with factor of 8 widths
This commit is contained in:
@@ -556,18 +556,19 @@ asm dcgrBitMapScr(x, y, bitw, bith, bitptr)#0
|
||||
STA SRCL
|
||||
LDA ESTKH-5,X
|
||||
STA SRCH
|
||||
LDA ESTKL-1,X ; X1 COORD
|
||||
LDA ESTKL-1,X ; X COORD
|
||||
ADC ESTKL-3,X ; WIDTH
|
||||
STA TMPH ; X2 COORD
|
||||
STA TMPH ; RIGHT EDGE
|
||||
YBITS LDY ESTKL-2,X ; Y COORD
|
||||
INC ESTKL-2,X ; Y COORD++
|
||||
CPY #192 ; OFF SCREEN?
|
||||
BCC +
|
||||
LDA ESTKL-3,X ; WIDTH
|
||||
ADC #6 ; ROUND UP (WITH CARRY)
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
ADC SRCL
|
||||
ADC SRCL ; NEXT BITMAP ROW
|
||||
STA SRCL
|
||||
LDA #$00
|
||||
ADC SRCH
|
||||
@@ -581,17 +582,15 @@ asm _dcgrBitmapScrA
|
||||
STA DSTH
|
||||
LDA ESTKL-1,X ; X1 COORD
|
||||
STA ESTKH-1,X ; CURRENT X COORD
|
||||
BITS8 LDA #8
|
||||
STA TMPL
|
||||
BITS8 LDY #$08
|
||||
STY TMPL ; BIT COUNT
|
||||
LDY #$00
|
||||
LDA (SRC),Y ; SRC BITMAP
|
||||
LDA (SRC),Y ; SRC BITS
|
||||
INC SRCL
|
||||
BNE BITSCR
|
||||
BNE +
|
||||
INC SRCH
|
||||
BITSCR LDY ESTKH-1,X ; CURRENT X COORD
|
||||
CPY TMPH ; X == X2?
|
||||
BEQ NXTBITS
|
||||
LSR
|
||||
+ LDY ESTKH-1,X ; CURRENT X COORD
|
||||
BITSCR LSR
|
||||
BCC +
|
||||
CPY #140 ; OFF SCREEN?
|
||||
BCS +
|
||||
@@ -601,7 +600,10 @@ asm _dcgrBitmapScrB
|
||||
JSR $1000 ; PLOT PIXEL
|
||||
PLA
|
||||
+ INC ESTKH-1,X ; X++
|
||||
DEC TMPL
|
||||
LDY ESTKH-1,X ; CURRENT X COORD
|
||||
CPY TMPH ; AT RIGHT EDGE?
|
||||
BEQ NXTBITS
|
||||
DEC TMPL ; BIT COUNT
|
||||
BNE BITSCR
|
||||
BEQ BITS8
|
||||
NXTBITS DEC ESTKL-4,X ; HEIGHT
|
||||
@@ -628,8 +630,9 @@ YPIXS LDY ESTKL-2,X ; Y COORD
|
||||
CPY #192 ; OFF SCREEN?
|
||||
BCC +
|
||||
LDA ESTKL-3,X ; WIDTH
|
||||
ADC #0 ; ROUND UP (WITH CARRY)
|
||||
LSR
|
||||
ADC SRCL
|
||||
ADC SRCL ; NEXT PIXMAP ROW
|
||||
STA SRCL
|
||||
LDA #$00
|
||||
ADC SRCH
|
||||
@@ -866,7 +869,7 @@ asm dcgrHLinMem(x1, x2, y, memptr, memspan)#0
|
||||
LDA ESTKL-5,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-5,X
|
||||
LDA #$00 ; ESTKH-5,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEY
|
||||
@@ -902,7 +905,7 @@ asm dcgrVLinMem(y1, y2, x, memptr, memspan)#0
|
||||
- LDA ESTKL-5,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-5,X
|
||||
LDA #$00 ; ESTKH-5,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEY
|
||||
@@ -916,7 +919,7 @@ asm _dcgrVLinMemB
|
||||
LDA ESTKL-5,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-5,X
|
||||
LDA #$00 ; ESTKH-5,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
LDA ESTKL-1,X ; Y1 COORD
|
||||
@@ -941,7 +944,7 @@ asm dcgrBitMapMem(x, y, bitw, bith, bitptr, memw, memh, memptr, memspan)#0
|
||||
- LDA ESTKL-9,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-9,X
|
||||
LDA #$00 ; ESTKH-9,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEY
|
||||
@@ -958,50 +961,48 @@ YBITM LDA ESTKL-2,X ; Y COORD
|
||||
CMP ESTKL-7,X ; OUT OF DST BOUNDS?
|
||||
BCC +
|
||||
LDA ESTKL-3,X ; WIDTH
|
||||
ADC #6 ; ROUND UP (WITH CARRY)
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
ADC SRCL
|
||||
ADC SRCL ; NEXT BITMAP ROW
|
||||
STA SRCL
|
||||
LDA #$00
|
||||
ADC SRCH
|
||||
STA SRCH
|
||||
BNE NXTBITM ; BRA
|
||||
+ TAY
|
||||
LDA ESTKL-1,X ; X COORD
|
||||
+ LDA ESTKL-1,X ; X COORD
|
||||
STA ESTKH-1,X ; CURRENT X COORD
|
||||
BITM8 LDA #8
|
||||
STA TMPL
|
||||
STA ESTKH-2,X ; BIT COUNT
|
||||
LDY #$00
|
||||
LDA (SRC),Y ; SRC BITMAP
|
||||
STA TMPL
|
||||
INC SRCL
|
||||
BNE +
|
||||
INC SRCH
|
||||
+ PHA
|
||||
BITMEM LDA ESTKH-1,X ; CURRENT X COORD
|
||||
CMP ESTKH-3,X ; AT RIGHT EDGE?
|
||||
BEQ ++ ; NXTBITM - 1
|
||||
+ LDA ESTKH-1,X ; CURRENT X COORD
|
||||
BITMEM LSR TMPL
|
||||
BCC +
|
||||
CMP ESTKL-6,X ; OUT OF DST BOUNDS?
|
||||
BCS +
|
||||
TAY
|
||||
PLA
|
||||
LSR
|
||||
PHA
|
||||
BCC +
|
||||
LDA ESTKL-9,X ; SPAN
|
||||
end
|
||||
asm _dcgrBitmapMemA
|
||||
JSR $1000 ; PLOT PIXEL
|
||||
+ INC ESTKH-1,X ; X++
|
||||
DEC TMPL
|
||||
LDA ESTKH-1,X ; CURRENT X COORD
|
||||
CMP ESTKH-3,X ; AT RIGHT EDGE?
|
||||
BEQ NXTBITM
|
||||
DEC ESTKH-2,X ; BIT COUNT--
|
||||
BNE BITMEM
|
||||
BEQ BITM8
|
||||
++ PLA
|
||||
NXTBITM CLC
|
||||
LDA ESTKL-9,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-9,X
|
||||
LDA #$00 ; ESTKH-9,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEC ESTKL-4,X ; HEIGHT
|
||||
@@ -1024,7 +1025,7 @@ asm dcgrPixMapMem(x, y, pixw, pixh, pixptr, memw, memh, memptr, memspan)#0
|
||||
LDA ESTKL-9,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-9,X
|
||||
LDA #$00 ; ESTKH-9,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEY
|
||||
@@ -1042,8 +1043,9 @@ YPIXM LDA ESTKL-2,X ; Y COORD
|
||||
CMP ESTKL-7,X ; OUT OF DST BOUNDS?
|
||||
BCC +
|
||||
LDA ESTKL-3,X ; WIDTH
|
||||
ADC #0 ; ROUND UP (WITH CARRY)
|
||||
LSR
|
||||
ADC SRCL
|
||||
ADC SRCL ; NEXT PIXMAP ROW
|
||||
STA SRCL
|
||||
LDA #$00
|
||||
ADC SRCH
|
||||
@@ -1103,7 +1105,7 @@ NXTPIXM CLC
|
||||
LDA ESTKL-9,X ; SPAN
|
||||
ADC DSTL
|
||||
STA DSTL
|
||||
LDA ESTKH-9,X
|
||||
LDA #$00 ; ESTKH-9,X
|
||||
ADC DSTH
|
||||
STA DSTH
|
||||
DEC ESTKL-4,X ; HEIGHT
|
||||
@@ -1810,7 +1812,7 @@ export def dcgrSurfScr(op)#0
|
||||
surfWidth7 = 20
|
||||
surfHeight = 192
|
||||
surfPtr = $2000
|
||||
surfSpan = 40
|
||||
surfSpan = 10
|
||||
if dcgrSurface == DST_MEMORY
|
||||
dcgrSurface = DST_SCREEN
|
||||
dcgrPlot:1 = @dcgrPlotScr
|
||||
|
||||
+55
-36
@@ -138,8 +138,8 @@ byte = $00,$2C,$1A,$00,$00,$00,$00,$00,$00,$2A,$14,$2A,$14,$2A,$00,$00
|
||||
//
|
||||
// Test sprite
|
||||
//
|
||||
const SPR_WIDTH = 16
|
||||
const SPR_HEIGHT = 16
|
||||
const SPRW = 16
|
||||
const SPRH = 16
|
||||
byte[] sprite = $55,$55,$55,$05,$50,$55,$55,$55
|
||||
byte[] = $55,$55,$00,$00,$00,$00,$55,$55
|
||||
byte[] = $55,$00,$00,$AA,$AA,$00,$00,$55
|
||||
@@ -159,10 +159,18 @@ byte[] = $55,$55,$55,$05,$50,$55,$55,$55
|
||||
word sprite7msk[7]
|
||||
word sprite7[7]
|
||||
word sprite7span, sprite7w
|
||||
//
|
||||
// Dither matrices
|
||||
//
|
||||
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
|
||||
|
||||
//
|
||||
// Sliding sprite Y coordinate
|
||||
//
|
||||
const SLIDE_Y = 170
|
||||
const SLIDEY = 170
|
||||
//
|
||||
// Utility functions
|
||||
//
|
||||
@@ -205,22 +213,22 @@ def dcgrCompSprite#0
|
||||
byte i
|
||||
|
||||
for i = 0 to 6
|
||||
sprite7[i], sprite7span = dcgrAllocBl7Mem(SPR_WIDTH, SPR_HEIGHT)
|
||||
sprite7msk[i], sprite7span = dcgrAllocBl7Mem(SPR_WIDTH, SPR_HEIGHT)
|
||||
sprite7[i], sprite7span = dcgrAllocBl7Mem(SPRW, SPRH)
|
||||
sprite7msk[i], sprite7span = dcgrAllocBl7Mem(SPRW, SPRH)
|
||||
sprite7w = sprite7span >> 2
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, sprite7[i], sprite7span)
|
||||
dcgrSurfMem(OP_SRC, SPRH, sprite7[i], sprite7span)
|
||||
dcgrColor(CLR_BLACK)
|
||||
dcgrClearBl7(0, 0, sprite7w, SPR_HEIGHT)
|
||||
dcgrPixMap(i + 2, 0, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, sprite7msk[i], sprite7span)
|
||||
dcgrClearBl7(0, 0, sprite7w, SPRH)
|
||||
dcgrPixMap(i + 2, 0, SPRW, SPRH, @sprite)
|
||||
dcgrSurfMem(OP_SRC, SPRH, sprite7msk[i], sprite7span)
|
||||
dcgrColor(CLR_WHITE)
|
||||
dcgrClearBl7(0, 0, sprite7w, SPR_HEIGHT)
|
||||
dcgrPixMap(i + 2, 0, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrClearBl7(0, 0, sprite7w, SPRH)
|
||||
dcgrPixMap(i + 2, 0, SPRW, SPRH, @sprite)
|
||||
dcgrOp(OP_XOR)
|
||||
dcgrPixMap(i + 2, 0, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrPixMap(i + 2, 0, SPRW, SPRH, @sprite)
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(0, i * SPR_HEIGHT, sprite7w, SPR_HEIGHT, sprite7[i], sprite7span)
|
||||
dcgrMemBl7(sprite7w, i * SPR_HEIGHT, sprite7w, SPR_HEIGHT, sprite7msk[i], sprite7span)
|
||||
dcgrMemBl7(0, i * SPRH, sprite7w, SPRH, sprite7[i], sprite7span)
|
||||
dcgrMemBl7(sprite7w, i * SPRH, sprite7w, SPRH, sprite7msk[i], sprite7span)
|
||||
next
|
||||
end
|
||||
////////////////////////////////////////////////////////////////
|
||||
@@ -256,10 +264,10 @@ def dcgrTest#0
|
||||
i = 64; j = 64; k = 86
|
||||
k7 = k/7
|
||||
inci = 1; incj = 1; inck = 2
|
||||
backblk, backspan = dcgrAllocBl7Mem(SCR_WIDTH, SPR_HEIGHT)
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, backblk, backspan)
|
||||
dcgrScrBl7(0, SLIDE_Y, backspan >> 2, SPR_HEIGHT)
|
||||
restrblk, restrspan = dcgrAllocBl7Mem(SPR_WIDTH, SPR_HEIGHT)
|
||||
backblk, backspan = dcgrAllocBl7Mem(SCR_WIDTH, SPRH)
|
||||
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
|
||||
dcgrScrBl7(0, SLIDEY, backspan >> 2, SPRH)
|
||||
restrblk, restrspan = dcgrAllocBl7Mem(SPRW, SPRH)
|
||||
restr7w = restrspan >> 2
|
||||
restrw = restr7w * 7
|
||||
mode = 8
|
||||
@@ -277,51 +285,51 @@ def dcgrTest#0
|
||||
when mode
|
||||
is 1
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(i7, j, s7w, SPR_HEIGHT, sprite7[im7], sprite7span)
|
||||
dcgrMemBl7(i7, j, s7w, SPRH, sprite7[im7], sprite7span)
|
||||
is 2
|
||||
if k < 0 and km7 // Handle off left edge special case
|
||||
k7--
|
||||
km7 = 7 + km7
|
||||
fin
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPR_HEIGHT, backblk + (k7 << 1), backspan)
|
||||
dcgrSurfMem(OP_SRC, SPRH, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPRH, backblk + (k7 << 1), backspan)
|
||||
dcgrOp(OP_AND)
|
||||
dcgrMemBl7(0, 0, sprite7w, SPR_HEIGHT, sprite7msk[km7], sprite7span)
|
||||
dcgrMemBl7(0, 0, sprite7w, SPRH, sprite7msk[km7], sprite7span)
|
||||
dcgrOp(OP_XOR)
|
||||
dcgrMemBl7(0, 0, sprite7w, SPR_HEIGHT, sprite7[km7], sprite7span)
|
||||
dcgrMemBl7(0, 0, sprite7w, SPRH, sprite7[km7], sprite7span)
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(k7, SLIDE_Y, restr7w, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(k7, SLIDEY, restr7w, SPRH, restrblk, restrspan)
|
||||
break
|
||||
is 3
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrPixMap(i, j, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
|
||||
is 4
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPR_HEIGHT, backblk + (k7 << 1), backspan)
|
||||
dcgrPixMap(km7 + 2, 0, SPR_HEIGHT, SPR_HEIGHT, @sprite)
|
||||
dcgrSurfMem(OP_SRC, SPRH, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPRH, backblk + (k7 << 1), backspan)
|
||||
dcgrPixMap(km7 + 2, 0, SPRH, SPRH, @sprite)
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(k7, SLIDE_Y, restr7w, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(k7, SLIDEY, restr7w, SPRH, restrblk, restrspan)
|
||||
break
|
||||
is 5
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrPixMap(i, j, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
|
||||
is 6
|
||||
dcgrSurfMem(OP_SRC, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPR_HEIGHT, backblk + (k7 << 1), backspan)
|
||||
dcgrSurfMem(OP_SRC, SPRH, restrblk, restrspan)
|
||||
dcgrMemBl7(0, 0, restr7w, SPRH, backblk + (k7 << 1), backspan)
|
||||
dcgrColor(CLR_BLACK)
|
||||
dcgrRect(km7 + 2, 3, 14 + 2, 10)
|
||||
dcgrColor(CLR_WHITE)
|
||||
dcgrStr(km7 + 3, 4, "DC")
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(k7, SLIDE_Y, restr7w, SPR_HEIGHT, restrblk, restrspan)
|
||||
dcgrMemBl7(k7, SLIDEY, restr7w, SPRH, restrblk, restrspan)
|
||||
break
|
||||
is 7
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrMemBl7(i7, j, s7w, SPR_HEIGHT, sprite7[im7], sprite7span)
|
||||
dcgrMemBl7(i7, j, s7w, SPRH, sprite7[im7], sprite7span)
|
||||
break
|
||||
is 8
|
||||
dcgrSurfScr(OP_SRC)
|
||||
dcgrPixMap(i, j, SPR_WIDTH, SPR_HEIGHT, @sprite)
|
||||
dcgrPixMap(i, j, SPRW, SPRH, @sprite)
|
||||
break
|
||||
wend
|
||||
if k > 136 or k < -16; inck = -inck; fin
|
||||
@@ -331,8 +339,19 @@ def dcgrTest#0
|
||||
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)
|
||||
next
|
||||
dcgrSurfScr(OP_AND)
|
||||
for j = 0 to 191 step 16
|
||||
dcgrMemBl7(0, j, SCR_WIDTH7, 16, backblk, backspan)
|
||||
next
|
||||
getc
|
||||
end
|
||||
|
||||
dcgrMode(0)
|
||||
dcgrCompSprite
|
||||
dcgrTest
|
||||
|
||||
Reference in New Issue
Block a user