~~ I>~~~~~~~~a  ~~ q; ; ; ; EXTERNAL DECLARATIONS .EXTD USE .EXTN .ASCDB,.ASCB,WRLINE,LDBT,STBT,MOVE,CALL,RTRN .EXTN CSFM,CSPTR,CSPTP,CSLPT,CSCDR,CSPLT,CSMTA,CSBUF .EXTN .BASC,FSERR,CSDSK,CSDPB,CSDPI .ENT PATCH,STOVE .TITL SYSGEN ; ; ; ; EQUIVALENCES REFLG= 2  ;RELOCATABLE FLAGS WC= 1  ;WORD COUNT ADDRE= 6  ;ADDRESS IN RELO. DATA BLOCK DATA= 7  ;1ST DATA WORD IN RELO. DATA BLOCK AINC0= 20  ;AUTO INCREMENT REGISTER 0 RDXW0= 6  ;RADIX SYMBOL WORD 0 RDXW1= 7  ;RADIX SYMBOL WORD 1 EQUIV= 10  ;EQUIVALENCE IN ENTRY BLOCK CKSUM= 5  ;CHECKSUM WORD NMAX= 404 PRM0= 1 PRM1= 2 PRM2= 3 PRM3= 4 TMP0= 1 TMP1= 2 TMP2= 3 TMP3= 4 FA= "A-66 FB= "B-66 FC= "C-66 FD= "D-66 FE= "E-66 FF= "F-66 FG= "G-66 FH= "H-66 FI= "I-66 FJ= "J-66 FK= "K-66 FL= "L-66 FM= "M-66 FN= "N-66 FO= "O-66 FP= "P-66 FQ= "Q-66 FR= "R-66 FS= "S-66 FT= "T-66 FU= "U-66 FV= "V-66 FW= "W-66 FX= "X-66 FY= "Y-66 FZ= "Z-66 F0= 1 F1= 2 F2= 3 F3= 4 F8= 11 ; ; ; .NREL INIT: .SYSTM .RESE JSR ERR LDA 0,FMCS  ;FIXED MONITOR CORE SIZE IS MIN. STA 0,SYSCS  ; SYSTEM CORE SIZE LDA 3,@INIC1 LDA 0,INIC0  ;SET UP THE STACK ADD 0,3 STA 3,USP STA 3,USE SUB 0,0 STA 0,SSLGT,3 ;0 LENGTH FOR THIS FRAME STA 0,DSKSW STA 0,DKPSW STA 0,MTASW INCZL 0,0 STA 0,BPC LDA 0,INIC2 LDA 2,.ENTB STA 0,REFLG,2 LDA 0,.SYS0 .SYSTM .DELET JMP .+1 LDA 0,.SGNC .SYSTM .DELET JMP .+1 CALL MAIN STOVE: JSR ERR INIC0: 7 INIC1: NMAX INIC2: 22222   ;ABSOLUTE FLAGS FOR ENTRY BLOCK 2 MAIN: LDA 0,.TTO  ;OPEN $TTO ON CHANNEL 1 SUB 1,1 .SYSTM .OPEN 1 JSR ERR LDA 0,.TTI  ;OPEN $TTI ON CHANNEL 0 .SYSTM .OPEN 0 JSR ERR LDA 0,.SYS0  ;OPEN SYS000.RB ON CHANNEL 2 .SYSTM .CREAT JSR ERR .SYSTM .OPEN 2 JSR ERR CALL   ;OUTPUT A TITLE BLOCK OTBLK SUB 2,2  ;INITIALIZE AC2 MAIN0: LDA 0,.USM0  ;ASK CORE STORAGE SIZE CALL WRLINE LDA 0,.INBB CALL RDLINE CALL   ;PROCESS RESPONSE PUSM0 JMP MAIN0  ;ILLEGAL LDA 0,.USMI  ;OUTPUT USER INSTRUCTION MESSAGE CALL WRLINE MAIN1: LDA 0,.USM1  ;FIXED HEAD DISK? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN1  ;ILLEGAL RESPONSE JMP MAIN2  ;NO CALL   ;YES - PLEASE ELABORATE PUSM1 MAIN2: LDA 0,.USM2  ;DISK PACKS? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN2  ;ILLEGAL RESPONSE JMP MN20  ;NO CALL   ;YES - PLEASE ELABORATE PUSM2 JMP MAIN3 MN20: LDA 0,DSKSW INC 0,0,SZR  ;NO PACKS - THEN THERE HAD JMP INIT  ; TO BE F. H. DISK MAIN3: LDA 0,.USM3  ;MAG TAPES? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN3  ;ILLEGAL RESPONSE JMP DCL  ;NO CALL PUSM3 DCL: CALL .DCLN MAIN4: LDA 0,.USM4  ;$PTR? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN4  ;ILLEGAL RESPONSE JMP MAIN5  ;NO LDA 0,.PTRS  ;YES - PUT OUT EXTERNAL CALL ONXTB LDA 0,PTRCS  ;ADD THE DRIVER SIZE TO AC2 ADD 0,2 MAIN5: LDA 0,.USM5  ;$PTP? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN5  ;ILLEGAL RESPONSE JMP MAIN6  ;NO LDA 0,.PTPS  ;YES - PUT OUT EXTERNAL CALL ONXTB LDA 0,PTPCS  ;ADD THE DRIVER SIZE TO AC2 ADD 0,2 MAIN6: LDA 0,.USM6  ;$LPT? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN6  ;ILLEGAL RESPONSE JMP MAIN7  ;NO CALL   ;YES - PUT OUT EXTERNAL PUSM4 LDA 0,LPTCS  ;ADD THE DRIVER SIZE TO AC2 ADD 0,2 MAIN7: LDA 0,.USM7  ;$CDR? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN7  ;ILLEGAL RESPONSE JMP MAIN8  ;NO LDA 0,.CDRS  ;YES - PUT OUT EXTERNAL CALL ONXTB LDA 0,CDRCS  ;ADD THE DRIVER SIZE TO AC2 ADD 0,2 MAIN8: LDA 0,.USM8  ;$PLT? CALL WRLINE LDA 0,.INBB CALL RDLINE CALL CK01 JMP MAIN8  ;ILLEGAL RESPONSE JMP MAIN9  ;NO LDA 0,.PLTS  ;YES - PUT OUT EXTERNAL CALL ONXTB LDA 0,PLTCS  ;ADD THE DRIVER SIZE TO AC2 ADD 0,2 MAIN9: CALL   ;OUTPUT THE "START" BLOCK OSTRT LDA 0,.SYS0  ;CLOSE "SYS000.RB" .SYSTM .CLOSE 2 JSR ERR LDA 0,SYSCS ADD 2,0  ;COMPUTE THE TOTAL MONITOR SIZE LDA 1,ABSCS  ;STORE TOTAL SYSTEM SIZE IN PRM3 SUB 0,1  ;COMPUTE NMAX AND STORE IN PRM0 STA 1,PRM0,3 LDA 0,.TTO  ;CLOSE $TTO .SYSTM .CLOSE 1 JSR ERR LDA 0,.SGNC  ;OPEN "SYSGCM.CM" ON CHANNEL 1 .SYSTM .CREAT JSR ERR .SYSTM .OPEN 1 JSR ERR LDA 0,.RLC  ;OUTPUT THE COMMAND LINE WHICH CALL   ; COMPRISES THIS FILE WRLINE 1 .SYSTM .CLOSE 1 JSR ERR .SYSTM   ;RETURN TO THE CLI .RTN JSR ERR ; ; ; PROCESS USER MESSAGE 0 ; ;  AC0 - BYTE POINTER TO ASCII STRING TERMINATED ;   WITH A NULL AND SPECIFYING CORE SIZE ;  CONDITIONAL RETURNS - ;   CALLING LOC. + 1 => ILLEGAL VALUE SPECIFIED ;   CALLING LOC. + 2 => NORMAL RETURN ; ;  CONVERTS THE PASSED STRING TO BINARY, CHECKS FOR ;  A LEGAL VALUE, AND MAPS THAT VALUE TO THE TRUE ;  ABSOLUTE BINARY OF CORE STORAGE ; ; 0 PUSM0: CALL   ;CONVERT THE ASCII TO BINARY .ASCDB RTRN   ;ILLEGAL CHARACTER OR OVERFLOW LDA 0,MINCS LDA 3,MAXCS SUBZ# 0,1,SNC  ;LESS THAN MINIMUM CORE SIZE? RTRN   ; YESS ADCZ# 3,1,SZC  ;GREATER THAN MAXIMUM CORE SIZE? RTRN   ; YES MOVZR# 1,1,SZC RTRN   ;CAN'T BE AN ODD K MOVS 1,1  ;MAP THE ENTERED NUMBER TO THE ADDZL 1,1  ; TRUE BINARY CORE SIZE ADC 0,0  ;SUBTRACT ONE ADD 0,1 STA 1,ABSCS  ;STORE IN "ABSOLUTE CORE SIZE" ISZ SSRTN,2 RTRN MINCS: 14  ;RESPONSE MUST FALL BETWEEN 12 AND 32 K MAXCS: 40 ; ; PROCESS USER MESSAGE 1 ; ;  ASK THE SIZE OF THE FIXED HEAD DISK ;  OUTPUT AN ENTRY BLOCK FOR "NPBLK" ;  SET THE F.H. DSK SWITCH ;  ASSUME THIS DEVICE AS THE BOOTSTRAP AND MASTER ;  UPDATE NMAX APPROPRIATELY ;  NO ERROR RETURN, JUST REPEATED INQUIRIES ; 0 PUSM1: LDA 0,.UM10  ;"ENTER DISK STORAGE" CALL WRLINE LDA 0,.INBB  ;READ THE RESPONSE CALL RDLINE CALL   ;CONVERT TO BINARY .ASCDB JMP PUSM1  ;ILLEGAL LDA 0,MINDS  ;SMALLER THAN MINIMUM? SUBZ# 0,1,SNC JMP PUSM1  ; YES LDA 0,MAXDS  ;LARGER THAN MAXIMUM? ADCZ# 0,1,SZC JMP PUSM1  ; YES ADDZL 1,1  ;AC1 = VALUE OF "NBLKS" LDA 0,.NBLK  ;OUTPUT THE ENTRY CALL OENTB ADC 1,1  ;SET THE DISK PRESENT SWITCH STA 1,DSKSW LDA 0,.DKDC  ;ASSUME THIS DEVICE (TEMPORARILY) STA 0,MSDP  ; AS A MASTER AND... LDA 0,.DKBS  ; BOOTSTRAP DEVICE STA 0,BSP LDA 0,DSKCS  ;ADD THE DRIVER SIZE TO LDA 1,SYSCS  ; MONITOR CORE SIZE ADD 0,1 STA 1,SYSCS RTRN MINDS: 100  ;MIN = 64K MAXDS: 4000  ;MAX = 2048K ; ; DISK CLEANUP ROUTINE ; ;  OUTPUT "BPEC" ENTRY ;  INCREMENT NMAX APPROPRIATELY ;  OUTPUT "MDCT" ENTRY ;  OUTPUT THE DATA WORD AT NREL ADDRESS OF ZERO ;  OUTPUT THE APPROPRIATE REFERENCED EXTERNAL FOR ;   "MDCT" ;  OUTPUT THE UNREFERENCED EXTERNAL FOR "BOOTSTRAP" ;  OUTPUT ANY OTHER RELEVANT DISK AND MAG-TAPE UN- ;   REFERENCED EXTERNALS ; 1 .DCLN: LDA 0,.BPEC  ;OUTPUT THE "BPEC" ENTRY LDA 1,BPC CALL OENTB SUB 0,0  ;ADD THE TOTAL BUFFER SIZE TO LDA 1,BUFZ  ; THE FIXED MONITOR CORE SIZE ADD 1,0 DSZ BPC JMP .-2 LDA 1,SYSCS ADD 0,1 STA 1,SYSCS LDA 0,.MDCT LDA 1,DCLC0  ;CHANGE THE FLAGS FOR THE LDA 2,.ENTB  ; "MDCT" ENTRY STA 1,REFLG,2 LDA 2,.NXTB STA 1,REFLG,2 SUB 1,1  ;OUTPUT THE "MDCT" ENTRY CALL OENTB STA 1,PRM0,3 ;OUTPUT ONE WORD OF RELOCA- ADC 1,1  ; TABLE DATA WITH AN ABSOLUTE CALL   ; VALUE OF -1 ORLDB LDA 0,MSDP  ;OUTPUT A SPECIAL EXTERNAL WITH CALL   ; AN EQUIVALENCE OF 0 INSTEAD ONXTC   ; OF -1 LDA 0,BSP  ;OUTPUT THE APPROPRIATE BOOT- LDA 1,.ABSF STA 1,REFLG,2 CALL   ; STRAP EXTERNAL ONXTB LDA 1,MSDP LDA 0,.DKDC ISZ DSKSW  ;F.H. DISK PRESENT? JMP .DCL0  ; NO SUB# 1,0,SNR  ; YES - ALREADY EXTERNALED? JMP .DCL2  ; YES CALL   ; NO ONXTB JMP .DCL2 .DCL0: LDA 0,.DPNP ISZ DKPSW  ;DISK PACK PRSENT? JMP .DCL1  ; NO SUB# 1,0,SNR  ; YES - ALREADY EXTERNALED? JMP .DCL1  ; YES CALL   ; NO ONXTB .DCL1: LDA 0,.MTS ISZ MTASW  ;MAG TAPE PRESENT? RTRN   ; NO CALL   ; YES ONXTB RTRN .DCL2: LDA 0,.DSKD ;EXTRA DSK EXTERNAL CALL ONXTB JMP .DCL0 DCLC0: 44000  ;NORMAL RELOCATABLE FLAGS ; ; PROCESS USER MESSAGE 4 (LINE PRINTER) ; 0 PUSM4: LDA 0,.UM40  ;"ENTER COLUMN SIZE" CALL WRLINE LDA 0,.INBB  ;READ THE RESPONSE CALL RDLINE MOVZR 0,2  ;CHECK FOR LEGAL LDA 0,0,2 LDA 1,T80C LDA 2,T132C SUB 0,1,SNR JMP PUM40  ; OK - 80 COLUMN SUB 0,2,SZR  ; OK - 132 COLUMN JMP PUSM4  ; ILLEGAL - ASK AGAIN PUM40: LDA 0,.LP80  ;OUTPUT APPROPRIATE EXTERNAL MOV 2,2,SNR LDA 0,.LP13 CALL ONXTB RTRN T80C: "8*400+"0 T132C: "1*400+"3 .EOT  ?*U*U*U*UsEV'