mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-04-09 16:40:38 +00:00
WIP for graphics libraries
This commit is contained in:
parent
0b750d46c5
commit
04139858fc
@ -1,16 +1,25 @@
|
||||
import dgr
|
||||
word[] dgrbuff
|
||||
predef dgrPlot(buff, x, y)#0
|
||||
predef dgrHLin(buff, x1, x2, y)#0
|
||||
predef dgrVLin(buff, x, y1, y2)#0
|
||||
predef dgrBLT(buff, x, y, width, height, src)#0
|
||||
predef dgrTile(buff, x, y, src)#0
|
||||
predef dgrTileStr(buff, x, y, tilestr, strlen, tilebuff)#0
|
||||
predef dgrFill(buff, x, y, tile)#0
|
||||
predef dgrPlotBuf(x, y, bufptr)#0
|
||||
predef dgrHLinBuf(x1, x2, y, bufptr)#0
|
||||
predef dgrVLinBuf(x, y1, y2, bufptr)#0
|
||||
predef dgrBLTBuf(bufptr, x, y, width, height, src)#0
|
||||
predef dgrTileBuf(bufptr, x, y, src)#0
|
||||
predef dgrTileStrBuf(bufptr, x, y, tilestr, strlen, tilebuff)#0
|
||||
predef dgrFillBuf(bufptr, x, y, tile)#0
|
||||
predef dgrMode#1
|
||||
predef txtMode#0
|
||||
predef dgrShow(page)#1
|
||||
predef dgrSwap#0
|
||||
predef dgrDrawBuf(page)#0
|
||||
predef dgrClearBuf(bufptr, clr)#0
|
||||
predef dgrClear(clr)#0
|
||||
predef dgrPlot(x, y)#0
|
||||
predef dgrColor(clr)#0
|
||||
predef dgrLine(buff, x1, y1, x2, y2)#0
|
||||
predef dgrClear(buff, clr)#0
|
||||
predef dgrHLin(x1, x2, y)#0
|
||||
predef dgrVLin(y1, y2, x)#0
|
||||
predef dgrBLT(x, y, width, height, src)#0
|
||||
predef dgrTile(x, y, src)#0
|
||||
predef dgrTileStr(x, y, tilestr, strlen, tilebuff)#0
|
||||
predef dgrFill(x, y, tile)#0
|
||||
end
|
||||
|
4
src/inc/linespans.plh
Normal file
4
src/inc/linespans.plh
Normal file
@ -0,0 +1,4 @@
|
||||
import linespans
|
||||
predef setlinespans(h, v)#0
|
||||
predef linetospans(x1, y1, x2, y2)#0
|
||||
end
|
@ -31,6 +31,8 @@ word[] dgr2rows = $0800,$0880,$0900,$0980,$0A00,$0A80,$0B00,$0B80
|
||||
word = $0828,$08A8,$0928,$09A8,$0A28,$0AA8,$0B28,$0BA8
|
||||
word = $0850,$08D0,$0950,$09D0,$0A50,$0AD0,$0B50,$0BD0
|
||||
export word[] dgrbuff = @dgr1rows, @dgr2rows
|
||||
word drawbufptr
|
||||
byte drawpage
|
||||
//
|
||||
// Color mapping.
|
||||
//
|
||||
@ -49,7 +51,7 @@ end
|
||||
//
|
||||
// Plot pixel
|
||||
//
|
||||
export asm dgrPlot(buff, x, y)#0
|
||||
export asm dgrPlotBuf(bufptr, x, y)#0
|
||||
; GET BUFFER ADDRESS
|
||||
STX ESP
|
||||
LDA ESTKL+2,X
|
||||
@ -82,16 +84,23 @@ end
|
||||
//
|
||||
// Plot horizontal row of pixels
|
||||
//
|
||||
export asm dgrHLin(buff, x1, x2, y)#0
|
||||
export asm dgrHLin(x1, x2, y)#0
|
||||
DEX
|
||||
LDA $3000
|
||||
STA ESTKL,X
|
||||
LDA $3001
|
||||
STA ESTKH,X
|
||||
end
|
||||
export asm dgrHLinBuf(x1, x2, y, bufptr)#0
|
||||
; GET BUFFER ADDRESS
|
||||
STX ESP
|
||||
LDA ESTKL+3,X
|
||||
LDA ESTKL,X
|
||||
STA SRCL
|
||||
LDA ESTKH+3,X
|
||||
LDA ESTKH,X
|
||||
STA SRCH
|
||||
LDA ESTKL+1,X ; X2 COORD
|
||||
LDA ESTKL+2,X ; X2 COORD
|
||||
STA TMPH
|
||||
LDA ESTKL,X ; Y COORD
|
||||
LDA ESTKL+1,X ; Y COORD
|
||||
AND #$FE
|
||||
TAY
|
||||
LDA (SRC),Y
|
||||
@ -99,10 +108,10 @@ export asm dgrHLin(buff, x1, x2, y)#0
|
||||
INY
|
||||
LDA (SRC),Y
|
||||
STA GBASH
|
||||
LDY ESTKL+2,X ; X1 COORD
|
||||
LDY ESTKL+3,X ; X1 COORD
|
||||
PHP
|
||||
SEI
|
||||
- LDA ESTKL,X
|
||||
- LDA ESTKL+1,X ; Y COORD
|
||||
LSR
|
||||
TYA
|
||||
LDX GCLR ; COLOR
|
||||
@ -110,8 +119,8 @@ end
|
||||
asm _dgrHLinPix
|
||||
JSR $3000 ; _dgrSetPix
|
||||
LDX ESP
|
||||
INC ESTKL+2,X ; X1 COORD
|
||||
LDY ESTKL+2,X
|
||||
INC ESTKL+3,X ; X1 COORD
|
||||
LDY ESTKL+3,X
|
||||
CPY TMPH ; X2 COORD
|
||||
BCC -
|
||||
BEQ -
|
||||
@ -125,14 +134,21 @@ end
|
||||
//
|
||||
// Plot horizontal row of pixels
|
||||
//
|
||||
export asm dgrVLin(buff, x, y1, y2)#0
|
||||
export asm dgrVLin(y1, y2, x)#0
|
||||
DEX
|
||||
LDA $3000
|
||||
STA ESTKL,X
|
||||
LDA $3001
|
||||
STA ESTKH,X
|
||||
end
|
||||
export asm dgrVLinBuf(y1, y2, x, bufptr)#0
|
||||
; GET BUFFER ADDRESS
|
||||
STX ESP
|
||||
LDA ESTKL+3,X
|
||||
LDA ESTKL,X
|
||||
STA SRCL
|
||||
LDA ESTKH+3,X
|
||||
LDA ESTKH,X
|
||||
STA SRCH
|
||||
LDA ESTKL+1,X ; Y1 COORD
|
||||
LDA ESTKL+3,X ; Y1 COORD
|
||||
PHP
|
||||
SEI
|
||||
- AND #$FE
|
||||
@ -142,17 +158,17 @@ export asm dgrVLin(buff, x, y1, y2)#0
|
||||
INY
|
||||
LDA (SRC),Y
|
||||
STA GBASH
|
||||
LDA ESTKL+1,X
|
||||
LDA ESTKL+3,X
|
||||
LSR
|
||||
LDA ESTKL+2,X ; X COORD
|
||||
LDA ESTKL+1,X ; X COORD
|
||||
LDX GCLR ; COLOR
|
||||
end
|
||||
asm _dgrVLinPix
|
||||
JSR $3000 ; _dgrSetPix
|
||||
LDX ESP
|
||||
INC ESTKL+1,X ; Y1 COORD
|
||||
LDA ESTKL+1,X
|
||||
CMP ESTKL,X ; Y2 COORD
|
||||
INC ESTKL+3,X ; Y1 COORD
|
||||
LDA ESTKL+3,X
|
||||
CMP ESTKL+2,X ; Y2 COORD
|
||||
BCC -
|
||||
BEQ -
|
||||
PLP
|
||||
@ -165,7 +181,7 @@ end
|
||||
//
|
||||
// Draw sprite
|
||||
//
|
||||
export asm dgrBLT(buff, x, y, width, height, src)#0
|
||||
export asm dgrBLTBuf(bufptr, x, y, width, height, src)#0
|
||||
LDA ESTKL,X ; SPRITE
|
||||
STA SRCL
|
||||
LDA ESTKH,X
|
||||
@ -326,7 +342,7 @@ end
|
||||
//
|
||||
// Draw 8x8 tile (forced to 2x2 block address)
|
||||
//
|
||||
export asm dgrTile(buff, x, y, src)#0
|
||||
export asm dgrTileBuf(bufptr, x, y, src)#0
|
||||
STX ESP
|
||||
LDA ESTKL,X ; TILE
|
||||
STA SRCL
|
||||
@ -413,7 +429,7 @@ end
|
||||
//
|
||||
// Draw a string of tiles
|
||||
//
|
||||
export asm dgrTileStr(buff, x, y, tilestr, strlen, tilebuff)#0
|
||||
export asm dgrTileStrBuf(bufptr, x, y, tilestr, strlen, tilebuff)#0
|
||||
- DEX
|
||||
DEX
|
||||
DEX
|
||||
@ -450,7 +466,7 @@ end
|
||||
//
|
||||
// Fill a buffer with tiles
|
||||
//
|
||||
export asm dgrFill(buff, x, y, tile)#0
|
||||
export asm dgrFillBuf(bufptr, x, y, tile)#0
|
||||
LDA ESTKL+2,X
|
||||
AND #$0F
|
||||
STA ESTKL+2,X
|
||||
@ -526,6 +542,8 @@ export def dgrMode#1
|
||||
^ena80 = 0
|
||||
^show80 = 0
|
||||
^an3on
|
||||
drawpage = 1
|
||||
drawbufptr = dgrbuff[1]
|
||||
return 1
|
||||
end
|
||||
//
|
||||
@ -548,6 +566,15 @@ export def dgrShow(page)#1
|
||||
^(showpage1 + page)
|
||||
return page ^ 1
|
||||
end
|
||||
export def dgrSwap#0
|
||||
^(showpage1 + drawpage)
|
||||
drawpage = drawpage ^ 1
|
||||
drawbufptr = dgrbuff[drawpage]
|
||||
end
|
||||
export def dgrDrawBuf(page)#0
|
||||
drawpage = page
|
||||
drawbufptr = dgrbuff[drawpage]
|
||||
end
|
||||
//
|
||||
// Set color for clear & plot routines
|
||||
//
|
||||
@ -555,89 +582,39 @@ export def dgrColor(clr)#0
|
||||
^$30 = clr & $0F
|
||||
end
|
||||
//
|
||||
// Draw line
|
||||
//
|
||||
export def dgrLine(buff, x1, y1, x2, y2)#0
|
||||
byte dx, dy, dx2, dy2, pp
|
||||
word sx, sy, err, dd2
|
||||
|
||||
if x1 < x2
|
||||
sx = 1
|
||||
dx = x2 - x1
|
||||
else
|
||||
sx = -1
|
||||
dx = x1 - x2
|
||||
fin
|
||||
if y1 < y2
|
||||
sy = 1
|
||||
dy = y2 - y1
|
||||
else
|
||||
sy = -1
|
||||
dy = y1 - y2
|
||||
fin
|
||||
dx2 = dx << 1
|
||||
dy2 = dy << 1
|
||||
if dx >= dy // Horizontal line
|
||||
if sx < 0
|
||||
x1, x2 = x2, x1
|
||||
y1, y2 = y2, y1
|
||||
sy = -sy
|
||||
fin
|
||||
dd2 = dx2 - dy2
|
||||
err = dx - dy2
|
||||
sx = 1
|
||||
while dy
|
||||
if err < 0
|
||||
dgrHLin(buff, x1, x1 + sx - 1, y1)
|
||||
x1 = x1 + sx
|
||||
y1 = y1 + sy
|
||||
sx = 1
|
||||
dy--
|
||||
err = err + dd2
|
||||
else
|
||||
sx++
|
||||
err = err - dy2
|
||||
fin
|
||||
loop
|
||||
if y2 == y1
|
||||
dgrHLin(buff, x1, x2, y1)
|
||||
fin
|
||||
else // Vertical line
|
||||
if sy < 0
|
||||
x1, x2 = x2, x1
|
||||
y1, y2 = y2, y1
|
||||
sx = -sx
|
||||
fin
|
||||
dd2 = dy2 - dx2
|
||||
err = dy - dx2
|
||||
sy = 1
|
||||
while dx
|
||||
if err < 0
|
||||
dgrVLin(buff, x1, y1, y1 + sy - 1)
|
||||
x1 = x1 + sx
|
||||
y1 = y1 + sy
|
||||
sy = 1
|
||||
dx--
|
||||
err = err + dd2
|
||||
else
|
||||
sy++
|
||||
err = err - dx2
|
||||
fin
|
||||
loop
|
||||
if x2 == x1
|
||||
dgrVLin(buff, x1, y1, y2)
|
||||
fin
|
||||
fin
|
||||
end
|
||||
//
|
||||
// Clear the buffer
|
||||
//
|
||||
export def dgrClear(buff, clr)#0
|
||||
export def dgrClearBuf(bufptr, clr)#0
|
||||
byte[32] clrtile
|
||||
|
||||
clr = evnclr[clr&$0F] | (oddclr[clr&$0F] << 8)
|
||||
memset(@clrtile, clr, 32)
|
||||
dgrFill(buff, 0, 0, @clrtile)
|
||||
dgrFillBuf(bufptr, 0, 0, @clrtile)
|
||||
end
|
||||
export def dgrClear(clr)#0
|
||||
byte[32] clrtile
|
||||
|
||||
clr = evnclr[clr&$0F] | (oddclr[clr&$0F] << 8)
|
||||
memset(@clrtile, clr, 32)
|
||||
dgrFillBuf(drawbufptr, 0, 0, @clrtile)
|
||||
end
|
||||
//
|
||||
// Draw functions
|
||||
//
|
||||
export def dgrPlot(x, y)#0
|
||||
dgrPlotBuf(drawbufptr, x, y)
|
||||
end
|
||||
export def dgrBLT(x, y, width, height, src)#0
|
||||
dgrBLTBuf(drawbufptr, x, y, width, height, src)
|
||||
end
|
||||
export def dgrTile(x, y, src)#0
|
||||
dgrTileBuf(drawbufptr, x, y, src)
|
||||
end
|
||||
export def dgrTileStr(x, y, tilestr, strlen, tilebuff)#0
|
||||
dgrTileStrBuf(drawbufptr, x, y, tilestr, strlen, tilebuff)
|
||||
end
|
||||
export def dgrFill(x, y, tile)#0
|
||||
dgrFillBuf(drawbufptr, x, y, tile)
|
||||
end
|
||||
//
|
||||
// Make sure we are a 128K //e or //c
|
||||
@ -655,12 +632,19 @@ _dgrPlotPix:1 = @_dgrSetPix
|
||||
_dgrHLinPix:1 = @_dgrSetPix
|
||||
_dgrVLinPix:1 = @_dgrSetPix
|
||||
_dgrBLTPix:1 = @_dgrSetPix
|
||||
_dgrTileTile:1 = @dgrTile
|
||||
_dgrFillTile:1 = @dgrTile
|
||||
_dgrTileTile:1 = @dgrTileBuf
|
||||
_dgrFillTile:1 = @dgrTileBuf
|
||||
_dgrSetEvnEvn:1 = @evnclr
|
||||
_dgrSetEvnOdd:1 = @oddclr
|
||||
_dgrSetOddEvn:1 = @evnclr
|
||||
_dgrSetOddOdd:1 = @oddclr
|
||||
//
|
||||
// Fixups for drawbufptr
|
||||
//
|
||||
dgrHLin:2 = @drawbufptr
|
||||
dgrHLin:7 = @drawbufptr+1
|
||||
dgrVLin:2 = @drawbufptr
|
||||
dgrVLin:7 = @drawbufptr+1
|
||||
// Put read AUX mem routine in scary location
|
||||
memcpy($0100, @auxRead, 9)
|
||||
done
|
||||
|
@ -1,19 +1,20 @@
|
||||
include "inc/cmdsys.plh"
|
||||
var hspan, vspan
|
||||
var err, shorterr, shortlen, longerr, longlen
|
||||
|
||||
export def linespans(h, v)#0
|
||||
export def setlinespans(h, v)#0
|
||||
hspan = h
|
||||
vspan = v
|
||||
end
|
||||
def majorline(ps, major, majorend, minor, dir, majorspan)#0
|
||||
def majorline(majorstart, major, majorend, minor, dir, majorspan)#0
|
||||
//
|
||||
// Initial half-span step
|
||||
//
|
||||
err = err + shorterr
|
||||
repeat
|
||||
majorspan(ps, major, minor)#0
|
||||
minor = minor + dir // Move to next span
|
||||
ps = major + 1 // Start of next span = end of previous + 1
|
||||
majorspan(majorstart, major, minor)#0
|
||||
minor = minor + dir // Move to next span
|
||||
majorstart = major + 1 // Start of next span = end of previous + 1
|
||||
if err >= 0 // Short span
|
||||
err = err + shorterr
|
||||
major = major + shortlen
|
||||
@ -25,9 +26,9 @@ def majorline(ps, major, majorend, minor, dir, majorspan)#0
|
||||
//
|
||||
// Final half-span step
|
||||
//
|
||||
majorspan(ps, majorend, minor)#0
|
||||
majorspan(majorstart, majorend, minor)#0
|
||||
end
|
||||
export def line(x1, y1, x2, y2)#0
|
||||
export def linetospans(x1, y1, x2, y2)#0
|
||||
var dx, dy, dx2, dy2, halflen, rem, sx, sy
|
||||
|
||||
sx = 1
|
||||
@ -68,19 +69,9 @@ export def line(x1, y1, x2, y2)#0
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dy2
|
||||
//
|
||||
// Initial half-span step
|
||||
//
|
||||
err = err + shorterr
|
||||
ps = x1
|
||||
x1 = x1 + halflen
|
||||
//
|
||||
// JIT optimize inner loop
|
||||
//
|
||||
majorline(x1, x1 + halflen, x2, y1, sy, hspan)
|
||||
//
|
||||
// Final half-span step
|
||||
//
|
||||
hspan(ps, x2, y2)#0
|
||||
else
|
||||
if sy < 0
|
||||
x1, x2 = x2, x1; sx = -sx
|
@ -48,6 +48,7 @@ DHCP = rel/DHCP\#FE1000
|
||||
HTTPD = rel/HTTPD\#FE1000
|
||||
TFTPD = rel/TFTPD\#FE1000
|
||||
DGR = rel/apple/DGR\#FE1000
|
||||
LINESPANS = rel/apple/LINESPANS\#FE1000
|
||||
GRAFIX = rel/apple/GRAFIX\#FE1000
|
||||
GFXDEMO = rel/apple/GFXDEMO\#FE1000
|
||||
JOYBUZZ = rel/apple/JOYBUZZ\#FE1000
|
||||
@ -87,7 +88,7 @@ TXTTYPE = .TXT
|
||||
#SYSTYPE = \#FF2000
|
||||
#TXTTYPE = \#040000
|
||||
|
||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(DGR) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(LINESPANS) $(DGR) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||
-rm vmsrc/plvmzp.inc
|
||||
|
||||
c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64)
|
||||
@ -213,6 +214,10 @@ $(FIBER): libsrc/fiber.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/fiber.pla > libsrc/fiber.a
|
||||
acme --setpc 4094 -o $(FIBER) libsrc/fiber.a
|
||||
|
||||
$(LINESPANS): libsrc/linespans.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < libsrc/linespans.pla > libsrc/linespans.a
|
||||
acme --setpc 4094 -o $(LINESPANS) libsrc/linespans.a
|
||||
|
||||
$(FIBERTEST): samplesrc/fibertest.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AMOW < samplesrc/fibertest.pla > samplesrc/fibertest.a
|
||||
acme --setpc 4094 -o $(FIBERTEST) samplesrc/fibertest.a
|
||||
|
@ -9,6 +9,7 @@ rm -rf prodos/sys
|
||||
mkdir prodos/sys
|
||||
cp rel/apple/FILEIO#FE1000 prodos/sys/FILEIO.REL
|
||||
cp rel/apple/CONIO#FE1000 prodos/sys/CONIO.REL
|
||||
cp rel/apple/LINESPANS#FE1000 prodos/sys/LINESPANS.REL
|
||||
cp rel/apple/DGR#FE1000 prodos/sys/DGR.REL
|
||||
cp rel/ARGS#FE1000 prodos/sys/ARGS.REL
|
||||
cp rel/ED#FE1000 prodos/sys/ED.REL
|
||||
@ -54,7 +55,8 @@ cp ../sysfiles/ELEMS.CODE#060000 prodos/fpsos/sys/ELEMS.CODE.BIN
|
||||
rm -rf prodos/demos
|
||||
mkdir prodos/demos
|
||||
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL
|
||||
cp rel/apple/ROD#FE1000 prodos/demos/ROD.REL
|
||||
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
||||
cp rel/apple/ROD#FE1000 prodos/demos/ROD.REL
|
||||
cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL
|
||||
cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
|
||||
cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.REL
|
||||
@ -97,7 +99,7 @@ cp rel/CODEOPT#FE1000 prodos/bld/CODEOPT.REL
|
||||
mkdir prodos/bld/samples
|
||||
cp samplesrc/hello.pla prodos/bld/samples/HELLO.PLA.TXT
|
||||
cp samplesrc/dgrtest.pla prodos/bld/samples/DGRTEST.PLA.TXT
|
||||
cp samplesrc/hgr1test.pla prodos/bld/samples/HGR1TEST.PLA.TXT
|
||||
cp samplesrc/hgrtest.pla prodos/bld/samples/HGRTEST.PLA.TXT
|
||||
cp samplesrc/fibertest.pla prodos/bld/samples/FIBERTEST.PLA.TXT
|
||||
cp samplesrc/mousetest.pla prodos/bld/samples/MOUSETEST.PLA.TXT
|
||||
cp samplesrc/mon.pla prodos/bld/samples/MON.PLA.TXT
|
||||
@ -135,6 +137,7 @@ mkdir prodos/bld/inc
|
||||
cp inc/args.plh prodos/bld/inc/ARGS.PLH.TXT
|
||||
cp inc/cmdsys.plh prodos/bld/inc/CMDSYS.PLH.TXT
|
||||
cp inc/conio.plh prodos/bld/inc/CONIO.PLH.TXT
|
||||
cp inc/linespans.plh prodos/bld/inc/LINESPANS.PLH.TXT
|
||||
cp inc/dgr.plh prodos/bld/inc/DGR.PLH.TXT
|
||||
cp inc/fiber.plh prodos/bld/inc/FIBER.PLH.TXT
|
||||
cp inc/fileio.plh prodos/bld/inc/FILEIO.PLH.TXT
|
||||
|
@ -1,4 +1,5 @@
|
||||
include "inc/dgr.plh"
|
||||
include "inc/linespans.plh"
|
||||
|
||||
byte[] sprite1 = $80,$80,$00,$00,$00,$00,$80,$80
|
||||
byte[] = $80,$00,$0A,$0A,$0A,$0A,$00,$80
|
||||
@ -22,26 +23,29 @@ def dgrTest#0
|
||||
word i, j, ii, ij
|
||||
|
||||
b = dgrMode()
|
||||
dgrDrawBuf(0)
|
||||
for k = 15 downto 0
|
||||
dgrClear(dgrbuff[0], k)
|
||||
dgrClear(k)
|
||||
next
|
||||
setlinespans(@dgrHLin, @dgrVLin)
|
||||
for l = 0 to 79
|
||||
dgrColor(l)
|
||||
dgrLine(dgrbuff[0], 0, 0, l, 47)
|
||||
linetospans(0, 0, l, 47)
|
||||
next
|
||||
for l = 47 downto 0
|
||||
dgrColor(l)
|
||||
dgrLine(dgrbuff[0], 0, 0, 79, l)
|
||||
linetospans(0, 0, 79, l)
|
||||
next
|
||||
ii = 2
|
||||
ij = -1
|
||||
i = 40
|
||||
j = 10
|
||||
^$C010
|
||||
dgrDrawBuf(1)
|
||||
while ^$C000 < 128
|
||||
dgrFill(dgrbuff[b], k, k, @tile1)
|
||||
dgrBLT(dgrbuff[b], i, j, 8, 8, @sprite1)
|
||||
b = dgrShow(b)
|
||||
dgrFill(k, k, @tile1)
|
||||
dgrBLT(i, j, 8, 8, @sprite1)
|
||||
dgrSwap
|
||||
k++
|
||||
i = i + ii
|
||||
if i < -3 or i > 75
|
||||
|
@ -1,263 +0,0 @@
|
||||
include "inc/cmdsys.plh"
|
||||
sysflags reshgr1 // Reserve HGR page 1
|
||||
|
||||
//
|
||||
// Hardware addresses
|
||||
//
|
||||
const speaker = $C030
|
||||
const showgraphics = $C050
|
||||
const showtext = $C051
|
||||
const showfull = $C052
|
||||
const showmix = $C053
|
||||
const showpage1 = $C054
|
||||
const showpage2 = $C055
|
||||
const showlores = $C056
|
||||
const showhires = $C057
|
||||
const keyboard = $C000
|
||||
const keystrobe = $C010
|
||||
const hgr1 = $2000
|
||||
const hgr2 = $4000
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
word hgrpage[] = hgr1, hgr2
|
||||
byte hgradrl[] = $00,$00,$00,$00,$00,$00,$00,$00
|
||||
word = $80,$80,$80,$80,$80,$80,$80,$80
|
||||
word = $00,$00,$00,$00,$00,$00,$00,$00
|
||||
word = $80,$80,$80,$80,$80,$80,$80,$80
|
||||
word = $00,$00,$00,$00,$00,$00,$00,$00
|
||||
word = $80,$80,$80,$80,$80,$80,$80,$80
|
||||
word = $00,$00,$00,$00,$00,$00,$00,$00
|
||||
word = $80,$80,$80,$80,$80,$80,$80,$80
|
||||
word = $28,$28,$28,$28,$28,$28,$28,$28
|
||||
word = $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8
|
||||
word = $28,$28,$28,$28,$28,$28,$28,$28
|
||||
word = $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8
|
||||
word = $28,$28,$28,$28,$28,$28,$28,$28
|
||||
word = $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8
|
||||
word = $28,$28,$28,$28,$28,$28,$28,$28
|
||||
word = $A8,$A8,$A8,$A8,$A8,$A8,$A8,$A8
|
||||
word = $50,$50,$50,$50,$50,$50,$50,$50
|
||||
word = $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
|
||||
word = $50,$50,$50,$50,$50,$50,$50,$50
|
||||
word = $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
|
||||
word = $50,$50,$50,$50,$50,$50,$50,$50
|
||||
word = $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
|
||||
word = $50,$50,$50,$50,$50,$50,$50,$50
|
||||
word = $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0
|
||||
byte hgradrh[] = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $00,$04,$08,$0C,$10,$14,$18,$1C
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $01,$05,$09,$0D,$11,$15,$19,$1D
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $02,$06,$0A,$0E,$12,$16,$1A,$1E
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word = $03,$07,$0B,$0F,$13,$17,$1B,$1F
|
||||
word hgrscan[] = $0000,$0400,$0800,$0C00,$1000,$1400,$1800,$1C00
|
||||
word = $0080,$0480,$0880,$0C80,$1080,$1480,$1880,$1C80
|
||||
word = $0100,$0500,$0900,$0D00,$1100,$1500,$1900,$1D00
|
||||
word = $0180,$0580,$0980,$0D80,$1180,$1580,$1980,$1D80
|
||||
word = $0200,$0600,$0A00,$0E00,$1200,$1600,$1A00,$1E00
|
||||
word = $0280,$0680,$0A80,$0E80,$1280,$1680,$1A80,$1E80
|
||||
word = $0300,$0700,$0B00,$0F00,$1300,$1700,$1B00,$1F00
|
||||
word = $0380,$0780,$0B80,$0F80,$1380,$1780,$1B80,$1F80
|
||||
word = $0028,$0428,$0828,$0C28,$1028,$1428,$1828,$1C28
|
||||
word = $00A8,$04A8,$08A8,$0CA8,$10A8,$14A8,$18A8,$1CA8
|
||||
word = $0128,$0528,$0928,$0D28,$1128,$1528,$1928,$1D28
|
||||
word = $01A8,$05A8,$09A8,$0DA8,$11A8,$15A8,$19A8,$1DA8
|
||||
word = $0228,$0628,$0A28,$0E28,$1228,$1628,$1A28,$1E28
|
||||
word = $02A8,$06A8,$0AA8,$0EA8,$12A8,$16A8,$1AA8,$1EA8
|
||||
word = $0328,$0728,$0B28,$0F28,$1328,$1728,$1B28,$1F28
|
||||
word = $03A8,$07A8,$0BA8,$0FA8,$13A8,$17A8,$1BA8,$1FA8
|
||||
word = $0050,$0450,$0850,$0C50,$1050,$1450,$1850,$1C50
|
||||
word = $00D0,$04D0,$08D0,$0CD0,$10D0,$14D0,$18D0,$1CD0
|
||||
word = $0150,$0550,$0950,$0D50,$1150,$1550,$1950,$1D50
|
||||
word = $01D0,$05D0,$09D0,$0DD0,$11D0,$15D0,$19D0,$1DD0
|
||||
word = $0250,$0650,$0A50,$0E50,$1250,$1650,$1A50,$1E50
|
||||
word = $02D0,$06D0,$0AD0,$0ED0,$12D0,$16D0,$1AD0,$1ED0
|
||||
word = $0350,$0750,$0B50,$0F50,$1350,$1750,$1B50,$1F50
|
||||
word = $03D0,$07D0,$0BD0,$0FD0,$13D0,$17D0,$1BD0,$1FD0
|
||||
word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
|
||||
word hmask = $8081,$8082,$8084,$8088,$8090,$80A0,$80C0
|
||||
= $8180,$8280,$8480,$8880,$9080,$A080,$C080
|
||||
word curhclr
|
||||
word ball0[9] = $0000, $1800, $3C00, $7E00, $7E00, $3C00, $1800, $0000
|
||||
|
||||
var hspan, vspan
|
||||
export def spans(h, v)#0
|
||||
hspan = h
|
||||
vspan = v
|
||||
end
|
||||
export def line(x1, y1, x2, y2)#0
|
||||
var dx2, dy2, err, sx, sy, ps
|
||||
var shorterr, shortlen, longerr, longlen, halflen
|
||||
|
||||
sx = sy = 1
|
||||
dx2 = (x2 - x1) * 2
|
||||
if dx2 < 0
|
||||
sx = -1; dx2 = -dx2
|
||||
fin
|
||||
dy2 = (y2 - y1) * 2
|
||||
if dy2 < 0
|
||||
sy = -1; dy2 = -dy2
|
||||
fin
|
||||
if dx2 >= dy2
|
||||
if sx < 0
|
||||
x1, x2 = x2, x1; sy = -sy
|
||||
fin
|
||||
if dy2 == 0
|
||||
hspan(x1, x2, y1)#0; return
|
||||
fin
|
||||
ps = x1
|
||||
for err = dy2 - dx2 / 2 to 0 step dy2 // Find first half-span length and error
|
||||
x1++
|
||||
next
|
||||
longlen = (x1 - ps + 1) * 2 // Long-span length = half-span length * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dy2
|
||||
longerr = longerr - dy2
|
||||
longlen--
|
||||
fin
|
||||
shortlen = longlen - 1 // Short-span length = long-span length - 1
|
||||
shorterr = longerr - dy2
|
||||
err = err + shorterr // Do a short-span step
|
||||
while x1 < x2
|
||||
hspan(ps, x1, y1)#0
|
||||
y1 = y1 + sy // Move to next span
|
||||
ps = x1 + 1 // Start of next span = end of previous span + 1
|
||||
if err >= 0 // Short span
|
||||
err = err + shorterr
|
||||
x1 = x1 + shortlen
|
||||
else // Long span
|
||||
err = err + longerr
|
||||
x1 = x1 + longlen
|
||||
fin
|
||||
loop
|
||||
hspan(ps, x2, y2)#0 // Final span
|
||||
else
|
||||
if sy < 0
|
||||
x1, x2 = x2, x1; sx = -sx
|
||||
fin
|
||||
if dx2 == 0
|
||||
vspan(x1, y1, y2)#0; return
|
||||
fin
|
||||
ps = y1
|
||||
for err = dx2 - dy2 / 2 to 0 step dx2 // Find first half-span length and error
|
||||
y1++
|
||||
next
|
||||
longlen = (y1 - ps + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dx2
|
||||
longerr -= longerr - dx2
|
||||
longlen--
|
||||
fin
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dx2
|
||||
err = err + shorterr
|
||||
while y1 < y2
|
||||
vspan(x1, ps, y1)#0
|
||||
x1 = x1 + sx
|
||||
ps = y1 + 1
|
||||
if err >= 0 // Short span
|
||||
err = err + shorterr
|
||||
y1 = y1 + shortlen
|
||||
else // Long span
|
||||
err = err + longerr
|
||||
y1 = y1 + longlen
|
||||
fin
|
||||
loop
|
||||
vspan(x2, ps, y2)#0 // Final span
|
||||
fin
|
||||
end
|
||||
def hgrPlot(x, y)#0
|
||||
var pscan, bytofst, pixofst, pmask, pword
|
||||
|
||||
pscan = hgrscan[y] | hgr1
|
||||
wrdofst, pixofst = divmod(x, 14)
|
||||
pmask = hmask[pixofst]
|
||||
pword = pscan=>[wrdofst] & ~pmask
|
||||
pscan=>[wrdofst] = pword | (curhclr & pmask)
|
||||
end
|
||||
def hgrHlin(x1, x2, y)#0
|
||||
var pscan, bytofst, pixofst, pmask, pword
|
||||
|
||||
pscan = hgrscan[y] | hgr1
|
||||
wrdofst, pixofst = divmod(x1, 14)
|
||||
repeat
|
||||
pmask = hmask[pixofst]
|
||||
pword = pscan=>[wrdofst] & ~pmask
|
||||
pscan=>[wrdofst] = pword | (curhclr & pmask)
|
||||
pixofst++
|
||||
if pixofst > 13
|
||||
pixofst = 0
|
||||
wrdofst++
|
||||
fin
|
||||
x1++
|
||||
until x1 > x2
|
||||
end
|
||||
def hgrVlin(x, y1, y2)#0
|
||||
var pscan, bytofst, pixofst, pmask, pword, cmask
|
||||
|
||||
wrdofst, pixofst = divmod(x, 14)
|
||||
pmask = hmask[pixofst]
|
||||
cmask = curhclr & pmask
|
||||
pmask = ~pmask
|
||||
repeat
|
||||
pscan = hgrscan[y1] | hgr1
|
||||
pword = pscan=>[wrdofst] & pmask
|
||||
pscan=>[wrdofst] = pword | cmask
|
||||
y1++
|
||||
until y1 > y2
|
||||
end
|
||||
def hgrColor(c)#0
|
||||
curhclr = hcolor[c & 0x07]
|
||||
end
|
||||
def hgrBLT(page, x, y, w, h, pSrc)#0
|
||||
word pDst
|
||||
byte i
|
||||
|
||||
repeat
|
||||
pDst = hgrscan[y] | page + x
|
||||
for i = 0 to w - 1
|
||||
pDst->[i] = pSrc->[i]
|
||||
next
|
||||
pSrc = pSrc + w
|
||||
y++
|
||||
h--
|
||||
until not h
|
||||
end
|
||||
def testline
|
||||
var i
|
||||
|
||||
spans(@hgrHlin, @hgrVlin)
|
||||
hgrColor(7)
|
||||
for i = 0 to 100
|
||||
hgrPlot(i, i)
|
||||
next
|
||||
end
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
^showpage1
|
||||
^showfull
|
||||
^showhires
|
||||
^showgraphics
|
||||
testline
|
||||
hgrBlt(hgrpage[0], 20, 100, 2, 8, @ball0)
|
||||
getc
|
||||
^showpage1
|
||||
^showtext
|
||||
done
|
@ -1,4 +1,5 @@
|
||||
include "inc/cmdsys.plh"
|
||||
include "inc/linespans.plh"
|
||||
sysflags reshgr1 // Reserve HGR page 1
|
||||
//
|
||||
// Hardware addresses
|
||||
@ -51,160 +52,7 @@ byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF
|
||||
word curhclr
|
||||
word ball0[9] = $0000, $1800, $3C00, $7E00, $7E00, $3C00, $1800, $0000
|
||||
|
||||
var pixel, hspan, vspan
|
||||
var err, shorterr, shortlen, longerr, longlen
|
||||
var dx2, dy2, sx, sy
|
||||
|
||||
export def linefuncs(p, h, v)#0
|
||||
pixel = p
|
||||
hspan = h
|
||||
vspan = v
|
||||
end
|
||||
def phline(x1, x2, y)#0
|
||||
var x
|
||||
|
||||
if sx < 0
|
||||
sy = -sy; x1, x2 = x2, x1
|
||||
fin
|
||||
err = dy2 - dx2 / 2
|
||||
for x = x1 to x2
|
||||
pixel(x, y)#0
|
||||
if err >= 0
|
||||
err = err - dx2
|
||||
y = y + sy
|
||||
fin
|
||||
err = err + dy2
|
||||
next
|
||||
end
|
||||
def pvline(y1, y2, x)#0
|
||||
var y
|
||||
|
||||
if sy < 0
|
||||
sx = -sx; y1, y2 = y2, y1
|
||||
fin
|
||||
err = dx2 - dy2 / 2
|
||||
for y = y1 to y2
|
||||
pixel(x, y)#0
|
||||
if err >= 0
|
||||
err = err - dy2
|
||||
x = x + sx
|
||||
fin
|
||||
err = err + dx2
|
||||
next
|
||||
end
|
||||
def pline(x1, y1, x2, y2)#0
|
||||
sx = 1
|
||||
sy = 1
|
||||
dx2 = (x2 - x1) * 2
|
||||
if dx2 < 0
|
||||
sx = -1; dx2 = -dx2
|
||||
fin
|
||||
dy2 = (y2 - y1) * 2
|
||||
if dy2 < 0
|
||||
sy = -1; dy2 = -dy2
|
||||
fin
|
||||
if dx2 >= dy2
|
||||
phline(x1, x2, y1)
|
||||
else
|
||||
pvline(y1, y2, x1)
|
||||
fin
|
||||
end
|
||||
def majorline(ps, major, majorend, minor, dir, majorspan)#0
|
||||
//
|
||||
// Initial half-span step
|
||||
//
|
||||
err = err + shorterr
|
||||
repeat
|
||||
majorspan(ps, major, minor)#0
|
||||
minor = minor + dir // Move to next span
|
||||
ps = major + 1 // Start of next span = end of previous + 1
|
||||
if err >= 0 // Short span
|
||||
err = err + shorterr
|
||||
major = major + shortlen
|
||||
else // Long span
|
||||
err = err + longerr
|
||||
major = major + longlen
|
||||
fin
|
||||
until major >= majorend
|
||||
//
|
||||
// Final half-span step
|
||||
//
|
||||
majorspan(ps, majorend, minor)#0
|
||||
end
|
||||
export def sline(x1, y1, x2, y2)#0
|
||||
var dx, dy, dx2, dy2, halflen, rem, sx, sy
|
||||
|
||||
sx = 1
|
||||
sy = 1
|
||||
dx = x2 - x1
|
||||
if dx < 0
|
||||
sx = -1; dx = -dx
|
||||
fin
|
||||
dy = y2 - y1
|
||||
if dy < 0
|
||||
sy = -1; dy = -dy
|
||||
fin
|
||||
if dx >= dy
|
||||
if sx < 0
|
||||
x1, x2 = x2, x1; sy = -sy
|
||||
fin
|
||||
if dy == 0
|
||||
hspan(x1, x2, y1)#0; return
|
||||
fin
|
||||
//
|
||||
// Half-span length and error
|
||||
//
|
||||
dy2 = dy * 2
|
||||
halflen, rem = divmod(dx, dy2)
|
||||
err = dy2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dy2
|
||||
longerr = longerr - dy2
|
||||
longlen--
|
||||
fin
|
||||
//
|
||||
// Short-span length = long-span length - 1
|
||||
//
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dy2
|
||||
//
|
||||
// JIT optimize inner loop
|
||||
//
|
||||
majorline(x1, x1 + halflen, x2, y1, sy, hspan)
|
||||
else
|
||||
if sy < 0
|
||||
x1, x2 = x2, x1; sx = -sx
|
||||
fin
|
||||
if dx == 0
|
||||
vspan(y1, y2, x1)#0; return
|
||||
fin
|
||||
//
|
||||
// Half-span length and error
|
||||
//
|
||||
dx2 = dx * 2
|
||||
halflen, rem = divmod(dy, dx2)
|
||||
err = dx2 - rem
|
||||
//
|
||||
// Long-span length = half-span length * 2
|
||||
//
|
||||
longlen = (halflen + 1) * 2
|
||||
longerr = err * 2
|
||||
if longerr >= dx2
|
||||
longerr = longerr - dx2
|
||||
longlen--
|
||||
fin
|
||||
shortlen = longlen - 1
|
||||
shorterr = longerr - dx2
|
||||
//
|
||||
// JIT optimize inner loop
|
||||
//
|
||||
majorline(y1, y1 + halflen, y2, x1, sx, vspan)
|
||||
fin
|
||||
end
|
||||
var err, dx2, dy2, sx, sy
|
||||
|
||||
def hgrPlot(x, y)#0
|
||||
word pptr
|
||||
@ -272,19 +120,70 @@ def hgrBLT(page, x, y, w, h, pSrc)#0
|
||||
h--
|
||||
until not h
|
||||
end
|
||||
def phline(x1, x2, y)#0
|
||||
var x
|
||||
|
||||
if sx < 0
|
||||
sy = -sy; x1, x2 = x2, x1
|
||||
fin
|
||||
err = dy2 - dx2 / 2
|
||||
for x = x1 to x2
|
||||
hgrPlot(x, y)
|
||||
if err >= 0
|
||||
err = err - dx2
|
||||
y = y + sy
|
||||
fin
|
||||
err = err + dy2
|
||||
next
|
||||
end
|
||||
def pvline(y1, y2, x)#0
|
||||
var y
|
||||
|
||||
if sy < 0
|
||||
sx = -sx; y1, y2 = y2, y1
|
||||
fin
|
||||
err = dx2 - dy2 / 2
|
||||
for y = y1 to y2
|
||||
hgrPlot(x, y)
|
||||
if err >= 0
|
||||
err = err - dy2
|
||||
x = x + sx
|
||||
fin
|
||||
err = err + dx2
|
||||
next
|
||||
end
|
||||
def simpleline(x1, y1, x2, y2)#0
|
||||
sx = 1
|
||||
sy = 1
|
||||
dx2 = (x2 - x1) * 2
|
||||
if dx2 < 0
|
||||
sx = -1; dx2 = -dx2
|
||||
fin
|
||||
dy2 = (y2 - y1) * 2
|
||||
if dy2 < 0
|
||||
sy = -1; dy2 = -dy2
|
||||
fin
|
||||
if dx2 >= dy2
|
||||
phline(x1, x2, y1)
|
||||
else
|
||||
pvline(y1, y2, x1)
|
||||
fin
|
||||
end
|
||||
|
||||
def testline#0
|
||||
var i
|
||||
|
||||
linefuncs(@hgrPlot, @hgrHlin, @hgrVlin)
|
||||
hgrColor(3)
|
||||
setlinespans(@hgrHlin, @hgrVlin)
|
||||
hgrColor(2)
|
||||
for i = 0 to 191
|
||||
pline(0, 0, i, 191)
|
||||
pline(0, 0, 191, i)
|
||||
simpleline(0, 0, i, 191)
|
||||
simpleline(0, 0, 191, i)
|
||||
next
|
||||
hgrColor(0);
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
hgrColor(1);
|
||||
for i = 0 to 191
|
||||
sline(0, 0, i, 191)
|
||||
sline(0, 0, 191, i)
|
||||
linetospans(0, 0, i, 191)
|
||||
linetospans(0, 0, 191, i)
|
||||
next
|
||||
end
|
||||
memset(hgr1, 0, $2000) // Clear HGR page 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user