ASMB,A,B,C,L    2000A TSB LOADER--VERSION F * *                     AUGUST 1, 1970*       ORG 4       SUP PRESS EXTRA PRINTING      HLT 4,C       LOADER POWER FAIL HALT      HED EQUIPMENT TABLE       ORG 100BDIREC BSS 28        DIRECTORY TRACK HEADERS IDLOC BSS 1         ID TABLE DISC ADDRESS IDLEN BSS 1         ID TABLE LENGTH IN -WORDS ADLOC BSS 1         ADT DISC ADDRESSADLEN BSS 1         ADT LENGTH IN -WORDSTRAX  BSS 16        AVAILABLE TRACK TABLE DTBL  BSS 4         DISC SELECT CODE TABLEMAGSC BSS 1         MAG TAPE SELECT CODEPHNSC BSS 1         PHONES SELECT CODE      HED LOADER ENTRY POINTS *                        ***  NORMAL ENTRY POINT  ***                        *      ORG 2000B       JMP *+1,I     JUMP TO       OCT 4000        LOADER      SPC 4 *                                  ***  NON-SLEEP RELOAD ENTRY POINT  ***                                  *      ORG 3000B       CLC 0,C       JMP *+1,I       DEF LDR6      SPC 5 MTRLT EQU *         SYSTEM SEGMENT TABLE BUFFER  [F]      SPC 4 *                                 * **  LOADER-SYSTEM LINKAGE TABLE  ** *                                 * * *  CONTENTS FILLED IN FROM TSB SYSTEM TAPE ON PAPER TAPE LOADS, *  FROM MAG TAPE ON MAG TAPE LOADS. *       ORG 4000B       JMP LDR       INITIATE LOADING SEQUENCE LSLTB EQU * LIBRA OCT 0         SYSTEM LIBRARY PROGRAM ORIGIN[E]COM6  BSS 1         ADDRESS OF SYSTEM LIBRARY DISC*                                     ADDRESSES INCRE BSS 1         LENGTH OF TTY TABLE TTYDA BSS 1         ADDRESS OF USER DISC ADDRESS?MASK BSS 1         ADDRESS OF USER MASK?BHED BSS 1         => START OF LOGICAL BUFFER?BSTR BSS 1         => END OF LOGICAL BUFFER?BGIN BSS 1         => START OF PHYSICAL BUFFER ?BEND BSS 1         => END OF PHYSICAL BUFFER ?ID   BSS 1         ADDRESS OF ID-NAMESWPIA BSS 1         ADDRESS OF USER-DEPENDENT ITEMS SWPLN BSS 1         LENGTH OF SWAP AREA SWPAA BSS 1         CORE ADDRESS OF SWAP AREA DATE  BSS 1         ADDRESS OF HOUR OF YEAR TIME  BSS 1         ADDRESS OF TENTHS OF SECONDSYEAR  BSS 1         ADDRESS OF YEAR TSB   BSS 1         SYSTEM STARTING ADDRESS PHIN1 BSS 1         ADDRESSES PHIN2 BSS 1           OF PHONES PHIN3 BSS 1             CODEPHIN4 BSS 1         ADDRESS OF PHONE QUANTITY PWRFL BSS 1         POWER FAIL INTERRUPT CODE ULTTA BSS 1         USER LIBRARY TRACK TABLE ADDRESSLSLTE EQU *       HED TSB LOADER*                           * **  MAIN LOADING SEQUENCE  ** *                           * * *  BEGIN HERE FOR NORMAL LOADING SEQUENCES. * LDR   CLC 0,C       SET I/O TO NULL STATE       CLA           ZERO      STA SYSLF       DIRECTORY TRACK       STA SYSLF+1       COUNTERS      LDA .12       ASK       LDB LBRYA       JSB ASR35,I     IF LIBRARY      CLA       JSB ASR35,I       EXISTS      JSB GETCA,I   ANSWER GIVEN?       JMP ERR1      NO      CPA Y         YES, 'Y' ?      JMP LDR7      YES, ASSUME 'YES'       CPA N         NO, 'N' ?       JMP LDR1      YES, ASSUME 'NO'ERR1  LDA .15       NO      LDB ILINA     TRY       JSB ASR35,I     AGAIN       JMP LDR *                       * **  SYSTEM GENERATION  ** *                       * * *  CREATE NASCENT EQUIPMENT TABLE.* LDR1  LDA M16       SET DIRECTORY LENGTH      STA DIREC       FOR TWO DUMMY ENTRIES       LDA EQTLN     ZERO OUT      STA TEMP0       CLB             THE REST      LDA EQTALDR2  INA               OF THE      STB 0,I       ISZ TEMP0           EQUIPMENT TABLE       JMP LDR2      CLA           SET       STA TEMP1       FOR       LDA B14           DISC      STA TEMP2           0 LDR3  LDA .26       REQUEST       LDB S/TDA       JSB ASR35,I     NUMBER OF       CLA       JSB ASR35,I       SECTORS FOR       JSB SETDA,I       JMP LDR3            DISC 0      LDA M12       SET       STA TEMP0       LDA TRAXA       TRACKS      ADA .4      CCB               NOT ONLDR4  STB 0,I       INA                 DISC 0      ISZ TEMP0       JMP LDR4              'UNAVAILABLE'       STB MTFLG     SET FLAG TO 'SYSGEN' MODE       JMP LDR8*                                ***  INITIATE PAPER TAPE RELOAD  ***                                ** *  PRIMARY USE IS FOR LINKING A NEW SYSTEM (FOR EXAMPLE, A*  SYSTEM UPDATE) WITH THE LIBRARY OF A CURRENT SYSTEM. * LDR5  LDA B14       FAKE DTBL ENTRY       STA DTBL        FOR DISC DRIVER       LDA M64       READ      STA WORD,I      EQUIPMENT       LDA DEQTA         TABLE       LDB CEQTA           FROM      JSB DISC,I            DISC 0*                                      ***  BEGIN EMERGENCY LOADING SEQUENCE  ***                                      ** *  ENTRY IS TO HERE WHEN ATTEMPTING TO RELOAD THE SYSTEM*  USING THE EQUIPMENT TABLE IN CORE (I.E., SYSTEM WAS*  HALTED BY OTHER THAN THE 'SLEEP' ROUTINE). * LDR6  CLA           SET FLAG TO       STA MTFLG       'PAPER TAPE RELOAD'       STA SYSLF     ZERO COUNTERS FOR       STA SYSLF+1     DIRECTORY TRACKS      LDA ADLEN     READ      AND M64       STA WORD,I      ADT       LDB ADTBA       ADB BIT15         FROM      LDA ADLOC       JSB DISC,I          DISC      LDA ADLEN     RECOVER THE       JMP LDR18       SYSTEM TRACKS * ERR2  LDA .15       REPORT      LDB ILINA       PROBABLE      JSB ASR35,I       ERROR *                                  ***  REQUEST MAG TAPE SELECT CODE  ***                                  ** *  ANSWER IS THE HIGH PRIORITY SELECT CODE FOR THE MAG TAPE UNIT*  OR A CARRIAGE RETURN, THE LATTER INDICATING A PAPER TAPE RELOAD. * LDR7  JSB GTMTA,I   GET MAG TAPE SELECT CODE     [F]      JMP LDR5      PAPER TAPE RELOAD            [F]*                              ***  INITIATE MAG TAPE RELOAD  ***                              **                                                                [E]      LDB MTFLG     SAVE                         [F]      STB MAGSC       SELECT CODE                [F]      ELB,CLE,ERB   CLEAR BIT15                  [F]      JSB MTDIA,I   CONFIGURE MAG TAPE DRIVER       JSB MTAPE,I   REWIND      OCT 3           TAPE      LDA M64       READ      LDB EQTA        EQUIPMENT TABLE       JSB MTAPE,I       FROM      OCT 0               MAG TAPE      JMP EOFER       JMP TPERR       LDB MTFLG     RECORD NEW                   [E]      STB MAGSC       SELECT CODE                [E]      ELB,CLE,ERB   CLEAR                        [F]      STB MTFLG       BIT15                      [F]      LDA M4        COUNT       STA TEMP0       LDB DIRE6       NUMBER OF       LDA 1,I       SZA               DIRECTORY TRACKS      ISZ SYSLF+1       CLA                 AND SET ALL       STA 1,I       ADB .7                DISC ADDRESSES      ISZ TEMP0       JMP *-7                 TO ZERO *                           * **  REQUEST DISC COMMANDS  ** *                           * * *  DISC COMMANDS MAY ADD OR REMOVE DISCS.  DISC 0 *  MAY ONLY BE REFERENCED ALONG WITH SELECT CODE 14 OCT; I.E.,*  DISC 0 MAY NOT BE MOVED OR REMOVED.  DISCS 1-3 MAY NOT HAVE*  A SELECT CODE BELOW 14 OCT OR ABOVE 76 OCT.  THE SEQUENCE OF *  DISC COMMAND REQUESTS IS TERMINATED BY ANSWERING WITH A*  CARRIAGE RETURN. * LDR8  LDA .22       REQUEST       LDB DISMA       JSB ASR35,I     DISC      CLA       JSB ASR35,I       COMMANDS      JSB GETCA,I   ANY?      JMP LDR14     NO      CPA D         YES       JSB GETCA,I       JMP ERR3      'D'       CPA I       JSB GETCA,I     'I'       JMP ERR3      CPA S             'S' ?       JMP LDR9      YES ERR3  LDA .19       NO      LDB RQSTA     PRINT       JSB ASR35,I     ERROR       JMP LDR8LDR9  CLA           PICK UP       JSB GTDNA,I     DISC #      JMP LDR8      NOT FOUND       STA TEMP1     FOUND, SAVE IT      JSB GETCA,I   NEXT      NOP             CHARACTER       CPA B60           A ZERO?       JMP LDR13     YES       JSB SELCA,I   NO, GET SELECT CODE       OCT 63          IN [14 OCT, 76 OCT]       JMP LDR8      NOT FOUND       CPA COMMA     FOUND, COMMA FOLLOWING?       JMP LDR10     YES       LDA .15       NO,       LDB BDLA        ERROR       JMP ERR3+2      CLB           STORE LDR10 STB TEMP2       SELECT CODE       CLA           DISC      CPA TEMP1       0 ?       JMP LDR12     YES LDR11 JSB SETDA,I   NO, SET DISC ENTRY      JMP LDR8      JMP LDR8      ASK AGAIN LDR12 CPB B14       SELECT CODE 14 OCT?       JMP LDR11     YES       LDA .23       NO,       LDB DZMBA       ERROR       JMP ERR3+2LDR13 JSB GETCA,I   CARRIAGE RETURN?      JMP LDR10-1   YES       LDA .21       NO,       LDB ILSCA       ERROR       JMP ERR3+2*               * **  BUILD ADT  ** *               * * *  CREATE AN ADT ENTRY OF ZERO SECTORS FOR EACH AVAILABLE TRACK *  (THE TRACK LENGTH WILL BE FILLED IN BELOW).  THE ENTRY FOR *  TRACK 0, DISC 0 AND A TERMINATING PSUEDO-ENTRY BOUND THE ADT.* LDR14 LDA TRAXA     SET POINTER TO      STA TEMP0       AVAILABLE TRACK TABLE       LDA ADTBA     CREATE      CLB       STB 0,I         FIRST       INA       STB 0,I           ADT       INA       STA TEMP1           ENTRY       LDA M255      INITIALIZE      STA TEMP2       TRACK COUNTER       LDA .2            AND MASK      JMP LDR16 LDR15 LDA TEMP3     ROTATE MASK TO      RAL             NEXT TRACK POSITION       SLA           ADJUST ATT POINTER      ISZ TEMP0       WHEN NECESSARYLDR16 STA TEMP3       ADB B400      ADVANCE DISC ADDRESS      AND TEMP0,I   AVAILABLE       SZA             TRACK?      JMP LDR17     NO      STB TEMP1,I   YES       ISZ TEMP1     CREATE      STA TEMP1,I     ZERO-LENGTH       ISZ TEMP1         ADT ENTRY LDR17 ISZ TEMP2     ALL TRACKS CONSIDERED?      JMP LDR15     NO      LDA TEMP1     YES       CCB           APPEND      STB 0,I       INA             TERMINAL      CLB       STB 0,I           PSUEDO-ENTRY      CMA           RECORD -#       ADA ADTBA       OF WORDS      STA ADLEN         IN ADT*                    ***  RECOVER TRACKS  ***                    ** *  ALL ADT ENTRIES WITH ZERO SECTORS AVAILABLE ARE RECOVERED AS *  FULL TRACKS.  THIS PICKS UP ALL SYSTEM TRACKS ON PAPER TAPE*  RELOADS, OR ALL UNLOCKED TRACKS ON SYSTEM GENERATION OR*  MAG TAPE RELOAD, AND RETURNS THEM TO THE POOL OF TRACKS*  AVAILABLE FOR LOCKING AND LOADING BELOW. * LDR18 ADA .4        SET ENTRY COUNTER       ARS             (SKIPPING FIRST       STA TEMP0         AND LAST ENTRIES)       LDA ADTBA     LOAD ADDRESS      INA             OF SECOND WORDLDR19 ADA .2            OF ENTRY      LDB 0,I       IS LENGTH       SZB,RSS         0 SECTORS?      JMP LDR21     YES LDR20 ISZ TEMP0     NO, DONE?       JMP LDR19     NO      JMP LDR22     YES LDR21 CCB           LOAD      ADB 0           ENTRY'S       LDA 1,I           DISC ADDRESS      JSB ISOTA,I   GET TRACK LENGTH      INB             IN SECTORS      STA 1,I       RESTORE TO      LDA 1           FULL TRACK      JMP LDR20 *                                  ***  PROCESS LOCK/UNLOCK COMMANDS  ***                                  *LDR22 LDA .38       REQUEST       LDB LULCA       LOCK,       JSB ASR35,I       UNLOCK,       CLA                 OR LOAD       JSB ASR35,I           COMMAND       JSB GETCA,I   FIRST       JMP ERR4        CHARACTER       CCB               A       CPA U               'U' ?       JMP LKUNA,I   YES, ASSUME 'UNLOCK'      CPA L         NO, 'L' ?       JSB GETCA,I   YES       JMP ERR4      NO      CPA O         'O' ?       JSB GETCA,I   YES       JMP ERR4      NO      CPA A         'A' ?       JMP LDR23     YES, ASSUME 'LOAD'      CLB           NO      CPA C         'C' ?       JMP LKUNA,I   YES, ASSUME 'LOCK'ERR4  LDA .15       NO      LDB ILINA     PRINT       JSB ASR35,I     ERROR       JMP LDR22 *                       * **  CLAIM DISC TRACKS  ** *                       * * *  CLAIM TRACKS FOR THE SYSTEM AND USER SWAPPING.  THE ADT*  ENTRIES ARE SET TO LENGTH ZERO RATHER THAN BEING REMOVED.* LDR23 LDA M20       GET       STA TEMP0       LDA TRKTA       TWO SYSTEM TRACKS,      STA TEMP1 LDR24 CLA               TWO SYSTEM LIBRARY TRACKS,      JSB GTTRA,I       STA TEMP1,I         AND       ISZ TEMP1       ISZ TEMP0             16 USER TRACKS      JMP LDR24       DLD TRKTB     SET DISC ADDRESSES OF TSB       DST LDRTA,I     SYSTEM TRACKS INTO DISC LOADER      SKP *                                ***  WRITE DISC LOADERS TO DISC  ***                                ** *  THIS SECTION WRITES THE TSB SYSTEM DISC LOADER ONTO SECTOR 1 *  OF TRACK 0, DISC 0 (I/O CHANNEL 14 OCT) AND WRITES THE DISC*  BOOTSTRAP LOADER ONTO SECTOR 0, TRACK 0 AFTER CONFIGURING IT *  FOR TSB.  IF THE DISC OPERATING SYSTEM IS NOT PRESENT, THE *  TSB DISC LOADER IS ALSO WRITTEN TO SECTOR 2, TRACK 0 FOR SAFETY. * LDR25 LDA .24       ASK IF      LDB RDMSA       JSB ASR35,I     DISC MONITOR SYSTEM       CLA       JSB ASR35,I       IS PRESENT      JSB GETCA,I   DEMAND A      JMP LDR26       CHARACTER       CPA Y        'Y' ?      JMP LDR27     YES, ASSUME 'YES'       CPA N         NO, 'N' ?       JMP LDR28     YES, ASSUME 'NO'LDR26 LDA .15       NO      LDB ILINA     TRY       JSB ASR35,I     AGAIN       JMP LDR25 * LDR27 LDA M64       READ      STA WORD,I      'BOOTSTRAP'       CLA               BOOTSTRAP       LDB BSBSA           LOADER      ADB BIT15             FROM      JSB DISC,I              DISC      LDA DSK7      ACCEPTABLE DISC       CPA OTB15       SELECT CODE?      JMP LDR29     YES       LDA .32       NO      LDB BLDRA     TERMINATE       JSB ASR35,I     LOADING       JMP ERRIN * LDR28 LDA OTB15     CONFIGURE       STA DSK7      LDA STC14       'BOOTSTRAP'       STA DSK8      LDA LIA15         BOOTSTRAP       STA DSK9      LDA LINKA       STA LINKG           LOADER      LDA M64       STA WORD,I    WRITE       LDA .2          TSB       LDB TSBBA         LOADER      STB DMS             TO 0,2      JSB DISC,I            FOR SAFETYLDR29 LDB TSBBA     SET TSB LOAD/ENTRY ADDRESS      STB RT/TS       IN LOADER       CLA,INA       WRITE TSB LOADER      JSB DISC,I      TO 0,1      CLA           WRITE       LDB BSBSA       'BOOTSTRAP' BOOTSTRAP       JSB DISC,I        LOADER 0,0*       LDA MTFLG     RELOAD SYSTEM FROM      SZA,RSS         PAPER TAPE?       JMP LDR43     YES *                               * **  GET REST OF SYSTEM TSACKS  ** *                               * * *  CLAIM ONE TRACK FOR THE IDT AND ADT.  CLAIM ENOUGH DIRECTORY *  TRACKS TO HAVE ONE PER DISC, BUT NOT FEWER THAN THE NUMBER PRE-*  EXISTING IF THIS IS A MAG TAPE RELOAD. *       CCA           CLAIM       JSB GTTRA,I     TRACK FOR       STA IDLOC         ADT AND       STA ADLOC           ID TABLE      LDA M4        SYSLF PREVIOUSLY      STA TEMP0       LDB DTBLA       SET TO 0LDR30 LDA 1,I       COUNT       SZA       ISZ SYSLF       NUMBER OF       INB       ISZ TEMP0         DISCS       JMP LDR30       LDB SYSLF           PRESENT       LDA SYSLF+1   COMPUTE       CMA,INA       ADA SYSLF       MAXIMUM OF      SSA       LDB SYSLF+1       SYSFL AND SYSFL+1       CMB,INB       STORE ITS       STB TEMP0       NEGATION      LDB DIRE6     CLAIM LDR31 STB TEMP1       CCA             THIS      JSB GTTRA,I       STA TEMP1,I       MANY      LDB TEMP1       ADB .7              DIRECTORY       ISZ TEMP0       JMP LDR31             TRACKS*       LDA M64       STA WORD,I    WRITE       LDA DIRE6,I     NULL      STA TEMP4         DIRECTORY       LDB DIRBA           TO      JSB DISC,I            DISC      LDA MTFLG     MAG TAPE      INA,SZA,RSS     RELOAD?       JMP LDR43     NO      LDA IDLEN     YES       LDB IDTBA       JSB MTAPE,I   READ IN       OCT 0           ID TABLE      JMP EOFER       JMP TPERR       LDA IDLEN     WRITE       STA WORD,I      ID TABLE      LDA IDLOC         TO ITS      LDB IDTBA           DISC      JSB DISC,I            TRACK 