diff --git a/src/inc/hgrlib.plh b/src/inc/hgrlib.plh new file mode 100644 index 0000000..90560ec --- /dev/null +++ b/src/inc/hgrlib.plh @@ -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 diff --git a/src/libsrc/apple/dgrlib.pla b/src/libsrc/apple/dgrlib.pla index d270319..0eccee4 100755 --- a/src/libsrc/apple/dgrlib.pla +++ b/src/libsrc/apple/dgrlib.pla @@ -23,14 +23,14 @@ const page2 = 1 // // Screen row address arrays. // -word[] dgr1rows = $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 = $0828,$08A8,$0928,$09A8,$0A28,$0AA8,$0B28,$0BA8 -word = $0850,$08D0,$0950,$09D0,$0A50,$0AD0,$0B50,$0BD0 -word[] dgrbuff = @dgr1rows, @dgr2rows -word drawbufptr +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[] 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 = @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 diff --git a/src/libsrc/apple/grlib.pla b/src/libsrc/apple/grlib.pla index ae931d9..1fc95dc 100644 --- a/src/libsrc/apple/grlib.pla +++ b/src/libsrc/apple/grlib.pla @@ -23,14 +23,14 @@ const page2 = 1 // // Screen row address arrays. // -word[] gr1rows = $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 = $0828,$08A8,$0928,$09A8,$0A28,$0AA8,$0B28,$0BA8 -word = $0850,$08D0,$0950,$09D0,$0A50,$0AD0,$0B50,$0BD0 -word[] grbuff = @gr1rows, @gr2rows -word drawbufptr +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[] 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 = @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 diff --git a/src/libsrc/apple/hgrlib.pla b/src/libsrc/apple/hgrlib.pla new file mode 100644 index 0000000..e434904 --- /dev/null +++ b/src/libsrc/apple/hgrlib.pla @@ -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 diff --git a/src/makefile b/src/makefile index b0eedb6..07274c0 100755 --- a/src/makefile +++ b/src/makefile @@ -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 diff --git a/src/mkrel b/src/mkrel index ba042fe..04516f9 100755 --- a/src/mkrel +++ b/src/mkrel @@ -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 diff --git a/src/samplesrc/hgrtest.pla b/src/samplesrc/hgrtest.pla index cb3c5cc..f118d21 100644 --- a/src/samplesrc/hgrtest.pla +++ b/src/samplesrc/hgrtest.pla @@ -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 diff --git a/src/tftpbld b/src/tftpbld index b083725..e54254f 100755 --- a/src/tftpbld +++ b/src/tftpbld @@ -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 diff --git a/src/tftpdemos b/src/tftpdemos index 0ea1c38..8e010d8 100755 --- a/src/tftpdemos +++ b/src/tftpdemos @@ -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 diff --git a/src/tftpsys b/src/tftpsys index 10be2d3..cf146d9 100755 --- a/src/tftpsys +++ b/src/tftpsys @@ -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