mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-01-07 15:31:49 +00:00
SOS interpreter launcher
This commit is contained in:
parent
5c322acf06
commit
691f153b22
155
src/libsrc/sos.pla
Normal file
155
src/libsrc/sos.pla
Normal 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
|
@ -8,6 +8,7 @@ PLVM03 = SOS.INTERP\#050000
|
|||||||
CMD = CMD\#061000
|
CMD = CMD\#061000
|
||||||
ED = ED\#FE1000
|
ED = ED\#FE1000
|
||||||
SB = SB\#FF2000
|
SB = SB\#FF2000
|
||||||
|
SOS = SOS\#FE1000
|
||||||
ROD = ROD\#FE1000
|
ROD = ROD\#FE1000
|
||||||
SIEVE = SIEVE\#FE1000
|
SIEVE = SIEVE\#FE1000
|
||||||
ARGS = ARGS\#FE1000
|
ARGS = ARGS\#FE1000
|
||||||
@ -72,7 +73,7 @@ TXTTYPE = .TXT
|
|||||||
#SYSTYPE = \#FF2000
|
#SYSTYPE = \#FF2000
|
||||||
#TXTTYPE = \#040000
|
#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:
|
clean:
|
||||||
-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVM03)
|
-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
|
./$(PLASM) -AMOW < samplesrc/mon.pla > samplesrc/mon.a
|
||||||
acme --setpc 4094 -o $(MON) 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)
|
$(ROD): samplesrc/rod.pla $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -AMO < samplesrc/rod.pla > samplesrc/rod.a
|
./$(PLASM) -AMO < samplesrc/rod.pla > samplesrc/rod.a
|
||||||
acme --setpc 4094 -o $(ROD) samplesrc/rod.a
|
acme --setpc 4094 -o $(ROD) samplesrc/rod.a
|
||||||
|
@ -26,6 +26,7 @@ cp SPIPORT#FE1000 prodos/sys/SPIPORT.REL
|
|||||||
cp SNDSEQ#FE1000 prodos/sys/SNDSEQ.REL
|
cp SNDSEQ#FE1000 prodos/sys/SNDSEQ.REL
|
||||||
cp UTHERNET#FE1000 prodos/sys/UTHERNET.REL
|
cp UTHERNET#FE1000 prodos/sys/UTHERNET.REL
|
||||||
cp UTHERNET2#FE1000 prodos/sys/UTHERNET2.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/FP6502.CODE#060000 prodos/sys/FP6502.CODE.BIN
|
||||||
cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN
|
cp ../sysfiles/ELEMS.CODE#060000 prodos/sys/ELEMS.CODE.BIN
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user