mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-06-09 10:29:35 +00:00
Restructure project source
This commit is contained in:
parent
5118b70b30
commit
a03521eb4c
18
src/inc/stdlib.plh
Normal file
18
src/inc/stdlib.plh
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import stdlib
|
||||||
|
predef putc, putln, puts, getc, gets
|
||||||
|
predef call, syscall
|
||||||
|
predef heapmark, heapallocallign, heapalloc, heaprelease, heapavail
|
||||||
|
predef memset, memcpy
|
||||||
|
predef isugt, isuge, isult, isule
|
||||||
|
predef load, exec
|
||||||
|
word MACHID, sysvars
|
||||||
|
;
|
||||||
|
; System flags: memory allocator screen holes.
|
||||||
|
;
|
||||||
|
const restxt1 = $0001
|
||||||
|
const restxt2 = $0002
|
||||||
|
const reshgr1 = $0004
|
||||||
|
const reshgr2 = $0008
|
||||||
|
const resxhgr1 = $0010
|
||||||
|
const resxhgr2 = $0020
|
||||||
|
end
|
9
src/inc/testlib.plh
Normal file
9
src/inc/testlib.plh
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import testlib
|
||||||
|
predef puti, putln
|
||||||
|
word print
|
||||||
|
const dec = 0
|
||||||
|
const hex = 2
|
||||||
|
const newln = 4
|
||||||
|
const str = 6
|
||||||
|
const char = 8
|
||||||
|
end
|
98
src/makefile
Executable file → Normal file
98
src/makefile
Executable file → Normal file
|
@ -1,16 +1,19 @@
|
||||||
.SUFFIXES =
|
.SUFFIXES =
|
||||||
AFLAGS = -o $@
|
AFLAGS = -o $@
|
||||||
LFLAGS = -C default.cfg
|
|
||||||
PLVM = plvm
|
PLVM = plvm
|
||||||
PLVM01 = A1PLASMA\#060280
|
PLVM01 = A1PLASMA\#060280
|
||||||
PLVM02 = PLASMA.SYSTEM\#FF2000
|
PLVM02 = PLASMA.SYSTEM\#FF2000
|
||||||
PLVM03 = SOS.INTERP\#050000
|
PLVM03 = SOS.INTERP\#050000
|
||||||
CMD = CMD\#FF2000
|
CMD = CMD\#FF2000
|
||||||
ROD = ROD\#FE1000
|
ROD = ROD\#FE1000
|
||||||
|
HELLO = HELLO\#FE1000
|
||||||
HGR1 = HGR1\#FE1000
|
HGR1 = HGR1\#FE1000
|
||||||
|
HGR1TEST= HGR1TEST\#FE1000
|
||||||
|
TEST = TEST\#FE1000
|
||||||
|
TESTLIB = TESTLIB\#FE1000
|
||||||
PLASM = plasm
|
PLASM = plasm
|
||||||
INCS = tokens.h symbols.h lex.h parse.h codegen.h
|
INCS = toolsrc/tokens.h toolsrc/symbols.h toolsrc/lex.h toolsrc/parse.h toolsrc/codegen.h
|
||||||
OBJS = plasm.c parse.o lex.o codegen.o
|
OBJS = toolsrc/plasm.c toolsrc/parse.o toolsrc/lex.o toolsrc/codegen.o
|
||||||
#
|
#
|
||||||
# Image filetypes for Virtual ][
|
# Image filetypes for Virtual ][
|
||||||
#
|
#
|
||||||
|
@ -21,62 +24,75 @@ TXTTYPE = .TXT
|
||||||
#
|
#
|
||||||
# Image filetypes for CiderPress
|
# Image filetypes for CiderPress
|
||||||
#
|
#
|
||||||
#RELTYPE = \#fe1000
|
#RELTYPE = \#FE1000
|
||||||
|
#INTERPTYPE = \#050000
|
||||||
#BINTYPE = \#060000
|
#BINTYPE = \#060000
|
||||||
#SYSTYPE = \#ff2000
|
#SYSTYPE = \#FF2000
|
||||||
#TXTTYPE = \#040000
|
#TXTTYPE = \#040000
|
||||||
|
|
||||||
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) $(CMD) $(ROD) $(HGR1)
|
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03) $(CMD) $(ROD) $(HGR1)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm *.o *~ *.a *.SYM $(CMD) *\#FE1000 $(ROD) $(HGR1) $(PLASM) $(PLVM)
|
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
|
||||||
|
-rm toolsrc/*.o toolsrc/*~ toolsrc/*.a
|
||||||
|
-rm vmsrc/*.o vmsrc/*~ vmsrc/*.a vmsrc/*.sym
|
||||||
|
-rm samplesrc/*.o samplesrc/*~ samplesrc/*.a
|
||||||
|
|
||||||
|
#
|
||||||
|
# PLASMA compiler: plasm
|
||||||
|
#
|
||||||
$(PLASM): $(OBJS) $(INCS)
|
$(PLASM): $(OBJS) $(INCS)
|
||||||
cc $(OBJS) -o $(PLASM)
|
cc $(OBJS) -o $(PLASM)
|
||||||
|
|
||||||
$(PLVM): plvm.c
|
#
|
||||||
cc plvm.c -o $(PLVM)
|
# PLASMA VMs
|
||||||
|
#
|
||||||
|
$(PLVM): vmsrc/plvm.c
|
||||||
|
cc vmsrc/plvm.c -o $(PLVM)
|
||||||
|
|
||||||
a1cmd.a: a1cmd.pla $(PLASM)
|
vmsrc/a1cmd.a: vmsrc/a1cmd.pla $(PLASM)
|
||||||
./$(PLASM) -A < a1cmd.pla > a1cmd.a
|
./$(PLASM) -A < vmsrc/a1cmd.pla > vmsrc/a1cmd.a
|
||||||
|
|
||||||
$(PLVM01): plvm01.s a1cmd.a
|
$(PLVM01): vmsrc/plvm01.s vmsrc/a1cmd.a
|
||||||
acme -o $(PLVM01) -l PLVM01.SYM plvm01.s
|
acme -o $(PLVM01) -l vmsrc/plvm01.sym vmsrc/plvm01.s
|
||||||
|
|
||||||
cmdexec.a: cmdexec.pla $(PLASM)
|
vmsrc/cmdexec.a: vmsrc/cmdexec.pla $(PLASM)
|
||||||
./$(PLASM) -A < cmdexec.pla > cmdexec.a
|
./$(PLASM) -A < vmsrc/cmdexec.pla > vmsrc/cmdexec.a
|
||||||
|
|
||||||
$(PLVM02): plvm02.s cmdexec.a
|
$(PLVM02): vmsrc/plvm02.s vmsrc/cmdexec.a
|
||||||
acme -o $(PLVM02) -l PLVM02.SYM plvm02.s
|
acme -o $(PLVM02) -l vmsrc/plvm02.sym vmsrc/plvm02.s
|
||||||
|
|
||||||
soscmd.a: soscmd.pla $(PLASM)
|
vmsrc/soscmd.a: vmsrc/soscmd.pla $(PLASM)
|
||||||
./$(PLASM) -A < soscmd.pla > soscmd.a
|
./$(PLASM) -A < vmsrc/soscmd.pla > vmsrc/soscmd.a
|
||||||
|
|
||||||
$(PLVM03): plvm03.s soscmd.a
|
$(PLVM03): vmsrc/plvm03.s vmsrc/soscmd.a
|
||||||
acme -o $(PLVM03) -l PLVM03.SYM plvm03.s
|
acme -o $(PLVM03) -l vmsrc/plvm03.sym vmsrc/plvm03.s
|
||||||
|
|
||||||
$(CMD): cmd.pla cmdstub.s $(PLVM02) $(PLASM)
|
$(CMD): vmsrc/cmd.pla vmsrc/cmdstub.s $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -A < cmd.pla > cmd.a
|
./$(PLASM) -A < vmsrc/cmd.pla > vmsrc/cmd.a
|
||||||
acme --setpc 8192 -o $(CMD) cmdstub.s
|
acme --setpc 8192 -o $(CMD) vmsrc/cmdstub.s
|
||||||
|
|
||||||
test: test.pla testlib.pla $(PLVM) $(PLASM)
|
#
|
||||||
m4 < test.pla | ./$(PLASM) -AM > test.a
|
# Sample code
|
||||||
acme --setpc 4094 -o TEST#FE1000 test.a
|
#
|
||||||
m4 < testlib.pla | ./$(PLASM) -AM > testlib.a
|
test: samplesrc/test.pla samplesrc/testlib.pla $(PLVM) $(PLASM)
|
||||||
acme --setpc 4094 -o TESTLIB#FE1000 testlib.a
|
m4 -I inc < samplesrc/test.pla | ./$(PLASM) -AM > samplesrc/test.a
|
||||||
./$(PLVM) TEST\#FE1000
|
acme --setpc 4094 -o $(TEST) samplesrc/test.a
|
||||||
|
m4 -I inc < samplesrc/testlib.pla | ./$(PLASM) -AM > samplesrc/testlib.a
|
||||||
|
acme --setpc 4094 -o $(TESTLIB) samplesrc/testlib.a
|
||||||
|
./$(PLVM) $(TEST)
|
||||||
|
|
||||||
$(ROD): rod.pla $(PLVM02) $(PLASM)
|
$(ROD): samplesrc/rod.pla $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -AM < rod.pla > rod.a
|
./$(PLASM) -AM < samplesrc/rod.pla > samplesrc/rod.a
|
||||||
acme --setpc 4094 -o $(ROD) rod.a
|
acme --setpc 4094 -o $(ROD) samplesrc/rod.a
|
||||||
|
|
||||||
$(HGR1): hgr1.pla hgr1test.pla $(PLVM02) $(PLASM)
|
$(HGR1): samplesrc/hgr1.pla samplesrc/hgr1test.pla $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -AM < hgr1test.pla > hgr1test.a
|
./$(PLASM) -AM < samplesrc/hgr1test.pla > samplesrc/hgr1test.a
|
||||||
acme --setpc 4094 -o HGR1TEST.REL#FE1000 hgr1test.a
|
acme --setpc 4094 -o $(HGR1TEST) samplesrc/hgr1test.a
|
||||||
./$(PLASM) -AM < hgr1.pla > hgr1.a
|
./$(PLASM) -AM < samplesrc/hgr1.pla > samplesrc/hgr1.a
|
||||||
acme --setpc 4094 -o $(HGR1) hgr1.a
|
acme --setpc 4094 -o $(HGR1) samplesrc/hgr1.a
|
||||||
|
|
||||||
hello: hello.pla $(PLVM) $(PLASM)
|
hello: samplesrc/hello.pla $(PLVM) $(PLASM)
|
||||||
m4 < hello.pla | ./$(PLASM) -AM > hello.a
|
m4 -I inc < samplesrc/hello.pla | ./$(PLASM) -AM > samplesrc/hello.a
|
||||||
acme --setpc 4094 -o HELLO#FE1000 hello.a
|
acme --setpc 4094 -o $(HELLO) samplesrc/hello.a
|
||||||
./$(PLVM) HELLO#FE1000
|
./$(PLVM) $(HELLO)
|
||||||
|
|
8
src/samplesrc/hello.pla
Normal file
8
src/samplesrc/hello.pla
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import STDLIB
|
||||||
|
predef puts
|
||||||
|
end
|
||||||
|
|
||||||
|
byte hellostr[] = "Hello, world.\n"
|
||||||
|
|
||||||
|
puts(@hellostr)
|
||||||
|
done
|
|
@ -54,7 +54,7 @@ word hcolor[] = $0000,$552A,$2A55,$7F7F,$8080,$D5AA,$AAD5,$FFFF
|
||||||
; def draw_scan(d8p8, scanptr)
|
; def draw_scan(d8p8, scanptr)
|
||||||
;
|
;
|
||||||
asm draw_scan
|
asm draw_scan
|
||||||
!SOURCE "plvm02zp.inc"
|
!SOURCE "vmsrc/plvm02zp.inc"
|
||||||
WFIXL = $80
|
WFIXL = $80
|
||||||
WFIXH = $81
|
WFIXH = $81
|
||||||
WINT = $82
|
WINT = $82
|
150
src/samplib.s
150
src/samplib.s
|
@ -1,150 +0,0 @@
|
||||||
;
|
|
||||||
; Sample PLASMA library.
|
|
||||||
;
|
|
||||||
!TO "samplib.bin", PLAIN
|
|
||||||
* = $1000
|
|
||||||
;
|
|
||||||
; DATA/CODE SEGMENT
|
|
||||||
;
|
|
||||||
_SEGBEGIN
|
|
||||||
!WORD _SEGEND-_SEGBEGIN ; LENGTH OF HEADER + CODE/DATA + BYTECODE SEGMENT
|
|
||||||
;
|
|
||||||
; MODULE HEADER
|
|
||||||
;
|
|
||||||
!WORD $DA7E ; MAGIC #
|
|
||||||
!WORD _SUBSEG ; BYTECODE SUB-SEGMENT
|
|
||||||
!WORD _INIT ; BYTECODE INIT ROUTINE
|
|
||||||
;
|
|
||||||
; MODULE DEPENDENCY LIST
|
|
||||||
; NOTE: DCI = PSUEDO OP FOR ASCII STRING WITH HI BIT SET EXCEPT LAST CHAR
|
|
||||||
;
|
|
||||||
;DCI "STDLIB"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "STDLI"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'B'
|
|
||||||
;DCI "FILEIO"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "FILEI"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'O'
|
|
||||||
!BYTE 0
|
|
||||||
;
|
|
||||||
; NATIVE CODE + GLOBAL DATA
|
|
||||||
;
|
|
||||||
COUNT !WORD 0
|
|
||||||
INCCNT
|
|
||||||
FIXUP1 INC COUNT
|
|
||||||
BNE XINIT
|
|
||||||
FIXUP2 INC COUNT+1
|
|
||||||
XINIT RTS
|
|
||||||
;
|
|
||||||
; BYTECODE SUB-SEGMENT
|
|
||||||
;
|
|
||||||
_SUBSEG
|
|
||||||
MYFUNC !BYTE $58, $01, $16 ; ENTER 1,16
|
|
||||||
!BYTE $66, $02 ; LLW 2
|
|
||||||
!BYTE $2A, $01 ; CB 1
|
|
||||||
!BYTE $54 ; CALL EXTERN(1) "OPEN"
|
|
||||||
FIXUP4 !WORD $0000
|
|
||||||
!BYTE $6E, $04 ; DLW 4
|
|
||||||
!BYTE $54 ; CALL EXTERN(3) "READ"
|
|
||||||
FIXUP5 !WORD $0000
|
|
||||||
!BYTE $30 ; DROP
|
|
||||||
!BYTE $66, $04 ; LLW 4
|
|
||||||
!BYTE $54 ; CALL EXTERN(2) ; "CLOSE"
|
|
||||||
FIXUP6 !WORD $0000
|
|
||||||
!BYTE $30 ; DROP
|
|
||||||
!BYTE $6A ; LAW COUNT
|
|
||||||
FIXUP7 !WORD $0000
|
|
||||||
!BYTE $54 ; CALL INCNT
|
|
||||||
FIXUP8 !WORD $0000
|
|
||||||
!BYTE $5A ; LEAVE
|
|
||||||
_INIT
|
|
||||||
!BYTE $5C ; RET
|
|
||||||
;
|
|
||||||
; END OF CODE/DATA + BYTECODE SEGMENT
|
|
||||||
;
|
|
||||||
_SEGEND
|
|
||||||
;
|
|
||||||
; BYTCODE FUNCTION DICTIONARY
|
|
||||||
;
|
|
||||||
!BYTE $A1 ; FIXUP FLAGS
|
|
||||||
!WORD MYFUNC ; FIXUP OFFSET
|
|
||||||
!BYTE $00 ; FIXUP LO BYTE (OF HI BYTE)/IMPORT INDEX
|
|
||||||
;
|
|
||||||
; RE-LOCATION DICTIONARY (FIXUP TABLE)
|
|
||||||
;
|
|
||||||
!BYTE $81 ; FIXUP FLAGS
|
|
||||||
!WORD FIXUP1+1 ; FIXUP OFFSET
|
|
||||||
!BYTE $00 ; FIXUP LO BYTE (OF HI BYTE)/IMPORT INDEX
|
|
||||||
!BYTE $81
|
|
||||||
!WORD FIXUP2+1
|
|
||||||
!BYTE $00
|
|
||||||
!BYTE $91 ; IMPORT FIXUP
|
|
||||||
!WORD FIXUP4
|
|
||||||
!BYTE $01 ; IMPORT INDEX 1
|
|
||||||
!BYTE $91
|
|
||||||
!WORD FIXUP5
|
|
||||||
!BYTE $03
|
|
||||||
!BYTE $91
|
|
||||||
!WORD FIXUP6
|
|
||||||
!BYTE $02
|
|
||||||
!BYTE $81
|
|
||||||
!WORD FIXUP7
|
|
||||||
!BYTE $00
|
|
||||||
!BYTE $81
|
|
||||||
!WORD FIXUP8
|
|
||||||
!BYTE $00
|
|
||||||
!BYTE 0 ; END OF RLD
|
|
||||||
;
|
|
||||||
; EXTERNAL/ENTRY SYMBOL DIRECTORY
|
|
||||||
;;
|
|
||||||
; IMPORT TABLE
|
|
||||||
;
|
|
||||||
IMPTBL ;DCI "OPEN" ; EXTERNAL SYMBOL NAME
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "OPE"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'N'
|
|
||||||
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
||||||
!WORD 1 ; SYMBOL INDEX
|
|
||||||
;DCI "CLOSE"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "CLOS"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'E'
|
|
||||||
!BYTE $10
|
|
||||||
!WORD 2
|
|
||||||
;DCI "READ"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "REA"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'D'
|
|
||||||
!BYTE $10
|
|
||||||
!WORD 3
|
|
||||||
;DCI "MEMSET"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "MEMSE"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'T'
|
|
||||||
!BYTE $10
|
|
||||||
!WORD 4
|
|
||||||
;
|
|
||||||
; EXPORT TABLE
|
|
||||||
;
|
|
||||||
EXPTBL ;DCI "INCNT" ; ENTRY SYMBOL NAME
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "INCN"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'T'
|
|
||||||
!BYTE $08 ; ENTRY SYMBOL FLAG
|
|
||||||
!WORD INCCNT ; OFFSET
|
|
||||||
;DCI "MYFUNC"
|
|
||||||
!CT "hi.ascii"
|
|
||||||
!TX "MYFUN"
|
|
||||||
!CT RAW
|
|
||||||
!TX 'C'
|
|
||||||
!BYTE $08
|
|
||||||
!WORD MYFUNC
|
|
||||||
!BYTE 0 ; END OF ESD
|
|
|
@ -104,7 +104,7 @@ ROMEN = $C082
|
||||||
LCRWEN = $C083
|
LCRWEN = $C083
|
||||||
LCBNK2 = $00
|
LCBNK2 = $00
|
||||||
LCBNK1 = $08
|
LCBNK1 = $08
|
||||||
!SOURCE "plvm02zp.inc"
|
!SOURCE "vmsrc/plvm02zp.inc"
|
||||||
end
|
end
|
||||||
;
|
;
|
||||||
; CALL PRODOS
|
; CALL PRODOS
|
|
@ -27,6 +27,6 @@ INTERP = $03D0
|
||||||
JMP $1000
|
JMP $1000
|
||||||
_CMDBEGIN = *
|
_CMDBEGIN = *
|
||||||
!PSEUDOPC $1000 {
|
!PSEUDOPC $1000 {
|
||||||
!SOURCE "cmd.a"
|
!SOURCE "vmsrc/cmd.a"
|
||||||
_CMDEND = *
|
_CMDEND = *
|
||||||
}
|
}
|
|
@ -965,5 +965,5 @@ LEAVE LDY #$01
|
||||||
PLA
|
PLA
|
||||||
STA IFPH
|
STA IFPH
|
||||||
RET RTS
|
RET RTS
|
||||||
A1CMD !SOURCE "a1cmd.a"
|
A1CMD !SOURCE "vmsrc/a1cmd.a"
|
||||||
SEGEND = *
|
SEGEND = *
|
|
@ -38,7 +38,7 @@ ALTRDOFF= $C002
|
||||||
ALTRDON = $C003
|
ALTRDON = $C003
|
||||||
ALTWROFF= $C004
|
ALTWROFF= $C004
|
||||||
ALTWRON = $C005
|
ALTWRON = $C005
|
||||||
!SOURCE "plvm02zp.inc"
|
!SOURCE "vmsrc/plvm02zp.inc"
|
||||||
STRBUF = $0280
|
STRBUF = $0280
|
||||||
;**********************************************************
|
;**********************************************************
|
||||||
;*
|
;*
|
||||||
|
@ -260,7 +260,7 @@ START LDA #$00
|
||||||
LDA #$BF
|
LDA #$BF
|
||||||
STA IFPH
|
STA IFPH
|
||||||
LDX #ESTKSZ/2
|
LDX #ESTKSZ/2
|
||||||
!SOURCE "cmdexec.a"
|
!SOURCE "vmsrc/cmdexec.a"
|
||||||
DISABLE80 !BYTE 21, 13, '1', 26, 13
|
DISABLE80 !BYTE 21, 13, '1', 26, 13
|
||||||
}
|
}
|
||||||
;*
|
;*
|
|
@ -1032,5 +1032,5 @@ LEAVE LDY #$01
|
||||||
STA IFPH
|
STA IFPH
|
||||||
RET RTS
|
RET RTS
|
||||||
SOSCMD = *
|
SOSCMD = *
|
||||||
!SOURCE "soscmd.a"
|
!SOURCE "vmsrc/soscmd.a"
|
||||||
SEGEND = *
|
SEGEND = *
|
BIN
sysfiles/EDASM#FF2000
Normal file
BIN
sysfiles/EDASM#FF2000
Normal file
Binary file not shown.
BIN
sysfiles/EDASM.ASM#063000
Normal file
BIN
sysfiles/EDASM.ASM#063000
Normal file
Binary file not shown.
BIN
sysfiles/EDASM.ED#063000
Normal file
BIN
sysfiles/EDASM.ED#063000
Normal file
Binary file not shown.
BIN
sysfiles/EDASM.SWAP#062000
Normal file
BIN
sysfiles/EDASM.SWAP#062000
Normal file
Binary file not shown.
BIN
sysfiles/SOS.DRIVER#0C0000
Normal file
BIN
sysfiles/SOS.DRIVER#0C0000
Normal file
Binary file not shown.
BIN
sysfiles/SOS.KERNEL#0C0000
Normal file
BIN
sysfiles/SOS.KERNEL#0C0000
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user