1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-02-14 06:32:32 +00:00

HGR lib WIP

This commit is contained in:
Dave Schmenk 2019-12-24 15:58:19 -08:00
parent a77c50c90a
commit 7ba288d2d6
10 changed files with 398 additions and 305 deletions

17
src/inc/hgrlib.plh Normal file
View File

@ -0,0 +1,17 @@
import hgrlib
predef hgrPlot(x, y)#0
predef hgrXorPlot(x, y)#0
predef hgrHLin(x1, x2, y)#0
predef hgrVLin(y1, y2, x)#0
predef hgrBLT(x, y, width, height, srcptr)#0
predef hgrCopySrc(ofst, y, w, h, srcptr)#0
predef hgrAndSrc(ofst, y, w, h, srcptr)#0
predef hgrXorSrc(ofst, y, w, h, srcptr)#0
predef hgrCopyDst(ofst, y, w, h, dstptr)#0
predef hgrMode#1
predef txtMode#0
predef hgrShow(page)#1
predef hgrSwap#0
predef hgrDrawBuf(page)#0
predef hgrColor(clr)#0
end

View File

@ -23,14 +23,14 @@ const page2 = 1
//
// Screen row address arrays.
//
word[] dgr1rows = $0400,$0480,$0500,$0580,$0600,$0680,$0700,$0780
word[] dgr1row = $0400,$0480,$0500,$0580,$0600,$0680,$0700,$0780
word = $0428,$04A8,$0528,$05A8,$0628,$06A8,$0728,$07A8
word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0
word[] dgr2rows = $0800,$0880,$0900,$0980,$0A00,$0A80,$0B00,$0B80
word[] dgr2row = $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
word[] dgrbuff = @dgr1rows, @dgr2rows
word drawbufptr
word[] dgrbuff = @dgr1row, @dgr2row
word drawbuff
byte drawpage
//
// Color mapping.
@ -525,7 +525,7 @@ export def dgrMode#1
^show80 = 0
^an3on
drawpage = 1
drawbufptr = dgrbuff[1]
drawbuff = dgrbuff[1]
return 1
end
//
@ -551,11 +551,11 @@ end
export def dgrSwap#0
^(showpage1 + drawpage)
drawpage = drawpage ^ 1
drawbufptr = dgrbuff[drawpage]
drawbuff = dgrbuff[drawpage]
end
export def dgrDrawBuf(page)#0
drawpage = page
drawbufptr = dgrbuff[drawpage]
drawbuff = dgrbuff[drawpage]
end
//
// Set color for clear & plot routines
@ -586,18 +586,18 @@ _dgrSetEvnOdd:1 = @oddclr
_dgrSetOddEvn:1 = @evnclr
_dgrSetOddOdd:1 = @oddclr
//
// Fixups for drawbufptr
// Fixups for drawbuff
//
dgrPlot:1 = @drawbufptr
dgrPlot:6 = @drawbufptr+1
dgrHLin:1 = @drawbufptr
dgrHLin:6 = @drawbufptr+1
dgrVLin:1 = @drawbufptr
dgrVLin:6 = @drawbufptr+1
dgrBLT:1 = @drawbufptr
dgrBLT:6 = @drawbufptr+1
dgrTile:1 = @drawbufptr
dgrTile:6 = @drawbufptr+1
dgrPlot:1 = @drawbuff
dgrPlot:6 = @drawbuff+1
dgrHLin:1 = @drawbuff
dgrHLin:6 = @drawbuff+1
dgrVLin:1 = @drawbuff
dgrVLin:6 = @drawbuff+1
dgrBLT:1 = @drawbuff
dgrBLT:6 = @drawbuff+1
dgrTile:1 = @drawbuff
dgrTile:6 = @drawbuff+1
// Put read AUX mem routine in scary location
memcpy($0100, @auxRead, 9)
done

View File

