mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-13 00:31:21 +00:00
Working TilesScr
This commit is contained in:
parent
5464f1a52c
commit
13a5c0bdc3
@ -35,6 +35,8 @@ import dcgrlib
|
|||||||
predef dcgrScrBl7(x7, y, w7, h)#0
|
predef dcgrScrBl7(x7, y, w7, h)#0
|
||||||
predef dcgrMemBl7(x7, y, w7, h, memptr, memspan)#0
|
predef dcgrMemBl7(x7, y, w7, h, memptr, memspan)#0
|
||||||
predef dcgrClearBl7(x7, y, w7, h)#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 dcgrVLB#0
|
||||||
predef dcgrOp(op)#0
|
predef dcgrOp(op)#0
|
||||||
predef dcgrSurfScr(op)#0
|
predef dcgrSurfScr(op)#0
|
||||||
|
@ -239,6 +239,9 @@ end
|
|||||||
export asm dcgrClearBl7(x7, y, w7, h)#0
|
export asm dcgrClearBl7(x7, y, w7, h)#0
|
||||||
JMP $1000
|
JMP $1000
|
||||||
end
|
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
|
// Internal routine to clip x7 and width7 to destination width in A REG
|
||||||
//
|
//
|
||||||
@ -1685,7 +1688,7 @@ end
|
|||||||
//
|
//
|
||||||
// Tile -> Screen Transfer
|
// Tile -> Screen Transfer
|
||||||
//
|
//
|
||||||
export asm dcgrTileScr(x, y, strptr, strlen, tileset)#0
|
asm dcgrTilesScr(x7, y8, strptr, strlen, tileset)#0
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
@ -1699,9 +1702,10 @@ export asm dcgrTileScr(x, y, strptr, strlen, tileset)#0
|
|||||||
STA TMPL
|
STA TMPL
|
||||||
LDA ESTKH-3,X ; STRPTRH
|
LDA ESTKH-3,X ; STRPTRH
|
||||||
STA TMPH
|
STA TMPH
|
||||||
LDY ESTKL-2,X ; Y COORD
|
LDY ESTKL-2,X ; Y8 COORD
|
||||||
LDA ESTKL-1,X ; X COORD
|
LDA ESTKL-1,X ; X7 COORD*2
|
||||||
CLC
|
ASL
|
||||||
|
;CLC
|
||||||
end
|
end
|
||||||
asm _dcgrTileScrA
|
asm _dcgrTileScrA
|
||||||
ADC $1000,Y ; SCANBTTML
|
ADC $1000,Y ; SCANBTTML
|
||||||
@ -1738,22 +1742,18 @@ asm _dcgrTileScrB
|
|||||||
ASL ; TWO SCREEN BYTES PER TILE
|
ASL ; TWO SCREEN BYTES PER TILE
|
||||||
TAX ; DRAW RIGHT TO LEFT
|
TAX ; DRAW RIGHT TO LEFT
|
||||||
DEX
|
DEX
|
||||||
LDY #$00
|
LPTS TXA
|
||||||
LPTS STY SRCH
|
|
||||||
TXA
|
|
||||||
LSR
|
LSR
|
||||||
TAY
|
TAY
|
||||||
LDA (TMP),Y ; TILE INDEX * 32
|
LDA (TMP),Y ; TILE INDEX * 32 = INDEX * 256 / 8
|
||||||
ASL
|
LSR
|
||||||
ROL SRCH
|
STA SRCH
|
||||||
ASL
|
LDA #$00
|
||||||
ROL SRCH
|
ROR
|
||||||
ASL
|
LSR SRCH
|
||||||
ROL SRCH
|
ROR
|
||||||
ASL
|
LSR SRCH
|
||||||
ROL SRCH
|
ROR
|
||||||
ASL
|
|
||||||
ROL SRCH
|
|
||||||
; CLC ; CARRY IS CLEAR FROM ABOVE
|
; CLC ; CARRY IS CLEAR FROM ABOVE
|
||||||
ADC DSTL ; ADD TO TILESETPTR
|
ADC DSTL ; ADD TO TILESETPTR
|
||||||
STA SRCL
|
STA SRCL
|
||||||
@ -1787,12 +1787,12 @@ asm _dcgrTileScrC
|
|||||||
DEY
|
DEY
|
||||||
LDA (SRC),Y ; SCAN 0
|
LDA (SRC),Y ; SCAN 0
|
||||||
STA $2001,X
|
STA $2001,X
|
||||||
|
DEY
|
||||||
|
BMI NXTTS ; END OF TILE
|
||||||
DEX
|
DEX
|
||||||
TXA
|
TXA
|
||||||
LSR
|
LSR
|
||||||
BCC - ; FILL ODD THEN EVEN BYTES
|
BCC - ; FILL HI THEN LO BYTES
|
||||||
TYA
|
|
||||||
BEQ NXTTS ; END OF TILE
|
|
||||||
STA $C055 ; PAGE1X
|
STA $C055 ; PAGE1X
|
||||||
INX
|
INX
|
||||||
INX
|
INX
|
||||||
@ -1821,6 +1821,65 @@ export asm dcgrVLB#0
|
|||||||
RTS
|
RTS
|
||||||
end
|
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
|
// Hack to extend parameters for memory functions
|
||||||
//
|
//
|
||||||
def extPlotMem#0
|
def extPlotMem#0
|
||||||
@ -1844,27 +1903,12 @@ end
|
|||||||
def extMemBl7Mem#0
|
def extMemBl7Mem#0
|
||||||
(@dcgrMemBl7Mem)(surfWidth7, surfHeight, surfPtr)#0
|
(@dcgrMemBl7Mem)(surfWidth7, surfHeight, surfPtr)#0
|
||||||
end
|
end
|
||||||
|
def extTilesMem#0
|
||||||
|
(@dcgrTilesMem)(surfPtr, surfSpan)#0
|
||||||
|
end
|
||||||
def extClearBl7Mem#0
|
def extClearBl7Mem#0
|
||||||
(@dcgrClearBl7Mem)(surfPtr, surfSpan)#0
|
(@dcgrClearBl7Mem)(surfPtr, surfSpan)#0
|
||||||
end
|
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
|
def dcgrOpScr(op)#0
|
||||||
byte opcode
|
byte opcode
|
||||||
|
|
||||||
@ -1970,6 +2014,7 @@ export def dcgrSurfScr(op)#0
|
|||||||
dcgrPixMap:1 = @dcgrPixMapScr
|
dcgrPixMap:1 = @dcgrPixMapScr
|
||||||
dcgrMemBl7:1 = @dcgrMemBl7Scr
|
dcgrMemBl7:1 = @dcgrMemBl7Scr
|
||||||
dcgrClearBl7:1 = @dcgrClearBl7Scr
|
dcgrClearBl7:1 = @dcgrClearBl7Scr
|
||||||
|
dcgrTiles:1 = @dcgrTilesScr
|
||||||
fin
|
fin
|
||||||
if op <> opScr
|
if op <> opScr
|
||||||
opScr = op
|
opScr = op
|
||||||
@ -1992,6 +2037,7 @@ export def dcgrSurfMem(op, memh, memptr, memspan)#0
|
|||||||
dcgrScrBl7:1 = @extScrBl7Mem
|
dcgrScrBl7:1 = @extScrBl7Mem
|
||||||
dcgrMemBl7:1 = @extMemBl7Mem
|
dcgrMemBl7:1 = @extMemBl7Mem
|
||||||
dcgrClearBl7:1 = @extClearBl7Mem
|
dcgrClearBl7:1 = @extClearBl7Mem
|
||||||
|
dcgrTiles:1 = @extTilesMem
|
||||||
fin
|
fin
|
||||||
if op <> opMem
|
if op <> opMem
|
||||||
opMem = op
|
opMem = op
|
||||||
@ -2147,7 +2193,6 @@ _dcgrTileScrA:16 = @_dcgrTileScrC.27
|
|||||||
_dcgrTileScrA:19 = @_dcgrTileScrC.33
|
_dcgrTileScrA:19 = @_dcgrTileScrC.33
|
||||||
_dcgrTileScrA:22 = @_dcgrTileScrC.39
|
_dcgrTileScrA:22 = @_dcgrTileScrC.39
|
||||||
_dcgrTileScrA:25 = @_dcgrTileScrC.45
|
_dcgrTileScrA:25 = @_dcgrTileScrC.45
|
||||||
_dcgrTileScrA:28 = @_dcgrTileScrC.51
|
|
||||||
_dcgrTileScrB:1 = @tilebttmh
|
_dcgrTileScrB:1 = @tilebttmh
|
||||||
_dcgrTileScrB:4 = @_dcgrTileScrC.4
|
_dcgrTileScrB:4 = @_dcgrTileScrC.4
|
||||||
_dcgrTileScrB:10 = @_dcgrTileScrC.10
|
_dcgrTileScrB:10 = @_dcgrTileScrC.10
|
||||||
|
@ -238,7 +238,7 @@ def dcgrCompSprite#0
|
|||||||
dcgrMemBl7(0, i * SPRH, sprite7w, SPRH, sprite7[i], sprite7span)
|
dcgrMemBl7(0, i * SPRH, sprite7w, SPRH, sprite7[i], sprite7span)
|
||||||
dcgrMemBl7(sprite7w, i * SPRH, sprite7w, SPRH, sprite7msk[i], sprite7span)
|
dcgrMemBl7(sprite7w, i * SPRH, sprite7w, SPRH, sprite7msk[i], sprite7span)
|
||||||
next
|
next
|
||||||
getc
|
//getc
|
||||||
end
|
end
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
// //
|
// //
|
||||||
@ -250,7 +250,35 @@ def dcgrTest#0
|
|||||||
word backblk, backspan
|
word backblk, backspan
|
||||||
word restrblk, restrspan, restr7w, restrw
|
word restrblk, restrspan, restr7w, restrw
|
||||||
byte mode
|
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)
|
dcgrSurfScr(OP_SRC)
|
||||||
setlineplot(@dcgrPlot)
|
setlineplot(@dcgrPlot)
|
||||||
setlinespans(@dcgrHLin, @dcgrVLin)
|
setlinespans(@dcgrHLin, @dcgrVLin)
|
||||||
@ -273,7 +301,6 @@ def dcgrTest#0
|
|||||||
i = 64; j = 64; k = 86
|
i = 64; j = 64; k = 86
|
||||||
k7 = k/7
|
k7 = k/7
|
||||||
inci = 1; incj = 1; inck = 2
|
inci = 1; incj = 1; inck = 2
|
||||||
backblk, backspan = dcgrAllocBl7Mem(SCR_WIDTH, SPRH)
|
|
||||||
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
|
dcgrSurfMem(OP_SRC, SPRH, backblk, backspan)
|
||||||
dcgrScrBl7(0, SLIDEY, backspan >> 2, SPRH)
|
dcgrScrBl7(0, SLIDEY, backspan >> 2, SPRH)
|
||||||
dcgrSurfScr(OP_SRC)
|
dcgrSurfScr(OP_SRC)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user