1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-02-08 12:31:09 +00:00

Working TilesScr

This commit is contained in:
David Schmenk 2024-10-02 16:45:09 -07:00
parent 5464f1a52c
commit 13a5c0bdc3
3 changed files with 116 additions and 42 deletions

View File

@ -35,6 +35,8 @@ import dcgrlib
predef dcgrScrBl7(x7, y, w7, h)#0
predef dcgrMemBl7(x7, y, w7, h, memptr, memspan)#0
predef dcgrClearBl7(x7, y, w7, h)#0
predef dcgrTiles(x7, y8, strptr, strlen, tileset)#0
predef dcgrMemBl7Tile(x7, y, tileptr, memptr, memspan)#0
predef dcgrVLB#0
predef dcgrOp(op)#0
predef dcgrSurfScr(op)#0

View File

@ -239,6 +239,9 @@ end
export asm dcgrClearBl7(x7, y, w7, h)#0
JMP $1000
end
export asm dcgrTiles(x7, y8, strptr, strlen, tileset)#0
JMP $1000
end
//
// Internal routine to clip x7 and width7 to destination width in A REG
//
@ -1685,7 +1688,7 @@ end
//
// Tile -> Screen Transfer
//
export asm dcgrTileScr(x, y, strptr, strlen, tileset)#0
asm dcgrTilesScr(x7, y8, strptr, strlen, tileset)#0
INX
INX
INX
@ -1699,9 +1702,10 @@ export asm dcgrTileScr(x, y, strptr, strlen, tileset)#0
STA TMPL
LDA ESTKH-3,X ; STRPTRH
STA TMPH
LDY ESTKL-2,X ; Y COORD
LDA ESTKL-1,X ; X COORD
CLC
LDY ESTKL-2,X ; Y8 COORD
LDA ESTKL-1,X ; X7 COORD*2
ASL
;CLC
end
asm _dcgrTileScrA
ADC $1000,Y ; SCANBTTML
@ -1738,22 +1742,18 @@ asm _dcgrTileScrB
ASL ; TWO SCREEN BYTES PER TILE
TAX ; DRAW RIGHT TO LEFT
DEX
LDY #$00
LPTS STY SRCH
TXA
LPTS TXA
LSR
TAY
LDA (TMP),Y ; TILE INDEX * 32
ASL
ROL SRCH
ASL
ROL SRCH
ASL
ROL SRCH
ASL
ROL SRCH
ASL
ROL SRCH
LDA (TMP),Y ; TILE INDEX * 32 = INDEX * 256 / 8
LSR
STA SRCH
LDA #$00
ROR
LSR SRCH
ROR
LSR SRCH
ROR
; CLC ; CARRY IS CLEAR FROM ABOVE
ADC DSTL ; ADD TO TILESETPTR
STA SRCL
@ -1787,12 +1787,12 @@ asm _dcgrTileScrC
DEY
LDA (SRC),Y ; SCAN 0
STA $2001,X
DEY
BMI NXTTS ; END OF TILE
DEX
TXA
LSR
BCC - ; FILL ODD THEN EVEN BYTES
TYA
BEQ NXTTS ; END OF TILE
BCC - ; FILL HI THEN LO BYTES
STA $C055 ; PAGE1X
INX
INX
@ -1821,6 +1821,65 @@ export asm dcgrVLB#0
RTS
end
//
// Slow implementation of Tiles -> Mem
//
def dcgrTileMem(tileptr, memptr, memspan)#0
byte h, v
word rowptr
for h = 0 to 3
rowptr = memptr + h
for v = 0 to 7
^rowptr = tileptr->[v]
rowptr = rowptr + memspan
next
tileptr = tileptr + 8
next
end
def dcgrTilesMem(x7, y8, strptr, strlen, tileset, memptr, memspan)#0
if y8; memptr = memptr + y8 * 8 * memspan; fin
memptr = memptr + x7 * 2
while strlen
dcgrTileMem(tileset + ^strptr * 32, memptr, memspan)
strptr++
strlen--
loop
end
//
// Convert Block7 to Tile format
//
export def dcgrMemBl7Tile(x7, y, tileptr, memptr, memspan)#0
byte h, v
word rowptr
if y; memptr = memptr + y * memspan; fin
//
// AUX half of Bl7 scanline
//
memptr = memptr + x7 * 2
for h = 0 to 1
rowptr = memptr + h
for v = 0 to 7
^(tileptr + v) = ^rowptr
rowptr = rowptr + memspan
next
tileptr = tileptr + 8
next
//
// MEM half of Bl7 scan
//
memptr = memptr + memspan / 2
for h = 0 to 1
rowptr = memptr + h
for v = 0 to 7
^(tileptr + v) = ^rowptr
rowptr = rowptr + memspan
next
tileptr = tileptr + 8
next
end
//
// Hack to extend parameters for memory functions
//
def extPlotMem#0
@ -1844,27 +1903,12 @@ end
def extMemBl7Mem#0
(@dcgrMemBl7Mem)(surfWidth7, surfHeight, surfPtr)#0
end
def extTilesMem#0
(@dcgrTilesMem)(surfPtr, surfSpan)#0
end
def extClearBl7Mem#0
(@dcgrClearBl7Mem)(surfPtr, surfSpan)#0
end
//
// Convert Block7 to Tile format
//
export def dcgrMemBl7Tile(x7, y, tileptr, memptr, memspan)#0
byte h, v
word rowptr
if y; memptr = memptr + y * memspan; fin
memptr = memptr + x7
for h = 0 to 3
rowptr = memptr + h
for v = 0 to 7
tileptr->[v] = ^rowptr
rowptr = rowptr + memspan
next
tileptr = tileptr + 8
next
end
def dcgrOpScr(op)#0
byte opcode
@ -1970,6 +2014,7 @@ export def dcgrSurfScr(op)#0
dcgrPixMap:1 = @dcgrPixMapScr
dcgrMemBl7:1 = @dcgrMemBl7Scr
dcgrClearBl7:1 = @dcgrClearBl7Scr
dcgrTiles:1 = @dcgrTilesScr
fin
if op <> opScr
opScr = op
@ -1992,6 +2037,7 @@ export def dcgrSurfMem(op, memh, memptr, memspan)#0
dcgrScrBl7:1 = @extScrBl7Mem
dcgrMemBl7:1 = @extMemBl7Mem
dcgrClearBl7:1 = @extClearBl7Mem
dcgrTiles:1 = @extTilesMem
fin
if op <> opMem
opMem = op
@ -2147,7 +2193,6 @@ _dcgrTileScrA:16 = @_dcgrTileScrC.27
_dcgrTileScrA:19 = @_dcgrTileScrC.33
_dcgrTileScrA:22 = @_dcgrTileScrC.39
_dcgrTileScrA:25 = @_dcgrTileScrC.45
_dcgrTileScrA:28 = @_dcgrTileScrC.51
_dcgrTileScrB:1 = @tilebttmh
_dcgrTileScrB:4 = @_dcgrTileScrC.4
_dcgrTileScrB:10 = @_dcgrTileScrC.10