@ -23,14 +23,14 @@ const page2 = 1
//
// Screen row address arrays.
//
word[] gr1rows = $0400,$0480,$0500,$0580,$0600,$0680,$0700,$0780
word[] gr1row = $0400,$0480,$0500,$0580,$0600,$0680,$0700,$0780
word = $0428,$04A8,$0528,$05A8,$0628,$06A8,$0728,$07A8
word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0
word[] gr2rows = $0800,$0880,$0900,$0980,$0A00,$0A80,$0B00,$0B80
word[] gr2row = $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
word[] grbuff = @gr1rows, @gr2rows
word drawbufptr
word[] grbuff = @gr1row, @gr2row
word drawbuff
byte drawpage
asm grInc(buff)
@ -430,7 +430,7 @@ export def grMode#1
^mapmain = 0
^an3off
drawpage = 1
drawbufptr = grbuff[1]
drawbuff = grbuff[1]
return 1
end
//
@ -456,11 +456,11 @@ end
export def grSwap#0
^(showpage1 + drawpage)
drawpage = drawpage ^ 1
drawbufptr = grbuff[drawpage]
drawbuff = grbuff[drawpage]
end
export def grDrawBuf(page)#0
drawpage = page
drawbufptr = grbuff[drawpage]
drawbuff = grbuff[drawpage]
end
//
// Set color for clear & plot routines
@ -474,16 +474,16 @@ end
_grTileTile:1 = @grTile
_grFillTile:1 = @grTile
//
// Fixups for drawbufptr
// Fixups for drawbuff
//
grPlot:1 = @drawbufptr
grPlot:6 = @drawbufptr+1
grHLin:1 = @drawbufptr
grHLin:6 = @drawbufptr+1
grVLin:1 = @drawbufptr
grVLin:6 = @drawbufptr+1
grBLT:1 = @drawbufptr
grBLT:6 = @drawbufptr+1
grTile:1 = @drawbufptr
grTile:6 = @drawbufptr+1
grPlot:1 = @drawbuff
grPlot:6 = @drawbuff+1
grHLin:1 = @drawbuff
grHLin:6 = @drawbuff+1
grVLin:1 = @drawbuff
grVLin:6 = @drawbuff+1
grBLT:1 = @drawbuff
grBLT:6 = @drawbuff+1
grTile:1 = @drawbuff
grTile:6 = @drawbuff+1
done

284
src/libsrc/apple/hgrlib.pla Normal file
View File

