1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-07 01:38:18 +00:00

Add bitmap drawing for screen and memory

This commit is contained in:
David Schmenk 2024-09-11 19:03:40 -07:00
parent d70ae2ec1e
commit 0b531e7f3e
3 changed files with 317 additions and 3 deletions
src
inc
libsrc/apple
samplesrc

@ -28,10 +28,12 @@ import dcgrlib
predef dcgrPlotScr(x, y)#0
predef dcgrHLinScr(x1, x2, y)#0
predef dcgrVlinScr(y1, y2, x)#0
predef dcgrBitScr(x, y, w, h, bitptr)#0
predef dcgrPixScr(x, y, w, h, pixptr)#0
predef dcgrPlotMem(x, y, w, h, dstptr, dstspan)#0
predef dcgrHLinMem(x1, x2, y, dstptr, dstspan)#0
predef dcgrVLinMem(y1, y2, x, dstptr, dstspan)#0
predef dcgrBitMem(x, y, w, h, bitptr, dstw, dsth, dstptr, dstspan)#0
predef dcgrPixMem(x, y, w, h, pixptr, dstw, dsth, dstptr, dstspan)#0
predef dcgrScrBl7Mem(x7, y, w7, h, dstptr, dstspan)#0
predef dcgrMemBl7Scr(x7, y, w7, h, srcptr, srcspan)#0

