Fixed some typos and added COPY and DTBOOT.
authorRichard Cornwell <rcornwell@github.com>
Thu, 15 Feb 2018 16:01:26 +0000 (11:01 -0500)
committerRichard Cornwell <rcornwell@github.com>
Thu, 15 Feb 2018 16:01:26 +0000 (11:01 -0500)
17 files changed:
src/clkcss.mac
src/clock1.mac
src/cmb50.ccl
src/cmb50n.ccl
src/comcon.mac
src/copy.doc [new file with mode: 0644]
src/copy.mac [new file with mode: 0644]
src/copy.opr [new file with mode: 0644]
src/crfall.ccl
src/dtboot.mac [new file with mode: 0644]
src/dtboot.rno [new file with mode: 0644]
src/errcon.mac
src/ft40db.mac
src/ft40dd.mac
src/ft50sb.mac
src/onceb.mac
src/scnsrf.mac

index 963ddd4..2ccc5ac 100644 (file)
@@ -7,7 +7,6 @@ XP      VOLKCS,001
 ;CALLED EVERY 60TH OF A SECOND WHEN CURRENT JOB IS USER MODE\r
 ;CALLED WHEN CURRENT JOB IS IN EXEC MODE AND:\r
 ;      1. JUST STARTED TO WAIT FOR IO\r
-\r
 ;      2. JUST STARTED TO WAIT FOR A BUSY SHARABLE DEVICE\r
 ;      3. RETURNING TO USER AFTER TYPING CONTROL C\r
 ;      4. RETURNING TO USER AFTER CLOCK TRIED TO INTERRUPT\r
index 7c7bcdf..997a4a6 100644 (file)
@@ -66,7 +66,7 @@ APRPAR: CONSZ PI,600000               ;MEM PARITY ERROR OR POWER FAILURE?
        CONO PI,REQCLK          ;REQUEST INTERRUPT ON CLK CHANNEL\r
        CONSZ APR,@APRIN1       ;IS USER ENABLE FOR ANY FLAGS(INCLUDING CLOCK)\r
                                ; RH ALSO MODIFIED EACH TIME A USER RUNS\r
-       JRST APRER              ;YES, GO PROCESS TRAP\r
+       JRST APRER1             ;YES, GO PROCESS TRAP\r
        CONO APR,1000+APRCHN    ;NO, CLEAR ONLY THE CLOCK FLAG\r
        JEN @APRCHL             ;DISMISS INTERRUPT\r
 \r
@@ -96,7 +96,6 @@ APRER4:       EXCH JDAT,JOBDAT        ;YES, SAVE JDAT, GET CURRENT JOB DATA AREA ADR.
        EXCH JDAT,JOBDAT        ;RESTORE JDAT,JOBDAT\r
        CONO APR,440+APRCHN     ;DISBALE FOV, AROVF IN CASE ON\r
                                ;SO USER MUST REENABLE WITH SETAPR UUO\r
-\r
 APRER3:        TLZ     TAC,440000      ;CLEAR FOV (PC CHANGE ON PDP-6) AND AR OVF FLAGS\r
                                ; SO INTERRUPT MAY BE DISMISSED\r
        EXCH    TAC,APRCHL      ;RESTORE TAC & APRCHL\r
@@ -141,7 +140,6 @@ IFN FTHALT,<
 ;THEN CALLS SCHEDULER\r
 ;IF THE CURRENT JOB IS IN EXEC MODE THE ABOVE 4 TASKS ARE\r
 ;DELAYED UNTIL THE CURRENT JOB ENTERS A STOPPABLE STATE: I.E., UNTIL\r
-\r
 ;      1. JOB STARTS TO WAIT FOR A BUSY SHARABLE DEVICE\r
 ;      2. JOB STARTS TO WAIT FOR A IO TO COMPLETE\r
 ;      3. CONTROL ABOUT TO RETURN TO USER MODE\r
@@ -184,8 +182,8 @@ WSCHED:     POP PDP,USRPC           ;SAVE PC IN PROTECTED PART OF SYSTEM DATA
        MOVEI AC3,JOBDAC(JDAT)  ;SAVE ACS 0-16 IN DUMP ACS\r
        BLT AC3,JOBD16(JDAT)    ;IN CURRENT JOB DATA AREA\r
        MOVEI PDP,NULPDL        ;NULL JOB PD LIST\r
-       HRLI PDP,MJOBP1         ; OTHERWISE GET PD OUF\r
-\r
+       HRLI PDP,MJOBP1         ;USED TO CALL SCHEDULER AND COMMAND DECODE\r
+                               ; OTHERWISE GET PD OUF\r
        JRST RSCHED             ;GO RESCHEDULE\r
 \r
 ;HERE AT UUO LEVEL WHEN CURRENT JOB RETURNS TO USER MODE\r
@@ -223,7 +221,6 @@ CLKINT:     SKIPN CLKFLG            ;CLK INTERRUPT REQUEST?
        JEN @CLKCHL\r
 \r
 SAVPC: MOVEM 17,USRPC          ;SAVE PC IN PROTECTED PART OF SYSTEM DATA\r
-\r
                                ; STORAGE FOR CURRENT JOB\r
 CLKERR:        SKIPN 17,JOBDAT         ;CURRENT JOB DATA AREA, IS THERE ONE?\r
        MOVEI 17,NULDAT         ;NO, MUST BE NULL JOB OR CORE 0\r
@@ -330,7 +327,8 @@ EXTERNAL JOB,JOBDAT,JOBPRT,USRPRT,USRHCU,JOBJDA
                                ; SINCE IT DOES IO INTO AND OUT OF\r
                                ; CHANNEL LOCATIONS (JOBJDA+1..,JOBJDA+17),\r
        ADD JA,T1               ;RELOCATE TO USER AREA\r
-       BLT T,JOBJDA(JA)        ; STOP WITH USER CHANNEL 0-1+C(USRHCU)\r
+       BLT T,JOBJDA(JA)        ;MOVE TO USER JOB DATA AREA\r
+                               ; STOP WITH USER CHANNEL 0-1+C(USRHCU)\r
 \f;RESTORE SOFTWARE STATE OF NEW JOB,THEN HARDWARE STATE\r
 \r
 INTERNAL NULJOB,NULADR\r
@@ -350,7 +348,6 @@ IFN FTHALT,<
        MOVEI T,USRPRT          ;NO, DEST,#PROTECTED AREA IN MONITOR\r
        HRLI T,JOBPRT(JA)       ;SOURCE#FIRST PROTECT LOC. IN JB  DATA AREA\r
        SKIPL T1,JOBHCU(JA)     ;MOVE NO. OF USER IO CHAN. IN USE\r
-       \r
        CAILE T1,17             ;MUST BE 17 OR LESS(IO MIGHT CLOBBER\r
                                ; IF ADRRESS CHECKING MISSES\r
        MOVEI T1,0              ;MOVEJUST CHAN 0 IF NEG. OR GREATER THAN 17\r
@@ -509,6 +506,7 @@ KSTOP:      MOVSI TAC,JNA+JLOG+JACCT        ;CLEAR JOB NUMBER ASSIGNED AND LOGGED IN BITS
        ANDCAM TAC,JBTSTS(ITEM)\r
 IFN FTLOGIN,<\r
 EXTERN PRJPRG\r
+\r
        SETZM PRJPRG(ITEM)      ;CLEAR PROJECT-PROGRAMMER NUMBER WHEN JOB LOGS OUT\r
 >\r
                        ; IF THIS IS THE LARGEST JOB IN USE,FIND NEXT\r
@@ -600,6 +598,7 @@ IFE FTSWAP,<
 IFN FTSWAP,<\r
        JRST REQUE              ;SET REQUE JOB FLAG\r
 >\r
+\r
        SKIPL TAC,JBTSTS(ITEM)  ;RUN FLAG OFF?\r
        TLNN    TAC,JERR        ;YES, ERROR FLAG ON?\r
        JRST    STOP2           ;NO\r
@@ -610,7 +609,7 @@ IFN FTSWAP,<
 ;OR IS IN CORE AND HAS ACTIVE DEVICES.\r
 ;CALLED FROM COMMAND DECODER\r
 ;CALL: MOVE ITEM,JOB NO.\r
-       PUSHJ PDP,DLYCOM\r
+;      PUSHJ PDP,DLYCOM\r
 \r
 INTERNAL DLYCOM\r
 \r
@@ -693,7 +692,6 @@ EXTERNAL JOBPC,JOBDAC,JOBD17,TTYSET,JOBOPC,JOBPD1
 USTART:        MOVE TAC,JOBPC(JDAT)    ;GET OLD PC\r
        TLNE TAC,USRMOD         ;IS IT IN USER MODE TOO?\r
        JRST USTRT1             ;YES, DUMP ACS AND PC FLAGS ARE ALREADY HIS\r
-\r
        MOVEI TAC,JOBDAC(JDAT)  ;NO. MOVE USERS(UUO) ACS TO DUMP ACS\r
        HRL TAC,JDAT            ;SOURCE=REL, 0,DEST,=JOBDAC IN JOB DATA AREA\r
        BLT TAC,JOBD17(JDAT)    ;MOVE ALL ACS\r
@@ -709,13 +707,14 @@ USTRT1:   MOVEM TAC,JOBOPC(JDAT)  ;STORE OLD PC FOR USER TO LOOK AT
 MSTART:        MOVEM TAC1,JOBPC(JDAT)  ;STORE NEW PC\r
        MOVSI TAC,JERR+WTMASK\r
        ANDCAM TAC,JBTSTS(ITEM) ;CLEAR ERROR AND WAIT STATUS BITS\r
-                               ;SET TTY STATE TO INITAL COND.\r
+       JRST TTYSET             ;SET TTY STATE TO INITAL COND.\r
                                ; TTYUSR OR TTYURC SHOULD BE CALLED\r
                                ; TO INDICATE WHETHER TTY TO USER OR EXEC MODE\r
                                ; AND THAT JOB IS TO RUN(RUN BIT =1) WHEN\r
                                ; MONITOR COMMAND RESPONSE FINISHES.\r
                                ; SEE SETRUN BELOW\r
 \f\r
+\r
 ;ROUTINE TO SET JOB STATUS RUN BIT(RUN)\r
 ;CALLED BY SCANNER SERVICE WHEN TTY MONITOR COMMAND\r
 ;RESPONSE FINISHES,  THIS ACTION IS ENABLED BY CALLING\r
@@ -836,7 +835,6 @@ INTERNAL MTWAIT,STWAIT,DTWAIT,DCWAIT,DAWAIT,MQWAIT,AUWAIT
 EXTERNAL JOB,REQTAB\r
 \r
 MTWAIT:DTWAIT:DCWAIT:STWAIT:DAWAIT:MQWAIT:AUWAIT:\r
-\r
 DVWAIT:        MOVE AC1,(PDP)          ;GET ADR. OF CALLER\r
        MOVE AC1,-2(AC1)        ;GEET AOSLE XXREQ INSTRUCTION\r
        JRST .+2\r
@@ -870,6 +868,7 @@ EXTERNAL WSQ,WSAVAL,TSQ,TSAVAL,JOB,PJOBN
 \r
 PJBS2: POINT JWSIZ,JBTSTS(TAC),JWPOS   ;BYTE POINTER TO JOB STATUS\r
                                ; WORD QUEUE CODE\r
+\r
 STTIOD: MOVEI TAC1,TSQ         ;SET TTY IO WAIT SATISFIED QUEUE CODE\r
        AOS TSAVAL\r
        JRST SETIO1\r
@@ -877,6 +876,7 @@ SETIOD:     MOVEI TAC1,WSQ          ;REQUE TO WAIT SATISFIED Q
        AOS WSAVAL              ;INCR, NO, OF JOBS WITH IO WAIT\r
                                ; SATISFIED, NON-ZERO WSAVAL WILL\r
                                ; CAUSE SCHED, TO SCAN FOR IO\r
+                               ; SATISFIED JOB.\r
 SETIO1:        LDB TAC,PJOBN\r
        DPB TAC1,PJBS2          ;IN JOB STATUS WORD\r
 \r
@@ -927,7 +927,8 @@ WAIT1:      MOVE IOS,DEVIOS(DEVDAT)
        POPJ PDP,               ;RETURN\r
        PUSHJ PDP,WSYNC         ;WAIT\r
        JRST WAIT1\r
-\f;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE\r
+\f\r
+;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE ROUTINE\r
 ;IE  UNTIL CURRENT BUFFER ACTIVITY IS COMPLETE\r
 ;CALLED ONLY FROM UUO LEVEL\r
 ;CALL: MOVE DEVDAT,ADR. OF DEVICE DATA BLOCK\r
@@ -944,7 +945,6 @@ WSYNC:      MOVSI IOS,IOW           ;SETUP DEVICE IO WAIT BIT
        TLNE AC3,DVTTY          ;IS THIS DEVICE A TTY?\r
        MOVEI AC1,TIOWQ         ;YES, SET TTY WAIT STATE CODE\r
        MOVE AC3,JOB            ;CURRENT JOB NO.\r
-\r
        MOVEI AC2,IOACT         ;DEVICE ACTIVE BIT\r
        CONO PI, PIOFF          ;TURN PI OFF\r
        TDNN AC2,DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE?\r
@@ -962,4 +962,5 @@ WSYNC1:     CONO PI, PION
        ANDCAB IOS, DEVIOS(DEVDAT)      ;CLEAR DEVIVCE IO-WAIT BIT\r
        POPJ PDP,\r
 \r
+\r
 CLKEND:        END\r
index 5ff6a72..9f48144 100644 (file)
@@ -1,8 +1,8 @@
-A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL
-B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL
-C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL
-D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,SEGCON.REL,PLTSER.REL,PTPSER.REL
-E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL
-F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL
-SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX
-DSK:/D_*.RLX
+A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL\r
+B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL\r
+C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL\r
+D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,SEGCON.REL,PLTSER.REL,PTPSER.REL\r
+E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL\r
+F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL\r
+SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX\r
+DSK:/D_*.RLX\r
index 3b51e94..954ebfd 100644 (file)
@@ -1,8 +1,8 @@
-A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL
-B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL
-C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL
-D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,PLTSER.REL,PTPSER.REL
-E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL
-F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL
-SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX
-DSK:/D_*.RLX
+A.RLX_CDRSR6.REL,CDRSRX.REL,CLKCSS.REL,CLOCK1.REL,COMCON.REL,CORE1.REL\r
+B.RLX_DCSINT.REL,DIS340.REL,DIST30.REL,DLSINT.REL,DPDINT.REL,DSKINT.REL\r
+C.RLX_DSKSER.REL,DTASRN.REL,DTCSRN.REL,ERRCON.REL,JOBDAT.REL,LPTSER.REL\r
+D.RLX_MTASRX.REL,MTCSR6.REL,NULSEG.REL,PLTSER.REL,PTPSER.REL\r
+E.RLX_PTRSER.REL,PTYSRF.REL,PTYSRH.REL,SCHEDB.REL,SCNSRF.REL,UUOCON.REL\r
+F.RLX_PATCH.REL,SYSINI.REL,SYSMAK.REL,EDDT.REL,ONCEB.REL\r
+SYS50.REL/B_A.RLX,B.RLX,C.RLX,D.RLX,E.RLX,F.RLX\r
+DSK:/D_*.RLX\r
index 464d953..d51df4f 100644 (file)
@@ -1,13 +1,13 @@
 TITLE COMCON - COMMAND DECODER AND SAVEGET ROUTINES - V433\r
 SUBTTL /RCC 03 JUN 69\r
 XP VCOMCN,433\r
+\r
                                ;THIS MACRO PUTS VERSION NO. IN STORAGE MAP AND GLOB\r
 \r
        ENTRY COMCON    ;ALWAYS LOAD COMCON IF LIBRARY SEARCH\r
 COMCON:\r
 \r
 ;CALLED FROM CLOCK ROUTINE WHEN 'COMCNT' IS GREATER THAN 0\r
-\r
 ;AS SET BY TTY SERVICE ROUTINE\r
 ;ALL AC'S HAVE BEEN SAVED BY CLOCK CHANNEL\r
 ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED\r
@@ -87,7 +87,8 @@ IFN FTLOGIN,<
                JRST CHKNO              ;YES\r
                JSP TAC,COMER           ;NO, TYPE "LOGIN PLEASE"\r
                ASCIZ /LOGIN PLEASE\r
-/>\r
+/\r
+>\r
 CHKNO: JUMPN ITEM,CHKRUN       ;JOB NUMBER ALREADY ASSIGNED?\r
        TLNE TAC1,NOJOBN        ;NO, DOES THIS COMMAND NEED A JOB NUMBER?\r
        JRST COMGO              ;NO\r
@@ -101,9 +102,11 @@ NUMLOP:    MOVE T,JBTSTS(ITEM)     ;SCAN FOR FREE JOB NO.
        JSP TAC,COMER           ;YES, NONE LEFT, PRINT "JOB CAPACITY EXCEEDED"\r
        ASCIZ /JOB CAPACITY EXCEEDED\r
 /\r
+\r
                                ; EVEN THROUGH THIS IS A NEW JOB NUMBER\r
                                ; IT MAY HAVE CORE ASSIGNED NOW BECAUSE IT WAS DELAYED\r
                                ; UNTIL IT COULD BE SWAPPED IN(LOGIN WITH CORE FULL)\r
+\r
 NEWJOB:        MOVEI T1,ASSCON         ;SET ASSIGNED BY CONSOLE BIT FOR TTY\r
        IORM T1,DEVMOD(DEVDAT)  ;SO OTHER JOBS CAN NOT USE\r
        SETZM DEVLOG(DEVDAT)    ;SET LOGICAL NAME TO ZERO\r
@@ -184,6 +187,7 @@ COMGO:      MOVSI   IOS,CMWRQ
        ANDCAM  IOS,(PDP)       ;NO, CLEAR REQUEU BIT IN DISP. FLAGS\r
        MOVEM   T,JBTSTS(ITEM)\r
 \r
+\r
 COMDIS:        MOVEI IOS,0             ;CLEAR IOS FOR SETTING DISPATCH ADDRESSES\r
        PUSHJ PDP,(TAC1)        ;DISPATCH TO COMMAND SETUP ROUTINE.\r
 \f;RETURN FROM COMMAND SETUP ROUTINE\r
@@ -245,7 +249,6 @@ IFN FTSWAP, <
        LDB     ITEM,PJOBN      ;GET JOB NUMBER FROM TTY DEVICE DATA BLOCK\r
        JUMPE   ITEM,CPOPJ      \r
        TLNE    T1,CMWRQ        ;REQUEUE JOB AFTER COMMAND WAIT OR ERROR?\r
-\r
        JRST    REQUE           ;YES\r
 >\r
        POPJ PDP,\r
@@ -300,7 +303,8 @@ TTYRNC=20   ;KEEP TTY IN COMMAND MODE AND START JOB
                ; WHEN COMMAND RESPONSE STOPS TYPING\r
 NOMESS=10      ;NO COMMAND RESPONSE EVER, DO NOT CALL TTYSTR\r
 \r
-               ;T TAKEN ABOVE BY 'PLSXPN' BIT\r
+               ;4 TAKEN ABOVE BY 'PLSXPN' BIT\r
+\r
 \r
 ERRFLG=1       ;COMMAND ERROR\r
 \fDEFINE NAMES<\r
@@ -380,7 +384,9 @@ IFN FTCCL,<
 DEFINE C(A,B,D) <\r
        <SIXBIT /A/>\r
 >\r
+\r
 COMTAB:        NAMES\r
+       XWD NOCORE+NOJOBN+NOLOGIN+NOINCK,NOCOM\r
 DISPL=.-COMTAB ;LENGTH OF TABLE\r
 \f;GENERATE THE DISPATCH TABLE PLUS SPECIAL BITS\r
 \r
@@ -388,7 +394,8 @@ DEFINE C(A,B,D) <
 Z      B       (D)\r
 >\r
 DISP:  NAMES\r
-\f;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE\r
+\f\r
+;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE\r
 ;WITH FOLLOWING AC'S SET:\r
 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME)\r
 ;ITEM = JOB NUMBER\r
