1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-08-21 06:29:07 +00:00

SOS interpreter launcher

This commit is contained in:
David Schmenk 2018-02-05 13:08:28 -08:00
parent 5c322acf06
commit 691f153b22
3 changed files with 162 additions and 1 deletions

155
src/libsrc/sos.pla Normal file
View File

@ -0,0 +1,155 @@
include "inc/cmdsys.plh"
include "inc/args.plh"
include "inc/fileio.plh"
word arg, ref, interp
asm equates
!SOURCE "vmsrc/plvmzp.inc"
end
//
// Exec SOS.INTERP image
//
asm sosexec(addr)#0
LDA ESTKL,X ; PULL ADDRESSES FROM INTERP HEADER
STA SRCL
LDA ESTKH,X
STA SRCH
LDY #$0A
LDA (SRC),Y
INY
STA DSTL
PHA
LDA (SRC),Y
INY
STA DSTH
PHA
LDA (SRC),Y
INY
STA TMPL
LDA (SRC),Y
STA TMPH
TYA ; SKIP INTERP HEADER FOR SRC
SEC
ADC SRCL
STA SRCL
BCC +
INC SRCH
+ LDA DSTL
CMP SRCL
LDA DSTH
SBC SRCH
BCC REVCPY
;
; FORWARD COPY
;
LDY TMPL
BEQ FORCPYLP
INC TMPH
LDY #$00
FORCPYLP LDA (SRC),Y
STA (DST),Y
INY
BNE +
INC DSTH
INC SRCH
+ DEC TMPL
BNE FORCPYLP
DEC TMPH
BNE FORCPYLP
BEQ CPYMEX
;
; REVERSE COPY
;
REVCPY ;CLC
LDA TMPL
ADC DSTL
STA DSTL
LDA TMPH
ADC DSTH
STA DSTH
CLC
LDA TMPL
ADC SRCL
STA SRCL
LDA TMPH
ADC SRCH
STA SRCH
DEC DSTH
DEC SRCH
LDY #$FF
LDA TMPL
BEQ REVCPYLP
INC TMPH
REVCPYLP LDA (SRC),Y
STA (DST),Y
DEY
CPY #$FF
BNE +
DEC DSTH
DEC SRCH
+ DEC TMPL
BNE REVCPYLP
DEC TMPH
BNE REVCPYLP
CPYMEX PLA
STA DSTH
PLA
STA DSTL
JMP (DST) ; JUMP TO INTERP
end
def seg_release(segnum)#1
byte params[2]
params.0 = 1
params.1 = segnum
perr = syscall($45, @params)
return perr
end
def strcmp(str1, str2)
byte i
if (^str1 == ^str2)
for i = ^str1 downto 1
if ^(str1 + i) <> ^(str2 + i)
return FALSE
fin
next
return TRUE
fin
return FALSE
end
if MACHID <> $F2
puts("Apple /// SOS required.\n")
return -1
fin
arg = argNext(argFirst)
if ^arg
ref = fileio:open(arg)
if ref
arg = argNext(arg)
if ^arg
fileio:setpfx(arg)
puts(arg); puts("/:\n")
fin
interp = heapmark()+1
fileio:read(ref, interp, heapavail())
fileio:close(ref)
^(interp - 1) = 8
if strcmp(interp - 1, "SOS NTRP")
//puts("INTERP opt hdr: $"); puth(interp=>$08); putln
//puts("INTERP address: $"); puth(interp=>$0A); putln
//puts("INTERP size: $"); puth(interp=>$0C); putln
fileio:close(0) // Close all files
seg_release(0) // Free all segments
sosexec(interp)
else
puts("Not a SOS.INTERP file.\n")
fin
else
puts("File not found.\n")
fin
else
puts("Usage: +SOS <SOS.INTERP> [PREFIX]\n")
fin
done

View File

@ -8,6 +8,7 @@ PLVM03 = SOS.INTERP\#050000
CMD = CMD\#061000
ED = ED\#FE1000
SB = SB\#FF2000
SOS = SOS\#FE1000
ROD = ROD\#FE1000
SIEVE = SIEVE\#FE1000
ARGS = ARGS\#FE1000
@ -72,7 +73,7 @@ TXTTYPE = .TXT
#SYSTYPE = \#FF2000
#TXTTYPE = \#040000
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
all: $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM802) $(PLVM03) $(CMD) $(PLASMAPLASM) $(CODEOPT) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(SOS) $(ROD) $(SIEVE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(TONE) $(DGR) $(DGRTEST) $(FILEIO) $(CONIO) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
clean:
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
@ -176,6 +177,10 @@ $(MON): samplesrc/mon.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMOW < samplesrc/mon.pla > samplesrc/mon.a
acme --setpc 4094 -o $(MON) samplesrc/mon.a
$(SOS): libsrc/sos.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMO < libsrc/sos.pla > libsrc/sos.a
acme --setpc 4094 -o $(SOS) libsrc/sos.a
$(ROD): samplesrc/rod.pla $(PLVM02) $(PLASM)
./$(PLASM) -AMO < samplesrc/rod.pla > samplesrc/rod.a
acme --setpc 4094 -o $(ROD) samplesrc/rod.a

View File

@ -26,6 +26,7 @@ cp SPIPORT#FE1000 prodos/sys/SPIPORT.REL
cp SNDSEQ#FE1000 prodos/sys/SNDSEQ.REL
cp UTHERNET#FE1000 prodos/sys/UTHERNET.REL
cp UTHERNET2#FE1000 prodos/sys/UTHERNET2.REL
cp SOS#FE1000 prodos/sys/SOS.REL
cp ../sysfiles/FP6502.CODE#060000 prodos/sys/FP6502.CODE.BIN
cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN