      HED UTILITY ROUTINES*                                   * **  RECORD SYSTEM LIBRARY PROGRAM  ** *                                   * * *  UPON FIRST ENTRY SYSLF = -1 AND SYSLF+1 = -1 FOR A PAPER TAPE*  LOAD OR 0 FOR A MAG TAPE LOAD.  MAG TAPE LOADS CALL SYSLB AFTER*  LOADING A SYSTEM LIBRARY PROGRAM TO STORE IT ONTO THE DISC;*  PAPER TAPE LOADS CALL SYSLB BEFORE LOADING A SYSTEM LIBRARY*  PROGRAM TO STORE THE PRECEDING ONE ONTO THE DISC, HENCE THE*  FIRST CALL MUST BE IGNORED.  THE FIRST SYSTEM LIBRARY PROGRAM, *  A TABLE OF LENGTHS IN WORDS OF THE SYSTEM LIBRARY PROGRAMS,*  IS COPIED INTO A CORE-RESIDENT TABLE.  AS EACH PROGRAM IS STORED *  ONTO THE DISC, ITS DISC ADDRESS REPLACES ITS LENGTH IN THIS*  TABLE, WHICH BECOMES THE LINKAGE BETWEEN TSB AND THE SYSTEM*  LIBRARY.  WHILE SWR(15) IS 'UP', THE LOADER HALTS TO ALLOW *  PATCHING JUST BEFORE WRITING EACH PROGRAM ONTO THE DISC. * SYSLB NOP       ISZ SYSLF+1   FIRST CALL FROM PAPER TAPE LOAD?      RSS           NO      JMP SYSLB,I   YES *       LIB 1         DEBUGGING AID:      SSB             HLT 15B BEFORE SYSLIB PROGRAM       HLT 15B           GOES TO DISC IF SWR(15) = 1       CLA       CPA SYSLF     FIRST SYSTEM LIBRARY PROGRAM?       JMP SYSL2     NO*       LDA LIBRA,I   YES       STA SYSLF     SET MOVE COUNTER      LDB COM6      SET       STB SLDIR       TABLE POINTER       LDA LIBRA     SET POINTER TO      STA TEMP4       ADDRESS TABLE SYSL1 LDA TEMP4,I   COPY      STA 1,I         LENGTH      ISZ TEMP4         TABLE       INB                 INTO      ISZ SYSLF             ADDRESS       JMP SYSL1               TABLE       LDA TRKTB+2   SET DISC ADDRESSES OF       STA SYST1       JSB ISOTA,I     SYSTEM LIBRARY TRACKS AND       STA SYSS1       LDA TRKTB+3       # OF SECTORS AVAILABLE      STA SYST2       JSB ISOTA,I         ON EACH ONE       STA SYSS2 * SYSL2 LDB M256      SET WORD COUNT      STB WORD,I      FOR DISC TRANSFER       LDB SLDIR,I   COMPUTE # OF      ASR 6           SECTORS NEEDED      LDA M4        ROOM ON       ADA SYSS1       FIRST       SSA               TRACK?      JMP SYSL5     NO      LDA 1         YES, UPDATE       ADA SYSS1       REMAINING       STA SYSS1         SECTOR COUNT      LDA SYST1     LOAD DISC ADDRESS       CMB,INB       SAVE      ADB SYST1       DISC ADDRESS OF       STB SYST1         REMAINING SPACE SYSL4 STA SLDIR,I   SAVE DISC ADDRESS       ISZ SLDIR       IN LOADER TABLE *       LDB LIBRA     WRITE PROGRAM       JSB DISC,I      TO DISC       LDA LIBRA       JMP SYSLB,I SYSL5 LDA M4        HANDLE      ADA SYSS2       SSA             SECOND      JMP SYSL6       LDA 1             TRACK       ADA SYSS2       STA SYSS2       LDA SYST2       CMB,INB       ADB SYST2       STB SYST2       JMP SYSL4 SYSL6 LDA .26       OUTPUT      LDB SYSLA       OVERFLOW      JSB ASR35,I       MESSAGE       JMP ERRIN     TERMINATE LOADING       HED CONSTANTS, TEMPORARIES, ETC.M5440 DEC -5440 M256  DEC -256M255  DEC -255M64   DEC -64 M20   DEC -20 M16   DEC -16 M12   DEC -12 M10   DEC -10 M4    DEC -4M1    DEC -1.2    DEC 2 .3    DEC 3 .4    DEC 4 .6    DEC 6 .7    DEC 7 .8    DEC 8 .12   DEC 12B14   EQU .12 .13   DEC 13B15   EQU .13 .15   DEC 15.17   DEC 17.19   DEC 19.20   DEC 20.21   DEC 21.22   DEC 22.23   DEC 23.24   DEC 24.26   DEC 26.32   DEC 32B40   EQU .32 .38   DEC 38B60   OCT 60B100  OCT 100 B106  OCT 106 .85   DEC 85B400  OCT 400 .600  DEC 600 .5440 DEC 5440BIT15 OCT 100000COMMA OCT 54        ',' SLSH  OCT 57        '/' A     OCT 101       'A' C     OCT 103       'C' D     OCT 104       'D' I     OCT 111       'I' L     OCT 114       'L' N     OCT 116       'N' O     OCT 117       'O' S     OCT 123       'S' U     OCT 125       'U' Y     OCT 131       'Y' MXDAY DEC -367      1'S COMPLEMENT OF MAXIMUM DAY MAXYR DEC -100      1'S COMPLEMENT OF MAXIMUM YEAREQTLN DEC -53       LENGTH OF EQUIPMENT TABLE MBIAS ABS -30000-6000    TENTHS-OF-SECOND COUNTER       SKP OTB15 OTB 15B       'BOOTSTRAP' STC14 STC 14B         BOOTSTRAP LOADERLIA15 LIA 15B           INSTRUCTIONSLINKA OCT 20014 * PH1   OTA 0         SKELETON CODE PH2   LIA 0           FOR PHONESRSSA  RSS * EQTA  EQU B100      EQUIPMENT TABLE ADDRESS CEQTA OCT 100100    EQT 'DISC READ' CORE ADDRESSDEQTA EQU .4        EQT DISC ADDRESSDIREA EQU B100      DIRECTORY TABLE ADDRESS DIRE6 EQU B106TRAXA DEF TRAX      AVAILABLE TRACK TABLE ADDRESS DTBLA DEF DTBL      DISC SELECT CODE TABLE ADDRESSLNKAD DEF LSLTB     LINKAGE TABLE ADDRESS ADTBL EQU 37700B-12500B  ADT BUFFER ADTBA DEF ADTBL     ADT BUFFER ADDRESSIDTBL EQU ADTBL-12500B   ID TABLE BUFFERIDTBA DEF IDTBL     ID TABLE BUFFER ADDRESS UPRBA EQU IDTBA     USER PROGRAM BUFFER ADDRESS DIRBA DEF DIRBF     ADDRESS OF NULL DIRECTORY ULTTB DEF 12101B    USER LIBRARY TRACK TABLE ADDRESSULTM1 DEF 12100BTRKTA DEF TRKTB     SYSTEM TRACK TABLE ADDRESSUSTRA DEF TRKTB+4   USER TRACK DISC ADDRESSES MTRLA DEF MTRLT     BUFFER ADDRESS FOR SEGMENT TABLELDRTA DEF LDRTT     => DISC LOADER DISC ADDRESSES BSY1A DEF BSYS1     ADDRESSES OFBSY2A DEF BSYS2       SYSTEM SEGMENTBSY3A DEF BSYS3         WORD COUNTS RSYA1 OCT 14000     SYSTEM SEGMENTRSYA2 OCT 26500       CORE ADDRESSESWORD  DEF WORDC     DISC BLOCK WORD COUNT ADDRESS BSBSA DEF BSBSO     ADDRESS OF 'BOOTSTRAP' BOOTSTRAPTSBBA DEF BSLDR     ADDRESS OF TSB BOOTSTRAP LOADER * TEMP0 BSS 1 TEMP1 BSS 1 TEMP2 BSS 1 TEMP3 BSS 1 TEMP4 BSS 1 COUNT BSS 1 MTFLG BSS 1         LOADER MODE FLAGSYSLF BSS 2         SYSTEM LIBRARY FLAGSSYST1 BSS 1         DISC ADDRESSES OF SPACE SYST2 BSS 1           ON SYSTEM LIBRARY TRACKSSYSS1 BSS 1         SPACE AVAILABLE ONSYSS2 BSS 1           SYSTEM LIBRARY TRACKS SLDIR BSS 1         SYSTEM LIBRARY DIRECTORY POINTERTRKTB BSS 20        CLAIMED TRACKS TABLE      SKP LKUNA DEF LKUNL     LOCK/UNLOCK CODE ADDRESSASR35 DEF TTY35     TTY DRIVER ADRESS DISC  DEF DISCD     DISC DRIVER ADDRESS MTAPE DEF MTD       MAG TAPE DRIVER ADDRESS MTDIA DEF MTDIN     MAG TAPE INITIALIZATION ROUTINE ADVLA DEF ADVAL GTDNA DEF GTDNO GTTRA DEF GTTRK INTGA DEF INTGR ISOTA DEF ISOTL MOVUA DEF MOVUP READA DEF READSELCA DEF SELCD SETDA DEF SETDS TWODA DEF TWODG GETCA DEF GETCR GTMTA DEF GETMT                                  [F]* LBRYA DEF LBRYILINA DEF ILINS/TDA DEF S/TD0 *                                                [F]DISMA DEF DISMD RQSTA DEF RQSTD BDLA  DEF BDDLDZMBA DEF DZMBF ILSCA DEF ILSCD LULCA DEF LULCRDMSA DEF RDMSBLDRA DEF BLDRC EOTMA DEF EOTMCHKSA DEF CHKSM DATEA DEF DATER ILDTA DEF ILDTE TIMEA DEF TIMER ILTIA DEF ILTIM EOFMA DEF EOFMTAPEA DEF TAPER LABOA DEF LABOR SYSLA DEF SYSLOODSA DEF OODSP       SPC 5 * *  NULL DIRECTORY * DIRBF DEC 0,0,0,0,0,-1,0,0   DIRECTORY      DEC -1,-1,-1,-1,0,-1,0,0   PSUEDO-ENTRIES       SKP LBRY  OCT 6412      ASC 5,LIBRARY?S/TD0 OCT 5123      ASC 12,ECTORS/TRACK ON DISC 0?MTSC  OCT 5115      ASC 11,AG TAPE SELECT CODE? DISMD OCT 5104      ASC 10,ISC MODIFICATIONS? RQSTD OCT 5102      ASC 8,EGIN WITH 'DISC'      OCT 6400BDDL  OCT 5102      ASC 6,AD DELIMITER      OCT 6400DZMBF OCT 5104      ASC 10,ISC 0 MUST BE IN 14      OCT 6400ILSCD OCT 5111      ASC 9,LLEGAL SELECT CODE      OCT 6400LULC  OCT 6412      ASC 17,GIVE LOCK, UNLOCK, OR LOAD COMMAND       OCT 6412RDMS  OCT 5104      ASC 11,ISC MONITOR PRESENT? BLDRC OCT 5114      ASC 15,OADER NOT CONFIGURED FOR TSB,EOTM  OCT 5105      ASC 5,ND OF TAPE      OCT 6400CHKSM OCT 5103      ASC 7,HECKSUM ERROR       OCT 6400DATER OCT 5104      ASC 3,ATE?ILDTE OCT 5111      ASC 6,LLEGAL DATE       OCT 6400TIMER OCT 5124      ASC 3,IME?ILTIM OCT 5111      ASC 6,LLEGAL TIME       OCT 6400EOFM  OCT 5000      ASC 18,UNEXPECTED END-OF-FILE/END-OF-TAPE,TAPER OCT 5124      ASC 10,APE CANNOT BE READ,LABOR ASC 9,LOAD/DUMP ABORTED       OCT 6412SYSL  OCT 5123      ASC 12,YSTEM LIBRARY OVERFLOW,OODSP OCT 5117      ASC 9,UT OF DISC SPACE,       HED LOCK/UNLOCK EXECUTION *                       * **  INTERPRET REQUEST  ** *                       * * *  UPON ENTRY (B) = 0 FOR A 'LOCK' OR -1 FOR AN 'UNLOCK'.  SEARCH *  THE INPUT RECORD FOR  - <DISC #>,<TRACK #>,<TRACK #>  OR FOR *  - <DISC #>,<TRACK #> .  INSURE THAT <DISC #> DOES NOT EXCEED 3 *  AND CORRESPONDS TO AN EXISTING DISC.  INSURE THAT ANY <TRACK #>*  DOES NOT EXCEED 64 AND THAT THE SECOND <TRACK #>, IF PRESENT,*  IS AT LEAST AS GREAT AS THE FIRST. * LKUNL STB MFLAG     SAVE MODE       CCA           GET LEGAL       JSB GTDNO       DISC #      JMP L22A,I    NOT FOUND       ALS,ALS       FOUND, SAVE POINTER       ADA LTRAX       TO ITS      STA LTMP1         TRAX TABLE      JSB INTGR     GET TRACK #       STA LTMP3     SAVE FOLLOWING CHARACTER      JSB PARCK     VALIDATE AND SAVE       STB LTMP2       TRACK NUMBER      LDA LTMP0     SAVE      RAR,RAR         DISC      BLF,BLF           ADDRESS       ADA 1               OF      STA LTMP4             TRACK       LDA LTMP3     WAS DELIMITER       CPA LB54        A COMMA?      JMP LKUN2     YES       CCB           NO      CPA LB15      CARRIAGE RETURN?      JMP LKUN3-1   YES LKUN1 LDA L.15      NO      LDB BDDLA     PRINT       JSB ASRDA,I     ERROR       JMP L22A,ILKUN2 JSB INTGR     GET SECOND TRACK #      CPA LB15      FOLLOWED BY CARRIAGE RETURN?      RSS           YES       JMP LKUN1     NO      JSB PARCK     VALIDATE PARAMETER      CMB           COMPUTE # OF TRACKS       ADB LTMP2       TO BE LOCKED/UNLOCKED       SSB,RSS       ONE OR MORE?      JMP PARC1     NO      STB LTMP3     YES, SAVE COUNT * *  FOR EACH TRACK IN TURN, EXTRACT ITS STATUS AND JUMP TO THE *  LOCK OR UNLOCK CODE. * LKUN3 LDA LTMP4       ALS,CLE,ELA   SET POINTER       CLB             TO PROPER       ASL 2             WORD OF       ADB LTMP1           TRAX      STB LTMP5             TABLE       ALF           SAVE      ADA BMSKA       APPROPRIATE       LDA 0,I           BIT       STA LTMP6           MASK      AND LTMP5,I   EXTRACT TRACK STATUS      LDB MFLAG       INB,SZB       UNLOCK?       JMP LKUN6     NO*                    ***  UNLOCK A TRACK  ***                    ** *  IF TRACK IS LOCKED, UNLOCK IT AND INSERT A FULL-TRACK ENTRY*  INTO THE ADT (IF THE ADT IS FULL, THE TRACK IS LOST UNTIL A*  SUBSEQUENT RELOAD).*       SZA,RSS       IS TRACK LOCKED?      JMP LKUN5     NO      XOR LTMP5,I   YES       STA LTMP5,I   UNLOCK TRACK      LDB ADLEN     IS ADT      CPB MXADT       FULL?       JMP LKUN5     YES, TRACK LOST       CMB,INB       NO      ADB ADTBF     SET POINTER TO      STB LTMP5       LAST WORD +1 OF ADT       LDB ADLEN     CORRECT       ADB LM2         ADT       STB ADLEN         LENGTH      JSB FADTP     FIND POSITION FOR NEW ENTRY       LDA LTMP5     COMPUTE       CMA,INA         # OF      ADA 1             ENTRIES       ARS                 TO BE       STA LTMP0             MOVED       LDA LTMP5 LKUN4 ADA LM2       SET       STA LTMP6       SOURCE ADDRESS      DLD LTMP6,I   MOVE      DST LTMP5,I     ENTRY       LDA LTMP6     UPDATE TO NEXT      STA LTMP5       DESTINATION ADDRESS       ISZ LTMP0     ALL ENTRIES MOVED?      JMP LKUN4     NO      LDA LTMP4     YES       STA LTMP5,I   SET ENTRY'S DISC ADDRESS      JSB ISOTL     SET       ISZ LTMP5       ENTRY'S LENGTH      STA LTMP5,I       IN SECTORS* *  CHECK IF UNPROCESSED TRACKS REMAIN.  IF SO, UPDATE REFERENCE *  QUANTITIES AND PROCEED TO PROCESS THE NEXT ONE; ELSE RETURN*  TO THE LOADER FOR FURTHER INSTRUCTIONS.* LKUN5 LDA LTMP4     COMPUTE       ADA LB400       DISC ADDRESS OF       STA LTMP4         NEXT TRACK      ISZ LTMP2     ADVANCE TRACK #       ISZ LTMP3     ALL TRACKS CONSIDERED?      JMP LKUN3     NO      JMP L22A,I    YES *                  ***  LOCK A TRACK  ***                  ** *  IF THE TRACK IS UNLOCKED AND LOCKABLE, LOCK IT AND REMOVE ITS*  ENTRY FROM THE ADT; ELSE PRINT A MESSAGE AND CONTINUE TO THE *  NEXT TRACK.  A TRACK IS LOCKABLE IF IT HAS AN ADT ENTRY*  CORRESPONDING TO THE FULL LENGTH OF THE TRACK; I.E., NO PART *  OF THE TRACK IS IN USE.* LKUN6 SZA           TRACK LOCKED?       JMP LKUN5     YES       JSB FADTP     NO, FIND ADT ENTRY FOR TRACK      LDA LTMP4     ENTRY       CPA 1,I         FOUND?      INB,RSS       YES       JMP LKUN7     NO      JSB ISOTL     GET TRACK LENGTH      CPA 1,I       IS PART OF TRACK IN USE?      INB,RSS       NO      JMP LKUN7     YES       LDA 1         DELETE      JSB MOVUP       ADT ENTRY       LDA LTMP5,I   LOCK      IOR LTMP6       STA LTMP5,I     TRACK       JMP LKUN5 * LKUN7 LDA L.20      PRINT 'CANNOT       LDB TRKNA       LOCK TRACK #'       JSB ASRDA,I       CLB           COMPUTE       LDA LTMP2       DIGITS OF       DIV L.10          TRACK #       ADB LB60      COMPUTE       SZA,RSS       JMP LKUN8       ASCII OF      ADA LB60      ALF,ALF           TRACK # LKUN8 IOR 1       LDB B6400     PRINT       DST EBUFA,I       LDA L.3         IT      LDB EBUFA       JSB ASRDA,I       JMP LKUN5 