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:
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
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user