@@ -480,8 +487,10 @@ IFE        FTLOGIN, <
        PUSHJ PDP,TTYKIL        ;RETURN TTY TO VIRGIN STATE\r
        JRST KSTOP              ;CLEAR JOB STATUS WORD AND STOP JOB\r
 \r
+\r
 ;ERROR IN COMMAND\r
 \r
+\r
 CERR:  JRST ERRMES\r
 \r
 JOBKB: SETZM   -1(PDP)         ;CLEAR NOJOBN SO COMRET WILL PRINT ERROR MSG.\r
@@ -598,7 +607,6 @@ IFN FTSWAP,<
                                ; IF ASKING FOR 0 CORE\r
 >\r
        LSH TAC1,12             ;CONVERT 1K BLOCKS TO WORDS\r
-       \r
        MOVEI TAC,-1(TAC1)      ;HIGHEST RELATIVE ADDRESS=LENGTH-1 OF LOW SEG\r
        PUSHJ PDP,CORE0         ;TRY TO ASSIGN CORE\r
        JRST COR2               ;CORE NOT AVAILABLE. GO PRINT MESSAGE\r
@@ -733,6 +741,7 @@ IFN FTCCL,<
 \r
 CCLRUN:        MOVE    TAC,[SIXBIT /COMPIL/]   ;CUSP NAME\r
        JRST    ARCOM   ;RUN IT\r
+\r
 >\r
 ;"LOGIN" - LOGIN COMMAND\r
 \r
@@ -1958,7 +1967,7 @@ OCT0:     CAIGE TEM,175           ;ALTMODES(175 OR 176)?
                                ; BEFORE [P,P] IN ATT AND GET COMMANDS.\r
        JRST    CPOPJ2  ;YES. SKIP RETURN\r
        CAIE TEM,"-"    ;DASH?\r
-       CAIG    TEM,400 ;SPACE OR CONTROL CHAR?\r
+       CAIG    TEM,40  ;SPACE OR CONTROL CHAR?\r
        JRST CPOPJ2             ;YES, ONLY LEGAL TERMINATORS\r
        CAIE TEM,","            ;COMMA?\r
        CAIN TEM,"]"            ;RIGHT BRACKET?\r