@ -0,0 +1,284 @@
include "inc/cmdsys.plh"
//
// Hardware addresses
//
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 hgrbuff[] = hgr1, hgr2
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
word = $8180,$8280,$8480,$8880,$9080,$A080,$C080
byte hbmask = $81,$82,$84,$88,$90,$A0,$C0
byte hlmask = $FF,$FE,$FC,$F8,$F0,$E0,$C0
byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF
word curhclr
byte drawpage = 1
word drawbuff = hgr2
byte ball = $88, $8F, $FF, $F8, $88
byte = $88, $FF, $FF, $FF, $88
byte = $8F, $FF, $FF, $FF, $F8
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $8F, $FF, $FF, $FF, $F8
byte = $88, $FF, $FF, $FF, $88
byte = $88, $8F, $FF, $F8, $88
asm grInc(buff)
!SOURCE "vmsrc/plvmzp.inc"
GBASL = $26
GBASH = $27
GBASE = GBASL
GCLR = $30
end
asm divmod7(x)#2
LDA ESTKL,X ; X COORD LSB
LDY ESTKH,X ; X COORD MSB
BNE + ; MUST BE >= 140
CMP #140
BCC ++
+ SEC
SBC #140
LDY #20
++ CMP #70
BCC +
SBC #70
STA ESTKL,X
TYA
ADC #9
TAY
LDA ESTKL,X
+ CMP #35
BCC +
SBC #35
STA ESTKL,X
TYA
ADC #4
TAY
LDA ESTKL,X
+
- CMP #7
BCC +
SBC #7
INY
BNE -
+ DEX
STA ESTKL,X ; REMAINDER
STY ESTKL+1,X ; QUOTIENT
LDA #$00
STA ESTKH,X
STA ESTKH+1,X
RTS
end
export def hgrColor(c)#0
curhclr = hcolor[c & $07]
end
export def hgrPlot(x, y)#0
word pixptr
byte ofst, pixofst, pmask
ofst, pixofst = divmod7(x)
pixptr = hgrscan[y] + drawbuff + ofst
pmask = hbmask[pixofst]
^pixptr = (^pixptr & ~pmask) | (curhclr.[ofst & 1] & pmask)
end
export def hgrXorPlot(x, y)#0
word pixptr
byte ofst, pixofst, pmask
ofst, pixofst = divmod7(x)
pixptr = hgrscan[y] + drawbuff + ofst
pmask = hbmask[pixofst]
^pixptr = ^pixptr ^ (curhclr.[ofst & 1] & pmask)
end
export def hgrHlin(x1, x2, y)#0
word pixptr, x
byte lofst, lpixofst, lpmask, clr
byte rofst, rpixofst, rpmask
if x1 == x2
hgrPlot(x1, y)
else
lofst, lpixofst = divmod7(x1)
pixptr = hgrscan[y] + drawbuff + lofst
rofst, rpixofst = divmod7(x2)
lpmask = hlmask[lpixofst]
rpmask = hrmask[rpixofst]
if lofst == rofst
lpmask = lpmask & rpmask
^pixptr = (^pixptr & ~lpmask) | (curhclr.[pixptr.0 & 1] & lpmask)
else
^pixptr = (^pixptr & ~lpmask) | (curhclr.[pixptr.0 & 1] & lpmask)
pixptr++
for x = lofst + 1 to rofst - 1
^pixptr = curhclr.[pixptr.0 & 1]
pixptr++
next
^pixptr = (^pixptr & ~rpmask) | (curhclr.[pixptr.0 & 1] & rpmask)
fin
fin
end
export def hgrVlin(y1, y2, x)#0
word pixptr, y, ofst
byte pixofst, pmask, cmask
if y1 == y2
hgrPlot(x, y1)
else
ofst, pixofst = divmod7(x)
ofst = ofst + drawbuff
pmask = hbmask[pixofst]
cmask = curhclr.[ofst & 1] & pmask
pmask = ~pmask
for y = y1 to y2
pixptr = hgrscan[y] + ofst
^pixptr = (^pixptr & pmask) | cmask
next
fin
end
export def hgrCopySrc(ofst, y, w, h, srcptr)#0
word j, dstptr
ofst = ofst + drawbuff
for j = y to y + h - 1
dstptr = hgrscan[j] + ofst
memcpy(dstptr, srcptr, w)
srcptr = srcptr + w
next
end
export def hgrAndSrc(ofst, y, w, h, srcptr)#0
word j, dstptr
byte i
ofst = ofst + drawbuff
for j = y to y + h - 1
dstptr = hgrscan[j] + ofst
for i = 0 to w - 1
dstptr->[i] = dstptr->[i] & srcptr->[i]
next
srcptr = srcptr + w
next
end
export def hgrXorSrc(ofst, y, w, h, srcptr)#0
word j, dstptr
byte i
ofst = ofst + drawbuff
for j = y to y + h - 1
dstptr = hgrscan[j] + ofst
for i = 0 to w - 1
dstptr->[i] = dstptr->[i] ^ srcptr->[i]
next
srcptr = srcptr + w
next
end
export def hgrCopyDst(ofst, y, w, h, dstptr)#0
word j, srcptr
ofst = ofst + drawbuff
for j = y to y + h - 1
srcptr = hgrscan[j] + ofst
memcpy(dstptr, srcptr, w)
dstptr = dstptr + w
next
end
export def hgrBLT(x, y, w, h, srcptr)#0
word i, j
word saveclr
byte c
saveclr = curhclr
for j = y to y + h - 1
for i = 0 to w - 1
c = srcptr->[i >> 1]
if i & 1
curhclr = hcolor[(c >> 4) & $07]
if c & $80
hgrXorPlot(x + i, j)
else
hgrPlot(x + i, j)
fin
else
curhclr = hcolor[c & $07]
if c & $08
hgrXorPlot(x + i, j)
else
hgrPlot(x + i, j)
fin
fin
next
srcptr = srcptr + (w + 1) / 2
next
curhclr = saveclr
end
export def hgrMode#1
memset(hgr1, 0, $2000) // Clear HGR page 1
^showpage1
^showfull
^showhires
^showgraphics
drawpage = 1
drawbuff = hgrbuff[1]
return 1
end
export def txtMode#0
^showpage1
^showtext
end
//
// Set display page, return other page
//
export def hgrShow(page)#1
page = page & 1
^(showpage1 + page)
return page ^ 1
end
export def hgrSwap#0
^(showpage1 + drawpage)
drawpage = drawpage ^ 1
drawbuff = hgrbuff[drawpage]
end
export def hgrDrawBuf(page)#0
drawpage = page & 1
drawbuff = hgrbuff[drawpage]
end
done

