mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-01-08 07:31:32 +00:00
Add DoubleGRaphics library
This commit is contained in:
parent
8ea34a1628
commit
8706e1ad96
192
src/libsrc/dgr.pla
Executable file
192
src/libsrc/dgr.pla
Executable file
@ -0,0 +1,192 @@
|
||||
import cmdsys
|
||||
predef memset, memcpy, heapmark, heapalloc, heaprelease
|
||||
byte MACHID
|
||||
end
|
||||
//
|
||||
// Apple II hardware constants.
|
||||
//
|
||||
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 show40 = $C00C
|
||||
const show80 = $C00D
|
||||
const mapmain = $C000
|
||||
const mapaux = $C001
|
||||
const an3on = $C05E
|
||||
const an3off = $C05F
|
||||
const dis80 = $C07E
|
||||
const ena80 = $C07F
|
||||
const page1 = 0
|
||||
const page2 = 1
|
||||
//
|
||||
// Color mapping.
|
||||
//
|
||||
byte[] evnclr = $00,$88,$11,$99,$22,$AA,$33,$BB
|
||||
byte[] = $44,$CC,$55,$DD,$66,$EE,$77,$FF
|
||||
byte[] oddclr = $00,$11,$22,$33,$44,$55,$66,$77
|
||||
byte[] = $88,$99,$AA,$BB,$CC,$DD,$EE,$FF
|
||||
|
||||
asm dgrUpdate(buff)
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
!MACRO FILLROW .rowaddr {
|
||||
LDX #39
|
||||
LDY #79
|
||||
- BIT $C054 ; PAGE 1 (MAIN MEM)
|
||||
LDA (SRC),Y
|
||||
STA .rowaddr,X
|
||||
DEY
|
||||
BIT $C055 ; PAGE 2 (AUX MEM)
|
||||
LDA (SRC),Y
|
||||
STA .rowaddr,X
|
||||
DEY
|
||||
DEX
|
||||
BPL -
|
||||
}
|
||||
LDA ESTKL,X
|
||||
STA SRCL
|
||||
LDA ESTKH,X
|
||||
STA SRCH
|
||||
STX ESP
|
||||
PHP
|
||||
SEI
|
||||
+FILLROW $0400
|
||||
INC SRCH
|
||||
+FILLROW $0480
|
||||
INC SRCH
|
||||
+FILLROW $0500
|
||||
INC SRCH
|
||||
+FILLROW $0580
|
||||
INC SRCH
|
||||
+FILLROW $0600
|
||||
INC SRCH
|
||||
+FILLROW $0680
|
||||
INC SRCH
|
||||
+FILLROW $0700
|
||||
INC SRCH
|
||||
+FILLROW $0780
|
||||
INC SRCH
|
||||
+FILLROW $0428
|
||||
INC SRCH
|
||||
+FILLROW $04A8
|
||||
INC SRCH
|
||||
+FILLROW $0528
|
||||
INC SRCH
|
||||
+FILLROW $05A8
|
||||
INC SRCH
|
||||
+FILLROW $0628
|
||||
INC SRCH
|
||||
+FILLROW $06A8
|
||||
INC SRCH
|
||||
+FILLROW $0728
|
||||
INC SRCH
|
||||
+FILLROW $07A8
|
||||
INC SRCH
|
||||
+FILLROW $0450
|
||||
INC SRCH
|
||||
+FILLROW $04D0
|
||||
INC SRCH
|
||||
+FILLROW $0550
|
||||
INC SRCH
|
||||
+FILLROW $05D0
|
||||
INC SRCH
|
||||
+FILLROW $0650
|
||||
INC SRCH
|
||||
+FILLROW $06D0
|
||||
INC SRCH
|
||||
+FILLROW $0750
|
||||
INC SRCH
|
||||
+FILLROW $07D0
|
||||
BIT $C054 ; PAGE 1 (MAIN MEM)
|
||||
PLP
|
||||
LDX ESP
|
||||
RTS
|
||||
end
|
||||
|
||||
asm vlbWait
|
||||
DEX
|
||||
- LDA $C019
|
||||
BMI -
|
||||
- LDA $C019
|
||||
BPL -
|
||||
RTS
|
||||
end
|
||||
|
||||
def dgrMode
|
||||
^showlores
|
||||
^showfull
|
||||
^showgraphics
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show80 = 0
|
||||
^mapaux = 0
|
||||
^an3on
|
||||
end
|
||||
|
||||
def txtMode
|
||||
^showtext
|
||||
^showpage1
|
||||
^ena80 = 0
|
||||
^show40 = 0
|
||||
^^mapmain = 0
|
||||
^an3on
|
||||
end
|
||||
|
||||
def dgrPlot(buff, x, y, clr)
|
||||
word pixptr
|
||||
|
||||
pixptr = buff + ((y >> 1) << 8) + (x >> 1)
|
||||
if x & 1
|
||||
clr = oddclr[clr & $0F]
|
||||
else
|
||||
clr = evnclr[clr & $0F]
|
||||
fin
|
||||
if y & 1
|
||||
^pixptr = (^pixptr & $0F) | (clr & $F0)
|
||||
else
|
||||
^pixptr = (^pixptr & $F0) | (clr & $0F)
|
||||
fin
|
||||
end
|
||||
|
||||
def dgrClr(buff, clr)
|
||||
byte row
|
||||
word fillclr
|
||||
|
||||
clr = clr & $0F
|
||||
fillclr = (oddclr[clr] << 8) | evnclr[clr]
|
||||
for row = 0 to 5
|
||||
memset(buff, fillclr, 80)
|
||||
buff.1++
|
||||
memset(buff, fillclr, 80)
|
||||
buff.1++
|
||||
memset(buff, fillclr, 80)
|
||||
buff.1++
|
||||
memset(buff, fillclr, 80)
|
||||
buff.1++
|
||||
next
|
||||
end
|
||||
|
||||
def dgrTest
|
||||
word dgrbuff
|
||||
byte clsclr
|
||||
|
||||
dgrMode
|
||||
dgrbuff = heapalloc(256*24)
|
||||
^$C010
|
||||
while ^$C000 < 128
|
||||
dgrClr(dgrbuff, clsclr)
|
||||
//vlbWait
|
||||
dgrUpdate(dgrbuff)
|
||||
clsclr++
|
||||
loop
|
||||
heaprelease(dgrbuff)
|
||||
^$C010
|
||||
txtMode
|
||||
end
|
||||
|
||||
dgrTest
|
||||
done
|
@ -16,6 +16,7 @@ ETHERIP = ETHERIP\#FE1000
|
||||
INET = INET\#FE1000
|
||||
DHCP = DHCP\#FE1000
|
||||
HTTPD = HTTPD\#FE1000
|
||||
DGR = DGR\#FE1000
|
||||
ROGUE = ROGUE\#FE1000
|
||||
ROGUEIO = ROGUEIO\#FE1000
|
||||
ROGUEMAP= ROGUEMAP\#FE1000
|
||||
@ -49,7 +50,7 @@ TXTTYPE = .TXT
|
||||
#SYSTYPE = \#FF2000
|
||||
#TXTTYPE = \#040000
|
||||
|
||||
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) $(CMD) $(MEMMGR) $(MEMTEST) $(FIBER) $(SB) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(HGR1)
|
||||
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) $(CMD) $(MEMMGR) $(MEMTEST) $(FIBER) $(SB) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(ROGUEIO) $(HGR1) $(DGR)
|
||||
|
||||
clean:
|
||||
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
|
||||
@ -154,6 +155,10 @@ $(HTTPD): samplesrc/httpd.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AM < samplesrc/httpd.pla > samplesrc/httpd.a
|
||||
acme --setpc 4094 -o $(HTTPD) samplesrc/httpd.a
|
||||
|
||||
$(DGR): libsrc/dgr.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AM < libsrc/dgr.pla > libsrc/dgr.a
|
||||
acme --setpc 4094 -o $(DGR) libsrc/dgr.a
|
||||
|
||||
$(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
|
||||
./$(PLASM) -AM < samplesrc/rogue.pla > samplesrc/rogue.a
|
||||
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
|
||||
|
Loading…
Reference in New Issue
Block a user