diff --git a/src/copy.doc b/src/copy.doc
new file mode 100644 (file)
index 0000000..c059b93
Binary files /dev/null and b/src/copy.doc differ
diff --git a/src/copy.mac b/src/copy.mac
new file mode 100644 (file)
index 0000000..3a2533b
--- /dev/null
@@ -0,0 +1,1037 @@
+TITLE COPY     V006    31MAR\r
+;COPYRIGHT 1968, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.\r
+REPEAT 0,<\r
+\r
+\r
+       COPY WILL RUN IN ANY AMOUNT OF CORE, HOWEVER, EFFICIENCY \r
+INCREASES WITH CORE SIZE.  SWITCHES ARE PRECEDED BY A SLASH OR\r
+ENCLOSED IN PARENTHESES AND MAY APPEAR ANYWHERE IN THE COMMAND\r
+STRING.  THE GENERAL COMMAND STRING FORMAT IS:\r
+       (OUTPUT DECTAPE):_(INPUT DECTAPE):/C\r
+\r
+       /C      COPY ALL BLOCKS FROM THE INPUT DECTAPE ONTO\r
+               THE OUTPUT DECTAPE.\r
+       /Z      ZERO ALL BLOCKS OF THE OUTPUT DECTAPE, CLEAR\r
+               THE DIRECTORY.\r
+       /V      PERFORM A WORD BY WORD COMPARISION BETWEEN\r
+               EVERY WORD OF THE INPUT AND OUTPUT DECTAPES.\r
+       /L      LOAD A BOOTSTRAP LOADER INTO A CORE BUFFER.\r
+               COPY LOOKS FOR "BSLDR.REL" ON LOGICAL DEVICE\r
+               "PTR". NOTE COPY MUST BE "SAVED" IF THE LOADER\r
+               IS TO BE PRESERVED WITH THE COPY CORE IMAGE.\r
+       /T      CAUSES A BOOTSTRAP LOADER TO BE WRITTEN ONTO\r
+               BLOCKS 0,1 AND 2 OF THE OUTPUT TAPE. COPY TYPES\r
+               "TYPE CORE BANK OR OFFSET FOR BSLDR."\r
+               OFFSET = OCTAL NUMBER 1000 TO 777600.\r
+               CORE-BANK = NNNK = 16K TO 256K,\r
+               EX:     NNNK=64K\r
+               THEN    OFFSET=177000 (TOP OF COPE - 1000)\r
+       /N      DON'T OUTPUT A DIRECTORY.\r
+       /6      LOOK FOR A DIRECTORY IN BLOCK ONE, NOT BLOCK 144.\r
+       /G      DON'T RESTART THE PROGRAM AFTER A PARITY ERROR\r
+               (BIT20), OUTPUT AN ERROR MESSAGE AND CONTINUE.\r
+    NO SW'S    SET C AND V SWITCHES (DEFAULT CONDITION).\r
+\r
+    NOTE........AT COMPLETION THE OUTPUT DECTAPE SHOULD BE REASSIGNED\r
+               TO ENSURE THAT THE DIRECTORY IN CORE IS UP TO DATE.\r
+\r
+\fTHE FOLLOWING MESSAGES MAY BE OUTPUT TO THE USER'S TELETYPE.\r
+\r
+       ?WRITE LOCK ERROR\r
+       ?INPUT (OR OUTPUT) DEVICE ERROR\r
+       ?INPUT (OR OUTPUT) CHECKSUM OR PARITY ERROR\r
+       ?INPUT (OR OUTPUT) BLOCK TOO LARGE\r
+       ?INPUT (OR OUTPUT) PREMATURE END OF FILE\r
+       000000 VERIFICATION ERRORS\r
+       ?COMMAND ERROR\r
+       ?SWITCH ERROR\r
+       ?DEVICE INIT FAILURE\r
+       ?DEVICE MUST BE A DECTAPE\r
+       ?INPUT AND OUTPUT DECTAPES MAY NOT BE THE SAME DEVICE.\r
+\r
+THE FOLLOWING MAY BE OUTPUT WHILE PROESSING "/L".\r
+       ?PTR INIT FAILURE\r
+       ?LOOKUP FAILED, "BSLDR.REL"\r
+       ?DATA ERROR ON DEVICE PTR\r
+       ?ILLEGAL BLOCKTYPE\r
+       ?CANNOT PROCESS EXTERNAL SYMBOLS\r
+       ?CANNOT PROCESS HIGH SEG'S\r
+       ?NO END BLOCK ENCOUNTERED\r
+       ?BOOTSTRAP LOADER WILL NOT FIT IN 3 BLOCKS\r
+\r
+THE FOLLOWING MAY BE OUTPUT WHILE PROCESSING "/T".\r
+       TYPE CORE BANK OR OFFSET FOR DTBOOT\r
+       ?OFFSET = 1000 TO 777600 (OCTAL)\r
+       ?EXPECTED FORMAT IS "NNNK" = 16K T0 256K\r
+       ?BOOTSTRAP LOADER IS NOT IN COPY; TRY "/L".\r
+>\r
+\f\r
+FLP=400000             ;NOT SW MODE                    **FLAGS ARE IN LH OF F**\r
+FLC=200000             ;COPY\r
+FLZ=100000             ;ZERO\r
+FLV= 40000             ;VERIFY\r
+FLT= 20000             ;TENDMP\r
+FLG= 10000             ;IGNORE PARITY ERRORS\r
+FLL=  4000             ;LIST DIR\r
+FLK=  2000             ;COLON\r
+FLA=  1000             ;LEFT ARROW\r
+FLI=   400             ;INPUT DEVICE\r
+FL2=   200             ;CHANEL TWO\r
+HSW=   100             ;HELP\r
+LSW=   20              ;REQ TO LOAD A BSLDR\r
+LFL=   10              ;A BOOTSTRAP LOADER IS IN "COPY"\r
+NSW=     4             ;NO DIRECTORY\r
+FL6=     2             ;6 FORMATTED\r
+FPT=     1             ;A PDP-10\r
+ANYSW=FLC+FLZ+FLV+FLT  ;ANYSW=0 IMPLIES FLC+FLV\r
+JOBVER=137\r
+\r
+AC0=0\r
+AC1=1\r
+AC2=2\r
+AC3=3\r
+AC4=4\r
+AC5=5\r
+AC6=6\r
+V1=1   ;VERIFY CMDLST\r
+VZ1=2  ;CMDLST TERMINATOR\r
+V2=3   ;VERIFY CMDLST\r
+VZ2=4  ;CMDLST TERM\r
+BP=5   ;BYTE POINTER\r
+C=6    ;CURRENT CHARACTER\r
+LOC=7  ;BLOCK NUMBER\r
+T=10   ;TEMP\r
+U=T+1  ;TEMP\r
+F=12   ;FLAGS\r
+UNSD2=14       ;UNUSED\r
+UNSD3=15       ;UNUSED\r
+IOS=16 ;IO STATUS\r
+P=17   ;PUSH DOWN LIST\r
+       EXTERN  JOBFF,JOBREL,JOBSA,JOBREN\r
+       LOC     JOBVER\r
+       XWD     0,6     ;;VERSION #\r
+       RELOC\r
+\f\r
+ST:    CALLI   0\r
+       MOVE    P,[IOWD 20,TTYIN+23]    ;PUSH DOWN LIST\r
+       INIT    17,1                    ;ASCII LINE\r
+       SIXBIT  /TTY/\r
+       XWD     TOUT,TIN\r
+       HALT    .                       ;INIT ERROR\r
+       PUSH    P,JOBFF\r
+       MOVEI   T,TTYIN\r
+       MOVEM   T,JOBFF\r
+       INBUF   17,1                    ;SET THE BUFFER ADR TO TTYIN\r
+       MOVEI   T,TTYOUT\r
+       MOVEM   T,JOBFF\r
+       OUTBUF  17,1                    ;SET THE BUFFER ADR TO TTYOUT\r
+       OUTPUT  17,                     ;DUMMY\r
+       SETZB   F,IDEV\r
+       SETZB   T,ODEV\r
+       POP     P,JOBFF\r
+\r
+       MOVE    T,JOBREL\r
+       SUB     T,JOBFF                 ;T=NO. OF FREE LOC\r
+       MOVE    C,JOBFF         ;\r
+       MOVEI   AC0,3777(C)     ;\r
+       CAIGE   T,3777          ;TRY FOR AT LEAST 2K OF BUFFER AREA\r
+       CALLI   AC0,11          ;CORE UUO\r
+       JFCL                    ;O WELL\r
+       SUBI    C,1             ;IOWD FORMAT "ADR-1"\r
+       ANDI    T,-200          ;T=NO. OF FREE WORDS\r
+       MOVNM   T,U             ;IOWD FORMAT "-N"\r
+       LSH     T,-7            ;T=NO. OF BLOCKS PER COPY INPUT\r
+       MOVEM   T,INC           ;COPY INCREMENT\r
+       LSH     T,-1            ;T=NO. OF BLOCKS PER VERIFY INPUT\r
+       MOVEM   T,INCV          ;VERIFY INCREMENT\r
+       HRLM    U,C             ;ASSEMBLE\r
+       MOVEM   C,LISTC         ;COPY IOWD\r
+       ASH     U,-1            ;HALVE THE "-N" FOR VERIFY\r
+       TRNE    U,100           ;"-N" MUST AGREE WITH THE INCREMENT\r
+       ADDI    U,100           ;ADJUST\r
+       HRL     C,U             ;ASSEMBLE\r
+       MOVEM   C,LISTV1        ;VERIFY IOWD #1\r
+       MOVMM   U,U             ;\r
+       ADD     C,U             ;ASSEMBLE\r
+       MOVEM   C,LISTV2        ;VERIFY IOWD #2\r
+\r
+\f      MOVEI   C,"*"\r
+       PUSHJ   P,TYPC                  ;OUTPUT CHAR\r
+       INPUT   17,\r
+       MOVE    F,FSAVE                 ;INITIAL FLAGS\r
+       SKIPA   BP,[POINT 6,ODEV]       ;ASSUME AN OUTPUT DEV\r
+COIDEV:        MOVE    BP,[POINT 6,IDEV]       ;INPUT IF LEFT-ARROW + COLON WERE SEEN  \r
+COTGET:        PUSHJ   P,TYPGET                ;RETURN A CHAR TO C\r
+       CAIN    C,"/"\r
+       JRST    COSLSH                  ;SLASH\r
+       CAIN    C,"("\r
+       JRST    COLPRN                  ;LEFT PAREN\r
+       CAIN    C,":"\r
+       JRST    COCOLN                  ;COLON\r
+       CAIE    C,12\r
+       CAIN    C,15\r
+       JRST    COCRET                  ;CR OR LF\r
+       CAIE    C,175                   ;ALTMODE?\r
+       CAIN    C,33                    ;ALTMODE?\r
+       JRST    COCRET                  ;YES\r
+       CAIN    C,176                   ;ALTMODE?\r
+       JRST    COCRET                  ;YES\r
+       CAIE    C,"="                   ;==_\r
+       CAIN    C,"_"\r
+       JRST    COLARO                  ;LEFT ARROW\r
+       CAIGE   C,"0"                   ;\r
+       JRST    ERRCMD                  ;\r
+       CAILE   C,"9"                   ;ILLEGAL CHAR?\r
+       CAIL    C,"A"                   ;\r
+       CAILE   C,"Z"                   ;\r
+       JRST    ERRCMD                  ;\r
+       SUBI    C,40                    ;6 BITIZE IT\r
+       TLNE    BP,770000               ;ACCEPY 6 CHARS ONLY\r
+       IDPB    C,BP                    ;ASSEMBLE AN I/O DEV NAME\r
+       JRST    COTGET                  ;\r
+\fCOLPRN:       TLZA    F,FLP                   ;ENTER PAREN MODE\r
+COEXIT:        JUMPL   F,COTGET                ;NORMAL EXIT\r
+COSLSH:        PUSHJ   P,TYPGET                ;SLASH - RETURN SW IN C\r
+       MOVSI   U,-LEN                  ;U=-SWTAB LEN,0\r
+COSWLP:        MOVE    T,SWTAB(U)              ;T=FLAG,CHAR\r
+       CAIN    C,(T)                   ;C=0,CHAR\r
+       TDOA    F,T                     ;F=FLAGS,CHARS ANDED\r
+       AOBJN   U,COSWLP                ;MORE SW'S? LOOP\r
+       JUMPL   U,COEXIT                ;MATCH OR MORE SW? LOOP\r
+       JRST    ERRSW                   ;NOT A SWITCH\r
+\r
+COLARO:        TLZE    F,FLK                   ;CLEAR COLON FLAG\r
+       TLOE    F,FLA                   ;SET LEFT ARROW FLAG\r
+       JRST    ERRCMD                  ;TOO MANY ARROWS,NOT ENOUGH KOLONS\r
+       JRST    COIDEV                  ;NEXT DEVICE MUST BE INPUT\r
+\r
+COCOLN:        TLZ     BP,770000               ;ACCEPT NO MORE CHARS.\r
+       TLON    F,FLK                   ;SET KOLON FLAG\r
+       JUMPGE  BP,COTGET               ;NORMAL EXIT\r
+       JRST    ERRCMD                  ;NULL NAME, TOO MANY COLONS\r
+\r
+COCRET:        TLZE    F,HSW           ;HELP?\r
+       JRST    HELP            ;\r
+       TLZE    F,LSW           ;LOADING A LOADER?\r
+       JRST    BSLDR           ;YES\r
+       TLNE    F,FLA                   ;LEFT ARO ?\r
+       JRST    COSTRT                  ;_,SO OK\r
+       SKIPE   ODEV                    ;\r
+       JRST    ERRCMD                  ;NO_,SOME ODEV\r
+       TLNN    F,ANYSW                 ;\r
+       JRST    ST                      ;NO_,NO ODEV,NO SW =*\r
+       JRST    ERRCMD          ;NO_,NO ODEV, NO SW\r
+\r
+COSTRT:        TLNN    F,ANYSW         ;ANY SW=SKIP\r
+       TLO     F,FLC+FLV       ;DEFAULT=COPY+VERIFY\r
+       TLNE    F,FLC           ;IF COPY\r
+       TLZ     F,FLZ           ;DONT ZERO\r
+       TLNE    F,FLZ           ;IF ZERO\r
+       TLZ     F,FLV           ;DONT VERIFY\r
+       SKIPN   T,IDEV\r
+       TLNE    F,FLC+FLV\r
+       JUMPE   T,ERRCMD        ;AN INDEVICE IS REQUIRED\r
+       TLNN    F,FLT           ;IS 10DMP WANTED?\r
+       JRST    CINIT           ;NO, PROCEED\r
+\r
+\f      ;HERE TO ACCEPT THE BOOTSTRAP LOADER OFFSET (/T)\r
+\r
+CTENDM:        TLNN    F,LFL           ;IS A BOOTSTRAP LOADER LOADED?\r
+       JRST    ERRTNH          ;NO, COMPLAIN\r
+CTEN1: SETZB   AC1,OFFSET      ;\r
+       TTCALL  3,[ASCIZ /\r
+TYPE CORE BANK OR OFFSET FOR /]\r
+       MOVEI   BP,PNAME\r
+       PUSHJ   P,TYPEIT        ;BSLDR'S NAME\r
+       INPUT   17,\r
+CTEN0: PUSH    P,TIN+1         ;SAVE PTR FOR RESCAN\r
+       MOVEI   AC0,6           ;MAX CHARS TO ACCEPT\r
+       PUSHJ   P,TYPGET        ;\r
+       CAIN    C,"K"           ;\r
+       JRST    CTEN10          ;K, MUST BE A CORE-BANK\r
+       SOJG    AC0,.-3\r
+       POP     P,TIN+1         ;\r
+       MOVEI   AC0,6           ;ACCEPT 6 NUMBERS\r
+CTEN2: PUSHJ   P,TYPGET        ;GET A CHAR\r
+       CAIL    C,"0"           ;\r
+       CAILE   C,"7"           ;\r
+       JRST    CTEN7           ;NOT A OCTAL NUMBER, TERM?\r
+       LSH     AC1,3           ;MAKE ROOM\r
+       TRZ     C,777770        ;CLEAR HI-ORDER BITS\r
+       ADD     AC1,C           ;  FOR THIS CHAR\r
+       SOJG    AC0,CTEN2       ;LOOK FOR 6 CHARS\r
+CTEN3: CAIL    AC1,1000                ;LOWER LIMIT\r
+       CAILE   AC1,777600      ;UPPER LIMIT\r
+       JRST    CTEN8           ;COMPLAIN\r
+CTEN4: HRLI    AC1,W           ;SO [HRRI W,@OFFSET] WILL WORK\r
+       MOVEM   AC1,OFFSET      ;SAVIT\r
+       JRST    CINIT           ;\r
+\r
+CTEN7: CAIL    C,12            ;"LF"\r
+       CAILE   C,15            ;"CR"\r
+       CAIN    C,33            ;ALTMODE\r
+       JRST    CTEN3           ;A TERMINATOR\r
+CTEN8: TTCALL  3,[ASCIZ /\r
+?OFFSET = 1000 TO 777600 (OCTAL)/]\r
+       JRST    CTEN1           ;\r
+\r
+\f      ;LOOK FOR A CORE BANK, 16K-256K\r
+CTEN10:        POP     P,TIN+1         ;RESCAN TTYBUF\r
+       MOVEI   AC0,3           ;ONLY 3 CHARS MAX IS "256"\r
+CTEN11:        PUSHJ   P,TYPGET        ;\r
+       CAIL    C,"0"           ;\r
+       CAILE   C,"9"           ;\r
+       JRST    CTEN17          ;\r
+       IMULI   AC1,^D10        ;MAKE ROOM FOR NEXT CHAR... DEC TO OCT\r
+       ANDI    C,17            ;EXTRACT DECIMAL NUMBER\r
+       ADD     AC1,C           ;\r
+       SOJG    AC0,CTEN11      ;\r
+\r
+CTEN12:        TRNE    AC1,17          ;CHECK FOR MODULO 16\r
+       JRST    CTEN18                  ;ILL\r
+       JUMPE   AC1,CTEN18              ;ILL\r
+       LSH     AC1,-4          ;PUSH OFF ZEROES\r
+       CAILE   AC1,20          ;MAX IS 256\r
+       JRST    CTEN18  ;ILL\r
+       IMULI   AC1,40000       ;TURN IT INTO AN OFFSET\r
+       SUBI    AC1,1           ;\r
+       TRZ     AC1,777         ;1K BELOW TOP OF THIS BANK\r
+       JRST    CTEN4           ;\r
+CTEN17:        CAIN    C,"K"           ;SKIP IF TERM\r
+       JRST    CTEN12          ;\r
+\r
+CTEN18:        TTCALL  3,[ASCIZ /\r
+?EXPECTED FORMAT IS "NNNK" = 16K TO 256K.\r
+/]\r
+       JRST    CTEN1\r
+\fCINIT:        MOVEI   T,134           ;BUFRD MODE\r
+       PUSHJ   P,INIT          ;FIRST INIT\r
+       TLNE    F,FLC!FLZ       ;BEGIN HERE  ___******\r
+       PUSHJ   P,COPZRO        ;ZERO OR COPY\r
+       TLNE    F,FLC!FLZ       ;IF C OR Z-\r
+       PUSHJ   P,LALA                  ;THEN REWIND\r
+       TLNN    F,FLZ           ;WASIT /Z ?\r
+       JRST    CNOZRO          ;NO\r
+       SETSTS  2,16            ;YES\r
+       CALLI   2,13            ;CLEAR DIR IN CORE\r
+       RELEAS  2,              ;AND ON TAPE\r
+       MOVEI   T,14            ;AND\r
+       PUSHJ   P,INIT          ;REINIT\r
+CNOZRO:        TLNE    F,FLV           ;VERIFY ?\r
+       PUSHJ   P,VERZRO        ;YES\r
+       TLNE    F,FLV           ;IF VERIFY-\r
+       PUSHJ   P,LALA  ;THEN REWIND\r
+       TLNE    F,FLT           ;TEN DUMP ?\r
+       PUSHJ   P,TENINT        ;YES\r
+       JRST    ST              ;GO AGAIN ******\r
+\r
+LALA:  MTAPE   2,1             ;\r
+       SKIPE   C,IDEV          ;\r
+       MTAPE   1,1             ;\r
+       JFCL    1,.+1           ;PROCESSOR TEST\r
+       JRST    .+1             ;\r
+       JFCL    1,.+3           ;6-JUMP\r
+       TLO     F,FPT           ;PDP-10 FLAG\r
+       JRST    LSTEST          ;10-JUMP\r
+       JUMPE   C,LSTES0        ;JUMP IF NO INPUT DEV\r
+       USETI   1,1\r
+       INPUT   1,REWIND        ;IOWD 1,DATA\r
+LSTES0:        USETI   2,1\r
+       INPUT   2,REWIND\r
+LSTEST:        TLZE    F,FLL           ;LIST A DIR?\r
+       JRST    DLST            ;YES\r
+       MOVEI   C,^D15          ;SECONDS\r
+GDNITE:        TLNE    F,FPT           ;6-SKIP\r
+       CALLI   C,31            ;TO SLEEP\r
+       POPJ    P,              ;\r
+\r
+SWTAB: XWD     FLP,")"         ;XIT\r
+       XWD     FLC,"C"         ;COPY\r
+       XWD     FLZ,"Z"         ;ZERO\r
+       XWD     FLV,"V"         ;VERIFY\r
+       XWD     FLT,"T"         ;TENDMP\r
+       XWD     FLG,"G"         ;IGNORE\r
+       XWD     HSW,"H"         ;HELP\r
+       XWD     LSW,"L"         ;LOAD BSLDR\r
+       XWD     NSW,"N"         ;NO DIR\r
+       XWD     FL6,"6"         ;PDP6 DIR\r
+       LEN=.-SWTAB\r
+\fDSAV: TLON    F,FLL           ;ENTER THIS CODE ONCE ONLY\r
+       TLNE    F,FL6           ;SKIP IF ITS NOT 6FMT\r
+       POPJ    P,              ;2ND PASS OR 6FMT-EXIT.\r
+       MOVEI   1,-144(LOC)     ;FIRST BLK OF NEXT OUTPUT\r
+       SUB     1,INC           ;FIND A\r
+       IMULI   1,-200          ;     DIRECTORY,\r
+       ADD     1,LISTC         ;GRAB\r
+       HRLI    1,1(1)          ;    A\r
+       HRRI    1,DIRECT        ;     DIRECTORY.\r
+       BLT     1,DIRECT+177    ;SAVE IT.\r
+       POPJ    P,              ;RETURN\r
+\r
+DATE:  SETZ    AC2,\r
+       LDB     AC5,DATEP\r
+       IDIVI   AC5,^D31        ;PICK OFF THE DAY\r
+       ADDI    AC6,1           ;MAKE IT RIGHT\r
+       PUSHJ   P,DATE1         ;RETURNS TWO SIXBIT NUMBERS\r
+       DPB     AC6,DAY         ;XXDDXX\r
+       IDIVI   AC5,^D12        ;PICK OFF THE MONTH\r
+       MOVE    AC6,MONPH(AC6)  ;CONVERT TO ALPHA\r
+       DPB     AC6,MONTH       ;MMDDXX\r
+       MOVEI   AC6,^D64        ;GET THE BASE YEAR\r
+       ADD     AC6,AC5         ;PLUS YEARS SINCE THEN\r
+       PUSHJ   P,DATE1         ;SIXBIT\r
+       DPB     AC6,YEAR        ;YYMMDD-DATE FINISHED\r
+       POPJ    P,              ;\r
+\r
+DATE1: IDIVI   AC6,^D10        ;DIVIDE OUT A DECIMAL NUMBER\r
+       LSH     AC6,6           ;MAKE ROOM FOR THE REMIANDER\r
+       ADDI    AC6,152020(LOC) ;CONVERT TO SIXBIT\r
+       POPJ    P,              ;RETURN\r
+\r
+DAY:   POINT   12,AC2,11\r
+MONTH: POINT   24,AC2,35\r
+YEAR:  POINT   18,AC3,17\r
+DATEP: POINT   12,DNAM+^D22(AC1),35\r
+FREE:  SIXBIT  /FREE:  +/\r
+BLKS:  SIXBIT  /-BLKS  +/\r
+FILES: SIXBIT  /-FILES#/\r
+\fMONPH:        SIXBIT  /  -JAN/\r
+       SIXBIT  /  -FEB/\r
+       SIXBIT  /  -MAR/\r
+       SIXBIT  /  -APR/\r
+       SIXBIT  /  -MAY/\r
+       SIXBIT  /  -JUN/\r
+       SIXBIT  /  -JUL/\r
+       SIXBIT  /  -AUG/\r
+       SIXBIT  /  -SEP/\r
+       SIXBIT  /  -OCT/\r
+       SIXBIT  /  -NOV/\r
+       SIXBIT  /  -DEC/\r
+\r
+               ;STANDARD OCTAL TO ASCII ROUTINE\r
+DECMAL:        IDIVI   C,^D10          ;\r
+       HRLM    C+1,(P)         ;\r
+       SKIPE   C               ;\r
+       PUSHJ   P,DECMAL        ;\r
+       HLRZ    C,(P)           ;\r
+       ADDI    C,60            ;\r
+       JRST    TYPC            ;\r
+\r
+DLST:  TLNE    F,NSW           ;DIRECTORY WANTED?\r
+       JRST    DXIT            ;NO\r
+       TLNE    F,FL6           ;6FMT?\r
+       JRST    D6LST           ;YES.\r
+DLST1: SETZM   TOTAL           ;TOTAL FREE BLOCKS\r
+       MOVE    3,[XWD TOTAL,TOTAL+1]   ;CLEAR THE ^D23\r
+       BLT     3,TOTAL+^D22            ;    WORD TABLE\r
+       MOVE    2,[POINT 5,DIRECT,4]    ;POINT TO FIRST BLK SLOT\r
+       MOVEI   1,<7*^D83>-3            ;1102 SLOTS\r
+DLST2: ILDB    3,2                     ;PICK UP A FILE NUMBER\r
+       CAIG    3,^D22                  ;SKIP IF BLK IS SPECIAL\r
+       AOS     TOTAL(3)                ;COUNT BLKS/FILE\r
+       SOJG    1,DLST2                 ;LOOP\r
+       MOVEI   BP,FREE         ;FREE:\r
+       PUSHJ   P,TYPEIT                ;\r
+       MOVE    C,TOTAL         ;NUMBER OF FREE BLOCKS\r
+       PUSHJ   P,DECMAL                ;\r
+       MOVEI   BP,BLKS         ;-BLKS\r
+       PUSHJ   P,TYPEIT                ;\r
+       MOVEI   C,^D22          ;26 FILES MAX\r
+       HRLZI   AC1,-^D22               ;\r
+DLST7: SKIPE   DNAM(AC1)       ;\r
+       SOS     C               ;DECREMENT MAX NO. OF BLKS\r
+       AOBJN   AC1,DLST7       ;\r
+       PUSHJ   P,DECMAL        ;\r
+       MOVEI   BP,FILES        ;\r
+       PUSHJ   P,TYPEIT        ;\r
+       HRLZI   1,-^D22                 ;LOOP 26 TIMES\r
+\r
+\fDLST3:        HRLZI   3,161300                ;TERMINATOR\r
+       SKIPN   2,DNAM(1)               ;FILE NAME\r
+       JRST    DLST5                   ;\r
+       MOVEI   BP,2                    ;\r
+       PUSHJ   P,TYPEIT                ;\r
+       HLLZ    2,DNAM+^D22(1)          ;EXTENSION\r
+       HRRI    2,13                    ;\r
+       MOVEI   BP,2                    ;\r
+       PUSHJ   P,TYPEIT                ;\r
+       MOVE    C,TOTAL+1(1)            ;NUMBER OF BLKS\r
+       PUSHJ   P,DECMAL                ;\r
+       MOVEI   C,"     "                       ;SPACE\r
+       PUSHJ   P,TYPC                  ;\r
+       PUSHJ   P,DATE                  ;CREATION DATE\r
+       MOVEI   BP,2                    ;\r
+       HRRI    3,30000                 ;"#"\r
+       PUSHJ   P,TYPEIT                ;\r
+DLST5: AOBJN   1,DLST3                 ;LOOP\r
+DXIT:  MOVEI   C,^D15          ;15 SECONDS\r
+       JRST    GDNITE          ;TO SLEEP.\r
+\r
+D6LST: MOVEI   0,36            ;MAX NO. OF ENTRIES\r
+       HRRZ    1,DIRECT        ;LOC OF FIRST DIR BLK\r
+D6BEG: HRLI    3,130000        ;"-" TERMINATOR\r
+       MOVEI   BP,2            ;\r
+       SKIPN   2,DIRECT(1)     ;IS THERE A FILENAME?\r
+       JRST    DXIT            ;NORMAL EXIT\r
+       PUSHJ   P,TYPEIT        ;FILENAME\r
+       HLLZ    2,DIRECT+1(1)   ;EXTENSION\r
+       SKIPN   2               ;IF NULL,\r
+       JRST    D6FIN           ;JUMP\r
+       MOVEI   C,"     "       ;OTHERWISE\r
+       PUSHJ   P,TYPC          ;TAB\r
+       HRRI    2,130000        ;"-"\r
+       MOVEI   BP,2            ;TERM.\r
+       PUSHJ   P,TYPEIT        ;\r
+D6FIN: PUSHJ   P,TYPCL         ;CR-LF\r
+       ADDI    1,4             ;\r
+       SOJG    0,D6BEG         ;IN CASE\r
+       JRST    DXIT            ;DIR WAS FULL\r
+\f\r
+TYPEIT:        HRLI    BP,440600               ;BP=MESSAGE ADR\r
+TYPLOP:        ILDB    C,BP                    ;\r
+       CAIN    C,13                    ;PLUS?\r
+       POPJ    P,                      ;GET THE WHOLE MESSASE\r
+       CAIN    C,3                     ;#?\r
+       JRST    TYPCL                   ;APPEND CR LF AND TYPE\r
+       ADDI    C,40                    ;ASCIZE IT\r
+       IDPB    C,TOUT+1                ;TO THE BUFFER\r
+       JRST    TYPLOP                  ;+LOOP\r
+\r
+TYPGET:        ILDB    C,TIN+1                 ;GET CHAR\r
+       CAIE    C," "                   ;SPACE?\r
+       CAIN    C,"     "               ;TAB?\r
+       JRST    TYPGET                  ;FORGET IT\r
+       CAIGE   C,141                   ;LC "A"\r
+       POPJ    P,\r
+       CAIG    C,172                   ;LC "Z"\r
+       SUBI    C,40                    ;LC TO UC\r
+       POPJ    P,\r
+\r
+TYPCCL:        IDPB    C,TOUT+1                ;TYPE CHAR,CRLF\r
+TYPCL: MOVEI   C,15                    ;TYPE CRLF\r
+       IDPB    C,TOUT+1\r
+       MOVEI   C,12\r
+TYPC:  IDPB    C,TOUT+1                ;TYPE CHAR\r
+TYPBUF:        OUTPUT  17,                     ;DO IT\r
+       POPJ    P,\r
+\r
+\fHELP: TTCALL  3,.+2\r
+       JRST    COCRET\r
+ASCIZ %\r
+/C COPY \r
+/V VERIFY\r
+/Z ZERO ALL BLOCKS\r
+/L LOAD A BOOTSTRAP LOADER FROM PTR:BSLDR.REL\r
+/T "TYPE CORE BANK OR OFFSET FOR BSLDR"\r
+       CORE-BANK = NNNK (16K TO 256K)\r
+       OFFSET = <OCTAL 1000 TO 777600>\r
+   WRITE A BSLDR ONTO BLOCKS 0,1 AND 2\r
+/N DONT TYPE A DIRECTORY\r
+/6 PDP6 DIR\r
+/G IGNORE ERRORS\r
+NO SW'S IMPLY /C/V\r
+%\r
+\fERRT1I:       TLOA    F,FLI                   ;INPUT ERROR\r
+ERRT1O:        TLZ     F,FLI                   ;OUTPUT ERROR\r
+       STATUS  1,IOS                   ;STATUS TO IOS\r
+       TRNE    IOS,360000              ;ALL THE ERRORS\r
+       JRST    ERRCHK                  ;FOUND AN ERROR\r
+       POPJ    P,\r
+\r
+ERRT2I:        TLOA    F,FLI                   ;INPUT ERROR\r
+ERRT2O:        TLZ     F,FLI                   ;OUTPUT ERROR\r
+       STATUS  2,IOS                   ;FLAGS TO IOS\r
+       TRNN    IOS,760000              ;PLUS WRITE LOCK\r
+       POPJ    P,                      ;NO ERRORS\r
+       TLO     F,FL2                   ;IT'S A CHANNEL 2 ERROR\r
+\r
+ERRCHK:        TRNE    IOS,400000\r
+       PUSHJ   P,ERR400                ;WRITE LOCK\r
+       TRNE    IOS,200000\r
+       PUSHJ   P,ERR200                ;DEVICE ERROR\r
+       TRNE    IOS,100000\r
+       PUSHJ   P,ERR100                ;CKSUM/PARITY\r
+       TRNE    IOS,040000\r
+       PUSHJ   P,ERR040                ;BLOCK TOO LARGE\r
+       TRNE    IOS,020000              ;PREMATURE EOF,PDP9-DTA?\r
+       PUSHJ   P,ERR020                ;\r
+       TRNN    IOS,600000              ;THESE BITS IMPLY RESTART\r
+       TLNN    F,FLG                   ;/G+PARITY ERR = CONTINUE\r
+       JRST    ST                      ;RESTART\r
+       TRZ     IOS,740000              ;ZERO IN\r
+       TLNN    F,FL2\r
+       SETSTS  1,(IOS)                 ;TURN OFF\r
+       TLZE    F,FL2\r
+       SETSTS  2,(IOS)                 ;AND\r
+       POPJ    P,                      ;POP OUT\r
+\fERR400:       MOVEI   BP,MES400\r
+       JRST    TYPEIT\r
+MES400:        SIXBIT  /?WRITE LOCK ERROR#/\r
+ERR200:        PUSHJ   P,ERRCOM\r
+       MOVEI   BP,MES200\r
+       JRST    TYPEIT\r
+MES200:        SIXBIT  / DEVICE ERROR#/\r
+ERR100:        PUSHJ   P,ERRCOM\r
+       MOVEI   BP,MES100\r
+       JRST    TYPEIT\r
+MES100:        SIXBIT  / CHECKSUM OR PARITY ERROR#/\r
+ERR040:        PUSHJ   P,ERRCOM\r
+       MOVEI   BP,MES040\r
+       JRST    TYPEIT\r
+MES040:        SIXBIT  / BLOCK TOO LARGE#/\r
+ERR020:        PUSHJ   P,ERRCOM\r
+       MOVEI   BP,MES020\r
+       JRST    TYPEIT\r
+MES020:        SIXBIT  / PREMATURE END OF FILE#/\r
+ERRCOM:        MOVEI   BP,SXBINP\r
+       TLNN    F,FLI\r
+       MOVEI   BP,SXBOUT\r
+       JRST    TYPEIT\r
+SXBINP:        SIXBIT  /?INPUT+/\r
+SXBOUT:        SIXBIT  /?OUTPUT+/\r
+\fERRVER:       MOVE    T,[POINT 6,MESVER]\r
+       MOVE    BP,[POINT 3,U,17]\r
+ERRVE1:        ILDB    C,BP            ;LOAD AN OCTAL NUMBER\r
+       ADDI    C,20            ;6BITIZE IT\r
+       IDPB    C,T             ;INSERT IN MESS\r
+       TLNE    T,770000        ;ONE WORD ONLY\r
+       JRST    ERRVE1          ;LOOP 6 TIMES\r
+       MOVEI   BP,MESVER\r
+       JRST    TYPEIT\r
+MESVER:        SIXBIT  /000000 VERIFICATION ERRORS#/\r
+ERRCMD:        MOVEI   BP,MESCMD\r
+       PUSHJ   P,TYPEIT\r
+       JRST    ST\r
+MESCMD:        SIXBIT  /?COMMAND ERROR#/\r
+ERRSW: MOVEI   BP,MESSW\r
+       PUSHJ   P,TYPEIT\r
+       JRST    ST\r\r\r
+MESSW: SIXBIT  /?SWITCH ERROR#/\r
+ERRIN1:        SKIPA   T,IDEV\r
+ERRIN2:        MOVE    T,ODEV\r
+       TTCALL  3,[ASCIZ /?/]\r
+       MOVEM   T,MESINI\r
+       MOVEI   BP,MESINI\r
+       PUSHJ   P,TYPEIT\r
+       JRST    ST\r
+MESINI:        SIXBIT  /       INIT FAILURE#/\r
+ERRDT1:        SKIPA   T,IDEV\r
+ERRDT2:        MOVE    T,ODEV\r
+       TTCALL  3,[ASCIZ /?/]\r
+       MOVEM   T,MESDTA\r
+       MOVEI   BP,MESDTA\r
+       PUSHJ   P,TYPEIT\r
+       JRST ST\r
+MESDTA:        SIXBIT  /       MUST BE A DECTAPE#/\r
+\fERRTNH:       MOVEI   BP,MESTNH\r
+       PUSHJ   P,TYPEIT\r
+       JRST    ST\r
+MESTNH:        SIXBIT  %?BOOTSTRAP LOADER IS NOT IN COPY. TRY "/L".#%\r
+\rPTERR1:       TTCALL  3,[ASCIZ /?PTR INIT FAILURE\r
+/]\r
+       JRST    ST\r
+\r
+PTERR2:        TTCALL  3,[ASCIZ /?LOOKUP FAILED, "BSLDR.REL"\r
+/]\r
+       JRST    ST\r
+\f      ;WRITE A BOOOTSTRAP LOADER IN BLOCKS 0,1 AND 2\r
+TENINT:        PUSH    P,JOBFF\r
+       SETSTS  2,134           ;SO I CAN WRITE IN BLK 0\r
+       USETO   2,0\r
+       OUTBUF  2,1\r
+       OUTPUT  2,              ;DUMMY!\r
+\r
+       MOVE    AC0,[POINT 36,BSBUF]\r
+       MOVEM   AC0,BSPTR       ;WHERE THE LOADER IS KEPT\r
+       HRRZ    AC0,JOBFF       ;\r
+       HRLI    AC0,(POINT 36,)\r
+       MOVEM   AC0,FFPTR       ;WHERE ITS WRITTEN FROM\r
+\r
+       ILDB    W,BSPTR         ;IOWD\r
+       MOVE    CNT,OFFSET      ;\r
+       HRRI    W,-1(CNT)       ;FINISH THE IOWD\r
+       IDPB    W,FFPTR         ;\r
+\r
+TEN1:  PUSHJ   P,NBLK          ;GET THE NEXT BLOCK, SKIPE XIT IS NORMAL\r
+        JRST   RELDA5          ;TERMINATE THE BSLDR\r
+       TRNN    CNT,-1          ;EMPTY?\r
+       JRST    TEN1            ;YES\r
+       ILDB    OS,BSPTR        ;OFFSET FOR THIS BLK\r
+       LSH     RB,2            ;OS'S RELBITS\r
+       AOBJN   CNT,.+1         ;ACCOUNT FOR IT\r
+RELDAT:        TRNN    CNT,-1  ;ANY MORE DATA?\r
+       JRST    TEN1            ;NO\r
+       ILDB    W,BSPTR         ;PROGRAM WORD\r
+       JUMPGE  RB,RELDA1       ;CHECK LEFT HALF\r
+       HRLZ    I,OFFSET                ;\r
+       ADD     W,I             ;RELOCATE IT\r
+\r
+RELDA1:        TLNE    RB,200000       ;CHECK RIGHT HALF\r
+       HRRI    W,@OFFSET       ;RELOCATE IT\r
+       IDPB    W,FFPTR         ;\r
+       LSH     RB,2            ;NEXT RELOCATION BITS\r
+       AOBJN   CNT,RELDAT      ;NEXT WORD\r
+       TRNE    CNT,-1          ;\r
+       PUSHJ   P,NSEC          ;NEXT SECTION OF BLOCK\r
+       JRST    RELDAT          ;\r
+\r
+\fNBLK: ILDB    CNT,BSPTR       ;GET THE BLOCK WRD CNT\r
+       SKIPL   CNT             ;\r
+       AOS     (P)             ;SKIP EXIT IS NORMAL\r
+       MOVN    CNT,CNT         ;\r
+NSEC:  ILDB    RB,BSPTR        ;RELOCATION BITS\r
+       HRLI    CNT,-22         ;WRDS/SECTION\r
+       POPJ    P,\r
+\r
+RELDA5:        MOVE    W,SASAV         ;THIS JRST IS EXECUTED\r
+       HRR     W,OFFSET(W)     ;RELOCATE THE SA ADR\r
+       IDPB    W,FFPTR         ;THE LAST WORD\r
+       HRLZ    BP,JOBFF        ;BEG OF BSLDR\r
+       HRR     BP,OUT2+1       ;BLT PTR\r
+       MOVEM   BP,C            ;SAVE IT\r
+       BLT     BP,177(C)       ;ZAP 1\r
+       OUTPUT  2,              ;BLK 0\r
+       ADD     C,[XWD 200,0]\r
+       MOVEM   C,BP            ;2ND PTR SAVED\r
+       BLT     BP,177(C)       ;ZAP 2\r
+       USETO   2,1\r
+       OUTPUT  2,              ;BLK 1\r
+       ADD     C,[XWD 200,0]\r
+       MOVEM   C,BP\r
+       BLT     BP,177(C)\r
+       USETO   2,2\r
+       OUTPUT  2,\r
+       PUSHJ   P,ERRT2O        ;ERRORS?\r
+       POP     P,JOBFF\r
+       POPJ    P,\r
+\fCOPZRO:       PUSH    P,JOBFF         ;SAVE JOBFF\r
+       TLNE    F,FLC           ;SKIP IO TO UNASSIGNED CHAN.\r
+       SETSTS  1,134           ;\r
+       SETSTS  2,134           ;\r
+       OUTBUF  2,1             ;WITH ONE BUFFER MODE-134\r
+       USETO   2,0             ;FOR BLOCK ZERO\r
+       OUTPUT  2,              ;DUMMY\r
+       TLNN    F,FLC           ;COPY\r
+       JRST    COPBKZ          ;NO, MUST BE ZERO\r
+       INBUF   1,1             ;ONE BUFFER MODE-134\r
+       USETI   1,0             ;BLOCK ZERO\r
+       INPUT   1,              ;GET IT\r
+       PUSHJ   P,ERRT1I        ;OK?\r
+       MOVEI   T,177           ;LOOP LENGTH\r
+       LDB     C,IN1+1         ;FIRST WORD\r
+       DPB     C,OUT2+1        ;TO THE BUFFER\r
+COPLPZ:        ILDB    C,IN1+1         ;OTHER WORDS\r
+       IDPB    C,OUT2+1        ;TO THE BUFFER\r
+       SOJG    T,COPLPZ        ;TO LOOP\r
+       SETSTS  1,136           ;INPUT DEVICE\r
+       USETI   1,1             ;SIX FORMATTED DIRECTORY\r
+       INPUT   1,DIRWRD        ;GET IT\r
+COPBKZ:        OUTPUT  2,              ;DUMP THE BUFFER\r
+       POP     P,JOBFF         ;FOR VERIFY?\r
+       PUSHJ   P,ERRT2O                ;OK?\r
+       SETSTS  2,136           ;DUMP MODE\r
+       MOVE    U,JOBREL                ;UPPER LIMIT\r
+       MOVE    T,BLTWRD        ;FROM,TO\r
+       SETZM   @ZROWRD         ;START\r
+       BLT     T, (U)          ;ZAP\r
+       MOVEI   LOC,1           ;START AT BLOCK ONE\r
+COPSET:        TLNE    F,FLC           ;SKIP\r
+       USETI   1,(LOC)         ;IO 2 UNASGND CH\r
+       USETO   2,(LOC)         ;SET THE BLOCK NO.\r
+       ADD     LOC,INC         ;ADD THE INCREMENT\r
+       CAILE   LOC,1102        ;WILL IT FIT?\r
+       JRST    COPFIN          ;NO\r
+       PUSHJ   P,COPYIT        ;ONE BUFFER\r
+       JRST    COPSET          ;AND LOOP\r
+COPFIN:        MOVEI   T,-1102(LOC)    ;N BLOCKS WON'T FIT\r
+       IMULI   T,200           ;N WORDS WON'T FIT\r
+       MOVSS   T               ;GET ORGANIZED\r
+       ADDM    T,LISTC         ;SUB N WORDS FROM LIST\r
+       SKIPL   LISTC           ;IF LH OF IOWD = 0,\r
+       POPJ    P,              ;EXIT\r
+COPYIT:        TLNN    F,FLC           ;COPY?\r
+       JRST    COPOUT          ;ZERO!\r
+       INPUT   1,LISTC         ;COPY!\r
+       PUSHJ   P,ERRT1I        ;OK?\r
+       CAILE   LOC,144         ;SKIP IF NO CHANCE\r
+       PUSHJ   P,DSAV          ;TRY FOR A DIRECTORY\r
+COPOUT:        OUTPUT  2,LISTC         ;COPY AND ZERO\r
+       JRST    ERRT2O          ;OK?\r
+\fVERZRO:       PUSH    P,JOBFF\r
+       SETZB   VZ1,VZ2         ;CMDLST TERMINATOR\r
+       SETSTS  1,134           ;SET\r
+       SETSTS  2,134           ;IB MODE\r
+       USETI   1,0             ;AND\r
+       USETI   2,0             ;BLOCK 0\r
+       INBUF   1,1             ;WITH\r
+       INBUF   2,1             ;ONE BUFFER EA\r
+       INPUT   1,              ;GET A BLOCK\r
+       PUSHJ   P,ERRT1I        ;OK\r
+       INPUT   2,              ;GET ANOTHER\r
+       PUSHJ   P,ERRT2I        ;OK\r
+       HRRZ    V1,IN1          ;DUMMY\r
+       HRRZ    V2,IN2          ;IOWD\r
+       HRLI    V1,-200         ;FOR VERIFY LOOP\r
+       POP     P,JOBFF         ;RECLAIM BUFFERS\r
+       PUSHJ   P,VERIFY                ;VERIFY AND EXIT THIS PAGE\r
+VERONE:        SETSTS  1,136           ;SET\r
+       SETSTS  2,136           ;DUMP MODE\r
+       MOVEI   LOC,1           ;START AT BLOCK 1\r\r\r
+VERSET:        MOVE    V1,LISTV1       ;IOWDS\r
+       MOVE    V2,LISTV2       ;TO ACS\r
+       USETI   1,(LOC)         ;MASTER\r
+       USETI   2,(LOC)         ;AND COPY\r
+       ADD     LOC,INCV        ;ADD IN THE INCREMENT\r
+       CAILE   LOC,1102        ;AM I ASKING TOO MUCH?\r
+       JRST    VERFIN          ;YEP\r
+       PUSHJ   P,VERIN         ;COUPLE OF INPUTS AND VERIFY\r
+       JRST    VERSET\r
+\r
+VERFIN:        SUBI    LOC,1102        ;HOW MUCH TOO MUCH?\r
+       IMULI   LOC,200         ;IN WORDS PLEASE\r
+       MOVSS   LOC             ;BACKWARDS\r
+       ADD     V1,LOC          ;SUB WORDS FROM LIST\r
+       ADD     V2,LOC          ;I.E. ASK FOR LESS\r
+       SKIPL   V1              ;IF LH OF IOWD = 0,\r
+       POPJ    P,              ;EXIT\r
+\r
+VERIN: INPUT   1,V1            ;ONE FOR THE MASTER\r
+       PUSHJ   P,ERRT1I        ;OK?\r
+       INPUT   2,V2            ;ONE FOR THE COPY\r
+       PUSHJ   P,ERRT2I        ;OK?\r
+\r
+VERIFY:        SETZ    U,              ;CLR THE ERROR CNT\r
+       MOVE    T,1(V1)         ;MASTER WORD\r
+       CAME    T,1(V2)         ;SAME AS COPY WORD?\r
+       AOS     U               ;NO, COUNT THE ERRORS\r
+       AOS     V2              ;PLUS ONE\r
+       AOBJN   V1,VERIFY+1     ;BOTH HALVES AND LOOP\r
+       JUMPN   U,ERRVER        ;ERROR MESS IF APPROPIATE\r
+       POPJ    P,              ;UNLESS V1 IS POSITIVE\r
+\fINIT: INIT    2,(T)\r
+ODEV:  Z\r
+       XWD     OUT2,IN2\r
+       JRST    ERRIN2\r
+       MOVE    BP,ODEV         ;MAKE SURE ITS A DTA.\r
+       CALLI   BP,4\r
+       TLNN    BP,100\r
+       JRST    ERRDT2          ;ERROR, ITS NOT A DTA\r
+       SKIPN   BP,IDEV         ;IF NULL\r
+       POPJ    P,              ;NO INPUT DEV REQUIRED\r
+       CAMN    BP,ODEV         ;SAME DEVICES?\r
+       JRST    INITER          ;YEPER\r
+       INIT    1,(T)\r
+IDEV:  Z\r
+       XWD     0,IN1\r
+       JRST    ERRIN1\r
+       MOVE    BP,IDEV         ;MAKE SURE ITS A DTA\r
+       CALLI   BP,4\r
+       TLNN    BP,100\r
+       JRST    ERRDT1          ;ERROR\r
+       POPJ    P,\r
+\r
+INITER:        TTCALL  3,[ASCIZ /INPUT AND OUTPUT DEC-TAPES MAY NOT BE THE SAME DEVICE.\r
+/]\r
+       JRST    ST\r
+\f;     LOAD A BOOTSTRAP LOADER, \r
+\r
+I=1    ;PTR TO BSBUF\r
+W=2    ;WORD OF TENDMP.REL\r
+CNT=3  ;# OF WORDS IN CURRENT BLOCK\r
+TYPE=4 ;TYPE OF BLOCK\r
+OS=4   ;OFFSET\r
+RB=5   ;RELOCATION BITS\r
+\r
+FFPTR: BLOCK   1       ;BYTEPTR TO RELOCATED BSLDR\r
+BSPTR: BLOCK   1       ;BYTPTR TO UNRLCTD BSLDR\r
+OFFSET:        BLOCK   1       ;THE OFFSET\r
+RELBTS:        BLOCK   1       ;RELOCATION BITS\r
+SASAV: BLOCK   1       ;STARTING ADDRESS\r
+PNAME: BLOCK   1       ;PROGRAM NAME\r
+       SIXBIT  /#/     ;# = "CRLF"\r
+\r
+\r
+BSLDR: MOVE    AC0,[SIXBIT /BSLDR/]    ;LOOKUP BLOCK\r
+       HRLZI   AC1,(SIXBIT /REL/)\r
+       SETZB   AC2,AC3         ;\r
+       INIT    16,13           ;IMAGE-BINARY\r
+       SIXBIT  /PTR/           ;\r
+       EXP     PTRBUF          ;\r
+       JRST    PTERR1          ;INIT FAILURE ERROR\r
+       INBUF   16,1            ;ONE BUFFER\r
+       LOOKUP  16,             ;BSLDR.REL\r
+       JRST    PTERR2          ;LOOKUP FAILURE\r
+       MOVEI   I,BSBUF         ;PP PTR FOR BOOTSTRAP-LOADER-BUF\r
+\r
+NEWBLK:        PUSHJ   P,GETWRD        ;GET ONE WORD FROM PTR FILE\r
+       HLRZM   W,TYPE          ;SAVE BLOCK-TYPE\r
+       HRRZM   W,CNT           ;SAVE WRD-COUNT FOR THIS BLK\r
+       CAIN    TYPE,1          ;\r
+       PUSH    I,W             ;SAVE BLOCK HDR-WRD\r
+       PUSHJ   P,GETWRD        ;\r
+       MOVEM   W,RELBTS        ;SAVE RELOCATION-BITS\r
+       CAIN    TYPE,1          ;BLKTYP=1?\r
+       PUSH    I,W             ;YEP, SAVE THE BITS\r
+       CAIG    TYPE,7          ;ILL-BLK-TYP?\r
+       JRST    @TYPTAB(TYPE)   ;NO, OFF TO BLOCK HANDLER\r\r\r
+\r
+TTCALL 3,[ASCIZ /?ILLEGAL BLOCK TPYE\r
+/]\r
+       JRST    ST              ;\r
+\r
+\fTYPTAB:       Z       BLK0\r
+       Z       BLK1\r
+       Z       BLK2\r
+       Z       BLK3\r
+       Z       BLK4\r
+       Z       BLK5\r
+       Z       BLK6\r
+       Z       BLK7\r
+\r
+GETWRD:        SOSG    PTRBUF+2        ;EMPTY BUF?\r
+       PUSHJ   P,GETBUF        ;GET A BUFFER\r
+       ILDB    W,PTRBUF+1      ;\r
+       POPJ    P,\r
+\r
+GETBUF:        IN      16,             ;GET BUFFER\r
+       POPJ    P,\r
+       STATZ   16,20000        ;EOF?\r
+       TTCALL  3,[ASCIZ /?NO END BLOCK ENCOUNTERED\r
+/]\r
+       STATZ   16,74000        ;ERRORS?\r
+       TTCALL  3,[ASCIZ /?DATA ERROR ON DEVICE PTR\r
+/]\r
+       JRST    ST\r
+       ;THIS IS NOT A BLOCK, IGNORE IT\r
+BLK0:  JUMPE   CNT,NEWBLK      ;\r
+       PUSHJ   P,GETWRD        ;PASS A WRD\r
+       SOJA    CNT,BLK0        ;\r
+\r
+       ;THIS IS THE PROGRAM\r
+BLK1:  MOVN    CNT,CNT         ;TOTAL NUMBER OF WRDS THIS BLK\r
+BLK1A: HRLI    CNT,-22         ;MAX NUMBER PER SECTION\r
+BLK1B: TRNN    CNT,-1          ;ANY MORE WRDS?\r
+       JRST    NEWBLK          ;NO\r
+       PUSHJ   P,GETWRD        ;\r
+       PUSH    I,W             ;SAVE IN BSBUF\r
+       AOBJN   CNT,BLK1B       ;ANY MORE WRDS THIS SECTION?\r
+       TRNN    CNT,-1          ;NO, ...THIS BLK?\r
+       JRST    NEWBLK          ;NO\r
+       PUSHJ   P,GETWRD        ;GET THE REL-BITS FOR NXT SECT\r
+       PUSH    I,W             ;SAVEM\r
+       JRST    BLK1A           ;\r
+\r
+\f      ;THIS IS THE SYMBOL TABLE\r
+BLK2:  MOVN    CNT,CNT         ;\r
+BLK2A: HRLI    CNT,-22         ;\r
+BLK2B: TRNN    CNT,-1          ;\r
+       JRST    NEWBLK          ;\r
+       PUSHJ   P,GETWRD        ;\r
+       TLNE    W,200000        ;\r
+       JUMPL   W,BLK2ER        ;ERROR - ITSA EXTERNAL SYMBOL\r
+       AOBJN   CNT,.+1         ;IGNORE THE VALUE\r
+       PUSHJ   P,GETWRD        ;\r
+       AOBJN   CNT,BLK2B       ;\r
+       TRNN    CNT,-1          ;\r
+       JRST    NEWBLK          ;\r
+       JRST    BLK2A\r
+BLK2ER:        TTCALL  3,[ASCIZ /?CANNOT PROCESS EXTERNAL SYMBOLS\r
+/]\r
+       JRST    ST\r
+\r
+       ;HIGHSEG FLAG, GIVE ERROR EXIT\r
+BLK3:  TTCALL  3,[ASCIZ /?CANNOT PROCESS HIGH-SEG'S\r
+/]\r
+       JRST    ST\r
+\r
+       ;ENTRY BLOCK, IGNORE THIS BLOCK\r
+BLK4:  MOVN    CNT,CNT ;\r
+BLK4A: HRLI    CNT,-22         ;\r
+       TRNN    CNT,-1          ;\r
+       JRST    NEWBLK          ;\r
+       PUSHJ   P,GETWRD        ;\r
+       AOBJN   CNT,BLK4A+1     ;PASS/IGNORE \r
+       TRNN    CNT,-1          ;\r
+       JRST    NEWBLK          ;\r
+       PUSHJ   P,GETWRD        ;\r
+       JRST    BLK4A           ;\r
+\r
+       ;THIS IS LAST BLK, MUST BE SEEN, ALSO IS PROG-BREAK\r
+BLK5:  PUSHJ   P,GETWRD        ;\r
+       MOVNI   AC0,1(W)                ;\r
+       HRLM    AC0,BSBUF       ;START THE IOWD\r
+       CAILE   W,600           ;MUST FIT IN LESS-THAN 4 BLKS\r
+       JRST    BLK5ER          ;ERROR IF'E CAN'T\r
+       TLO     W,400000        ;NOTE THE END\r
+       PUSH    I,W             ;\r
+       HRLZI   LFL             ;NOTE BSLDR IS IN "COPY"\r
+       IORM    FSAVE           ;SAVE IT\r
+       TLO     F,LFL           ;\r
+       CLOSE   16,             ;\r
+       JRST    COCRET          ;THE ONLY WAY OUT\r
+BLK5ER:        TTCALL  3,[ASCIZ /?BOOTSTRAP LOADER WILL NOT FIT IN 3 BLOCKS\r
+/]\r
+       JRST    ST\r
+\r
+\f      ;PROG-NAME IN RADIX50\r
+BLK6:  PUSHJ   P,GETWRD        ;\r
+       PUSHJ   P,UNWIND        ;CONVRT RX50 TO 6BIT PROG-NAME\r
+       SOJA    CNT,BLK4        ;I.E. IGNORE REST OF THIS BLK\r
+\r
+UNWIND:        MOVE    AC4,[POINT 6,PNAME]\r
+       SETZM   PNAME\r
+       MOVEM   W,AC5           ;\r
+       HRROI   AC0,-6          ;6 CHARS\r
+       TLZ     W,740000        ;CLEAR THE CODE BITS\r
+UNW1:  IDIVI   AC5,50          ;\r
+       HRLM    AC6,(P) ;SAVE REMAINDER\r
+       AOJGE   AC0,UNW2        ;LOOP\r
+       PUSHJ   P,UNW1          ;LOOP\r
+UNW2:  HLRZ    AC6,(P)         ;PICK OFF THE REMAINDER + DECODE IT\r
+       JUMPE   AC6,UNW3        ;DONE\r
+       ADDI    AC6,20-1\r
+       CAILE   AC6,31\r
+       ADDI    AC6,41-32\r
+       CAILE   AC6,72\r
+       SUBI    AC6,74-4\r
+       CAIN    AC6,3\r
+       MOVEI   AC6,16\r
+\r
+       IDPB    AC6,AC4\r
+UNW3:  POPJ    P,\r
+\r
+       ;STARTING ADR.\r
+BLK7:  PUSHJ   P,GETWRD        ;\r
+       HRLI    W,(JRST)        ;JUMP TO THE STARTING ADDRESS\r
+       MOVEM   W,SASAV         ;SAVE STARTING ADDRESS\r
+       SOJA    CNT,BLK4        ;IGNORE REST OF BLK\r
+\r
+\fBLTWRD:       XWD     END.,END.+1     ;ZRO FROM,TO\r
+ZROWRD:        EXP     END.            ;START\r
+FSAVE: XWD     FLP,0   ;MODIFIED WHEN BSLDR IS LOADED\r
+LISTC: IOWD    0,END.\r
+       Z\r
+LISTV1:        IOWD    0,END.\r
+LISTV2:        IOWD    0,END.\r
+INC:   BLOCK   1\r
+INCV:  BLOCK   1\r
+DIRECT:        BLOCK   123\r
+DNAM:  BLOCK   55\r
+TOTAL: BLOCK   26      ;BLOCK TABLE\r
+DIRWRD:        IOWD    200,DIRECT\r
+       Z\r
+REWIND:        IOWD    1,PTRBUF\r
+       Z\r
+TTYIN: BLOCK   23+20\r
+TTYOUT:        BLOCK   23\r
+IN1:   BLOCK   3\r
+IN2:   BLOCK   3\r
+OUT2:  BLOCK   3\r
+TIN:   BLOCK   3\r
+TOUT:  BLOCK   3\r
+PTRBUF:        BLOCK   3\r
+BSBUF: BLOCK   720     ;ENUF FOR 3BLOCKS PLUS HDR WRDS\r
+       VAR\r
+       LIT\r
+END.:  END     ST      ;;22-JUN\r
+\f\r
diff --git a/src/copy.opr b/src/copy.opr
new file mode 100644 (file)
index 0000000..b3e2554
--- /dev/null
@@ -0,0 +1,13 @@
+COPY.OPR\r
+\r
+TO LOAD TYPE   "LOAD COPY"\r
+TO SAVE TYPE   "SAVE COPY"\r
+\r
+THE DISTRIBUTION COPY WAS LOADED WITH DTBOOT AS FOLLOWS:\r
+\r
+               .RENAME BSLDR.REL=DTBOOT.REL\r
+               .ASSIGN DSK PTR\r
+               .EXECUTE COPY\r
+               */L\r
+               *^C\r
+               .SAVE COPY\r
index 78feb56..c0de415 100644 (file)
@@ -1,36 +1,36 @@
-CDRSR6=CDRSR6
-CDRSRX=CDRSRX
-CLOCK1=CLOCK1
-CLKCSS=CLKCSS
-COMCON=COMCON
-COMMON=COMMON
-CORE1=CORE1
-DIS340=DIS340
-DIST30=DIST30
-DCSINT=DCSINT
-DLSINT=DLSINT
-DPDINT=DPDINT
-DSKINT=DSKINT
-DSKSER=DSKSER
-DTCSRN=DTCSRN
-DTASRN=DTASRN
-EDDT=EDDT
-ERRCON=ERRCON
-JOBDAT=JOBDAT
-LPTSER=LPTSER
-MTCSR6=MTCSR6
-MTASRX=MTASRX
-NULSEG=NULSEG
-SEGCON=SEGCON
-PLTSER=PLTSER
-PTRSER=PTRSER
-PTPSER=PTPSER
-PTYSRF=PTYSRF
-PTYSRH=PTYSRH
-PATCH=PATCH
-SYSINI=SYSINI
-SYSMAK=SYSMAK
-ONCEB=ONCEB
-SCNSRF=SCNSRF
-SCHEDB=SCHEDB
-UUOCON=UUOCON
+CDRSR6=CDRSR6\r
+CDRSRX=CDRSRX\r
+CLOCK1=CLOCK1\r
+CLKCSS=CLKCSS\r
+COMCON=COMCON\r
+COMMON=COMMON\r
+CORE1=CORE1\r
+DIS340=DIS340\r
+DIST30=DIST30\r
+DCSINT=DCSINT\r
+DLSINT=DLSINT\r
+DPDINT=DPDINT\r
+DSKINT=DSKINT\r
+DSKSER=DSKSER\r
+DTCSRN=DTCSRN\r
+DTASRN=DTASRN\r
+EDDT=EDDT\r
+ERRCON=ERRCON\r
+JOBDAT=JOBDAT\r
+LPTSER=LPTSER\r
+MTCSR6=MTCSR6\r
+MTASRX=MTASRX\r
+NULSEG=NULSEG\r
+SEGCON=SEGCON\r
+PLTSER=PLTSER\r
+PTRSER=PTRSER\r
+PTPSER=PTPSER\r
+PTYSRF=PTYSRF\r
+PTYSRH=PTYSRH\r
+PATCH=PATCH\r
+SYSINI=SYSINI\r
+SYSMAK=SYSMAK\r
+ONCEB=ONCEB\r
+SCNSRF=SCNSRF\r
+SCHEDB=SCHEDB\r
+UUOCON=UUOCON\r
diff --git a/src/dtboot.mac b/src/dtboot.mac
new file mode 100644 (file)
index 0000000..027d458
--- /dev/null
@@ -0,0 +1,533 @@
+TITLE DTBOOT - V003 - DECTAPE BOOTSTRAP (BIG TENDMP)   -\r
+SUBTTL R. CLEMENTS /RCC/JEF - 16 MAR 71\r
+\r
+;(C) COPYRIGHT DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS 1971\r
+\r
+;"THESE BOOTS WERE MADE FOR WALKIN'." - N.S.\r
+\r
+;AC'S\r
+\r
+F=0    ;FLAGS\r
+A=1    ;GENERAL AC'S\r
+B=2    ; ..\r
+C=3    ; ..\r
+X=4    ;MEMORY ADDRESS COUNTER\r
+W=5    ;WORD RETURNED BY RWORD OR SIXBRD\r
+NAME=6 ;NAME OF FILE BEING SEARCHED FOR\r
+EXT=7  ;EXTENSION OF FILE BEING SEARCHED FOR\r
+Q=10   ;COUNTER TO STEP THROUGH BUFFER OF 200 DATA WORDS\r
+N=12   ;NUMBER ASSEMBLER IN TYPEIN, COUNTER IN SEARCH,RDBLK,WRBLK\r
+M=13   ;MEMORY AOBJN POINTER FOR READING THE DATA TO CORE\r
+FN=14  ;FILE NUMBER, 1 TO NFILES\r
+BP=15  ;POINTER TO CURRENT DIR BYTE (ALSO SIXBIT INPUT)\r
+LBN=16 ;TAPE BLOCK NUMBER TO READ\r
+P=17   ;STACK POINTER\r
+\f;CORE ALLOCATION\r
+IFNDEF REL,<REL=0>             ;REL=1 CAUSES A RELOCATABLE ASSEMBLY\r
+IFG REL,<BASE: CORE=BASE+1000>\r
+IFNDEF CORE,<CORE=200000>      ;ASSUME 64K\r
+\r
+ZZ=CORE-2000+140               ;SET ABOVE JOB DATA AREA OF TOP K\r
+\r
+CLRTOP=ZZ-1                    ;WHEN CLEARING CORE, CLEAR TO HERE\r
+\r
+DEFINE U(Z)<\r
+       UU(Z,1)>                ;ONE WORD ALLOCATION\r
+DEFINE UU(Z,N)<        Z=ZZ\r
+ZZ=ZZ+N\r
+IFGE <ZZ-CORE+1000>,<\r
+PRINTX ALLOCATION ERROR\r
+>>\r
+\r
+OPDEF PJRST [JRST]\r
+IFE REL,<LOC CORE-1000         ;ABSOLUTE ASSEMBLY\r
+RIM10B>                                ;PAPER TAPE FORMAT\r
+\r
+U(DEVICE)                      ;DEVICE NAME FROM COMMAND\r
+U(FNAME)                       ;FILE NAME FROM COMMAND\r
+U(FEXT)                                ;FILE EXTENSION FROM COMMAND\r
+U(SWITCH)                      ;SWITCHES FROM COMMAND\r
+U(TAPEID)                      ;TAPE NAME FOR Z COMMAND\r
+U(PRVLBN)                      ;LBN SOUGHT ON PREVIOUS SEARCH\r
+U(FBN)                         ;FIRST BLOCK NUMBER, FOR LINK\r
+\r
+UU(HBUF,200)                   ;DIRECTORY OF DTA\r
+UU(DBUF,200)                   ;DATA BUFFER\r
+FIRSTW==20                     ;FIRST LOCATION CONSIDERED ON WRITE\r
+PDLL==20                       ;STACK LENGTH\r
+\r
+\f;I/O DEVICE PARAMETERS\r
+\r
+DTC==320                       ;DEVICE CODE FOR DTA CONTROL\r
+DTS==324                       ;DEVICE CODE FOR DTA STATUS\r
+O.NOP==0                       ;OPCODES FOR THE DTA CONTROL CONO\r
+O.SRCH==200                    ;SEARCH\r
+O.READ==300                    ;READ\r
+O.WRIT==700                    ;WRITE\r
+C.STOP==400000                 ;CONO BITS\r
+C.FWD==200000                  ;GO FORWARD\r
+C.REV==100000                  ;GO REVERSE\r
+C.NDEL==040000                 ;NO DELAY AFTER CONO\r
+C.SEL==020000                  ;SELECT A UNIT\r
+C.DSEL==010000                 ;DESELECT CURRENT UNIT\r
+S.DAT==1                       ;DATA DONE FLAG\r
+S.INT==2                       ;INT REQ FLAG\r
+S.END==020000                  ;END ZONE HIT\r
+S.JOBD==100000                 ;JOB DONE FLAG\r
+S.ERR==653300                  ;ERRORS TO GIVE UP ON.\r
+;FLAGS, LEFT HALF OF F\r
+\r
+L.DOT=1                                ;DOT SEEN IN FILE SPEC\r
+L.UPA==2                       ;UPARROW (TAPE ID)\r
+L.SLA==10                      ;SLASH SEEN IN FILE SPEC\r
+L.ALL==13                      ;ABOVE FLAGS TOGETHER.\r
+L.UPA2==20                     ;UPARROW AGAIN FOR READING AT ZERO ROUTINE\r
+L.REV==400000                  ;TAPE MOVING IN REVERSE. SIGN BIT REQ?\r
+L.REVA==40                     ;ALLOCATION PASS IS GOING IN REVERSE\r
+L.TURN==100                    ;ALLOCATION PASS HAD TO TURN AROUND\r
+\r
+;FLAGS, RIGHT HALF OF F\r
+\r
+R.MRG==1                       ;MERGE, NOT LOAD.\r
+R.WEOF==2                      ;ON WHILE WRITING JRST WORD(S) IN LAST BLK\r
+R.DIRI==4                      ;DIRECTORY IN CORE IS VALID\r
+R.STRT==10                     ;ON IF LOAD AND GO. OFF IF JUST LOAD\r
+\r
+;SYSTEM PARAMETERS WHICH MUST AGREE WITH TIMESHARING SYSTEM\r
+\r
+DIRBLK==144                    ;WHERE DIRECTORY IS ON TAPE\r
+D.BYT==0                       ;WORD OF BYTES IN DIRECTORY\r
+D.NAM==123                     ;FIRST NAME IN DIRECTORY\r
+D.EXT==151                     ;START OF EXTENSIONS IN DIR\r
+NFILES==26                     ;HOW MANY FILES FIT IN DIR\r
+MAXBLK==1101                   ;LAST BLOCK ON THE TAPE\r
+BLKFAC==2                      ;BLOCKING FACTOR - WRITE ONE OF N BLKS\r
+\f;START HERE\r
+\r
+GO:    MOVEI F,0               ;CLEAR ALL FLAGS\r
+       CONO 200000             ;I/O BUS RESET\r
+       CONO 4,10400            ;CLEAR PI SYSTEM\r
+       SETZM DEVICE            ;CLEAR REQUESTED DEVICE NAME\r
+REGO:  MOVE P,PDP              ;INITIAL STACK POINTER\r
+       ANDI F,R.DIRI   ;CLEAR OUT RANDOM FLAGS\r
+       SETZM FNAME             ;CLEAR REQUESTED FILE NAME\r
+       SETZM FEXT              ;CLEAR REQUESTED FILE EXTENSION\r
+       SETZM SWITCH            ;CLEAR COMMAND SWITCHES\r
+       PUSHJ P,CRLF            ;SAY HELLO\r
+GOL:   MOVE BP,SIXPTR          ;POINTER TO THE WORD.\r
+       SETZB N,W               ;CLEAR ANSWERS.\r
+SIXBRL:        CONSO TTY,40            ;WAIT FOR A KEY TO BE ST(R)UCK\r
+       JRST .-1                ; ..\r
+       DATAI TTY,C             ;GET THE CHAR\r
+       PUSHJ P,TYO             ;ECHO IT\r
+       ANDI C,177              ;ONLY 7 BITS\r
+       CAIN C,177              ;RUBOUT?\r
+       JRST REGO               ;YES. QUIT.\r
+       CAIG C,172              ;CHECK FOR LOWER CASE\r
+       CAIGE C,140             ; ..\r
+       SKIPA                   ;NOT L.C.\r
+       TRZ C,40                ;L.C., MAKE U.C.\r
+       CAIG C,"Z"              ;LETTER?\r
+       CAIGE C,"A"             ; ..\r
+       SKIPA                   ;NOT A LETTER.\r
+       JRST SIXLTR             ;LETTER.\r
+       CAIG C,"9"              ;NUMBER?\r
+       CAIGE C,"0"             ; ..\r
+       JRST GO0                ;NO. RETURN WITH BREAK CHAR.\r
+       LSH N,3                 ;BUILD OCTAL NUMBER\r
+       ADDI N,-60(C)           ;ADD IN THIS DIGIT\r
+SIXLTR:        TRC C,40                ;MAKE SIXBIT\r
+       TLNE BP,770000          ;ONLY 6 CHARS\r
+       IDPB C,BP               ;STORE CHAR IN W\r
+       JRST SIXBRL             ;LOOP FOR MORE.\r
+\fGO0:  CAIE C,":"              ;UNIT DELIMITER?\r
+       JRST GO1                ;NO.\r
+       TRZ F,R.DIRI            ;DIRECTORY NO GOOD, SELECTING A TAPE\r
+       ANDI N,7                ;JUST THREE BITS OF UNIT NUMBER\r
+       MOVEM N,DEVICE          ;YES. SAVE NUMBER OF DEVICE\r
+       JRST GOL                ;GO READ MORE.\r
+GO1:   TLNN F,L.ALL            ;ANY SYNTAX REQUESTS?\r
+       JRST GO6                ;NO. SEE IF FILE NAME.\r
+       TLZE F,L.DOT            ;WAS THERE A DOT?\r
+       HLLOM W,FEXT            ;YES. STORE EXT. RH IS FLAG IF BLANK.\r
+       TLZE F,L.UPA            ;UPARROW?\r
+       MOVEM W,TAPEID          ;YES. SAVE TAPE NAME.\r
+       TLZE F,L.SLA            ;SLASH SWITCH?\r
+       MOVEM W,SWITCH          ;YES. SAVE SWITCH WORD\r
+GO7:   CAIGE C,175             ;ALTMODE?\r
+       CAIG C,40               ;SPACE OR CONTROL CHAR?\r
+       JRST DO                 ;YES. GO PROCESS COMMAND\r
+       CAIE C,"."              ;FILE EXTENSION REQUEST?\r
+       JRST GO3                ;NO.\r
+       TLO F,L.DOT             ;YES. REMEMBER THAT\r
+       JRST GOL                ;AND READ ON.\r
+\r
+GO3:   CAIE C,"/"              ;SLASH?\r
+       JRST GO5                ;NO.\r
+       TLO F,L.SLA             ;YES. MARK SWITCH COMING\r
+       JRST GOL                ;RETURN TO SCAN\r
+GO5:   CAIN C,"^"              ;UPARROW?\r
+       TLO F,L.UPA+L.UPA2      ;YES. NOTE IT.\r
+       JRST GOL                ;LOOP FOR MORE.\r
+GO6:   SKIPE W                 ;NO PUNCTUATION. NAME TYPED?\r
+       MOVEM W,FNAME           ;YES. STORE NAME\r
+       JRST GO7                ;GO CHECK PUNCTUATION\r
+\f;HERE WHEN COMMAND STRING SUCCESSFULLY READ. DO THE JOB.\r
+\r
+DO:    PUSHJ P,CRLF            ;SIGNAL STARTING I/O\r
+       LDB A,SWPTR             ;GET FIRST CHAR OF SWITCHES\r
+       CAIN A,"Z"-40           ;ZERO COMMAND?\r
+       JRST ZERO               ;YES.\r
+       CAIN A,"G"-40           ;GO COMMAND?\r
+PROGSA:        JRST GO                 ;YES. *** RH MODIFIED ***\r
+       CAIL A,"0"-40           ;NUMERIC?\r
+       CAILE A,"7"-40          ; OCTAL, THAT IS,\r
+       SKIPA                   ;NO.\r
+       JRST SETSA              ;YES. GO SET STARTING ADDRESS\r
+       PUSHJ P,RDDIR           ;REST OF COMMANDS NEED DIRECTORY\r
+       LDB A,SWPTR             ;GET FIRST CHAR OF SWITCHES\r
+       CAIN A,"M"-40           ;MERGE?\r
+       TROA F,R.MRG            ;YES. SKIP INTO LOAD, FLAGGING MERGE ONLY\r
+       CAIN A,"L"-40           ;LOAD COMMAND?\r
+       JRST LOAD               ;YES.\r
+       CAIN A,"D"-40           ;DUMP COMMAND?\r
+       JRST DUMP\r
+       CAIN A,"F"-40           ;FILE DIRECTORY?\r
+       JRST FILDIR             ;YES.\r
+       CAIN A,"K"-40           ;KILL A FILE (DELETE)?\r
+       JRST KILL               ;YES.\r
+       JUMPE A,RUN             ;IF NO SWITCH, ASSUME LOAD AND RUN\r
+       PUSHJ P,ERROR           ;NO OTHERS IMPLEMENTED\r
+\r
+SETSA: HRRM N,PROGSA           ;STORE PROGRAM STARTING ADDR\r
+       JRST REGO               ;AND WAIT FOR ANOTHER COMMAND\r
+\r
+FILDIR:        MOVSI N,-NFILES         ;LIST A QUICK DIRECTORY\r
+FILDL: SKIPN B,HBUF+D.NAM(N)   ;GET A NAME, IF ANY IN THIS SLOT\r
+       JRST FILDN              ;NONE HERE\r
+       PUSHJ P,SIXOUT          ;TYPE C(B) IN SIXBIT\r
+       HLLZ B,HBUF+D.EXT(N)    ;GET EXTENSION\r
+       JUMPE B,FILD1           ;IF NOT BLANK,\r
+       MOVEI C,"."             ;DOT\r
+       PUSHJ P,TYO             ;TYPE DOT\r
+       PUSHJ P,SIXOUT          ;TYPE EXT\r
+FILD1: PUSHJ P,CRLF            ;A CARRIAGE RETURN\r
+FILDN: AOBJN N,FILDL           ;LOOP FOR ALL NAMES\r
+       JRST REGO1              ;STOP TAPE AND GO FOR NEXT COMMAND\r
+\f;LOAD AND RUN COMMANDS\r
+\r
+RUN:   TRO F,R.STRT            ;LOAD AND START PROGRAM\r
+LOAD:  MOVSI FN,-NFILES        ;SEARCH TO SEE IF ONLY ONE SAV FILE ON DT\r
+       MOVEI A,0               ;WHERE NAME WILL GO IF FOUND\r
+RUN5:  HLRZ EXT,HBUF+D.EXT(FN) ;CHECK AN EXTENSION\r
+       CAIN EXT,(SIXBIT /SAV/) ;IS IT A SAV FILE?\r
+       JRST RUN2               ;YES. GO NOTE IT\r
+RUN4:  AOBJN FN,RUN5           ;LOOP THRU COUNTING ALL FILES\r
+       SKIPN A                 ;WAS ONE AND ONLY ONE FOUND?\r
+RUN3:  MOVE A,SYSTEM           ;DEFAULT READ-FILE NAME\r
+       SKIPN FNAME             ;NAME SUPPLIED?\r
+       MOVEM A,FNAME           ;NO. PLUG IN DEFAULT.\r
+       PUSHJ P,LOOK            ;TRY TO FIND FILE\r
+         PUSHJ P,ERROR         ;NOT THERE. FAIL.\r
+       MOVEI LBN,1             ;HAVE TO FIND A BLOCK OF FILE\r
+       MOVE BP,BYTPTR          ;LOOK THRU DIRECTORY\r
+RUNL:  ILDB N,BP               ;GET A BYTE\r
+       CAIN N,0(FN)            ;BELONG TO THIS FILE?\r
+       JRST RUN1               ;YES.\r
+       CAIL LBN,MAXBLK         ;LOOKED TOO FAR?\r
+        PUSHJ P,ERROR          ;YES. NO BLKS IN FILE!\r
+       AOJA LBN,RUNL           ;LOOK FURTHER\r
+RUN1:  PUSHJ P,RDDAT1          ;READ THE DATA BLOCK TO FIND FBN\r
+       LDB A,[POINT 10,DBUF+0,27]      ;FIRST BLOCK OF FILE\r
+       HRLM A,DBUF+0           ;PUT IT IN LINK SLOT TO BE READ NEXT\r
+RFILE: SETZB Q,40              ;CLEAR CORE BEFORE READING FILE\r
+                               ;AND INITIALLY NO WORDS IN DATA BUFFER\r
+       MOVE A,BLTXWD           ; ..\r
+       TRNN F,R.MRG            ;UNLESS MERGE ONLY,\r
+       BLT A,CLRTOP            ;CLEAR UP TO BASE OF THIS PROGRAM\r
+RFILL1:        PUSHJ P,RWORD           ;READ A POINTER OR JRST WORD\r
+       SKIPL M,W               ;WHICH IS IT?\r
+       JRST STARTQ             ;TRANSFER WORD\r
+RFILL2:        PUSHJ P,RWORD           ;READ A WORD OF DATA\r
+       MOVEM W,1(M)            ;STORE IT IN CORE\r
+       AOBJN M,RFILL2          ;COUNT THE CORE POINTER.\r
+       JRST RFILL1             ;IT RAN OUT. GET ANOTHER.\r
+\r
+RUN2:  JUMPN A,RUN3            ;IF ALREADY ONE, THIS IS 2. QUIT.\r
+       MOVE A,HBUF+D.NAM(FN)   ;FIRST SAV FILE. GET ITS NAME.\r
+       JRST RUN4               ;AND SEE IF ANY MORE.\r
+\fSTARTQ:       HRRM W,PROGSA           ;SAVE THE STARTING ADDRESS\r
+REGO1: CONO DTC,C.STOP         ;STOP THE TAPE\r
+       TRNE F,R.STRT           ;LOAD OR START?\r
+       JRST 0(W)               ;START\r
+       JRST REGO               ;JUST LOAD. GO GET ANOTHER COMMAND\r
+\r
+;SUBROUTINE TO READ A DATA WORD FROM THE FILE.\r
+\r
+RWORD1:        MOVE Q,DBUFP            ;PREPARE TO COUNT DATA WORDS\r
+RWORD: JUMPGE Q,RWNXTB         ;NEED ANOTHER BLOCK?\r
+       MOVE W,0(Q)             ;NO. GET A WORD.\r
+       AOBJN Q,.+1             ;COUNT IT.\r
+       POPJ P,0                ;RETURN FROM RWORD\r
+RWNXTB:        PUSHJ P,RDDATA          ;NO. READ NEXT DATA BLOCK, IF ANY\r
+       JRST RWORD1             ;READ FROM THIS BLOCK\r
+\r
+DUMP:  MOVE A,CRASH            ;DEFAULT FILE NAME\r
+       SKIPN FNAME             ;NAME ALREADY SET?\r
+       MOVEM A,FNAME           ;NO. USE DEFAULT\r
+       PUSHJ P,ENTR            ;TRY TO FIND THE FILE.\r
+        PUSHJ P,ERROR          ;NO FREE SLOTS (OR MAYBE NO BLKS LEFT)\r
+       MOVEM LBN,FBN           ;SAVE AS FIRST BLOCK NUMBER\r
+       MOVEI Q,0               ;INITIALIZE DATA BLOCK COUNTER\r
+       MOVEI M,FIRSTW-1        ;AND CORE ADDRESS COUNTER\r
+DUMPL2:        HRRZS X,M               ;START OF A BLOCK\r
+DUMPL1:        SKIPN 1(X)              ;THIS WORD ZERO IN CORE?\r
+       JRST DUMP1              ;YES. SEE IF END OF A BLOCK.\r
+       CAIGE X,CLRTOP          ;LOOKED AT ALL OF CORE?\r
+       AOJA X,DUMPL1           ;NO. COUNT PART OF THIS BLOCK, LOOK ON.\r
+DUMP1: MOVEI W,0(M)            ;END OF BLOCK. IS BLOCK EMPTY?\r
+       SUBI W,0(X)             ;START MINUS END OF BLK\r
+       JUMPE W,DUMP2           ;JUMP IF BLOCK EMPTY\r
+       HRL M,W                 ;MAKE -COUNT,,START-1 FOR COUNTER\r
+       MOVE W,M                ;AND FOR DATA IN FILE\r
+       PUSHJ P,WWORD           ;WRITE IT OUT AS DATA\r
+DUMPL3:        MOVE W,1(M)             ;GET THE WORD FROM CORE\r
+       PUSHJ P,WWORD           ;OUTPUT TO FILE\r
+       AOBJN M,DUMPL3          ;OUTPUT ALL OF BLOCK\r
+DUMP2: CAIGE X,CLRTOP          ;CONSIDERED ALL OF CORE?\r
+       AOJA M,DUMPL2           ;NO. MOVE ON.\r
+       TRO F,R.WEOF            ;FLAG WRITING LAST BLK, SO NO ALLOC\r
+       MOVE W,PROGSA           ;YES. APPEND STARTING ADDRESS\r
+       PUSHJ P,WWORD           ;WRITE OUT THIS WORD\r
+       JUMPL Q,.-1             ;IF MORE TO GO IN BLOCK, WRITE AGAIN\r
+       JRST CLS                ;WRITE OUT THE DIRECTORY\r
+                               ;AND RESTART PROGRAM FOR NEXT COMMAND\r
+\f;SUBROUTINE TO WRITE A WORD INTO THE FILE\r
+\r
+WWORD: SKIPL Q                 ;NEED A NEW POINTER?\r
+       MOVE Q,DBUFP            ;YES.\r
+       MOVEM W,0(Q)            ;PUT WORD INTO BUFFER\r
+       AOBJN Q,CPOPJ           ;COUNT POINTER. DONE?\r
+       MOVE A,FBN              ;GET FIRST BLOCK NUMBER\r
+       LSH A,10                ;PUT IN RIGHT PLACE\r
+       TRO A,177               ;DECLARE 127 WORDS IN BLOCK USED\r
+       HRRZM A,DBUF+0          ;PUT IN LINK WORD\r
+       TRNE F,R.WEOF           ;WRITING LAST BLK?\r
+       JRST WWORD1             ;YES. DONT ALLOCATE ANOTHER\r
+       PUSH P,LBN              ;SAVE BLOCK ABOUT TO WRITE\r
+       PUSHJ P,ALLOC           ;GET NEXT BLOCK OF FILE\r
+        PUSHJ P,ERROR          ;NONE AVAILABLE\r
+       HRLM LBN,DBUF+0         ;PUT IN LINK WORD\r
+       POP P,LBN               ;RESTORE BLOCK FOR WRITING NOW\r
+WWORD1:        PUSHJ P,WRDATA          ;OUTPUT BLOCK, IF POSSIBLE\r
+       HLRZ LBN,DBUF+0         ;GET LINK TO NEXT BLOCK IN LBN\r
+       POPJ P,0                ;OK. RETURN.\r
+\r
+;SUBROUTINE TO LOOK FOR FILE\r
+\r
+LOOK:  MOVE NAME,FNAME         ;GET DESIRED FILENAME\r
+       MOVSI EXT,(SIXBIT /SAV/)        ;DEFAULT EXTENSION\r
+       SKIPE FEXT              ;ANY SUPPLIED?\r
+       HLLZ EXT,FEXT           ;YES. USE IT.\r
+SRCHFD:        MOVSI FN,-NFILES        ;MAKE AOBJN COUNTER\r
+SCHL2: MOVE B,HBUF+D.NAM(FN)   ;GET A FILE NAME\r
+       CAME B,NAME             ;IS NAME RIGHT?\r
+       JRST SCHN2              ;NO. MOVE ON.\r
+       HLLZ B,HBUF+D.EXT(FN)   ;CHECK THE EXTENSION\r
+       CAMN B,EXT              ;IS IT RIGHT TOO?\r
+       AOJA FN,CPOPJ1          ;YES. GOOD RETURN, ANSWER IS FILE NUMBER IN FN\r
+SCHN2: AOBJN FN,SCHL2          ;COUNT FILE, EXT. CHECK NEXT FILE IN FD\r
+       POPJ P,0                ;FAIL RETURN, NOT FOUND.\r
+\f;SUBROUTINE TO READ NEXT BLOCK OF DATA INTO DBUF\r
+\r
+RDDATA:        HLRZ LBN,DBUF+0         ;LINK\r
+       JUMPE LBN,ERROR         ;JUMP IF END OF FILE\r
+RDDAT1:        MOVEI A,DBUF            ;SELECT DATA BUFFER\r
+RDBLK: PUSHJ P,PROCBK          ;PROCESS A BLOCK\r
+        CONO DTC,O.READ        ;ARGS TO PROCBK\r
+        DATAI DTC,0(A)         ; TO CAUSE IT TO READ THE BLOCK\r
+       POPJ P,0                ;SUCCESS. RETURN\r
+\r
+RDDIR: TRNE F,R.DIRI           ;IS THE DIRECTORY IN CORE OK?\r
+       POPJ P,0                ;YES. DONT READ IT AGAIN\r
+       MOVEI A,HBUF            ;MUST READ. WHERE TO PUT IT.\r
+       MOVEI LBN,DIRBLK        ;BLOCK ON TAPE TO READ\r
+       PUSHJ P,RDBLK           ;READ IT\r
+       CONO DTC,C.STOP         ;STOP TAPE IN CASE OF /F COMMAND\r
+       TRO F,R.DIRI            ;HAVE A GOOD DIRECTORY IN CORE NOW\r
+       POPJ P,0                ;RETURN FROM RDDIR\r
+\r
+ZERO:  MOVE A,TAPEID           ;COPY TAPE NAME IF ANY\r
+       MOVEM A,HBUF+177        ; ..\r
+       TLZN F,L.UPA2           ;WAS ONE THERE?\r
+       PUSHJ P,RDDIR           ;NO. GET THE ONE ON TAPE\r
+       SETZM HBUF              ;CLEAR OUT REST OF DIR\r
+       MOVE A,[XWD HBUF,HBUF+1] ; ..\r
+       BLT A,HBUF+176          ; ..\r
+       MOVSI A,(<36B4+36B9>)   ;ALLOCATE BLOCKS 1 AND 2\r
+       MOVEM A,HBUF+D.BYT+0    ; ..\r
+       MOVSI A,(36B9)          ;AND BLOCK 144\r
+       MOVEM A,HBUF+D.BYT+16   ; ..\r
+       HRLOI A,7               ;AND THE NONEXISTENT ONES\r
+       MOVEM A,HBUF+D.BYT+122  ; ..\r
+CLS:   PUSHJ P,WRDIR           ;WRITE OUT THE DIRECTORY\r
+       JRST REGO1              ;STOP TAPE AND RETURN TO COMMAND SCANNER\r
+\r
+WRDIR: MOVEI LBN,DIRBLK        ;BLOCK TO WRITE\r
+       MOVEI A,HBUF            ;DATA TO WRITE\r
+       PJRST WRBLK             ;WRITE IT\r
+\r
+WRDATA:        MOVEI A,DBUF            ;WRITE FROM DATA BUFFER\r
+WRBLK: PUSHJ P,PROCBK          ;PROCESS THE BLOCK\r
+        CONO DTC,O.WRIT        ;ARGS TO PROCBK TO CAUSE IT\r
+        DATAO DTC,0(A)         ;TO WRITE THE BLOCK ONTO TAPE\r
+       POPJ P,0                ;RETURN FROM WRBLK\r
+\fPROCBK:       PUSHJ P,SEARCH          ;ROUTINE TO READ OR WRITE A BLOCK OF TAPE\r
+                               ; FIRST FIND THE BLOCK (EITHER DIRECTION)\r
+       MOVEI N,200             ;NUMBER OF WORDS IN A BLOCK\r
+       TLNE F,L.REV            ;WHICH WAY WE GOING?\r
+       ADDI A,177              ;BACKWARDS. WRITE FROM TOP OF CORE DOWN\r
+       XCT @0(P)               ;CONO WRITE OR READ\r
+       AOS 0(P)                ;COUNT ON TO DATAI OR DATAO\r
+PROCLP:        CONSZ DTS,S.ERR!S.END   ;TROUBLE?\r
+       PUSHJ P,ERROR           ;YES. QUIT\r
+       CONSO DTS,S.DAT         ;WANT DATA MOVED YET?\r
+       JRST PROCLP             ;NO. WAIT SOME MORE.\r
+       XCT @0(P)               ;YES. DATAI OR DATAO TO/FROM BUFFER\r
+       ADDI A,1                ;COUNT BUFFER POINTER\r
+       TLNE F,L.REV            ;GOING BACKWARDS?\r
+       SUBI A,2                ;YES. THEN COUNT POINTER BACKWARDS TOO\r
+       SOJG N,PROCLP           ;TRANSFERRED WHOLE BLOCK?\r
+       CONO DTS,1              ;YES. TELL IT TO DO CHECKSUMMING AND QUIT\r
+       CONSO DTS,S.JOBD        ;DONE?\r
+       JRST .-1                ;NOT YET. WAIT.\r
+       JRST CPOPJ1             ;YES. RETURN AFTER THE DATAI/O ARGUMENT\r
+\r
+SEARCH:        MOVE C,DEVICE           ;GET DRIVE NUMBER\r
+       LSH C,11                ;PUT IN UNIT DIGIT FOR CONO\r
+       CONSZ DTC,C.FWD!C.REV   ;TAPE GOING AT THE MOMENT?\r
+       JRST SRCHC              ;YES.\r
+       TRO C,C.FWD!C.DSEL      ;NO. MAKE IT GO FORWARD\r
+       TLZ F,L.REV             ;AND GET THE FLAG TO SAY THAT\r
+SRCHC: CONO DTC,O.SRCH!C.SEL(C) ;MAKE IT SEARCH\r
+SRCHW: CONSZ DTS,S.END         ;AT END ZONE?\r
+       JRST SRCHTA             ;YES. TURN AROUND.\r
+       CONSZ DTS,S.ERR         ;ANY ERRORS?\r
+        PUSHJ P,ERROR          ;YES. QUIT.\r
+       CONSO DTS,S.DAT         ;BLOCK NUMBER FOUND?\r
+       JRST SRCHW              ;NO. WAIT FOR IT\r
+       DATAI DTC,N             ;YES. SEE WHAT BLOCK WE ARE AT\r
+       ANDI N,7777             ;JUST FOR SAFETY, MASK JUNK OUT\r
+       SUBI N,0(LBN)           ;GET THE DISTANCE TO GO\r
+       JUMPE N,CPOPJ           ;IF FOUND, RETURN WITH TAPE ROLLING INTO DESIRED BLK\r
+       TLNE F,L.REV            ;NOT THERE. WHICH WAY WE GOING?\r
+       MOVNS N                 ;BACKWARDS. NEGATE.\r
+       JUMPL N,SEARCH          ;IF SHOULD KEEP GOING, ITS MINUS.\r
+SRCHTA:        CONO DTC,C.FWD!C.REV    ;MUST TURN AROUND (END ZONE OR PASSED)\r
+       TLC F,L.REV             ;COMPLEMENT DIRECTION FLAG\r
+       JRST SEARCH             ;SEARCH SOME MORE\r
+\fDELETE:       PUSHJ P,LOOK            ;SEE IF FILE EXISTS ALREADY\r
+        POPJ P,0               ;NO. FAIL RETURN\r
+       SETZB B,HBUF+D.NAM-1(FN)        ;FOUND IT. CLEAR NAME\r
+       SETZM HBUF+D.EXT-1(FN)  ;AND EXT IN DIRECTORY\r
+       MOVE BP,BYTPTR          ;INITIAL BYTE POINTER TO DIRECTORY BYTES\r
+       MOVEI N,MAXBLK          ;SEARCH ALL BYTES FOR THIS FILE\r
+       ILDB A,BP               ;GET A DIRECTORY BYTE\r
+       CAIN A,0(FN)            ;BELONG TO THIS FILE?\r
+       DPB B,BP                ;YES. CLEAR IT OUT, ITS FREE NOW\r
+       SOJG N,.-3              ;LOOP FOR WHOLE DIRECTORY\r
+CPOPJ1:        AOS 0(P)                ;SUCCESSFUL RETURN\r
+CPOPJ: POPJ P,0                ;RETURN.\r
+\r
+KILL:  PUSHJ P,DELETE          ;REMOVE FILE FROM DIRECTORY\r
+        PUSHJ P,ERROR          ;NOT THERE, GIVE A BELL\r
+       JRST CLS                ;WRITE DIRECTORY AND RETURN TO CMD SCAN\r
+\r
+ENTR:  PUSHJ P,DELETE          ;FIRST REMOVE OLD FILE BY THIS NAME\r
+        JFCL                   ;MAY NOT HAVE BEEN ONE, THATS OK\r
+       MOVSI FN,-NFILES        ;SEARCH FOR A FREE SLOT\r
+       SKIPN HBUF+D.NAM(FN)    ;SLOT FREE?\r
+       AOJA FN,ENTR1           ;YES. CONVERT RH TO FILE NUMBER, GO USE.\r
+       AOBJN FN,.-2            ;LOOK FOR ANOTHER\r
+       POPJ P,0                ;NONE FREE. WE LOSE.\r
+\fENTR1:        MOVEM NAME,HBUF+D.NAM-1(FN)     ;STORE THE FILE NAME IN FREE SLOT\r
+       HLLZM EXT,HBUF+D.EXT-1(FN)      ;AND THE EXTENSION\r
+ALLOCI:        SETZM PRVLBN            ;INITIALIZE POINTERS FOR ALLOCATOR\r
+       MOVE BP,BYTPTR          ;START HAVING CHECKED BLK 0.\r
+       TLZ F,L.REVA            ;NOT REVERSE ALLOCATING\r
+ALLOC: TLZ F,L.TURN            ;ALLOCATOR HASNT TURNED AROUND\r
+       MOVE LBN,PRVLBN         ;RESTORE PREVIOUS LBN\r
+ALLOCP:        TLNE F,L.REVA           ;WHICH WAY WE LOOKING?\r
+       JRST ALCN2              ;NEXT BACK\r
+       JRST ALCN1              ;NEXT FORWARD\r
+\fALCL1:        ILDB N,BP               ;GET A BLOCK BYTE\r
+       JUMPE N,ALLOC1          ;IF ITS FREE, MAY USE IT\r
+ALCN1: CAIGE LBN,MAXBLK        ;LOOKED ALL THRU FORWARD?\r
+       AOJA LBN,ALCL1          ;NO. TRY ANOTHER\r
+ALLOCT:        TLOE F,L.TURN           ;TURN SEARCH AROUND. BETTER NOT BE SECOND TURN\r
+        POPJ P,0               ;LOOKED THRU AND DIDNT FIND ANYTHING. QUIT.\r
+       TLC F,L.REVA            ;LOOK THE OTHER WAY\r
+       JRST ALLOCP             ;GO SEE WHICH WAY NOW\r
+\r
+ALCL2: ADD BP,[XWD 050000,0]   ;MOVE LEFT A BYTE\r
+       SKIPGE BP               ;OFF THE END OF THE WORD?\r
+       SUB BP,[XWD 430000,1]   ;YES. BACK A WORD, RIGHT 35 BITS\r
+       LDB N,BP                ;GET THIS BYTE\r
+       JUMPE N,ALLOC1          ;IF ITS FREE MAY USE IT.\r
+ALCN2: CAILE LBN,1             ;GONE ALL THE WAY TO THE FRONT?\r
+       SOJA LBN,ALCL2          ;NO, LOOK FURTHER\r
+       JRST ALLOCT             ;YES. MUST TURN ALLOCATOR AROUND\r
+\r
+ALLOC1:        MOVE N,PRVLBN           ;HAVE A FREE ONE. WANT IT?\r
+       SUBI N,0(LBN)           ;FIND DISTANCE FROM LAST ONE\r
+       MOVMS N                 ;WHICHEVER DIRECTION\r
+       CAIGE N,BLKFAC          ;IS IT FAR ENOUGH AWAY?\r
+       TLNE F,L.TURN           ;OR ARE WE TURNING ALLOCATOR AROUND?\r
+       JRST ALLOCY             ;YES. USE THIS ONE.\r
+       JRST ALLOCP             ;NO. PROCEED TO ANOTHER BLOCK\r
+\r
+ALLOCY:        DPB FN,BP               ;PUT THIS FILE NUMBER IN THE BLOCK'S BYTE\r
+       MOVEM LBN,PRVLBN        ;SAVE AS PREVIOUS BLOCK ALLOCATED\r
+       JRST CPOPJ1             ;AND RETURN WITH LBN SET UP\r
+\f;TTY I/O SUBRS\r
+\r
+ERROR: MOVEI C,207             ;MAKE A BELL, EVEN PARITY\r
+       PUSHJ P,TYO             ;TYPE IT OUT\r
+       JRST GO                 ;AND RESTART.\r
+\r
+CRLF:  MOVEI C,215             ;CR, EVEN\r
+       PUSHJ P,TYO             ;TYPE IT.\r
+       MOVEI C,12              ;LF, EVEN\r
+TYO:   DATAO TTY,C             ;SEND OUT CHAR\r
+       CONSZ TTY,20            ;WAIT FOR IDLE\r
+       JRST .-1                ; ..\r
+       POPJ P,0                ;DONE.\r
+\r
+SIXOUT:        MOVEI C,0               ;SO DONT SHIFT IN JUNK\r
+       ROTC B,6                ;GET A SIXBIT CHAR IN C\r
+       ADDI C,40               ;MAKE IT ASCII\r
+       PUSHJ P,TYO             ;TYPE IT\r
+       JUMPN B,SIXOUT          ;IF ANY MORE, TYPE THEM\r
+       POPJ P,0                ;AND RETURN\r
+\f;CONSTANTS AND TEMPS.\r
+\r
+SYSTEM:        SIXBIT /SYSTEM/         ;DEFAULT FILENAME\r
+CRASH: SIXBIT /CRASH/          ;DEFAULT DUMP NAME\r
+DBUFP: XWD -177,DBUF+1         ;POINTER TO DATA BLOCK\r
+BLTXWD:        XWD 40,41               ;FOR CORE-CLEARING\r
+SIXPTR:        XWD 440600,W            ;POINTER FOR SIXBIT NAME\r
+BYTPTR:        POINT 5,HBUF+D.BYT      ;POINTER TO BYTES IN DIRECTORY\r
+SWPTR: POINT 6,SWITCH,5        ;POINTER TO FIRST SWITCH CHARACTER\r
+\r
+LIT\r
+\r
+UU(PDL,PDLL)                   ;STACK\r
+PDP:   XWD -PDLL,PDL-1         ;STACK POINTER\r
+\r
+UU(ZZMAX,0)\r
+\r
+SLOP==576-<.-GO>               ;MUST BE POSITIVE IF WANT\r
+                               ;THIS TO FIT IN BLKS 0,1,2 OF DTA\r
+                               ;THREE BLOCKS INCLUDING HRI BLKI WD AND JRST WD\r
+       END GO\r
+\f
\ No newline at end of file
diff --git a/src/dtboot.rno b/src/dtboot.rno
new file mode 100644 (file)
index 0000000..745eee9
Binary files /dev/null and b/src/dtboot.rno differ
index 84abe72..b0343e8 100644 (file)
@@ -397,7 +397,6 @@ EXTERN OUTCHS
        JRST    OUTCHS          ;AND OUTPUT IN SCNSRF\r
 >\r
 IFE FTTTYSER,<\r