View File

@ -55,6 +55,7 @@ INET = rel/INET\#FE1000
DHCP = rel/DHCP\#FE1000
HTTPD = rel/HTTPD\#FE1000
TFTPD = rel/TFTPD\#FE1000
HGRLIB = rel/apple/HGRLIB\#FE1000
GRLIB = rel/apple/GRLIB\#FE1000
DGRLIB = rel/apple/DGRLIB\#FE1000
LINESPANS = rel/apple/LINESPANS\#FE1000
@ -66,6 +67,7 @@ ROGUE = rel/ROGUE\#FE1000
ROGUEMAP = rel/ROGUEMAP\#FE1000
ROGUECOMBAT= rel/ROGUECOMBAT\#FE1000
MON = rel/apple/MON\#FE1000
HGRTEST = rel/apple/HGRTEST\#FE1000
GRTEST = rel/apple/GRTEST\#FE1000
DGRTEST = rel/apple/DGRTEST\#FE1000
HGRTEST = rel/apple/HGRTEST\#FE1000
@ -98,7 +100,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) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(LINESPANS) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(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) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(GRAFIX) $(GFXDEMO) $(LINESPANS) $(HGRLIB) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
-rm vmsrc/plvmzp.inc
@ -403,6 +405,10 @@ $(PORTIO): libsrc/apple/portio.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/portio.pla > libsrc/apple/portio.a
acme --setpc 4094 -o $(PORTIO) libsrc/apple/portio.a
$(HGRLIB): libsrc/apple/hgrlib.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/hgrlib.pla > libsrc/apple/hgrlib.a
acme --setpc 4094 -o $(HGRLIB) libsrc/apple/hgrlib.a
$(GRLIB): libsrc/apple/grlib.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/grlib.pla > libsrc/apple/grlib.a
acme --setpc 4094 -o $(GRLIB) libsrc/apple/grlib.a
@ -411,6 +417,10 @@ $(DGRLIB): libsrc/apple/dgrlib.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < libsrc/apple/dgrlib.pla > libsrc/apple/dgrlib.a
acme --setpc 4094 -o $(DGRLIB) libsrc/apple/dgrlib.a
$(HGRTEST): samplesrc/hgrtest.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/hgrtest.pla > samplesrc/hgrtest.a
acme --setpc 4094 -o $(HGRTEST) samplesrc/hgrtest.a
$(GRTEST): samplesrc/grtest.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/grtest.pla > samplesrc/grtest.a
acme --setpc 4094 -o $(GRTEST) samplesrc/grtest.a

View File