@ -204,7 +204,7 @@ asm _clipX#0
LDA ESTKL-1,X ; X COORD
CMP TMPL ; > DST_WIDTH?
BCS INVISX ; YEP, X OFF RIGHT EDGE
CLC
;CLC
ADC ESTKL-3,X ; X + WIDTH
CMP TMPL ; < DST_WIDTH?
BCC VISX ; YEP, FULLY VISIBLE
@ -250,7 +250,7 @@ asm _clipY#0
LDA ESTKL-2,X ; Y COORD
CMP TMPL ; > DST_HEIGHT?
BCS INVISY ; YEP, Y OFF BOTTOM EDGE
CLC
;CLC
ADC ESTKL-4,X ; Y + HEIGHT
CMP TMPL ; < DST_HEIGHT
BCC VISY ; YEP, FULLY VISIBLE
@ -489,6 +489,59 @@ asm _dcgrVLinScrB
BNE YVS
RTS
end
export asm dcgrBitScr(x, y, w, h, bitptr)#0
INX
INX
INX
INX
INX
STX ESP
LDA ESTKL-5,X ; BITPTR
STA SRCL
LDA ESTKH-5,X
STA SRCH
YBITS LDY ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++
CPY #192 ; OFF SCREEN?
BCS NXTBITS
end
asm _dcgrBitScrA
LDA $1000,Y ; HGRSCANL
STA DSTL
LDA $2000,Y ; HGRSCANH
STA DSTH
LDA ESTKL-1,X ; X COORD
STA ESTKH-1,X ; CURRENT X COORD
LDA ESTKL-3,X ; WIDTH
STA ESTKH-3,X ; CURRENT WIDTH
BITS8 LDA #8
STA TMPL
LDY #$00
LDA (SRC),Y ; SRC BITMAP
INC SRCL
BNE +
INC SRCH
+ LDY ESTKH-1,X ; CURRENT X COORD
BITSCR LSR
BCC +
CPY #140 ; OFF SCREEN?
BCS +
PHA
end
asm _dcgrBitScrB
JSR $1000 ; PLOT PIXEL
PLA
+ DEC ESTKH-3,X ; AT RIGHT EDGE?
BEQ NXTBITS
INC ESTKH-1,X ; X++
LDY ESTKH-1,X ; CURRENT X COORD
DEC TMPL
BNE BITSCR
BEQ BITS8
NXTBITS DEC ESTKL-4,X ; HEIGHT
BNE YBITS ; NEXT ROW
RETBITS RTS
end
export asm dcgrPixScr(x, y, w, h, pixptr)#0
INX
INX
@ -790,6 +843,80 @@ asm _dcgrVLinMemB
BNE YVM
+ RTS
end
export asm dcgrBitMem(x, y, w, h, bitptr, dstw, dsth, dstptr, dstspan)#0
TXA
CLC
ADC #9
TAX
STX ESP
LDA ESTKL-8,X ; DSTPTR
STA DSTL
LDA ESTKH-8,X
STA DSTH
LDY ESTKL-2,X ; Y COORD
BEQ +
- CLC ; ADVANCE TO Y SCANLINE
LDA ESTKL-9,X ; SPAN
ADC DSTL
STA DSTL
LDA ESTKH-9,X
ADC DSTH
STA DSTH
DEY
BNE -
+ LDA ESTKL-5,X ; BITPTR
STA SRCL
LDA ESTKH-5,X
STA SRCH
LDA ESTKL-1,X ; X COORD
CLC
ADC ESTKL-3,X ; WIDTH
STA TMPH ; -> RIGHT EDGE
YBITM LDA ESTKL-2,X ; Y COORD
INC ESTKL-2,X ; Y COORD++
CMP ESTKL-7,X ; OUT OF DST BOUNDS?
BCS NXTBITM
TAY
LDA ESTKL-1,X ; X COORD
STA ESTKH-1,X ; CURRENT X COORD
LDA ESTKL-3,X ; WIDTH
STA ESTKH-3,X ; CURRENT WIDTH
BITM8 LDA #8
STA TMPL
LDY #$00
LDA (SRC),Y ; SRC BITMAP
INC SRCL
BNE +
INC SRCH
+ LDY ESTKH-1,X ; CURRENT X COORD
BITMEM LSR
BCC +
CPY TMPH ; OUT OF DST BOUNDS?
BCS +
PHA
end
asm _dcgrBitMemA
JSR $1000 ; PLOT PIXEL
PLA
+ DEC ESTKH-3,X ; AT RIGHT EDGE?
BEQ NXTBITM
INC ESTKH-1,X ; X++
LDY ESTKH-1,X ; CURRENT X COORD
DEC TMPL
BNE BITMEM
BEQ BITM8
NXTBITM CLC
LDA ESTKL-9,X ; SPAN
ADC DSTL
STA DSTL
LDA ESTKH-9,X
ADC DSTH
STA DSTH
DEC ESTKL-4,X ; HEIGHT
BNE YBITM ; NEXT ROW
RETBITM RTS
end
export asm dcgrPixMem(x, y, w, h, pixptr, dstw, dsth, dstptr, dstspan)#0
TXA
CLC
@ -1552,6 +1679,9 @@ _dcgrHLinScrB:1 = @_dcgrPlotScrB
_dcgrVLinScrA:1 = @hgrscanl
_dcgrVLinScrA:6 = @hgrscanh
_dcgrVLinScrB:1 = @_dcgrPlotScrB
_dcgrBitScrA:1 = @hgrscanl
_dcgrBitScrA:6 = @hgrscanh
_dcgrBitScrB:1 = @_dcgrPlotScrB
_dcgrPixScrA:1 = @hgrscanl
_dcgrPixScrA:6 = @hgrscanh
_dcgrPixScrB:1 = @_dcgrColorA
@ -1588,6 +1718,7 @@ _dcgrOpPlotMemG:1 = @memclrl
_dcgrOpPlotMemH:1 = @memclrh
_dcgrHLinMemB:1 = @_dcgrPlotMemB
_dcgrVLinMemB:1 = @_dcgrPlotMemB
_dcgrBitMemA:1 = @_dcgrPlotMemB
_dcgrPixMemB:1 = @_dcgrColorA
_dcgrPixMemC:1 = @_dcgrPlotMemB
_dcgrPixMemD:1 = @_dcgrColorA