-\r
        IDPB    TAC,DAT         ;ADD CHAR TO HALGF DUPLEX OUTPUT STREAM\r
        POPJ PDP,\r
 >\r
@@ -437,4 +436,4 @@ IFE FTTTYSER,<
 \r
 ERREND:        END\r
 \f\r
-\0
\ No newline at end of file
+\0\r
index d724593..baf55d5 100644 (file)
@@ -1,34 +1,34 @@
-;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DB.MAC(V003)
-       XLIST
-;      TH/RC  TS3.19  24 SEP 68  V002
-;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY
-;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT
-
-FTSWAP=0       ;SWAPPING SYSTEM
-               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1
-
-FTDISK=-1      ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING)
-               ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1
-               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1
-
-FTLOGIN=-1     ;LOGIN-LOGOUT COMMAND AND UUOS
-               ;FTDISK=-1 IMPLIES FTLOGIN=-1
-
-FTCCL=-1       ;CONCISE COMMAND LANGUAGE COMMANDS
-               ;USED IN APRSER
-               ;SHOULD BE 0 IN NON-DISK SYSTEMS
-               ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED
-
-
-FTRC10=-1      ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK
-
-FTKCT=0        ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER
-
-FTPRV=0        ;PRIVILEGE BITS FOR EACH USER
-
-FTGETTAB=0     ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES
-
-;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS
-;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING
-
-       LIST
+;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DB.MAC(V003)\r
+       XLIST\r
+;      TH/RC  TS3.19  24 SEP 68  V002\r
+;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY\r
+;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT\r
+\r
+FTSWAP=0       ;SWAPPING SYSTEM\r
+               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1\r
+\r
+FTDISK=-1      ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING)\r
+               ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1\r
+               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1\r
+\r
+FTLOGIN=-1     ;LOGIN-LOGOUT COMMAND AND UUOS\r
+               ;FTDISK=-1 IMPLIES FTLOGIN=-1\r
+\r
+FTCCL=-1       ;CONCISE COMMAND LANGUAGE COMMANDS\r
+               ;USED IN APRSER\r
+               ;SHOULD BE 0 IN NON-DISK SYSTEMS\r
+               ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED\r
+\r
+\r
+FTRC10=-1      ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK\r
+\r
+FTKCT=0        ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER\r
+\r
+FTPRV=0        ;PRIVILEGE BITS FOR EACH USER\r
+\r
+FTGETTAB=0     ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES\r
+\r
+;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS\r
+;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING\r
+\r
+       LIST\r
index d0e6f10..def8c7d 100644 (file)
@@ -1,33 +1,33 @@
-;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DD.MAC(V003)
-       XLIST
-;      TH/RC  TS3.19  27 SEP 68  V002
-;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY
-;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT
-
-FTSWAP=0       ;SWAPPING SYSTEM
-               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1
-
-FTDISK=-1      ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING)
-               ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1
-               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1
-
-FTLOGIN=-1     ;LOGIN-LOGOUT COMMAND AND UUOS
-               ;FTDISK=-1 IMPLIES FTLOGIN=-1
-
-FTCCL=-1       ;CONCISE COMMAND LANGUAGE COMMANDS
-               ;USED IN APRSER
-               ;SHOULD BE 0 IN NON-DISK SYSTEMS
-               ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED
-
-FTRC10=0       ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK
-
-FTKCT=0        ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER
-
-FTPRV=0        ;PRIVILEGE BITS FOR EACH USER
-
-FTGETTAB=0     ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES
-
-;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS
-;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING
-
-       LIST
+;THIS SUB-PROGRAM ASSEMBLED WITH CONFIGURATION DEPENDENT FEATURE SWITCHES - FT40DD.MAC(V003)\r
+       XLIST\r
+;      TH/RC  TS3.19  27 SEP 68  V002\r
+;CONFIGURATION DEPENDENT FEATURE SWITCHES FOR CONDITIONAL ASSEMBLY\r
+;-1 MEANS INCLUDE THE ASSOCIATED FEATURE, 0 MEANS ELIMINATE IT\r
+\r
+FTSWAP=0       ;SWAPPING SYSTEM\r
+               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1\r
+\r
+FTDISK=-1      ;DISK SYSTEM(MAY OR MAY NOT HAVE SWAPPING)\r
+               ;IF FTDISK=-1, THEN FTLOGIN MUST BE -1\r
+               ;IF FTSWAP=-1, THEN FTDISK MUST BE -1\r
+\r
+FTLOGIN=-1     ;LOGIN-LOGOUT COMMAND AND UUOS\r
+               ;FTDISK=-1 IMPLIES FTLOGIN=-1\r
+\r
+FTCCL=-1       ;CONCISE COMMAND LANGUAGE COMMANDS\r
+               ;USED IN APRSER\r
+               ;SHOULD BE 0 IN NON-DISK SYSTEMS\r
+               ;SHOULD BE -1 IN DISK SYSTEMS, WHEN IMPLEMENTED\r
+\r
+FTRC10=0       ;NEW PDP-10 DISK(MODEL RC-10) INSTEAD OF DATA PRODUCTS DISK\r
+\r
+FTKCT=0        ;ACCUMULATE CORE*RUNNING TIME FOR CHARGING FOR EACH USER\r
+\r
+FTPRV=0        ;PRIVILEGE BITS FOR EACH USER\r
+\r
+FTGETTAB=0     ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES\r
+\r
+;LAST PAGE SHOULD BE WRITTEN WITH 'HP' TECO COMMAND SO FORM-FEED IS\r
+;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING\r
+\r
+       LIST\r
index 12a1242..8e6aca4 100644 (file)
@@ -31,4 +31,3 @@ FTGETTAB=-1   ;GETTAB UUO - RETURN CONTENTS OF MONITOR JOBTABLES
 ;NOT APPENDED AFTER LIST CAUSING EXTRA BLANK PAGE IN MONITOR LISTING\r
 \r
        LIST\r