@ -10,6 +10,7 @@ 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/HGRLIB#FE1000 prodos/sys/HGRLIB.REL
cp rel/apple/GRLIB#FE1000 prodos/sys/GRLIB.REL
cp rel/apple/DGRLIB#FE1000 prodos/sys/DGRLIB.REL
cp rel/apple/COPY#FE1000 prodos/sys/COPY.REL
@ -63,6 +64,7 @@ cp ../sysfiles/ELEMS.CODE#060000 prodos/fpsos/sys/ELEMS.CODE.BIN
rm -rf prodos/demos
mkdir prodos/demos
cp rel/INT32TEST#FE1000 prodos/demos/INT32TEST.REL
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
@ -148,6 +150,7 @@ 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/hgrlib.plh prodos/bld/inc/HGRLIB.PLH.TXT
cp inc/grlib.plh prodos/bld/inc/GRLIB.PLH.TXT
cp inc/dgrlib.plh prodos/bld/inc/DGRLIB.PLH.TXT
cp inc/fiber.plh prodos/bld/inc/FIBER.PLH.TXT

View File

@ -1,275 +1,46 @@
include "inc/cmdsys.plh"
include "inc/linespans.plh"
sysflags reshgr1 // Reserve HGR page 1
include "inc/hgrlib.plh"
sysflags reshgr1 | reshgr2 // Reserve HGR page 1 and 2
byte ball = $88, $8F, $FF, $F8, $88
byte = $88, $FF, $FF, $FF, $88
byte = $8F, $FF, $FF, $FF, $F8
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $FF, $FF, $FF, $FF, $FF
byte = $8F, $FF, $FF, $FF, $F8
byte = $88, $FF, $FF, $FF, $88
byte = $88, $8F, $FF, $F8, $88
//
// Hardware addresses
// Sprite routines
//
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
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
word = $8180,$8280,$8480,$8880,$9080,$A080,$C080
byte hbmask = $81,$82,$84,$88,$90,$A0,$C0
byte hlmask = $FF,$FE,$FC,$F8,$F0,$E0,$C0
byte hrmask = $81,$83,$87,$8F,$9F,$BF,$FF
word curhclr
word ball0[9] = $0000, $1800, $3C00, $7E00, $7E00, $3C00, $1800, $0000
asm grInc(buff)
!SOURCE "vmsrc/plvmzp.inc"
GBASL = $26
GBASH = $27
GBASE = GBASL
GCLR = $30
def spriteCompile(spriteprt)
return 0
end
asm divmod7(x)#2
LDA ESTKL,X ; X COORD LSB
LDY ESTKH,X ; X COORD MSB
BNE + ; MUST BE >= 140
CMP #140
BCC ++
+ SEC
SBC #140
LDY #20
++ CMP #70
BCC +
SBC #70
STA ESTKL,X
TYA
ADC #9
TAY
LDA ESTKL,X
+ CMP #35
BCC +
SBC #35
STA ESTKL,X
TYA
ADC #4
TAY
LDA ESTKL,X
+
- CMP #7
BCC +
SBC #7
INY
BNE -
+ DEX
STA ESTKL,X ; REMAINDER
STY ESTKL+1,X ; QUOTIENT
LDA #$00
STA ESTKH,X
STA ESTKH+1,X
RTS
end
def hgrPlot(x, y)#0
word pptr
byte ofst, pixofst, pmask
ofst, pixofst = divmod7(x)
pptr = (hgrscan[y] | hgr1) + ofst
pmask = hbmask[pixofst]
^pptr = (^pptr & ~pmask) | (curhclr.[ofst & 1] & pmask)
end
def hgrHlin(x1, x2, y)#0
word pptr, x
byte lofst, lpixofst, lpmask, clr
byte rofst, rpixofst, rpmask
if x1 == x2
hgrPlot(x1, y)
else
lofst, lpixofst = divmod7(x1)
pptr = (hgrscan[y] | hgr1) + lofst
rofst, rpixofst = divmod7(x2)
lpmask = hlmask[lpixofst]
rpmask = hrmask[rpixofst]
if lofst == rofst
lpmask = lpmask & rpmask
^pptr = (^pptr & ~lpmask) | (curhclr.[pptr.0 & 1] & lpmask)
else
^pptr = (^pptr & ~lpmask) | (curhclr.[pptr.0 & 1] & lpmask)
pptr++
for x = lofst + 1 to rofst - 1
^pptr = curhclr.[pptr.0 & 1]
pptr++
next
^pptr = (^pptr & ~rpmask) | (curhclr.[pptr.0 & 1] & rpmask)
fin
fin
end
def hgrVlin(y1, y2, x)#0
word pptr, y
byte ofst, pixofst, pmask, cmask
if y1 == y2
hgrPlot(x, y1)
else
ofst, pixofst = divmod7(x)
pmask = hbmask[pixofst]
cmask = curhclr.[ofst & 1] & pmask
pmask = ~pmask
for y = y1 to y2
pptr = (hgrscan[y] | hgr1) + ofst
^pptr = (^pptr & pmask) | cmask
next
fin
end
def hgrColor(c)#0
curhclr = hcolor[c & $07]
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 simpleline(x1, y1, x2, y2)#0
var err, dx2, dy2, sx, sy, x, y
word pptr
byte ofst, pixofst, pmask, clr
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
if sx < 0
sy = -sy; x1, x2 = x2, x1
fin
err = dy2 - dx2 / 2
ofst, pixofst = divmod(x1, 7)
pptr = (hgrscan[y1] | hgr1) + ofst
clr = curhclr.[ofst & 1]
for x = x1 to x2
pmask = hbmask[pixofst]
^pptr = (^pptr & ~pmask) | (clr & pmask)
pixofst++
if pixofst > 6
pixofst = 0
pptr++
ofst++
clr = curhclr.[ofst & 1]
fin
if err >= 0
err = err - dx2
y1 = y1 + sy
pptr = (hgrscan[y1] | hgr1) + ofst
fin
err = err + dy2
next
else
if sy < 0
sx = -sx; y1, y2 = y2, y1
fin
err = dx2 - dy2 / 2
ofst, pixofst = divmod(x1, 7)
clr = curhclr.[ofst & 1]
pmask = hbmask[pixofst]
for y = y1 to y2
pptr = (hgrscan[y] | hgr1) + ofst
^pptr = (^pptr & ~pmask) | (clr & pmask)
if err >= 0
err = err - dy2
if sx > 0
pixofst++
if pixofst > 6
pixofst = 0
ofst++
clr = curhclr.[ofst & 1]
fin
else
if pixofst == 0
pixofst = 6
ofst--
clr = curhclr.[ofst & 1]
else
pixofst--
fin
fin
pmask = hbmask[pixofst]
fin
err = err + dx2
next
fin
end
def testline#0
var i
setlinespans(@hgrHlin, @hgrVlin)
hgrColor(2)
//for i = 0 to 191
// simpleline(0, 0, i, 191)
// simpleline(0, 0, 191, i)
//next
memset(hgr1, 0, $2000) // Clear HGR page 1
hgrColor(1);
for i = 0 to 191
hgrColor(3)
for i = 0 to 191 step 4
linetospans(0, 0, i, 191)
linetospans(0, 0, 191, i)
next
end
memset(hgr1, 0, $2000) // Clear HGR page 1
^showpage1
^showfull
^showhires
^showgraphics
def testblt#0
var i
for i = 0 to 200 step 3
hgrBlt(i, 50, 10, 10, @ball)
hgrBlt(i, 50, 10, 10, @ball)
next
end
hgrMode
hgrDrawBuf(0)
testline
hgrBlt(hgrpage[0], 20, 100, 2, 8, @ball0)
testblt
getc
^showpage1
^showtext
txtMode
done

