COMBAT, MUDCOM, and bootstrapper.
[pdp10-muddle.git] / <sys.unsupported> / mudsub.mid.2
diff --git a/<sys.unsupported>/mudsub.mid.2 b/<sys.unsupported>/mudsub.mid.2
new file mode 100644 (file)
index 0000000..6e5e66b
--- /dev/null
@@ -0,0 +1,146 @@
+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