-\f\r
index 0ad5215..89b786d 100644 (file)
@@ -58,6 +58,7 @@ IFN FT2REL,<
        CONSO APR,NXM           ;NON-EXISTENT?\r
        SOJG TAC, .-3           ;NO,KEEP LOOKING AS LONG AS NOT TOP OF MEMORY\r
        SUBI    DAT,700         ;MAKE ROOM FOR TENDUMP AT TOP OF CORE\r
+       JSR MOVSTP              ;MOVE DDT SYMBOL TABLE POINTER TO LOWER CORE\r
                                ; (DDTSYM=36) WHERE EXEC DDT EXPECTS IT.\r
                                ; IF NOT ALREADY MOVED THERE. RETURN POINTER IN UUO\r
        HLRE TAC1,UUO           ;-LENGTH OF S. T.\r
@@ -112,7 +113,6 @@ IFN FTDISK,<
 ;INITIALIZE DISK\r
 \r
        EXTERN NULPDL,DSKINI\r
-\r
        MOVEI PDP,NULPDL\r
        PUSHJ PDP,DSKINI        ;INITIALIZE THE DISK\r
                                ; AFTER SETTING UP CHANNEL LOC\r
@@ -150,6 +150,7 @@ UUOTRP:     JSR UUO0                ;TO UUO HANDLER
        0               ;LOC 60/61 TRAPPED TO FOR UNIMPLEMENTED OP CODES ON PDP-10\r
                        ;OP CODE 100 IS USED TO DISMISS USER MODE INTERRUPTS(SEE TRPSET UUO)\r
        JSR UUO2        ;GO SEE IF OP CODE 100 OR SOME OTHER ONE\r