@ -3,7 +3,138 @@ include "inc/lines.plh"
include "inc/dcgrlib.plh"
sysflags resxtxt1|reshgr1|resxhgr1
//
// Apple //e hires character font
//
byte fontBits[]
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
byte = $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$08,$00,$08,$00
byte = $14,$14,$14,$00,$00,$00,$00,$00,$14,$14,$3E,$14,$3E,$14,$14,$00
byte = $08,$3C,$0A,$1C,$28,$1E,$08,$00,$06,$26,$10,$08,$04,$32,$30,$00
byte = $04,$0A,$0A,$04,$2A,$12,$2C,$00,$08,$08,$08,$00,$00,$00,$00,$00
byte = $08,$04,$02,$02,$02,$04,$08,$00,$08,$10,$20,$20,$20,$10,$08,$00
byte = $08,$2A,$1C,$08,$1C,$2A,$08,$00,$00,$08,$08,$3E,$08,$08,$00,$00
byte = $00,$00,$00,$00,$08,$08,$04,$00,$00,$00,$00,$3E,$00,$00,$00,$00
byte = $00,$00,$00,$00,$00,$00,$08,$00,$00,$20,$10,$08,$04,$02,$00,$00
byte = $1C,$22,$32,$2A,$26,$22,$1C,$00,$08,$0C,$08,$08,$08,$08,$1C,$00
byte = $1C,$22,$20,$18,$04,$02,$3E,$00,$3E,$20,$10,$18,$20,$22,$1C,$00
byte = $10,$18,$14,$12,$3E,$10,$10,$00,$3E,$02,$1E,$20,$20,$22,$1C,$00
byte = $38,$04,$02,$1E,$22,$22,$1C,$00,$3E,$20,$10,$08,$04,$04,$04,$00
byte = $1C,$22,$22,$1C,$22,$22,$1C,$00,$1C,$22,$22,$3C,$20,$10,$0E,$00
byte = $00,$00,$08,$00,$08,$00,$00,$00,$00,$00,$08,$00,$08,$08,$04,$00
byte = $10,$08,$04,$02,$04,$08,$10,$00,$00,$00,$3E,$00,$3E,$00,$00,$00
byte = $04,$08,$10,$20,$10,$08,$04,$00,$1C,$22,$10,$08,$08,$00,$08,$00
byte = $1C,$22,$2A,$3A,$1A,$02,$3C,$00,$08,$14,$22,$22,$3E,$22,$22,$00
byte = $1E,$22,$22,$1E,$22,$22,$1E,$00,$1C,$22,$02,$02,$02,$22,$1C,$00
byte = $1E,$22,$22,$22,$22,$22,$1E,$00,$3E,$02,$02,$1E,$02,$02,$3E,$00
byte = $3E,$02,$02,$1E,$02,$02,$02,$00,$3C,$02,$02,$02,$32,$22,$3C,$00
byte = $22,$22,$22,$3E,$22,$22,$22,$00,$1C,$08,$08,$08,$08,$08,$1C,$00
byte = $20,$20,$20,$20,$20,$22,$1C,$00,$22,$12,$0A,$06,$0A,$12,$22,$00
byte = $02,$02,$02,$02,$02,$02,$3E,$00,$22,$36,$2A,$2A,$22,$22,$22,$00
byte = $22,$22,$26,$2A,$32,$22,$22,$00,$1C,$22,$22,$22,$22,$22,$1C,$00
byte = $1E,$22,$22,$1E,$02,$02,$02,$00,$1C,$22,$22,$22,$2A,$12,$2C,$00
byte = $1E,$22,$22,$1E,$0A,$12,$22,$00,$1C,$22,$02,$1C,$20,$22,$1C,$00
byte = $3E,$08,$08,$08,$08,$08,$08,$00,$22,$22,$22,$22,$22,$22,$1C,$00
byte = $22,$22,$22,$22,$22,$14,$08,$00,$22,$22,$22,$2A,$2A,$36,$22,$00
byte = $22,$22,$14,$08,$14,$22,$22,$00,$22,$22,$14,$08,$08,$08,$08,$00
byte = $3E,$20,$10,$08,$04,$02,$3E,$00,$3E,$06,$06,$06,$06,$06,$3E,$00
byte = $00,$02,$04,$08,$10,$20,$00,$00,$3E,$30,$30,$30,$30,$30,$3E,$00
byte = $00,$00,$08,$14,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7F
byte = $04,$08,$10,$00,$00,$00,$00,$00,$00,$00,$1C,$20,$3C,$22,$3C,$00
byte = $02,$02,$1E,$22,$22,$22,$1E,$00,$00,$00,$3C,$02,$02,$02,$3C,$00
byte = $20,$20,$3C,$22,$22,$22,$3C,$00,$00,$00,$1C,$22,$3E,$02,$3C,$00
byte = $18,$24,$04,$1E,$04,$04,$04,$00,$00,$00,$1C,$22,$22,$3C,$20,$1C
byte = $02,$02,$1E,$22,$22,$22,$22,$00,$08,$00,$0C,$08,$08,$08,$1C,$00
byte = $10,$00,$18,$10,$10,$10,$12,$0C,$02,$02,$22,$12,$0E,$12,$22,$00
byte = $0C,$08,$08,$08,$08,$08,$1C,$00,$00,$00,$36,$2A,$2A,$22,$22,$00
byte = $00,$00,$1E,$22,$22,$22,$22,$00,$00,$00,$1C,$22,$22,$22,$1C,$00
byte = $00,$00,$1E,$22,$22,$1E,$02,$02,$00,$00,$3C,$22,$22,$3C,$20,$20
byte = $00,$00,$3A,$06,$02,$02,$02,$00,$00,$00,$3C,$02,$1C,$20,$1E,$00
byte = $04,$04,$1E,$04,$04,$24,$18,$00,$00,$00,$22,$22,$22,$32,$2C,$00
byte = $00,$00,$22,$22,$22,$14,$08,$00,$00,$00,$22,$22,$2A,$2A,$36,$00
byte = $00,$00,$22,$14,$08,$14,$22,$00,$00,$00,$22,$22,$22,$3C,$20,$1C
byte = $00,$00,$3E,$10,$08,$04,$3E,$00,$38,$0C,$0C,$06,$0C,$0C,$38,$00
byte = $08,$08,$08,$08,$08,$08,$08,$08,$0E,$18,$18,$30,$18,$18,$0E,$00
byte = $00,$2C,$1A,$00,$00,$00,$00,$00,$00,$2A,$14,$2A,$14,$2A,$00,$00
//
// Test sprite
//
@ -28,6 +159,44 @@ word sprite7mask[7]
word sprite7[7]
word sprite7span, sprite7width
def dcgrStrScr(x, y, strptr)#0
byte i
for i = 1 to ^strptr
dcgrBitScr(x, y, 7, 8, @fontBits + (^(strptr + i) + 128) * 8)
x = x + 7
next
end
def dcgrBoldStrScr(x, y, strptr)#0
byte h, v
for v = y - 1 to y + 1
for h = x - 1 to x + 1
dcgrStrScr(h, v, strptr)
next
next
dcgrColor(DCLR_BLACK)
dcgrStrScr(x, y, strptr)
end
def dcgrFillMem(x, y, w, h, dstptr, dstspan)#0
byte x2, y2, v
if x < 0; w = w + x; x = 0; fin
if y < 0; h = h + y; y = 0; fin
x2 = x + w - 1
y2 = y + h - 1
for v = y to y2
dcgrHLinMem(x, x2, v, dstptr, dstspan)
next
end
def dcgrStrMem(x, y, strptr, dstw, dsth, dstptr, dstspan)#0
byte i
for i = 1 to ^strptr
dcgrBitMem(x, y, 7, 8, @fontBits + (^(strptr + i) + 128) * 8, dstw, dsth, dstptr, dstspan)
x = x + 7
next
end
def compileSprite#0
byte i
@ -73,6 +242,7 @@ def dcgrTest#0
dcgrHLinScr((21/7)*7, (21/7)*7+(100/7)*7, 30+132)
dcgrVLinScr(30, 30+132, (21/7)*7)
dcgrVLinScr(30, 30+132, (21/7)*7+(100/7)*7)
dcgrBoldStrScr(30, 10, "Hello, DCGR!")
i = 64; j = 64; k = 86
ok7 = k/7
inci = 1; incj = 1; inck = 2
@ -85,6 +255,7 @@ def dcgrTest#0
mode = (^$C010 & $7F) - '0'
fin
ok7, om7 = divmod(k, 7)
dcgrOpMem(OP_SRC)
when mode
is 1
dcgrPixScr(i, j, 16, 16, @sprite)
@ -110,6 +281,16 @@ def dcgrTest#0
break
is 5
dcgrPixScr(i, j, 16, 16, @sprite)
is 6
dcgrMemBl7Mem(0, 0, restrw7, 16, backblk + (ok7 << 2), backspan, restrw7, 16, restrblk, restrspan)
dcgrColor(DCLR_BLACK)
dcgrFillMem(om7 + 2, 4, 14, 8, restrblk, restrspan)
dcgrColor(DCLR_WHITE)
dcgrStrMem(om7 + 2, 4, "DC", restrw, 16, restrblk, restrspan)
dcgrMemBl7Scr(ok7, 170, restrw7, 16, restrblk, restrspan)
break
is 7
dcgrPixScr(i, j, 16, 16, @sprite)
wend
if k > 136 or k < -16; inck = -inck; fin
k = k + inck