--- /dev/null
+TITLE SUBSYS -- Tops-20 Muddle Subsystem Bootstrapper
+
+ .DECSAV
+
+ O=0
+ A=1
+ B=2
+ C=3
+ D=4
+ E=5
+
+ LOC 140
+
+GTJFNB: 100000,,0
+ .NULIO,,.NULIO
+ 0
+ 0
+JOBPTR: 440700,,JOBNAM
+ -1,,[ASCIZ /SAVE/]
+ 0
+ 0
+ 0
+
+SVNSAV: 0
+JOBNAM: ASCIZ /MUDDLE/
+
+START: RESET
+ SETZ A,
+ RSCAN
+ JFCL
+ JUMPE A,NOJCL ; NO JCL, FLUSH
+ MOVN C,A
+ MOVEI A,.PRIIN
+ MOVE B,[440700,,SAVFIL]
+ SIN ; READ JCL
+
+ MOVE B,[440700,,SAVFIL]
+ MOVE D,JOBPTR
+NAMLOP: ILDB B
+ CAIG 40
+ JRST NAMDON
+ IDPB O,D
+ JRST NAMLOP
+
+NAMDON: MOVEI O,0
+ IDPB O,D
+ MOVEM B,SVNSAV
+ ILDB O,B
+ CAIL O,40
+ JRST .-2
+ MOVEI O,0
+ DPB O,B
+ MOVE A,JOBNAM
+ CAME A,[ASCII /MUDSU/]
+ JRST OTHER
+ MOVE A,[ASCII /MUDDL/]
+ MOVEM A,JOBNAM
+ MOVE A,[ASCIZ /E/]
+ MOVEM A,JOBNAM+1
+OTHER: MOVEI A,GTJFNB
+ MOVE B,SVNSAV
+ GTJFN
+ JRST NOSAVE
+ MOVEI 0,(A) ;JFN TO SAVE FILE
+ TLZ A,-1
+ MOVE B,[440000,,240000]
+ OPENF ; HAS TO BE OPEN
+ JRST NOSAV1
+ BIN
+ MOVE D,B
+; set access back to beginning
+ MOVEI B,0
+ SFPTR
+ HALTF
+; create muddle version number
+ MOVE B,[440700,,FILE]
+ MOVE C,[440700,,D]
+ ILDB E,B
+ CAIE E,"X ; "X" SIGNALS START OF VERSION NUMBER
+ JRST .-2
+VERLUP: ILDB E,C
+ CAIN E,40 ; SPACE SIGNALS END OF VERSION
+ JRST RDMDL
+ DPB E,B
+ IBP B
+ JRST VERLUP
+
+; now try to read it
+RDMDL: HRLZI A,100001
+ MOVE B,[440700,,FILE]
+ GTJFN ; JFN TO INTERPRETER
+ JRST NOMDL
+ HRLI A,400000
+ MOVE BLTPTR,[LOADGO,,B]
+ BLT BLTPTR,BLTPTR
+ JRST B
+
+LOADGO: GET ; LOAD INTERPRETER
+ MOVEI A,400000
+ GEVEC ; CONS STARTING ADDRESS
+ JRST 1(B) ; JRST TO START+1 IN INTERPRETER
+
+BLTPTR=.-LOADGO+1
+
+\f
+; junk past here is only used if there are errors
+NOJCL: HRROI A,[ASCIZ /You must specify the SAVE file to load.
+/]
+ PSOUT
+DEATH: HALTF
+ JRST .-1
+
+NOSAVE: MOVE B,A
+ HRROI A,[ASCIZ /Can't find SAVE file? (/]
+ PSOUT
+ MOVE A,SVNSAV
+NOFILE: PSOUT
+ HRROI A,[ASCIZ /): /]
+ PSOUT
+ JRST ERPRNT
+
+NOSAV1: MOVE B,A
+ HRROI A,[ASCIZ /Can't OPENF SAVE file? (/]
+ PSOUT
+ HRROI A,SAVFIL
+ JRST NOFILE
+
+NOMDL: MOVE B,A
+ HRROI A,[ASCIZ /No Muddle Interpreter? (/]
+ PSOUT
+ HRROI A,FILE
+ JRST NOFILE
+
+ERPRNT: HRRZI A,-1
+ HRLI B,400000
+ MOVEI C,0
+ ERSTR ; PRINT ERROR
+ HALTF ;UNDEFINED ERROR.
+ HALTF ;CHOMPING DEST.
+ HALTF ;WON.
+ JRST DEATH
+
+FILE: ASCIZ /PS:<MDL>MDLXXX.EXE/
+SAVFIL: BLOCK 20.
+
+ END START