+\r
 \fIFN FT2REL,<\r
 ;SET LOC TWOREG TO -1 IF MACHINE HAS TWO RELOC REG,0 IF ONLY ONE RELOC REG\r
        EXTERN TWOREG,SEGN,SEGPTR,AND2RG,JOBN\r
@@ -184,6 +185,7 @@ TSTAPR:     0                       ;PLACE TO SIDE JSR PC
        MOVNI TAC,SEGN          ;SET LH OF POINTER TO FIRST SEG IN JBTXX TABLES\r
        HRLI TAC,JOBN           ;SET RH OF POINTER TO FIRST HIGH SEG\r
                                ;THIS MUST BE DONE HERE BECAUSE SEGPTR APPEARS IN FIRST\r
+\r
                                ; WHICH BUILD FORBITS FROM HAVING EXTERNALS\r
        MOVSM TAC,SEGPTR        ;POINTER USED FOR AOBJN LOOPS\r
        CONO PI,10000           ;CLEAR PI SYSTEM\r
@@ -202,14 +204,14 @@ TSTAPR:   0                       ;PLACE TO SIDE JSR PC
 ;  2.  JUNK            JUNK(NON-NEG)   S.T.PTR\r
 ;  3.  S.T.PTR         S.T.PTR         JUNK\r
 \r