View File

@ -238,7 +238,7 @@ def dcgrCompSprite#0
dcgrMemBl7(0, i * SPRH, sprite7w, SPRH, sprite7[i], sprite7span)
dcgrMemBl7(sprite7w, i * SPRH, sprite7w, SPRH, sprite7msk[i], sprite7span)
next
getc
//getc
end
////////////////////////////////////////////////////////////////
// //
@ -250,7 +250,35 @@ def dcgrTest#0
word backblk, backspan
word restrblk, restrspan, restr7w, restrw
byte mode
byte[6] tilestr
backblk, backspan = dcgrAllocBl7Mem(SCR_WIDTH, SPRH)
//
// Use back buffer for tile set buffer
//
dcgrMemBl7Tile(0, 0, backblk, sprite7[6], sprite7span)
dcgrMemBl7Tile(1, 0, backblk + 32, sprite7[6], sprite7span)
dcgrMemBl7Tile(2, 0, backblk + 64, sprite7[6], sprite7span)
dcgrMemBl7Tile(3, 0, backblk + 96, sprite7[6], sprite7span)
dcgrMemBl7Tile(0, 8, backblk + 128, sprite7[6], sprite7span)
dcgrMemBl7Tile(1, 8, backblk + 160, sprite7[6], sprite7span)
dcgrMemBl7Tile(2, 8, backblk + 192, sprite7[6], sprite7span)
dcgrMemBl7Tile(3, 8, backblk + 224, sprite7[6], sprite7span)
for i = 0 to 7
tilestr[i] = i
next
dcgrSurfScr(OP_SRC)
dcgrTiles(0, 14, @tilestr, 4, backblk)
//for i = 0 to 3
//dcgrTiles(i, 14, @tilestr + i, 1, backblk)
//dcgrTiles(i, 15, @tilestr + 4 + i, 1, backblk)
//next
dcgrTiles(0, 14, @tilestr, 4, backblk)
dcgrTiles(0, 15, @tilestr + 4, 4, backblk)
getc
//
// Lines
//
dcgrSurfScr(OP_SRC)
setlineplot(@dcgrPlot)
setlinespans(@dcgrHLin, @dcgrVLin)
@ -273,7 +301,6 @@ def dcgrTest#0
i = 64; j = 64; k = 86
k7 = k/7
inci = 1; incj = 1; inck = 2
backblk, backspan = dcgrAllocBl7Mem(SCR_WIDTH, SPRH)
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
dcgrScrBl7(0, SLIDEY, backspan >> 2, SPRH)
dcgrSurfScr(OP_SRC)