View File

@ -9,10 +9,12 @@ echo "BLD/INC/ARGS.PLH"; atftp $1 --put -l inc/args.plh -r $2/BLD/INC/ARG
echo "BLD/INC/CMDSYS.PLH"; atftp $1 --put -l inc/cmdsys.plh -r $2/BLD/INC/CMDSYS.PLH#040000
echo "BLD/INC/CONIO.PLH"; atftp $1 --put -l inc/conio.plh -r $2/BLD/INC/CONIO.PLH#040000
echo "BLD/INC/LINESPANS.PLH"; atftp $1 --put -l inc/linespans.plh -r $2/BLD/INC/LINESPANS.PLH#040000
echo "BLD/INC/HGRLIB.PLH"; atftp $1 --put -l inc/hgrlib.plh -r $2/BLD/INC/HGRLIB.PLH#040000
echo "BLD/INC/GRLIB.PLH"; atftp $1 --put -l inc/grlib.plh -r $2/BLD/INC/GRLIB.PLH#040000
echo "BLD/INC/DGRLIB.PLH"; atftp $1 --put -l inc/dgrlib.plh -r $2/BLD/INC/DGRLIB.PLH#040000
echo "BLD/INC/FIBER.PLH"; atftp $1 --put -l inc/fiber.plh -r $2/BLD/INC/FIBER.PLH#040000
echo "BLD/INC/FILEIO.PLH"; atftp $1 --put -l inc/fileio.plh -r $2/BLD/INC/FILEIO.PLH#040000
echo "BLD/INC/INT32.PLH"; atftp $1 --put -l inc/int32.plh -r $2/BLD/INC/INT32.PLH#040000
echo "BLD/INC/FPSTR.PLH"; atftp $1 --put -l inc/fpstr.plh -r $2/BLD/INC/FPSTR.PLH#040000
echo "BLD/INC/FPU.PLH"; atftp $1 --put -l inc/fpu.plh -r $2/BLD/INC/FPU.PLH#040000
echo "BLD/INC/GRAFIX.PLH"; atftp $1 --put -l inc/grafix.plh -r $2/BLD/INC/GRAFIX.PLH#040000
@ -36,13 +38,15 @@ echo "BLD/SAMPLES/TEST.PLA"; atftp $1 --put -l samplesrc/test.pla -r $
echo "BLD/SAMPLES/FIBERTEST.PLA"; atftp $1 --put -l samplesrc/fibertest.pla -r $2/BLD/SAMPLES/FIBERTEST.PLA#040000
echo "BLD/SAMPLES/MOUSETEST.PLA"; atftp $1 --put -l samplesrc/mousetest.pla -r $2/BLD/SAMPLES/MOUSETEST.PLA#040000
echo "BLD/SAMPLES/ROD.PLA"; atftp $1 --put -l samplesrc/rod.pla -r $2/BLD/SAMPLES/ROD.PLA#040000
echo "BLD/SAMPLES/INT32TEST.PLA"; atftp $1 --put -l samplesrc/int32test.pla -r $2/BLD/SAMPLES/INT32TEST.PLA#040000
echo "BLD/SAMPLES/HGRTEST.PLA"; atftp $1 --put -l samplesrc/hgrtest.pla -r $2/BLD/SAMPLES/HGRTEST.PLA#040000
echo "BLD/SAMPLES/GRTEST.PLA"; atftp $1 --put -l samplesrc/grtest.pla -r $2/BLD/SAMPLES/GRTEST.PLA#040000
echo "BLD/SAMPLES/DGRTEST.PLA"; atftp $1 --put -l samplesrc/dgrtest.pla -r $2/BLD/SAMPLES/DGRTEST.PLA#040000
echo "BLD/SAMPLES/HGRTEST.PLA"; atftp $1 --put -l samplesrc/hgrtest.pla -r $2/BLD/SAMPLES/HGRTEST.PLA#040000
echo "BLD/SAMPLES/PLAYSEQ.PLA"; atftp $1 --put -l samplesrc/playseq.pla -r $2/BLD/SAMPLES/PLAYSEQ.PLA#040000
echo "BLD/SAMPLES/RPNCALC.PLA"; atftp $1 --put -l samplesrc/rpncalc.pla -r $2/BLD/SAMPLES/RPNCALC.PLA#040000
echo "BLD/SAMPLES/SIEVE.PLA"; atftp $1 --put -l samplesrc/sieve.pla -r $2/BLD/SAMPLES/SIEVE.PLA#040000
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l samplesrc/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
echo "BLD/SAMPLES/MEMTEST.PLA"; atftp $1 --put -l samplesrc/memtest.pla -r $2/BLD/SAMPLES/MEMTEST.PLA#040000
echo "BLD/SAMPLES/FATCAT.PLA"; atftp $1 --put -l samplesrc/fatcat.pla -r $2/BLD/SAMPLES/FATCAT.PLA#040000
echo "BLD/SAMPLES/GFXDEMO.PLA"; atftp $1 --put -l samplesrc/gfxdemo.pla -r $2/BLD/SAMPLES/GFXDEMO.PLA#040000