-;CALL: JSP MOVSTR\r
+;CALL: JSP MOVSTP\r
 ;      RETURN WITH AC UUO SET TO SYMBOL TABLE POINTER\r
 ;CALLED FROM MANDATORY ONCE ONLY CODE AND 141 START CODE(WHICHEVER OCCURS FIRST)\r
 \r
-       INTERN MOVSTR\r
+       INTERN MOVSTP\r
        EXTERN T30SYM,JOBSYM,DDTSYM,DDTX,SYSDDT\r
 \r
-MOVSTR:        0                       ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND\r
+MOVSTP:        0                       ;JSR HERE FROM MANDATORY ONCE ONLY CODE AND\r
                                ; FIRST JUMP TO EXEC DDT IF BEFORE MONITOR STARTED\r
 MOVJMP:        JRST .+1                ;PATCHED TO SETUUO AFTER FIRST EXECUTION\r
        MOVE UUO,T30SYM         ;ASSUME LOADED BY REGULAR 10/30\r
@@ -228,14 +230,14 @@ REGT30:   MOVEM UUO,DDTSYM        ;STORE THE SYMBOL TABLE POINTER FOR EXEC DDT
 SETUUO:        MOVE UUO,DDTSYM         ;RETURN THE CORRECT(MAYBEUPDATED IF\r
                                ; EXEC DDT PATCHES MADE BEFORE MONITOR SAVED OR\r
                                ; STARTED) SYMBOL TABLE POINTER\r
