1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-04-05 03:37:43 +00:00

All graphics libraries get consistent mode set API

This commit is contained in:
dschmenk 2024-01-18 12:28:23 -08:00
parent 912a865a25
commit 8f3780617b
23 changed files with 136 additions and 131 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -13,4 +13,7 @@ import dgrlib
predef dgrSwap#0
predef dgrDrawBuf(page)#0
predef dgrColor(clr)#0
const dgrPage1 = 0
const dgrPage2 = 1
const dgrOff = -1
end

@ -13,4 +13,7 @@ import grlib
predef grSwap#0
predef grDrawBuf(page)#0
predef grColor(clr)#0
const grPage1 = 0
const grPage2 = 1
const grOff = -1
end

@ -21,4 +21,7 @@ import hgrlib
predef hgrSwap#1
predef hgrDrawBuf(page)#1
predef hgrColor(clr)#0
const hgrPage1 = 0
const hgrPage2 = 1
const hgrOff = -1
end

@ -5,9 +5,5 @@ import hgrtile
predef tileAndDraw(x, y, tileptr)#0
predef tileDrawStr(x, y, strptr, strlen, tileset)#0
predef tileFromText(txtpage, tileset)#0
predef tileMode(mode)#1
predef tileClear#0
predef tileShow(page)#1
predef tileSwap#1
predef tileDrawBuf(page)#1
end

@ -520,32 +520,48 @@ export def dgrClear(clr)#0
dgrFill(0, 0, @clrtile)
end
export def dgrMode(mode)#1
if mode
//
// Set double lores graphics, return draw buffer
//
^showlores
^showfull
^showgraphics
^showpage1
^ena80 = 0
^show80 = 0
^an3on
drawpage = 1
drawbuff = dgrbuff[1]
return 1
fin
//
// Set text mode
//
^showtext
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
call($FC58, 0, 0, 0, 0) // home()
return 0
when mode
is page1
//
// Set double lores graphics, return draw buffer
//
^showlores
^showfull
^showgraphics
^showpage1
^ena80 = 0
^show80 = 0
^an3on
drawpage = page2
drawbuff = dgrbuff[page2]
break
is page2
//
// Set double lores graphics, return draw buffer
//
^showlores
^showfull
^showgraphics
^showpage1
^ena80 = 0
^show80 = 0
^an3on
drawpage = 1
drawbuff = dgrbuff[1]
break
otherwise
//
// Set text mode
//
^showtext
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
call($FC58, 0, 0, 0, 0) // home()
wend
return mode
end
//
// Set display page, return other page

@ -443,33 +443,50 @@ end
// Set lores graphics, return draw buffer
//
export def grMode(mode)#1
if mode
//
// Set GR mode
//
^showlores
^showfull
^showgraphics
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
drawpage = 1
drawbuff = grbuff[1]
return 1
fin
//
// Set text mode
//
^showtext
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
call($FC58, 0, 0, 0, 0) // home()
return 0
when mode
is page1
//
// Set GR mode
//
^showlores
^showfull
^showgraphics
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
drawpage = page2
drawbuff = grbuff[page2]
break
is page2
//
// Set GR mode
//
^showlores
^showfull
^showgraphics
^showpage2
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
drawpage = page1
drawbuff = grbuff[page1]
break
otherwise
//
// Set text mode
//
^showtext
^showpage1
^ena80 = 0
^show40 = 0
^mapmain = 0
^an3off
call($FC58, 0, 0, 0, 0) // home()
wend
return mode
end
//
// Set display page, return other page

@ -1157,14 +1157,7 @@ export def hgrBLT(x, y, w, h, srcptr)#0
end
export def hgrMode(mode)#1
when mode
is 0
//
// Show text mode
//
^showpage1
^showtext
break
is 1
is page1
//
// Set HGR1 mode
//
@ -1173,21 +1166,27 @@ export def hgrMode(mode)#1
^showfull
^showhires
^showgraphics
drawpage = 1
drawbuff = hgrbuff[1]
drawpage = page2
drawbuff = hgrbuff[page2]
break
is 2
is page2
//
// Set HGR2 mode
//
memset(hgr2, 0, $2000) // Clear HGR2
^showpage1
^showpage2
^showfull
^showhires
^showgraphics
drawpage = 1
drawbuff = hgrbuff[1]
drawpage = page1
drawbuff = hgrbuff[page1]
break
otherwise
//
// Show text mode
//
^showpage1
^showtext
wend
return mode
end

@ -353,44 +353,9 @@ export def tileFromText(txtpage, tileset)#0
tileDrawStr(0, y, rowaddr[y] | txtptr, 40, tileset)
next
end
export def tileMode(mode)#1
if mode
//
// Set HGR mode
//
memset(hgr1, 0, $2000) // Clear HGR page 1
^showpage1
^showfull
^showhires
^showgraphics
drawpage = 0
drawbuff = hgr1
return 0
fin
//
// Show text mode
//
^showpage1
^showtext
return 0
end
export def tileClear#0
memset(drawbuff, $0000, drawbuff) // Clear current HGR page
end
//
// Set display page, return other page
// Set draw buffer
//
export def tileShow(page)#1
page = page & 1
^(showpage1 + page)
return page ^ 1
end
export def tileSwap#1
^(showpage1 + drawpage)
drawpage = drawpage ^ 1
drawbuff = hgrbuff[drawpage]
return drawpage
end
export def tileDrawBuf(page)#1
drawpage = page & 1
drawbuff = hgrbuff[drawpage]

