*                       * **  LOAD USER LIBRARY  ** *                       * * *  THE LIBRARY IS STORED ON MAG TAPE AS ONE RECORD PER TRACK UP *  TO 5440 WORDS; LONGER TRACKS ARE STORED AS TWO RECORDS.  THE *  TRACK IMAGES ARE PRECEDED BY A TABLE OF LENGTH 255, EACH ENTRY *  HOLDING THE 2'S COMPLEMENT OF THE LENGTH OF THE IMAGE IN WORDS *  (TRACK 0, DISC 0 IS KNOWN NOT TO HAVE ANY USER FILES).  AS EACH*  TRACK IMAGE IS READ AND STORED, ITS ENTRY IN THE TABLE IS*  REPLACED WITH (NEW DISC ADDRESS - OLD DISC ADDRESS) FOR USE IN *  UPDATING THE DIRECTORY BELOW.*       LDA M255      LOAD      STA TEMP0       LDB ULTTB       USER LIBRARY      STB TEMP1       JSB MTAPE,I       TRACK TABLE       OCT 0       JMP EOFER       JMP TPERR       LDA B400      INITIALIZE TO DISC ADDRESS 0,1,0LDR32 LDB TEMP1,I   USER LIBRARY      SZB,RSS         TRACK?      JMP LDR37     NO      STB WORD,I    YES, SAVE LENGTH AND      STA TEMP2       OLD DISC ADDRESS      ASR 6         COMPUTE       STB COUNT       SECTOR REQUIREMENT      LDB ADLEN     SET       BRS             ADT ENTRY       STB TEMP3         COUNTER       LDB ADTBA       INB LDR33 LDA 1,I       ENOUGH      ADA COUNT       SPACE IN      SSA,RSS           THIS ENTRY?       JMP LDR35     YES       ADB .2        NO      ISZ TEMP3     MORE ENTRIES?       JMP LDR33     YES ERR5  LDA .20       NO      LDB OODSA     TERMINATE       JSB ASR35,I     LOADING       JMP ERRIN LDR34 LDA 1,I       SAVE      STA TEMP3       DISC ADDRESS      ADB .2        ELIMINATE       LDA 1           ENTRY       JSB MOVUA,I       FROM ADT      JMP LDR36 LDR35 STA 1,I       STORE REMAINING SECTOR COUNT      ADB M1        ALL OF      SZA,RSS         ENTRY USED?       JMP LDR34     YES       LDA 1,I       NO, SAVE      STA TEMP3       DISC ADDRESS      CMA,INA       CORRECT ENTRY TO      ADA COUNT     DISC ADDRESS OF       CMA,INA           REMAINING       STA 1,I             SPACE LDR36 LDA TEMP2     COMPUTE       CMA,INA         NEW DISC ADDRESS -      ADA TEMP3         OLD DISC ADDRESS      STA TEMP1,I   SAVE IN TRACK TABLE       LDA WORD,I    DOES TRACK      ADA .5440       EXCEED      SSA,RSS           5440 WORDS?       JMP LDRE1     NO      STA COUNT     YES, SAVE DIFFERENCE      LDA M5440     SET FOR       STA WORD,I      INITIAL BLOCK       LDB UPRBA     READ      JSB MTAPE,I     5440      OCT 0             WORDS       JMP EOFER       JMP TPERR       LDA TEMP3     WRITE       LDB UPRBA       THEM      JSB DISC,I        TO DISC       LDA COUNT     SET FOR       STA WORD,I      REST OF TRACK       LDB TEMP3     ADVANCE       ADB .85         DISC      STB TEMP3         ADDRESS LDRE1 LDA WORD,I      LDB UPRBA     READ TRACK      JSB MTAPE,I     FROM TAPE       OCT 0       JMP EOFER       JMP TPERR       LDA TEMP3       LDB UPRBA     WRITE TRACK       JSB DISC,I      TO DISC       LDA TEMP2     UPDATE OLDLDR37 ADA B400        TRACK ADDRESS       ISZ TEMP1     INCREMENT TABLE POINTER       ISZ TEMP0     ALL TRACKS CONSIDERED?      JMP LDR32     NO      SKP *                    ***  LOAD DIRECTORY  ***                    ** *  READ IN THE DIRECTORY TRACKS ONE BY ONE; AN END-OF-FILE MARK *  FOLLOWS THE LAST TRACK.  USING THE TABLE BUILT ABOVE, CORRECT*  THE DISC ADDRESS IN EACH ENTRY TO THE NEW DISC ADDRESS OF THE*  REFERENCED PROGRAM OR FILE.*       LDA DIREA     INITIALIZE POINTER TO       STA TEMP0       DIREC TABLE ENTRY       CLB       STB ULTM1,I   COMPLETE USERS' LIBRARY TABLE[C]      STB 0,I       SET LENGTHS       ADA .7      STB 0,I         OF ALL      ADA .7      STB 0,I           DIRECTORY TRACKS      ADA .7      STB 0,I             TO ZERO LDR38 LDA M5440     READ A      LDB UPRBA       DIRECTORY       JSB MTAPE,I       TRACK       OCT 0       JMP LDR42     NONE FOUND      JMP TPERR       STA WORD,I    SAVE LENGTH       LDB TEMP4     AVAILABLE LDR39 SZB             TRACK?      JMP LDR40     YES       LDB TEMP0     NO, MOVE      ADB .7          TO NEXT       STB TEMP0         DIREC ENTRY       ADB .6        SAVE ITS      LDB 1,I         DISC      STB TEMP4         ADDRESS       JMP LDR39 LDR40 STA TEMP0,I   RECORD LENGTH IN DIREC ENTRY      CCB           SAVE      ASR 3           COUNT OF      STA TEMP1         ENTRIES       LDB UPRBA     INITIALIZE ENTRY POINTERLDR41 ADB .6        LOAD ENTRY'S      LDA 1,I         DISC ADDRESS      AND M256      LOAD THE      ALF,ALF         TRACK TABLE       ADA ULTM1         ENTRY THAT      LDA 0,I             CORRESPONDS       ADA 1,I       COMPUTE AND RECORD      STA 1,I         NEW DISC ADDRESS      ADB .2        UPDATE ENTRY POINTER      ISZ TEMP1     MORE ENTRIES?       JMP LDR41     YES       LDA TEMP4     NO      LDB UPRBA     WRITE DIRECTORY       JSB DISC,I      TO DISC       LDA M4        READ      STA WORD,I      FIRST FOUR      LDA TEMP4         WORDS OF      LDB TEMP0           DIRECTORY       INB                   INTO      ADB BIT15               DIREC TABLE       JSB DISC,I      CLA           SET TRACK       STA TEMP4       UNAVAILABLE       JMP LDR38 * LDR42 CPA B40       END-OF-FILE?      JMP EOFER     NO*                      ***  WRITE ADT TO DISC ***                      ** *  IF INSUFFICIENT ROOM EXISTS ON THE IDT/ADT TRACK, ELIMINATE*  ENOUGH ADT ENTRIES OF NON-ZERO LENGTHS TO FORCE A FIT. * LDR43 LDA IDLEN     COMPUTE # OF      AND M64       EXTRA WORDS       ADA .5440         ON IDT/ADT      ADA ADLEN           TRACK       SSA,RSS       NEGATIVE?       JMP LDR45     NO      ARS           YES, SAVE COUNT OF      STA TEMP0       EXCESS ADT ENTRIES      LDA ADTBA LDR44 INA           LOAD      LDB 0,I         SECTOR LENGTH       INA               OF ADT ENTRY      SZB,RSS       NON-ZERO?       JMP LDR44     NO      STA TEMP1     YES, SAVE ADT POINTER       LDB 0         ELIMINATE       JSB MOVUA,I     ENTRY       LDA TEMP1     RETRIEVE POINTER      ISZ TEMP0     ENOUGH ENTRIES DELETED?       JMP LDR44     NOLDR45 LDB IDLEN     YES       ASR 6         COMPUTE       CMB,INB         ADT       ADB IDLOC         DISC      LDA 1               ADDRESS       STA ADLOC     RECORD IT       LDB ADLEN     WRITE       STB WORD,I      ADT       LDB ADTBA         TO      JSB DISC,I          DISC*       CCA           INITIALIZE      STA SYSLF       SYSTEM LIBRARY      STA SYSLF+1       FLAGS       LDA MTFLG          LOADING FROM       CMA,SSA,INA,SZA      MAG TAPE?      JMP LDR50     YES       SKP *                                 * **  LOAD SYSTEM FROM PAPER TAPE  ** *                                 * * *  READS THE TSB SYSTEM TAPE, OR TAPES IF MORE THAN ONE (EXECUTING*  A HLT 77 ON RECOGNIZING AN END-OF-TAPE CONDITION).  THE LAST *  RECORD IS IDENTIFIED BY AN ORIGIN OF 0.  CHECKSUM'S ARE*  COMPUTED FOR EACH RECORD: A FAILURE MAY RETRIED BY BACKING UP*  TO THE START OF THE RECORD.  THE CORE TO BE OCCUPIED BY EACH *  RECORD IS CHECKED AGAINST A TABLE OF ADMISSABLE AREAS TO HELP*  CATCH ORIGIN MIS-READS BEFORE LOADING A RECORD.  RECOVERY*  MAY BE ATTEMPTED BY BACKING UP TO THE BEGINNING OF THE RECORD. * LDR46 CLA,RSS       SET FOR START OF TAPE       LDA M10       SET FOR END-OF-TAPE CHECK       CCE           GET RECORD'SLDR47 JSB READA,I     WORD COUNT      CMB,CCE,INB,SZB   AS NEGATIVE       JMP LDR48       INA,SZA       FEED FRAME, END-OF-TAPE?      JMP LDR47     NO      LDA .13       YES       LDB EOTMA     PRINT       JSB ASR35,I     'END OF TAPE'       HLT 77B       WAIT FOR NEXT TAPE      JMP LDR46 LDR48 STB COUNT     SAVE WORD COUNT       CMB           SAVE TRUE       STB TEMP1       WORD COUNT -1       JSB READA,I   SKIP FEED FRAME       JSB READA,I   READ LOAD ORIGIN      SZB,RSS       ZERO ORIGIN?      JMP LDR54     YES       LDA 1         NO, INITIALIZE CHECKSUM COUNTER       STB TEMP0     SAVE      STB TEMP3       ORIGIN      CPB LNKAD     SYSTEM LINKAGE ADDRESSES?       JMP LDR49     YES       JSB ADVLA,I   NO, VALIDATE ORIGIN       LDB 0         COMPUTE LAST ADDRESS      ADB TEMP1       TO BE LOADED      JSB ADVLA,I   VALIDATE IT LDR49 CPA LIBRA     SYSTEM LIBRARY PROGRAM?       JSB SYSLB     YES       CLE           READ A      JSB READA,I     WORD      ADA 1         ADD TO CHECKSUM COUNTER       STB TEMP0,I   STORE WORD      ISZ TEMP0     ADVANCE ADDRESS       ISZ COUNT     RECORD ALL READ?      JMP LDR49+2   NO      CLE           YES       JSB READA,I   READ CHECKSUM       CPB 0         DO CHECKSUMS AGREE?       JMP LDR46+1   YES       STA TEMP1     NO, SAVE      STB TEMP2       REGISTERS       CCB       LDA TEMP3     FIRST RECORD OF       CPA LIBRA       SYSTEM LIBRARY PROGRAM?       STB SYSLF+1   YES, PROTECT AGAINST SPURIOUS       LDA .17         CALL TO SYSLB       LDB CHKSA     PRINT       JSB ASR35,I     'CHECKSUM ERROR'      LDA TEMP1     LOAD RESISTERS      LDB TEMP2       FOR DISPLAY       HLT 66B       WAIT FOR REREAD ATTEMPT       JMP LDR46 *                               * **  LOAD SYSTEM FROM MAG TAPE  ** *                               * * *  READ THE TABLE OF SYSTEM RECORDS, THEN READ IN THE RECORDS *  THEMSELVES (COMPRISING THE CORE-RESIDENT TSB SYSTEM).  NEXT*  READ THE SYSTEM LIBRARY PROGRAMS ONE BY ONE, TERMINATING WITH*  AN END-OF-FILE.* LDR50 CLA           TURN OFF      STA SYSLF+1     PAPER TAPE FLAG       LDA M256      LOAD      LDB MTRLA       STB TEMP4       TABLE       RSS LDR51 ISZ TEMP4       JSB MTAPE,I   LOAD      OCT 0           RECORD      JMP EOFER       JMP TPERR       ISZ TEMP4     PREPARE FOR NEXT      DLD TEMP4,I     SYSTEM SEGMENT      ISZ MTRLA,I   ALL SEGMENTS READ?      JMP LDR51     NOLDR52 LDA M256      YES       LDB LIBRA     READ      JSB MTAPE,I     SYSTEM LIBRARY      OCT 0             PROGRAM       JMP LDR53     END-OF-FILE/END-OF-TAPE       JMP TPERR       JSB SYSLB     WRITE TO DISC       JMP LDR52 LDR53 CPA B40       END-OF-FILE?      JMP EOFER     NO      JSB MTAPE,I   YES, REWIND       OCT 5           AND STANDBY       RSS LDR54 JSB SYSLB     TRANSFER LAST PAPER TAPE PROGRAM      SKP *                                ***  INITIALIZE USER SWAP AREAS  ***                                ** *  FOR EACH USER PORT, INITIALIZE THE SWAPPING PORTION OF THE *  LANGUAGE PROCESSOR, WRITE IT TO THE APPROPRIATE SWAP TRACK,*  AND INITIALIZE THE TELETYPE TABLE ENTRY CORRESPONDINGLY. *       LDA M16       SET FOR       STA TEMP0       16 USERS      LDA TTYDA     FOR DISC ADDRESS      STA TEMP1       IN TTY00      LDA USTRA     POINTER TO      STA TEMP2       FIRST USER TRACK ADDRESS      CLA           INCREMENT FROM TTY00      STA TEMP3       TO CURRENT TTY TABLELDR58 LDA SWPIA     SWAP AREA COMPILER QUANTITIES       LDB ?MASK     LOAD      ADB TEMP3       USER      LDB 1,I           BIT MASK      STB 0,I       RECORD IT       INA           RECORD      CMB             COMPLEMENT      STB 0,I           MASK      INA       LDB ?BHED     RECORD ADDRESS OF       ADB TEMP3       CHARACTER ADDRESS       STB 0,I           OF LOGICAL BUFFER       INA       LDB ?BSTR     RECORD ADDRESS OF ADDRESS OF      ADB TEMP3       LAST CHARACTER +1       STB 0,I           OF LOGICAL BUFFER       INA       LDB ?BGIN     RECORD ADDRESS OF       ADB TEMP3       CHARACTER ADDRESS       STB 0,I           OF PHYSICAL BUFFER      INA       LDB ?BEND     RECORD ADDRESS OF ADDRESS OF      ADB TEMP3       LAST CHARACTER+1      STB 0,I           OF PHYSICAL BUFFER      INA       LDB ?ID       LOAD ADDRESS OF       ADB TEMP3       ID/NAME       STB 0,I       RECORD IT       LDB TEMP3     UPDATE      ADB INCRE       TOTAL       STB TEMP3         INCREMENT       LDA TEMP2,I   RECORD      ISZ TEMP2       DISC ADDRESS      STA TEMP1,I       IN TTY TABLE      LDB TEMP1     UPDATE TTY TABLE      ADB INCRE       POINTER TO      STB TEMP1         DISC ADDRESS      LDB SWPLN     WRITE       STB WORD,I      SWAP      LDB SWPAA         AREA      JSB DISC,I          TO DISC       ISZ TEMP0     ALL DONE?       JMP LDR58     NO*                          ***  WRITE SYSTEM TO DISC  ***                          ** *  DUMP THE CORE-RESIDENT TSB SYSTEM TO THE DISC FOR POTENTIAL*  BOOTSTRAP LOADING. *       LDA BSY1A,I   WRITE       STA WORD,I      LDA .3      CLB             SYSTEM      JSB DISC,I      LDA BSY2A,I       STA WORD,I        TO      LDA TRKTB       LDB RSYA1       JSB DISC,I          DISC      LDA BSY3A,I       STA WORD,I      LDA TRKTB+1       LDB RSYA2       JSB DISC,I*                       * **  GET DATE AND TIME  ** *                       * * *  THE DISC-RESIDENT TSB BOOTSTRAP LOADER TRANSFERS HERE AFTER*  LOADING TSB FROM THE DISC.  THIS SECTION REQUESTS THE DATE *  AND TIME OF DAY FOR THE INTERNAL CLOCKING ROUTINES.* LDR59 LDA .8        PRINT       LDB DATEA       JSB ASR35,I     'DATE?'       CLA           GET       JSB ASR35,I     RESPONSE      JSB INTGA,I   GET DAY OF YEAR       STA TEMP0     SAVE FOLLOWING CHARACTER      SZB,RSS       NON-ZERO?       JMP ERR6      NO      LDA 1         YES       ADB MXDAY       SSB,RSS       < 367 ?       JMP ERR6      NO      CLB           YES       MPY .24       CONVERT       STA DATE,I      TO HOURS      LDA TEMP0     '\'       CPA SLSH        NEXT?       JMP LDR60     YES ERR6  LDA .15       NO, PRINT       LDB ILDTA       'ILLEGAL      JSB ASR35,I       DATE'       JMP LDR59 LDR60 JSB INTGA,I   GET YEAR      CPA B15       MORE CHARACTERS?      RSS           NO      JMP ERR6      YES       STB YEAR,I    RECORD YEAR       ADB MAXYR       SSB,RSS       < 100 ?       JMP ERR6      NOLDR61 LDA .8        YES       LDB TIMEA     REQUEST       JSB ASR35,I     TIME OF DAY       CLA           GET       JSB ASR35,I     RESPONSE      JSB TWODA,I   GET TWO-DIGIT       DEC -24         INTEGER < 24      STB TEMP0     SAVE IT                      [C]      JSB TWODA,I   GET TWO-DIGIT       DEC -60         INTEGER < 60      LDA 1         CONVERT       CLB             TO TENTHS       MPY .600          OF SECONDS      ADA MBIAS     SAVE IN SPECIAL       STA TIME,I      INTERNAL FORM       JSB GETCA,I   EXTRANEOUS DIGITS?      JMP LDR62     NOERR7  LDA .15       YES       LDB ILTIA     PRINT       JSB ASR35,I     ERROR       JMP LDR61 LDR62 LDB TEMP0       ADB DATE,I    CORRECT       STB DATE,I      HOUR OF YEAR*                          ***  INITIATE TIMESHARING  ***                          ** *  IF A PHONES BOARD EXISTS, IT IS TURNED ON.  POWER FAIL, SET TO *  HALT DURING LOADING, IS SET TO THE POWER FAIL ROUTINE IN THE *  SYSTEM.  FINALLY, CONTROL TRANSFERS TO TSB.*       LDA PHNSC     PHONES      SZA,RSS         BOARD?      JMP LDR63     NO      LDB 0         YES       IOR PH1       CREATE      STA PHIN1,I       LDA 1       IOR PH2         APPROPRIATE       STA PHIN2,I       LDB RSSA      STB PHIN3,I       INSTRUCTIONS      STA *+1       EXECUTE       NOP             LAST ONE      STA PHIN4,I   SET UP PHONES STATUSLDR63 LDA PWRFL     SET POWER-FAIL      STA 4           INTERRUPT LINK      JMP TSB,I     RUN       SKP *                 * **  TAPE ERRORS  ** *                 * EOFER LDA .38       NO RECORD       LDB EOFMA       WHERE       JSB ASR35,I       EXPECTED      JMP ERRIN     TERMINATE LOADING * TPERR LDA .22       TIMING      LDB TAPEA       OR PARITY       JSB ASR35,I       ERROR * ERRIN LDA .20       OUTPUT      LDB LABOA       TERMINATION       JSB ASR35,I       MESSAGE       HLT 1         IRRECOVERABLE       JMP *-1         HALT