-       JRST @MOVSTR            ;RETURN\r
+       JRST @MOVSTP            ;RETURN\r
 \r
 ;HERE IF EXEC DDT IS STARTED UP BEFORE MONITOR(TO MAKE A PATCH FOR EXAMPLE)\r
 \r
        INTERN PATSYM\r
        EXTERN DDTX\r
 \r
-PATSYM:        JSR MOVSTR              ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL\r
+PATSYM:        JSR MOVSTP              ;MOVE DDT SYMBOL TABLE POINTER SO EXEC DDT WILL\r
                                ; FIND IT AND PATCH 141 TO GO DIRECTLY TO EXEC DDT\r
        JRST DDTX               ;AND GO DIRECTLY TO EXEC DDT\r
 \f\r
@@ -349,7 +351,6 @@ TIMLOP:     SETZM TIME
        JRST    TIMLOP  ;ILLEGAL CHARACTER\r
        MOVE    TAC,TAC1\r
        IDIVI   TAC,^D100       ;TAC=HRS.TAC1=MINS\r
-\r
        SKIPL   TAC     ;HRS NEGATIVE?\r
        CAILE   TAC,^D23        ;OR .G. 23?\r
        JRST    TIMLOP  ;OUT OF BOUNDS\r
@@ -378,7 +379,7 @@ IFN FT2REL,<
        MOVEI TAC,2\r
        PUSHJ PDP,RADX10        ;NO. SECOND REG EXISTS.\r
        PUSHJ PDP,INLMES\r
-       ASCIZ /RELOC. REG.\r
+       ASCIZ / RELOC. REG.\r
 /\r
        PUSHJ PDP,OPOUT\r
 >\r
@@ -396,7 +397,7 @@ CONFLP:     SKIPN AC1,INTTB1(PROG)  ;INT LOC HAVE DEV DATA BLOCK?
        ASCIZ / /\r
        HLLZ TAC1,DEVNAM(AC1)   ;DEVICE NAME\r
        PUSHJ PDP,PRNAME        ;PRINT IT\r
-       SOJLE UUO,SINGLE                ;IS THIS JUST A SIGNLE DEVICE?\r
+       SOJLE UUO,SINGLE                ;IS THIS JUST A SINGLE DEVICE?\r
        PUSHJ PDP,INLMES        ;NO, APPEND 'S TO DEVICE NAME\r
        ASCIZ /'S/\r
 SINGLE:        PUSHJ PDP,CRLF          ;PRINT CR LF\r
@@ -687,7 +688,7 @@ IFE FTTTYSER,<  MOVE TAC,LINEP              ;RESET BYTE POINTER>
 DELETE:        IFN FTTTYSER,< PUSHJ PDP,DCPUTR\r
        JRST DELET1>\r
 IFE FTTTYSER,<\r
-       JUMPE ITEM,DELET1       ;AT BEGINNING OF LINE?>\r
+       JUMPE ITEM,DELET1       ;AT BEGINNING OF LINE?\r
        ADD TAC,[XWD 070000,0]  ;NO, BACK UP BYTE POINTER\r
        TLNE TAC,400000         ;FINISHED THIS WORD YET?\r
        ADD TAC,[XWD 347777,-1] ;YES, BACK UP ADDRESS>\r
@@ -799,7 +800,7 @@ LINBUF:     BLOCK 30
 \r
 ;MESSAGES\r
 \r
-TSEXEC:        ASCIZ /MONITOR JUST LOADED\r
+TSEXEC:        ASCIZ / MONITOR JUST LOADED\r
 /\r
 TODATE:        ASCIZ /\r
 TYPE TODAY'S DATE AS MM-DD-YY\r
@@ -921,7 +922,7 @@ IFE FTRC10, <
 \r
 IFN    FTRC10, <\r
        HRRZ    TAC,SATPTR\r
-SETS5X:        CAIL TAC,SATTOP\r
+SETS5X:        CAIL    TAC,SATTOP\r
        JRST    SAT05           ;EXIT FROM DFWUNS BACK TO DSKINI IN DSKSER........\r
        ADDI    TAC,SENTSZ\r
        MOVEI   TAC1,411000     ;ON THE NEW PDP-10 DISK SYSTEM SET THE SAT ENTRY\r
@@ -1540,7 +1541,7 @@ CPCT2:    SUBI    TAC,1
        POP     PDP,LBHIGH      ;RESTORE PREVIOUSLY EXISTING VALUE OF THE HIGHEST\r
                                ; LEGAL LOGICAL DISK BLOCK NUMBER.\r
        POPJ    PDP,            ;***SUBROUTINE EXIT***.......\r
-i\r
+\r
 \r
 CPCT3: POP     PDP,TAC\r
        CONSZ   DSK,NRDY        ;NON-EXISTENT DISK?\r
@@ -1594,7 +1595,7 @@ WRLK9:    PUSHJ   PDP,ICONM       ;PRINT ERROR MESSAGE
 WRLKM1:        ASCIZ   /DISK BLOCK 0 WRITE ERROR DURING WRITE-LOCK CHECK.\r
 /\r
 WRLKM2:        ASCIZ   /"MAINTENANCE SEGMENT" SWITCH MUST BE OFF. AND\r
-DIS WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",\r
+DISK WRITE PROTECTION SWITCHES MUST BE SET TO 0000 AND "LESS THAN",\r
 FIX THEM ! !\r
 /\r
 \f\r
index 37d1861..56a0e9e 100644 (file)
@@ -165,6 +165,7 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON
        LINE=TAC1       ;SCANNER LINE NUMBER\r
        HPOS=ITEM       ;HORIZONTAL POSITION OF TTY,(0-71)\r
 \r
+\r
 ;SPECIAL SYMBOLS\r
 \r
        PION=200        ;TURN PI ON BIT\r
@@ -173,8 +174,10 @@ INTERNAL T35,T37,FULTWX,LGLSET,KILMSK,XON
        IDLECH=1        ;DELAY CHAR FOR TABS, ETC,\r
                        ; SHOULD BE ^V, BUT FOR 37'S\r
 \r
+\r
 ;BYTE POINTERS\r
 \r
+\r
 INTERNAL TPCJOBN,TYPX,FULTWX,TYPE,TAKR,BREAKB\r
 \r
 PHPOS: POINT 7,DEVIAD(DEVDAT),12       ;HORIZONTAL POSITION\r
@@ -254,6 +257,7 @@ SCN3:       HRRM    TAC,LINTAB(TAC1)        ;SET LOG. LINE NUMBERS
        HLLM    TAC,LINTAB(TAC1)        ;LEAVING REST OF BITS AS THEY WERE\r
        AOBJN TAC1,SCN2\r
        POPJ PDP,\r
+\r
 \f;ROUTINES TO SET UP BUFFERS\r
 \r
 INTERNAL TSETBF,SETBFI,PUTCHI\r
@@ -276,6 +280,7 @@ SETBF0:     MOVE    TAC,BUF(DAT)
        MOVEM   TAC,PCTR(DAT)\r
        HLRZ    TAC,BUF(DAT)    ;CHARACTER COUNT\r
        MOVEM   TAC,FCTR(DAT)   ;UPDATE FREE CHARACTER COUNT\r
+       POPJ    PDP,\r
 \r
 ;ROUTINE TO PUT A CHARACTER INTO A BUFFER (FOR INPUT,MERTPO, AND ONCE)\r
 ;CALL  MOVEI DAT,TTYBUF(DDB)           ;TO SPECIFY BUFFER\r
@@ -336,6 +341,7 @@ GETCH1:     TDZA    CHREC,CHREC     ;RETURN 0 INDICATING END OF BUFFER
 PUTCI0:        AOS     FCTR(DAT)       ;READJUST FREE COUNTER\r
        POPJ    PDP,\r
 \r
+\r
 ;ROUTINE TO PLACE A CHARACTER INTO THE OUTPUT BUFFER\r
 ;CALLED AT INTERRUPT LEVEL\r
 ;CALL  MOVE    CHREC,CHARACTER TO PLACE INTO BUFFER\r
@@ -502,7 +508,7 @@ DDTOUT:     PUSHJ PDP,TTYFNU
 DDT5:  MOVSI   IOS,IO+DDTM\r
        IORB    IOS,DEVIOS(DDB)\r
        HRLI    UUO,PROG        ;POINT TO USER AC\r
-       HRRI    UUO,-1(PROG)            ;COMPENSATE FOR GETWD1\r
+       HRRI    UUO,-1(UUO)             ;COMPENSATE FOR GETWD1\r
 DDT2:  MOVE    DAT,[XWD 440700,TAC]    ;BYTE POINTER TO TAC\r
        PUSHJ   PDP,GETWD1              ;GET THE USER'S WORD\r
 DDT3:  TLNN    DAT,760000              ;ANY CHARS LEFT?\r
@@ -593,7 +599,7 @@ OUTC1A:     ;HERE ON OUTPUT OF SLOW CHARS TO SMART TTY
                        ;TO ADJUST HPOS FOR OUTPUT OF CHREC\r
                        ;SKIPS IF SPCHECK SAYS SPECIAL CHAR\r
 \r
-ADJHP: CAIL    CHREC,174       ;HIGH SPECIALS?\r
+ADJHP: CAILE   CHREC,174       ;HIGH SPECIALS?\r
        JRST    SPCHEK          ;YES, NO HPOS MOTION\r
        CAIL    CHREC,40        ;CONTROL CHARACTERS?\r
        AOJA    HPOS,SPCHEK     ;NO. COUNT HPOS FOR PRINT CHAR\r
@@ -1204,11 +1210,13 @@ INTERNAL TTYFNU,TTYFND,TTYERP
 EXTERNAL JOB\r
 \r
 \r
+\r
 TTYFNU:        MOVE ITEM,JOB\r
 TTYFND:        PUSHJ PDP,TTYSRC\r
 TTYDAT:        MOVEI   DAT,TTOBUF(DDB)\r
        POPJ PDP,\r
 \r
+\r
 ;PUT JOB IN IO WAIT IF TTY BUFFER NOT EMPTY\r
 ;CALLED BY NON ERROR MESSAGE ROUTINES AT UUO LEVEL\r
 \r
@@ -1392,7 +1400,6 @@ TTYTLK:   PUSHJ   PDP,GETDDB      ;IN CASE NOT SET UP
        POPJ PDP,\r
        MOVE IOS,DEVIOS(DEVDAT) ;IS TTY IN MONITOR MODE AND LEFT HAND MARGIN?\r
        MOVE    TAC1,-3(PDP)    ;TTY GIVING TALK COMMAND\r
-\r
        MOVE    TAC1,DEVNAM(TAC1)       ;ITS NAME\r
        MOVE    TAC,DEVNAM(DEVDAT)      ;OPR IS NEVER TOO BUSY...\r
        CAME    TAC1,DEVOPR     ;EITHER ONE OPR?\r
@@ -1629,7 +1636,6 @@ XMTIN4:   MOVEI   IOS,MERTPO
                                ;OTHERWISE, DDB ONLY USED TO TYPE A\r
        JRST    TTYKIL                  ;MESSAGE; KILL TTY DDB\r
 \r
-\r
 XMTIN2:        CONO    PI,PION\r
        PUSHJ   PDP,GETCHR              ;NO, GET NEXT CHAR. IN BUFFER\r
        JUMPE   CHREC,XMTIN1            ;IGNORE NULLS\r
@@ -1762,7 +1768,6 @@ RUBOU2:   PUSHJ   PDP,RUBOU4      ;NOT A BREAK AFTER ALL
 AOJDPX:        AOJA    HPOS,DUPLX1     ;OUTPUT AND COUNT HPOS\r
 \r
 RUBOU1:        TLZE    LINE,ROBTPD     ;END OF INPUT STREAM REACHED\r
-       \r
        PUSHJ   PDP,BSECHO      ;OUTPUT A BACKSLASH\r
        JRST    CRLFEC          ;AND A CR LF\r
 \r
@@ -1777,6 +1782,7 @@ SIMFF1:   PUSHJ   PDP,DUPLX1      ;OUTPUT ECHO OF LF OR IDL
        TRNE    TAC,17          ;DONE YET?\r
        SOJA    TAC,.-2         ;NO. OUTPUT MORE\r
        POPJ    PDP,0           ;DONE\r
+\r
 \fSIMFF:        TLO     TAC,ECHSUP      ;DON'T OUTPUT FF OR VT TO A 33\r
        PUSHJ   PDP,TTIPUT      ;PUT IT IN BUFFER\r
        MOVEI   CHREC,12        ;SIMULATE WITH LF'S\r
@@ -2015,7 +2021,6 @@ DDBSRC:   HRRZ    TAC,LINE                ;NUMBER OF LINE ONLY
        HLRZ DEVDAT,DEVSER(DEVDAT)      ;CHAIN THRU DDBS\r
        TDNE TAC,DEVMOD(DEVDAT) ;USE,ATTACH OR ASSIGN BITS ON?\r
        AOBJN IOS,.-2           ;YES. DONE?\r
-\r
        JUMPGE IOS,CPOPJ        ;YES. DEVICE DATA BLOCK FOUND?\r
        MOVSI   TAC,TOIP                ;CLEAR TOIP IN DDB\r
        ANDCAM  TAC,TTYPTR(DDB)         ;IN CASE OF PREVIOUS DETACH\r