@ -24,8 +24,8 @@ def dgrTest#0
byte b, l, k
word i, j, ii, ij
b = dgrMode(TRUE)
dgrDrawBuf(0)
b = dgrMode(dgrPage1)
dgrDrawBuf(dgrPage1)
for k = 15 downto 0
dgrClear(k)
next
@ -43,7 +43,7 @@ def dgrTest#0
i = 40
j = 10
^$C010
dgrDrawBuf(1)
dgrDrawBuf(dgrPage2)
while ^$C000 < 128
dgrFill(k, k, @tile1)
dgrBLT(i, j, 8, 8, @sprite1)
@ -59,7 +59,7 @@ def dgrTest#0
fin
loop
^$C010
dgrMode(FALSE)
dgrMode(dgrOff)
end
dgrTest

@ -24,8 +24,8 @@ def grTest#0
byte b, l, k
word i, j, ii, ij
b = grMode(TRUE)
grDrawBuf(0)
b = grMode(grPage1)
grDrawBuf(grPage1)
for k = 15 downto 0
grClear(k)
next
@ -43,7 +43,7 @@ def grTest#0
i = 20
j = 10
^$C010
grDrawBuf(1)
grDrawBuf(grPage2)
while ^$C000 < 128
grFill(k, k, @tile1)
grBLT(i, j, 8, 8, @sprite1)
@ -59,7 +59,7 @@ def grTest#0
fin
loop
^$C010
grMode(FALSE)
grMode(grOff)
end
grTest

@ -65,16 +65,16 @@ def testblt(sprtnum)#0
loop
end
hgrMode(TRUE)
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
hgrMode(hgrPage1)
spriteDrawBuf(hgrDrawBuf(hgrPage1)) // So we can see the compile process
sprtBall = spriteCompile(10, 10, 5, 5, @ball)
hgrColor(0)
hgrClear()
testline
memcpy($4000, $2000, $2000) // Copy to both buffers
spriteDrawBuf(hgrDrawBuf(1))
spriteDrawBuf(hgrDrawBuf(hgrPage2))
spriteAdd(0, sprtBall)
testblt(16)
getc
hgrMode(FALSE)
hgrMode(hgrOff)
done

@ -575,8 +575,8 @@ next
heapstart = heapmark()
//puts("\nBeginning available memory: "); puti(heapavail()); putln
repeat
hgrMode(TRUE)
spriteDrawBuf(hgrDrawBuf(0)) // Single buffered
hgrMode(hgrPage1)
spriteDrawBuf(hgrDrawBuf(hgrPage1)) // Single buffered
spriteAdd(SHIP_SPRTNUM, sprtShip)
spriteAdd(SPIDER_SPRTEBASE, sprtEgg3)
//
@ -617,7 +617,8 @@ repeat
puts("\nEarth has been overrun")
puts("\nby the Spiders from Mars\n")
fin
hgrMode(FALSE)
hgrMode(hgrOFF)
//hgrDrawBuf(hgrPage1)
//
// Clear sprite lists
//

@ -169,8 +169,8 @@ var sprtSplat1, sprtSplat2
var sprtWeb1, sprtWeb2, sprtWeb3
var sprtShip, sprtMissle, sprtDummy
hgrMode(TRUE)
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
hgrMode(hgrPage1)
spriteDrawBuf(hgrDrawBuf(hgrPage1)) // So we can see the compile process
sprtShip = spriteCompile(14, 14, 7, 13, @ship)
sprtMissle = spriteCompile( 6, 8, 3, 0, @missle)
sprtEgg3 = spriteCompile(14, 12, 7, 6, @egg3)
@ -185,7 +185,7 @@ sprtWeb3 = spriteCompile(20, 8, 10, 0, @web3)
sprtSplat1 = spriteCompile(20, 13, 10, 6, @splat1)
sprtSplat2 = spriteCompile(24, 17, 12, 8, @splat2)
sprtDummy = spriteCompile( 7, 8, 0, 0, @dummy)
hgrMode(FALSE)
hgrMode(hgrOff)
spriteSave("SHIP", sprtShip)
spriteSave("MISSLE", sprtMissle)
spriteSave("EGG3", sprtEgg3)

@ -1,13 +1,15 @@
include "inc/cmdsys.plh"
include "inc/hgrlib.plh"
include "inc/hgrtile.plh"
include "inc/hgrfont.plh"
sysflags reshgr1 // Reserve HGR page 1
tileMode(TRUE)
hgrMode(hgrPage1)
tileDrawBuf(hgrPage1)
hgrPutStr(5, 1, "Hello HiRes Tile Demo")
getc
tileFromText(0, @hgrFont)
getc
tileMode(FALSE)
hgrMode(hgrOff)
done

@ -30,7 +30,7 @@ SRC" GRLIB.4TH"
;
: BOUNCE
1 GRMODE DROP
0 GRMODE DROP
0 GRDRAWBUF
0 GRCLEAR
BEGIN
@ -38,7 +38,7 @@ SRC" GRLIB.4TH"
?TERMINAL
UNTIL
KEY DROP
0 GRMODE DROP
-1 GRMODE DROP
;
BOUNCE

@ -34,7 +34,7 @@ SRC" HGRLIB.4TH"
;
: BOUNCE
1 HGRMODE DROP
0 HGRMODE DROP
0 HGRDRAWBUF DROP
0 HGRSHOW DROP
BEGIN
@ -42,7 +42,7 @@ SRC" HGRLIB.4TH"
?TERMINAL
UNTIL
KEY DROP
0 HGRMODE DROP
-1 HGRMODE DROP
;
BOUNCE