View File

@ -5,7 +5,9 @@ echo "DEMOS/RPNCALC"; atftp $1 --put -l rel/RPNCALC#FE1000
echo "DEMOS/LZ4CAT"; atftp $1 --put -l rel/LZ4CAT#FE1000 -r $2/DEMOS/LZ4CAT#FE1000
echo "DEMOS/SIEVE"; atftp $1 --put -l rel/SIEVE#FE1000 -r $2/DEMOS/SIEVE#FE1000
echo "DEMOS/ROD"; atftp $1 --put -l rel/apple/ROD#FE1000 -r $2/DEMOS/ROD#FE1000
echo "DEMOS/HGRTEST"; atftp $1 --put -l rel/apple/HGRTEST#FE1000 -r $2/DEMOS/HGRTEST#FE1000
echo "DEMOS/GRTEST"; atftp $1 --put -l rel/apple/GRTEST#FE1000 -r $2/DEMOS/GRTEST#FE1000
echo "DEMOS/INT32TEST"; atftp $1 --put -l rel/INT32TEST#FE1000 -r $2/DEMOS/INT32TEST#FE1000
echo "DEMOS/DGRTEST"; atftp $1 --put -l rel/apple/DGRTEST#FE1000 -r $2/DEMOS/DGRTEST#FE1000
# Music demo

View File

@ -12,6 +12,7 @@ echo "SYS/JITUNE"; atftp $1 --put -l rel/apple/JITUNE#FE1000 -r $2/SYS/JITUNE
# Core libraries
echo "SYS/ARGS"; atftp $1 --put -l rel/ARGS#FE1000 -r $2/SYS/ARGS#FE1000
echo "SYS/INT32"; atftp $1 --put -l rel/INT32#FE1000 -r $2/SYS/INT32#FE1000
echo "SYS/DHCP"; atftp $1 --put -l rel/DHCP#FE1000 -r $2/SYS/DHCP#FE1000
echo "SYS/ETHERIP"; atftp $1 --put -l rel/ETHERIP#FE1000 -r $2/SYS/ETHERIP#FE1000
echo "SYS/MOUSE"; atftp $1 --put -l rel/apple/MOUSE#FE1000 -r $2/SYS/MOUSE#FE1000
@ -22,6 +23,7 @@ echo "SYS/MEMMGR"; atftp $1 --put -l rel/MEMMGR#FE1000 -r $2/SYS/MEMMGR#FE1000
echo "SYS/LZ4"; atftp $1 --put -l rel/LZ4#FE1000 -r $2/SYS/LZ4#FE1000
echo "SYS/CONIO"; atftp $1 --put -l rel/apple/CONIO#FE1000 -r $2/SYS/CONIO#FE1000
echo "SYS/LINESPANS"; atftp $1 --put -l rel/apple/LINESPANS#FE1000 -r $2/SYS/LINESPANS#FE1000
echo "SYS/HGRLIB"; atftp $1 --put -l rel/apple/HGRLIB#FE1000 -r $2/SYS/HGRLIB#FE1000
echo "SYS/GRLIB"; atftp $1 --put -l rel/apple/GRLIB#FE1000 -r $2/SYS/GRLIB#FE1000
echo "SYS/DGRLIB"; atftp $1 --put -l rel/apple/DGRLIB#FE1000 -r $2/SYS/DGRLIB#FE1000
echo "SYS/FILEIO"; atftp $1 --put -l rel/apple/FILEIO#FE1000 -r $2/SYS/FILEIO#FE1000