         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
          NCORESIZES = 60, << # OF LEGAL MEMORY SIZES>>        <<09311>>00126000
   EQUATE BITMAP1 = %13;   << SERIES II'III >>                 <<t1776>>00158000
<< EQUATE BITMAP2 = %164;     HPIB CPU >>                      <<t1776>>00160000
   EQUATE BITMAP3 = %740;  << S/64, S/37, S/45, S/35  >>       <<W1962>>00162000
                                                               <<01403>>00171000
   <<  IF ICF55 then execute a Initialize System Table Regs >> <<01403>>00171100
   DEFINE ISTR =  IF ICF55 THEN ASSEMBLE( CON %20104;CON %15)#;<<01403>>00171200
            <<  IF ICF55 then enable performance features >>   <<X1714>>00171300
   DEFINE ENPF = IF ICF55 THEN ASSEMBLE( CON %20104; CON %16)#;<<X1714>>00171400
                                                               <<t1776>>00172000
          MVTABSIZE =    22,  <<MOUNTED VOL TABLE ENTRY SIZE>> <<M1230>>00248000
          MAXPVUSERTSIZE=16384,      <<MAX PV USER TAB SIZE >> <<01003>>00288000
          TAPESIOBUFSIZE=154, <<SIO PROGRAM BUFFER FOR TAPE>>  <<M9297>>00346000
          PORT'MAX'SER'CNTR = %124,                            <<02078>>00869000
          CONINOUT'2=    5,  <<CONCURRENT I/O RANGE 2>>        <<O9772>>01047000
          LASTLOADOPT    = 28,  << LAST LOAD OPTION      >>    <<i9137>>01493000
                     ABSOLUTE( %1423)#,                        <<M9297>>02066000
          LASTTAPEDRT = ABSOLUTE( %1425)#;                     <<M9297>>02067000
          DEVRECSTACK=   4096,       <<DEVICE RECOGNITION>>    <<02124>>02130000
          PFAILSTACK=  %4000,        <<POWER FAIL STACK>>               02134000
       SEGTPDB  = 47,    <<PRIMARY DB AREA>>                   <<L2187>>02212000
          MERLIN    =   6,    << SUBTYPE OF MERLIN >>          <<n1366>>02453000
          <<------------------------------------>>             <<C9394>>02754100
          <<  DIRECTORY CACHE CONTROL COMMANDS  >>             <<C9394>>02754200
          <<------------------------------------>>             <<C9394>>02754300
                                                               <<C9394>>02754400
  EQUATE  CACHE'INIT     = 0,                                  <<C9394>>02754500
          CACHE'ENABLE   = 1,                                  <<C9394>>02754600
          CACHE'DISABLE  = 2,                                  <<C9394>>02754700
          CACHE'INTEGON  = 3,                                  <<C9394>>02754800
          CACHE'INTEGOFF = 4,                                  <<C9394>>02754900
          CACHE'FLUSH    = 5,                                  <<C9394>>02755000
          CACHE'CLOSE    = 6;                                  <<C9394>>02755100
                                                               <<C9394>>02755200
   M36     = 36,                                               <<M9297>>03135000
   M37     = 37,                                               <<01002>>03135100
   M139    = 139,                                              <<D9191>>03213000
   M279    = 279,                                              <<C9394>>03267000
<< M280    = 280,    used in INITDIR (99)    >>                <<01403>>03267050
<< M281    = 281,    used in INITDIR (99)    >>                <<01403>>03267060
<< M282    = 282,    used in INITDIR (99)    >>                <<01403>>03267070
<< M283    = 283,    used in INITDIR (99)    >>                <<01403>>03267080
<< M284    = 284,    used in INITDIR (99)    >>                <<01403>>03267090
<< M285    = 285,    used in INITDIR (99)    >>                <<01403>>03267100
   M336    = 336,                                              <<F9416>>03301000
   M2474   = 2474,                                             <<*9190>>03737000
   M2475   = 2475,                                             << 9427>>03737010
<< M2476   = 2476,   used in INITDIR (99)    >>                <<01403>>03737020
<< M2477   = 2477,   used in INITDIR (99)    >>                <<01403>>03737030
<< M2478   = 2478,   used in INITDIR (99)    >>                <<01403>>03737040
<< M2479   = 2479,   used in INITDIR (99)    >>                <<01403>>03737050
<< M2480   = 2480,   used when no CST EXP. FIRMWARE >>         << 1422>>03737060
 EQUATE NR'FOSFILES = 2;                                       <<i9137>>04678000
       "AUTOINST",  "INSTCAT ";                                <<i9137>>04682000
EQUATE LDMAP'SIZE = 3328;                                      <<L1914>>05192000
EQUATE MAXBANKS          = 256,                                <<39514>>05212000
  EQUATE NR'WCS'FILES = 4;                                     <<t1776>>05312000
     "SYSWCS37",          %100,               1,               <<t1776>>05320000
     "WCSLE1  ",          %200,               2,               <<W1962>>05320100
     "WCSLE2  ",          %400,               3;               <<W1962>>05320200
DEFINE LOGICALMAPPING'=ABS(ABS(QI)-9)#,                        << 1422>>05430000
       LOGICALMAPPING=ABS(MAPPINGFIRMWARE)#,                   << 1422>>05436000
       SYSPHYCST=255;   <<# CST'S ALLOCATED TO PHYSICALLY>>    <<P9974>>05446000
INTEGER PROCEDURE DIRCACHECTL( FUNCTION, PARM);                <<C9394>>06628100
   VALUE FUNCTION, PARM;                                       <<C9394>>06628200
   INTEGER FUNCTION, PARM;                                     <<C9394>>06628300
   OPTION VARIABLE,EXTERNAL;                                   <<C9394>>06628400
                                                               <<C9394>>06628500
INTEGER PROCEDURE DFSIO( FUNCTION, LDEV, DISCADR, BUF, WORDS); <<F9416>>06628600
   VALUE FUNCTION, LDEV, DISCADR, WORDS;                       <<F9416>>06628700
   INTEGER FUNCTION, LDEV, WORDS;                              <<F9416>>06628800
   DOUBLE DISCADR;                                             <<F9416>>06628900
   ARRAY BUF;                                                  <<F9416>>06629000
   OPTION EXTERNAL;                                            <<F9416>>06629010
                                                               <<F9416>>06629100
INTEGER PROCEDURE DFSCACHECTL( FUNCTION, LDEV, DISCADR);       <<F9416>>06629200
   VALUE FUNCTION, LDEV, DISCADR;                              <<F9416>>06629300
   INTEGER FUNCTION, LDEV;                                     <<F9416>>06629400
   DOUBLE DISCADR;                                             <<F9416>>06629500
   OPTION EXTERNAL, VARIABLE;                                  <<F9416>>06629600
                                                               <<F9416>>06629700
                                                               <<01403>>07082010
<<  For the Series 6X cpu, the instruction ISTR was added to >><<01403>>07082020
<< NS-MIT.  This instr. loads hardware registers with SYSGLOB>><<01403>>07082030
<< cells 0 thru %17.  This will eliminate many memory fetch  >><<01403>>07082040
<< cycles.  If the Series 6X does not have this instr. in its>><<01403>>07082050
<< WCS file, then we will just RETURN from the trap.  For all>><<01403>>07082060
<< other cpu's, we will HALT.    8/8/85                      >><<01403>>07082070
                                                               <<01403>>07082080
INTEGER  P    = Q - 2;   <<  delta P in last marker  >>        <<01403>>07082090
                                                               <<01403>>07082100
integer array  nextq(*) = Q + 2;  << next avail word >>        <<01403>>07082110
                                                               <<01403>>07082120
integer   savex      = nextq,                                  <<01403>>07082130
          next'instr = savex + 1;                              <<01403>>07082140
                                                               <<01403>>07082150
define  PLOC         = P.(2:14) #;                             <<01403>>07082160
                                                               <<01403>>07082170
EQUATE                                                         <<01403>>07082180
   DBL'WORD'OP'CODE  = %020104,  <<1ST of 2-word  instr.>>     <<01403>>07082190
   ISTR'OP'CODE      = %000015,  << INIT SYSTEM TABLE REGS >>  <<X1714>>07082200
   ENPF'OP'CODE      = %000016;  << ENABLE PERF. FEATURES >>   <<X1714>>07082205
                                                               <<01403>>07082210
   tos := X;                                                   <<01403>>07082220
                                                               <<01403>>07082230
   IF savex = DBL'WORD'OP'CODE AND ICF55 THEN                  <<01403>>07082240
      BEGIN  << Series 6X should not halt on this trap. >>     <<01403>>07082250
                                                               <<01403>>07082260
      << If this is a DBL'WORD'OP'CODE being executed on   >>  <<01403>>07082270
      << a series 6X, then the reason that we got the trap >>  <<01403>>07082280
      << is because the firmware does not recognize the    >>  <<01403>>07082290
      << 2nd word of the instruction.  When we trap into   >>  <<01403>>07082300
      << ININ the delta-P value at Q-2 is pointing to the  >>  <<01403>>07082310
      << second word of the double word instruction.  For  >>  <<01403>>07082320
      << the case of the ISTR instr. (second word = %15)   >>  <<01403>>07082330
      << if the firmware does not recognize this instr. we >>  <<01403>>07082340
      << want to just return and let the system continue,  >>  <<01403>>07082350
      << but first we must increment the delta-P value in  >>  <<01403>>07082360
      << Q-2; otherwise we will execute the second word as >>  <<01403>>07082370
      << a single word instruction when we return from     >>  <<01403>>07082380
      << ININ.  HS.                                        >>  <<01403>>07082390
                                                               <<01403>>07082400
      tos := 0;  << save space for next'instr              >>  <<01403>>07082410
      TOS := ABS( ABS(0) + STATUS.(8:8)*4 + 2);                <<01403>>07082420
      TOS := ABS( X := X + 1) + PLOC;                          <<01403>>07082430
      ASSEMBLE( LSEA); << get next instr. via delta-P      >>  <<01403>>07082440
                                                               <<01403>>07082450
      next'instr := tos;                                       <<01403>>07082460
                                                               <<01403>>07082470
      <<  if next'instr = %15 then the firmware does not   >>  <<01403>>07082480
      <<  recognize the ISTR instruction yet (they are     >>  <<01403>>07082490
      <<  running old firmware). In this case we want to   >>  <<01403>>07082500
      <<  increment the delta-P value at Q-2 and return    >>  <<01403>>07082510
      <<  If next'instr <> %15 then we want to HALT the    >>  <<01403>>07082520
      <<  system at this time.  This may change later.     >>  <<01403>>07082530
                                                               <<01403>>07082540
      if next'instr = ISTR'OP'CODE OR                          <<X1714>>07082550
         next'instr = ENPF'OP'CODE then                        <<X1714>>07082551
         begin                                                 <<01403>>07082560
         PLOC := PLOC + 1;  << increment the delta-P value >>  <<01403>>07082570
         return;            << and let the system continue >>  <<01403>>07082580
         end                                                   <<01403>>07082590
                                                               <<01403>>07083700
      else goto unimp'halt;                                    <<01403>>07083710
                                                               <<01403>>07083720
      END                                                      <<01403>>07083730
                                                               <<01403>>07083740
   ELSE begin                                                  <<01403>>07083750
                                                               <<01403>>07083760
                                                               <<01403>>07083770
   << All other cpu's should halt on this trap. >>             <<01403>>07083780
                                                               <<01403>>07083790
unimp'halt:                                                    <<01403>>07083800
                                                               <<01403>>07083810
   end;                                                        <<01403>>07086100
        F = ABS#,                                              << 1422>>07340000
      ELSE BEGIN  <<SEG PRESENT- FORM ABS ADDR>>               << 1422>>08684000
                 <<ABS ADDR OF INSTR TO REPLACE>>              << 1422>>09432000
   <<        6  IF SERIES-37                   >>              <<t1776>>11104000
   <<        7  IF SERIES-45                   >>              <<W1962>>11104100
   <<        8  IF SERIES-35                   >>              <<W1962>>11104200
     1,3,4,5,6,7,8,2;  << PCN TO THISCPU >>                    <<t1776>>11110000
if 1 <= ldev <= 999   then                                     << 9135>>11216000
   begin                                                       << 9135>>11218000
   dvr'index := ldev * dvrsize;                                << 9135>>11220000
   if ldev <= hldev and                                        << 9135>>11222000
     (dvrdrtnum <> 0 or dvrdsbit = 1)  then                    << 1422>>11224000
      ldev'exists := true;                                     << 9135>>11226000
   end;                                                        << 9135>>11228000
end;   << LDEV'EXISTS >>                                       << 9135>>11229000
    TOS := ABS(DRTBANK);                                       << 1422>>11390000
    TOS := ABS(DRTADDR)+DRT &LSL(2) + OFFSET;                  << 1422>>11392000
    TOS := ABS(DRTBANK);                                       << 1422>>11434000
    TOS := ABS(DRTADDR) + DRT &LSL(2) + OFFSET;                << 1422>>11436000
   DOUBLE DADR;         << ABS ADDR OF CHAN. PROG. >>          << 1422>>12370000
      CPADR;            << ABS ADDR. OF CHAN. PROG.>>          << 1422>>12378000
      CPADR := ABS( TERMCHANPROG);                             << 1422>>12418000
   TOS := ABS(TERMCHANPROG);                                   << 1422>>13400000
   TOS := ABS(TERMCHANPROG);                                   << 1422>>14150000
   TOS := ABS(DBBANK);                                         << 1422>>14336000
   TOS := ABS(DB);                                             << 1422>>14338000
   TOS := ABS(DBBANK);                                         << 1422>>14462000
   TOS := ABS(DB);                                             << 1422>>14464000
   IF TOS <> ABS(ZI) THEN  << ICS? >>                          << 1422>>14474000
      BLANKLINE;                                               <<01343>>14477000
      BLANKLINE;                                               <<01343>>14479000
                                                               <<01343>>14482020
      MOVE BLINE := "Q-7    Q-6    Q-5    Q-4    ",2;          <<01343>>14482050
      MOVE * := "X REG  DELTAP STATUS DELTAQ SEGMENT NAME";    <<01343>>14482100
      PRINTLINE;                                               <<01343>>14482150
                                                               <<01343>>14482200
      FOR I := 0 UNTIL 7                                       <<01343>>14482250
         DO                                                    <<01343>>14482300
            MOVE BLINE (I*7) := "------ ";                     <<01343>>14482350
      MOVE BLINE (56) := "---------------";                    <<01343>>14482400
      PRINTLINE;                                               <<01343>>14482450
                                                               <<01343>>14482500
         NTOA( QARRAY(STP:=STP+1), 8, BLINE(33));              <<01343>>14490000
         NTOA( QARRAY(STP:=STP+1), 8, BLINE(40));              <<01343>>14492000
         NTOA( QARRAY(STP:=STP+1), 8, BLINE(47));              <<01343>>14494000
         NTOA( QARRAY(STP:=STP+1), 8, BLINE(54));              <<01343>>14498000
         IF (I := QARRAY(STP) - 4) > 0 THEN                    <<01343>>14498050
            BEGIN                                              <<01343>>14498100
               STP := LASTSTP;                                 <<01343>>14498150
               NTOA( QARRAY(STP), 8,                           <<01343>>14498200
                     BLINE (26)); << Q-4 >>                    <<01343>>14498250
            END;                                               <<01343>>14498300
         IF I > 1 THEN                                         <<01343>>14498350
            NTOA( QARRAY(STP:=STP-1), 8,                       <<01343>>14498400
                  BLINE (19)); << Q-5 >>                       <<01343>>14498450
         IF I > 2 THEN                                         <<01343>>14498500
            NTOA( QARRAY(STP:=STP-1), 8,                       <<01343>>14498550
                  BLINE (12)); << Q-6 >>                       <<01343>>14498600
         IF I > 3 THEN                                         <<01343>>14498650
            NTOA( QARRAY(STP:=STP-1), 8,                       <<01343>>14498700
                  BLINE (5));  << Q-7 >>                       <<01343>>14498750
         STP := LASTSTP + 4;                                   <<01343>>14498950
            MOVE BLINE(56) := *PB,(CNT);                       <<01343>>14526000
              TOS := TOS+(INTEGER(BPS1)-%60);                  <<01403>>14850000
              ASSEMBLE(EXIT 7);   <<GET RID OF RETURN VALUE>>  <<09482>>15586000
      ABS(X) := 0;                                             << 1422>>16244000
          TOS := ABS(DBBANK);                                  << 1422>>16328000
          TOS := ABS(DB);                                      << 1422>>16330000
           BUF;          <<CORE BUFFER ABS ADDRESS>>           << 1422>>16404000
          TOS := ABS(DBBANK);                                  << 1422>>16514000
          TOS := ABS(DB);                                      << 1422>>16516000
          TBUFA := TOS;  <<ABS ADDRESS OF TBUF ARRAY>>         << 1422>>16524000
          TOS := ABS(SIOPROG);                                 << 1422>>16528000
          TOS := EXECUTESIO(DRT,ABS(SIOPROG));                 << 1422>>16566000
           BUF;          <<CORE BUFFER ABS ADDRESS>>           << 1422>>16700000
               TBUFA;        <<ABS ADDRESS OF TBUF ARRAY>>     << 1422>>16790000
          EXECUTESIO(DRT,ABS(SIOPROG));                        << 1422>>16850000
                  TOS := ABS(DBBANK);                          << 1422>>16900000
                  TOS := ABS(DB);                              << 1422>>16902000
          TOS := ABS(DBBANK);                                  << 1422>>16956000
          TOS := ABS(DB);                                      << 1422>>16958000
          TBUFA := TOS;   <<ABS ADDRESS OF TBUF>>              << 1422>>16966000
          TOS := ABS(SIOPROG);                                 << 1422>>16970000
          S(5) := BUF2+I;  <<ABS ADDRESS>>                     << 1422>>17182000
                  TOS := TOS+I;  <<ABS CORE ADDRESS>>          << 1422>>17284000
           BUF;             <<ABS ADDRESS OF BUFFER>>          << 1422>>17434000
               TBUFA,               <<ABS ADDRESS OF TBUF>>    << 1422>>17506000
        LOGICAL STATWORDABSADR, <<ABS ADDR OF STATWORDS>>      << 1422>>17546000
                SYNRETABSADR,   <<ABS ADDR OF SYNRET>>         << 1422>>17548000
                PHYSABSADR,     <<ABS ADDR OF PHYSADR>>        << 1422>>17550000
                XCNTABSADR,     <<ABS ADDR OF XCNT>>           << 1422>>17552000
          EXECUTESIO(DRT,ABS(SIOPROG));                        << 1422>>17670000
            TOS := ABS(DBBANK);                                << 1422>>17758000
            TOS := ABS(DB);                                    << 1422>>17760000
          TOS := ABS(SIOPROG);<<INITIALIZE CALLED>>            << 1422>>17832000
            TOS := ABS(DBBANK);                                << 1422>>17918000
            TOS := ABS(DB);                                    << 1422>>17920000
          TBUFA := TOS;  <<ABS ADDRESS OF TBUF>>               << 1422>>17942000
          TOS := ABS(SIOPROG);                                 << 1422>>17946000
              TOS := ABS(SIOPROG)+8;<<PT TO ADDRESS RECORD>>   << 1422>>18118000
                      S(9) := ABS(SIOPROG)+15;<<TO BE RETURNED><< 1422>>18148000
                      TOS := ABS(DBBANK);                      << 1422>>18204000
                      TOS := ABS(DB);                          << 1422>>18206000
                  TOS := ABS(DBBANK);                          << 1422>>18332000
                  TOS := ABS(DB);                              << 1422>>18334000
              TOS := ABS(DBBANK);                              << 1422>>18382000
              TOS := ABS(DB);                                  << 1422>>18384000
                TOS := ABS(DBBANK);                            << 1422>>18406000
                TOS := ABS(DB);                                << 1422>>18408000
   BUF;         << ABS ADDRESS OF R/W BUFFER >>                << 1422>>18638000
$EDIT VOID=18818000                                            <<B9231>>18816000
   CDB'SET'OPTIONS    = %70,                                   <<B9231>>18847000
   DEV'PFAIL := FALSE,                                         <<P1543>>19083000
<<20-24>> 5000D,5000D,45000D,15000D,7000D,                     <<01741>>19104000
<<25-26>> 7000D,0D;                                            <<01741>>19106000
<<*  4>>       0,  << COMMAND BUFFER ABS ADDRESS >>            << 1422>>19212000
<<* 11>>       0,  << DATA BUFFER ABS ADDRESS >>               << 1422>>19230000
<<*  4>>       0,  << COMMAND BUFFER ABS ADDRESS >>            << 1422>>19276000
<<* 11>>       0,  << DATA BUFFER ABS ADDRESS >>               << 1422>>19294000
INTEGER SUBROUTINE SET'CMD'BYTES( RECORD, COUNT, CMD);         <<B9231>>19446000
VALUE RECORD, COUNT, CMD;                                      <<B9231>>19448000
   COUNT,       << NO. OF BYTES TO READ/WRITE >>               <<B9231>>19456000
   CMD;         << READ/WRITE COMMAND >>                       <<B9231>>19457000
I := CDB'AREA'BYTE-1;                                          <<B9231>>19463000
CPB(I:=I+1) := CDB'SET'UNIT;                                   <<B9231>>19464000
CPB(I:=I+1) := CDB'SET'VOL;                                    <<B9231>>19466000
IF STYPE = BUFFALO OR STYPE = MERLIN THEN                      <<n1366>>19466100
   BEGIN                                                       <<B9231>>19466200
   CPB(I:=I+1) := CDB'SET'OPTIONS;                             <<B9231>>19466300
   CPB(I:=I+1) := %10;  << SET READ AHEAD >>                   <<B9231>>19466400
   END;                                                        <<B9231>>19466500
CPB(I:=I+1) := CDB'SET'SNGL'VEC;                               <<B9231>>19468000
CPB(I:=I+1) := 0;                                              <<B9231>>19470000
CPB(I:=I+1) := 0;                                              <<B9231>>19472000
@TEMP := @RECORD&LSL(1);                                       <<B9231>>19474000
CPB(I:=I+1) := TEMP(0);                                        <<B9231>>19476000
CPB(I:=I+1) := TEMP(1);                                        <<B9231>>19478000
CPB(I:=I+1) := TEMP(2);                                        <<B9231>>19480000
CPB(I:=I+1) := TEMP(3);                                        <<B9231>>19482000
CPB(I:=I+1) := CDB'SET'LENGTH;                                 <<B9231>>19484000
CPB(I:=I+1) := 0;                                              <<B9231>>19486000
CPB(I:=I+1) := 0;                                              <<B9231>>19488000
CPB(I:=I+1) := COUNT.(0:8);                                    <<B9231>>19490000
CPB(I:=I+1) := COUNT.(8:8);                                    <<B9231>>19492000
CPB(I:=I+1) := CMD;                                            <<B9231>>19493000
SET'CMD'BYTES := I-CDB'AREA'BYTE+1;                            <<B9231>>19493500
$EDIT VOID=19924000                                            <<B9231>>19920000
<< FILL COMMAND BUFFER >>                                      <<B9231>>19921000
CP(DX'CMD'MSGLEN) := SET'CMD'BYTES(RECORD,COUNT,CDB'READ);     <<B9231>>19922000
$EDIT VOID=19958000                                            <<B9231>>19956000
$EDIT VOID=19994000                                            <<B9231>>19990000
<< FILL COMMAND BUFFER >>                                      <<B9231>>19991000
CP(DX'CMD'MSGLEN) := SET'CMD'BYTES(RECORD,COUNT,CDB'WRITE);    <<B9231>>19992000
$EDIT VOID=20028000                                            <<B9231>>20026000
                                                               <<01202>>20412100
               <<===========================>>                 <<01202>>20412200
               <<      M A I N   C O D E    >>                 <<01202>>20412300
               <<===========================>>                 <<01202>>20412400
                                                               <<01202>>20412500
                                                               <<01202>>20412600
<< *************** Bug catcher *****************************>> <<01202>>20412700
TOS := %1430D;                                                 <<01202>>20412800
assemble( LDEA );                                              <<01202>>20412900
if DS1 <> 0D then                                              <<01202>>20413000
   if LS1.(0:8) = logical(LDEV) then                           <<01202>>20413100
      begin   << it is the right disc  >>                      <<01202>>20413200
      assemble ( DLSL 8; DLSR 8 );   << leave only disc addr >><<01202>>20413300
      IF DS1 >= RECORD AND                                     <<01202>>20413400
         DS1 < RECORD+DOUBLE((WC+127)/128) THEN HELP;          <<01202>>20413500
      end;                                                     <<01202>>20413600
ddel;                                                          <<01202>>20413700
<< *************** End of Bug catcher **********************>> <<01202>>20413800
                                                               <<01202>>20413900
   TOS := ABS(DBBANK);    <<    INITIAL'S STACK    >>          << 1422>>20434000
   TOS := ABS(DB);                                             << 1422>>20436000
      STYPE = MERLIN OR                                        <<n1366>>21026500
           IF CPVAP = %160004 LAND DEV'PFAIL THEN              <<P1543>>21096200
              OFFLINE                                          <<P1543>>21096300
           ELSE                                                <<P1543>>21096400
                                                               <<P1543>>21096500
      ELSE IF STATUS(FAULT'FIELD).RETRANSMIT   OR              <<09483>>21122000
         STATUS(REJECT'FIELD).CHAN'PARITY      OR              <<09483>>21124000
         STATUS(FAULT'FIELD).CROSS'UNIT        OR              <<09483>>21126000
         STATUS(FAULT'FIELD).CTRL'FAULT        OR              <<09483>>21128000
         STATUS(FAULT'FIELD).UNIT'FAULT        OR              <<09483>>21130000
         STATUS(FAULT'FIELD).DIAG'FAILED       THEN            <<09483>>21131000
         PUSH'STACK(CURFUNCT)              << RETRY REQUEST >> <<09483>>21132000
      ELSE IF STATUS(REJECT'FIELD).ILLEG'OPCODE OR             <<09483>>21134000
         STATUS(REJECT'FIELD).MOD'ADDR'ERR      OR             <<09483>>21136000
         STATUS(REJECT'FIELD).ADDR'BOUND        OR             <<09483>>21138000
         STATUS(REJECT'FIELD).PARM'BOUND        OR             <<09483>>21140000
         STATUS(REJECT'FIELD).ILLEG'PARM        OR             <<09483>>21142000
         STATUS(REJECT'FIELD).MSG'SEQ'VIOL      OR             <<09483>>21144000
         STATUS(REJECT'FIELD).MSG'LEN'DIFF      THEN           <<09483>>21146000
            IF STATUS(REJECT'FIELD).MSG'SEQ'VIOL AND           <<P1543>>21146200
               DEV'PFAIL    THEN                               <<P1543>>21146300
                  OFFLINE                                      <<P1543>>21146400
            ELSE                                               <<P1543>>21146500
         GOTO REJECT'ERROR                                     <<09483>>21148000
      ELSE IF STATUS(FAULT'FIELD).OPER'REL'REQRD OR            <<09483>>21150000
         STATUS(FAULT'FIELD).DIAG'REL'REQRD      OR            <<09483>>21152000
         STATUS(FAULT'FIELD).POWER'FAIL          THEN          <<09483>>21154000
$EDIT VOID=21162000                                            <<09483>>21160000
         IF STATUS(INFOR'FIELD).INT'MAINT'REQST  AND           <<01977>>21199000
            (STATUS(ACCESS'FIELD).UNRECOV'DATA'OV  OR          <<01977>>21199100
             STATUS(ACCESS'FIELD).UNRECOV'DATA)                <<01977>>21199200
            THEN GOTO UNRECOV'STATUS;  << This bit of code  >> <<01977>>21199300
            << is to correct a problem with the mr5 firmware>> <<01977>>21199400
            << on the HP7935 disc.  If a unrecov'data or    >> <<01977>>21199500
            << unrecov'data'ov error occurs MR5 now sets    >> <<01977>>21199600
            << int'maint'reqst AND unrecov'data'ov OR       >> <<01977>>21199700
            << unrecov'data in the returned status bytes.   >> <<01977>>21199800
                                                               <<01977>>21199900
                                                               <<01977>>21234100
UNRECOV'STATUS:                                                <<01977>>21234200
                                                               <<01977>>21234300
            BEGIN                                              <<01977>>21238100
            IF STATUS(INFOR'FIELD).INT'MAINT'REQST THEN        <<01977>>21238200
               PUSH'STACK(RELEASE'DENY)                        <<01977>>21238300
            END                                                <<01977>>21238400
            BEGIN                                              <<01002>>21254000
            << -------------------------------------------- >> <<01002>>21255000
            << If we attempt to read the DSCT for a LINUS or>> <<01002>>21255100
            << a BUFFALO, we will rewind the cartridge tape >> <<01002>>21255200
            << and cause an LDEV NOT READY hang.  Therefore,>> <<01002>>21255300
            << do not attempt anything and goto access error>> <<01002>>21255400
            << --------------------------------------------->> <<01002>>21255500
            IF STYPE = LINUS OR                                <<01002>>21255600
               STYPE = MERLIN OR                               <<n1366>>21255640
               STYPE = BUFFALO THEN                            <<01002>>21255700
               BEGIN                                           <<01002>>21255710
               MESSAGE (M37);                                  <<01002>>21255720
               GOTO ACCESS'ERROR;                              <<01002>>21255730
               END                                             <<01002>>21255740
            ELSE BEGIN                                         <<01002>>21255800
            << -------------------------------------------- >> <<01002>>21256000
            << Save current status & go read the DSCT...    >> <<01002>>21257000
            << -------------------------------------------- >> <<01002>>21257100
                                                               <<01002>>21257200
                 MOVE OLD'STAT := STATUS,(STAT'SIZE);          <<01002>>21258000
                 PUSH'STACK( DSCT'READ);                       <<01002>>21259000
                 IF STATUS(INFOR'FIELD).INT'MAINT'REQST        <<01977>>21259010
                    THEN PUSH'STACK(RELEASE);                  <<01977>>21259020
                 END                                           <<01002>>21259100
      PUSH'STACK(GET'STAT);                                    <<P1543>>21303000
      DEV'PFAIL := TRUE;                                       <<P1543>>21303100
           BUF;             <<ABS ADDRESS OF BUFFER>>          << 1422>>21820000
               TBUFA,               <<ABS ADDRESS OF TBUF>>    << 1422>>21912000
      SIOP( DRT, ABS(CHANPROG));                               << 1422>>22168000
         ABS(GETDRT(DRT,DBI)).(0:2) := 0;                      << 1422>>22190000
        TOS := ABS(DBBANK);                                    << 1422>>22312000
        TOS := ABS(DB);                                        << 1422>>22314000
          TOS := ABS(CHANPROG);                                << 1422>>22410000
   if LS1.(0:8) = logical(LDEV) then                           <<01202>>22534000
      begin  << this is the right disc >>                      <<01202>>22536000
      assemble ( DLSL 8; DLSR 8 );  << leave only disc addr. >><<01202>>22536100
      if DS1 >= RECORD and                                     <<01202>>22536200
         DS1 < RECORD + double((WC + 127)/128) then HELP;      <<01202>>22536300
      end;                                                     <<01202>>22536400
<< ************ END OF BUG CATCHER *********** >>              <<01202>>22538100
            TOS := ABS(DBBANK);                                << 1422>>22562000
            TOS := ABS(DB);                                    << 1422>>22564000
          TBUFA := TOS;   <<ABS ADDRESS OF BUF>>               << 1422>>22576000
          TOS := ABS(DBBANK);                                  << 1422>>22582000
          TOS := ABS(DB);                                      << 1422>>22584000
          TYPE := IF LDEV=0 THEN ABS(SDTYPE)                   << 1422>>22590000
          TOS := ABS(CHANPROG);                                << 1422>>22596000
                TOS := ABS(DBBANK);                            << 1422>>22874000
                TOS := ABS(DB);                                << 1422>>22876000
              TOS := ABS(GETDRT(DRT,DBI));  <<CPVA0>>          << 1422>>23006000
              TOS := ABS(DBBANK);                              << 1422>>23036000
              TOS := ABS(DB);                                  << 1422>>23038000
            TOS := ABS(DBBANK);                                << 1422>>23086000
            TOS := ABS(DB);                                    << 1422>>23088000
              TOS := ABS(DBBANK);                              << 1422>>23110000
              TOS := ABS(DB);                                  << 1422>>23112000
          <<DISC DRIVER (ABS ADDRESS)>>                        << 1422>>23386000
           BUF;       <<ABS CORE ADDRESS>>                     << 1422>>23402000
    ASSUMED TO BE ABSOLUTE;                                    << 1422>>23408000
          BA := TOS;  <<ABS ADDRESS OF B>>                     << 1422>>23686000
     IF (SUBTYP = LINUS OR SUBTYP = BUFFALO OR SUBTYP = MERLIN)<<n1366>>23828000
        AND  ( DLABEL(LAB6).LABDSUBTYPE = LINUS OR             <<n1366>>23830000
               DLABEL(LAB6).LABDSUBTYPE = BUFFALO OR           <<n1366>>23832000
               DLABEL(LAB6).LABDSUBTYPE = MERLIN )             <<n1366>>23832200
               SYSTAPESTYPE = MERLIN OR                        <<n1366>>24308500
          TOS := ABS(SIOPROG);                                 << 1422>>24732000
          TOS := ABS(SIOPROG);                                 << 1422>>24856000
          TOS := ABS(SIOPROG);                                 << 1422>>24966000
          TOS := ABS(SIOPROG) + 9;                             << 1422>>25012000
        <<ADD A DELAY OF 10 MS BECAUSE THE 7974/8 TAPE>>       <<D9121>>25383010
        <<DRIVES ARE TOO SLOW.  THEY WERE HANGING DURING>>     <<D9121>>25383020
        <<A RELOAD AFTER REWINDING THE TAPE. SR#4700-114439>>  <<D9121>>25383030
        DELAY (10D);                                           <<D9121>>25383040
  TOS := ABS(DBBANK);                                          << 1422>>25464000
  TOS := ABS(DB);                                              << 1422>>25466000
  TOS := ABS(TAPECHANPROG);                                    << 1422>>25502000
      CP(3).MEMX  := ABS(DBBANK).MEMX;                         << 1422>>25524000
      CP(14).MEMX := ABS(DBBANK).MEMX;                         << 1422>>25528000
      CP(50).MEMX := ABS(DBBANK).MEMX;                         << 1422>>25532000
          CP(25)      := ABS(DBBANK) + %100000;                << 1422>>25548000
          CP(26)      := ABS(DB) + @BUFF;                      << 1422>>25550000
          CP(34).MEMX := ABS(DBBANK).MEMX;                     << 1422>>25552000
          CP(39).MEMX := ABS(DBBANK).MEMX;                     << 1422>>25556000
      SIOP( DRT, ABS(TAPECHANPROG));                           << 1422>>25596000
$EDIT VOID=26566000                                            <<M9297>>26550005
INTEGER PROCEDURE MT7974( FUNCTION, BUF, WORDS);               <<M9297>>26550010
   VALUE FUNCTION, WORDS;                                      <<M9297>>26550020
   INTEGER FUNCTION, WORDS;                                    <<M9297>>26550030
   ARRAY BUF;                                                  <<M9297>>26550040
   OPTION VARIABLE;                                            <<M9297>>26550050
BEGIN                                                          <<M9297>>26550060
   COMMENT                                                     <<M9297>>26550070
                                                               <<M9297>>26550080
    FUNCTION = 0 - READ                                        <<M9297>>26550090
               1 - REWIND/OFFLINE                              <<M9297>>26550100
               2 - FORWARD SPACE FILE                          <<M9297>>26550110
               3 - WAIT FOR TAPE READY.                        <<M9297>>26550120
               4 - SELECT IMMEDIATE REPORTING                  <<M9297>>26550130
                                                               <<M9297>>26550140
    RETURNS                                                    <<M9297>>26550150
          CC = CCE - REQUEST COMPLETED                         <<M9297>>26550160
               CCG - EOF READ.                                 <<M9297>>26550170
               CCL - TRANSFER ERROR.                           <<M9297>>26550180
                                                               <<M9297>>26550190
    FUNCTION RETURN = TRANSFER COUNT ON SUCCESSFULL COMPLETION <<M9297>>26550200
                    = ERROR NUMBER AND CCL ON IRRECOVERABLE    <<M9297>>26550210
                      ERRORS.                                  <<M9297>>26550220
                                                               <<M9297>>26550230
                                                               <<M9297>>26550240
                                                               <<M9297>>26550250
MAG TAPE CONTROLLER STATUS                                     <<M9297>>26550260
                                                               <<M9297>>26550270
  BITS         USE                                             <<M9297>>26550280
                                                               <<M9297>>26550290
    0     END OF FILE                                          <<M9297>>26550300
                                                               <<M9297>>26550310
    1     BEGINNING OF TAPE                                    <<M9297>>26550320
    2     END OF TAPE                                          <<M9297>>26550330
    3     SINGLE TRACK ERROR (NOT LOGGED FOR READS)            <<M9297>>26550340
                                                               <<M9297>>26550350
    4     COMMAND REJECT                                       <<M9297>>26550360
    5     FILE PROTECT                                         <<M9297>>26550370
    6     MULTIPLE TRACK ERROR                                 <<M9297>>26550380
                                                               <<M9297>>26550390
    7     UNIT ONLINE                                          <<M9297>>26550400
    8     GCR (6250 BPI) MODE                                  <<M9297>>26550410
    9     UNKNOWN DENSITY                                      <<M9297>>26550420
                                                               <<M9297>>26550430
   10     DATA PARITY ERROR                                    <<M9297>>26550440
   11     TIMING ERROR                                         <<M9297>>26550450
   12     TAPE RUNAWAY                                         <<M9297>>26550460
                                                               <<M9297>>26550470
   13     DOOR OPEN                                            <<M9297>>26550480
   14     NOT USED                                             <<M9297>>26550490
   15     IMMEDIATE REPORT ENABLE                              <<M9297>>26550500
>>                                                             <<M9297>>26550510
                                                               <<M9297>>26550520
<< Word 2 of Status                                            <<M9297>>26550530
                                                               <<M9297>>26550540
  BITS         USE                                             <<M9297>>26550550
                                                               <<M9297>>26550560
    0     PE (1600 BPI DENSITY)                                <<M9297>>26550570
                                                               <<M9297>>26550580
    1     NRZI (800 BPI DENSITY)                               <<M9297>>26550590
    2     Power has been restored                              <<M9297>>26550600
    3     Parity error                                         <<M9297>>26550610
                                                               <<M9297>>26550620
    4     Position unrecovered                                 <<M9297>>26550630
    5     FCU/MTU error (isolation)                            <<M9297>>26550640
    6     Interface Controller Unit Error(isolation incl FCU s.<<M9297>>26550650
                                                               <<M9297>>26550660
    7     Interface Controller Unit Error(isolation incl PHI s.<<M9297>>26550670
    8-10  Error Details (binary)                               <<M9297>>26550680
          000 Null code                                        <<M9297>>26550690
          001 RESERVED                                         <<M9297>>26550700
          010 DEVICE REJECT                                    <<M9297>>26550710
          011 PROTOCOL REJECT                                  <<M9297>>26550720
          101 Prior error reject                               <<M9297>>26550730
          110 RESERVED                                         <<M9297>>26550740
          111 SELFTEST FAILURE                                 <<M9297>>26550750
    11-15 Retry count                                          <<M9297>>26550760
                                                               <<M9297>>26550770
   Word 3 of status=additional info on specific error encounter<<M9297>>26550780
;                                                              <<M9297>>26550790
  EQUATE                                                       <<M9297>>26550800
                                                               <<M9297>>26550810
       << DRIVER FUNCTIONS >>                                  <<M9297>>26550820
                                                               <<M9297>>26550830
    READ         = 0,                                          <<M9297>>26550840
    UNLOAD       = 1,                                          <<M9297>>26550850
    FORWARDFILE  = 2,                                          <<M9297>>26550860
    WAIT         = 3,                                          <<M9297>>26550870
    IMMEDIATERPT = 4,                                          <<M9297>>26550880
                                                               <<M9297>>26550890
                                                               <<M9297>>26550900
       << MAG TAPE COMMANDS >>                                 <<M9297>>26550910
                                                               <<M9297>>26550920
    BACKREADCMD  = %17,                                        <<M9297>>26550930
    BSFILECMD    = %14,                                        <<M9297>>26550940
    BSRECORDCMD  = %12,                                        <<M9297>>26550950
    FSFILECMD    = %13,                                        <<M9297>>26550960
    FSRECORDCMD  = %11,                                        <<M9297>>26550970
    READCMD      = %10,                                        <<M9297>>26550980
    REWINDCMD    = %15,                                        <<M9297>>26550990
    REWUNLDCMD   = %16,                                        <<M9297>>26551000
    TAPEGAPCMD   =   7,                                        <<M9297>>26551010
    WRITECMD     =   5,                                        <<M9297>>26551020
    WRTFMARKCMD  =   6,                                        <<M9297>>26551030
    SELUNITCMD   =   0, << 7974/7978 PROTOCOL >>               <<M9297>>26551040
    SETDENSHIC   = %20,                                        <<M9297>>26551050
    SETDENSLOC   = %21,                                        <<M9297>>26551060
    DEVCLEAR     = %30,                                        <<M9297>>26551070
    IMMREPORT    = %27,                                        <<M9297>>26551080
                                                               <<M9297>>26551090
            << CHANNEL PROGRAM ARRAY POINTERS >>               <<M9297>>26551100
                                                               <<M9297>>26551110
    BADDR'RC     = 33,  << BUFFER ADDRESS FOR TRFER CNT READ >><<M9297>>26551120
    BADDR1       = 18,  << BUFFER ADDRESS FOR 1ST DATA BURST >><<M9297>>26551130
    BADDR2       = 98,  << BUFFER ADDRESS FOR 2ND DATA BURST >><<M9297>>26551140
    RDBYCNT      = 15,  << READ BYTE COUNT>>                   <<M9297>>26551150
    WRBYCNT      = 95,  << WRITE BYTE COUNT >>                 <<M9297>>26551160
    CMDWORD      = 142, << MOTION COMMAND WORD >>              <<M9297>>26551170
    CPSTAT       = 34,  << BEGIN OF CHAN PROG STATUS ROUTINE >><<M9297>>26551180
    ENDCMD       = 144, << END COMMAND >>                      <<M9297>>26551190
    IDLE         = 106,  << BEGINNING OF IDLE CHANNEL PRGM >>  <<M9297>>26551200
    MEMX'RC      = 32,  << BANK ADDRESS FOR TRFER CNT READ >>  <<M9297>>26551210
    MEMX1        = 17,  << BANK ADDRESS FOR 1ST DATA BURST >>  <<M9297>>26551220
    MEMX2        = 97,  << BANK ADDRESS FOR 2ND DATA BURST >>  <<M9297>>26551230
    SPFDCMD      = 143, << STOP POLLING FOR DATA COMMAND >>    <<M9297>>26551240
    SRBUFF       = 148, << SHORT READ BUFFER >>                <<M9297>>26551250
    STATUS       = 145, << I/O STATUS BUFFER >>                <<M9297>>26551260
    STATUS'ONE   = 146, << I/O STATUS BUFER WORD ONE >>        <<M9297>>26551270
    IDLEND       = 152, << END CMD FOR IDLE CHAM PGM >>        <<M9297>>26551280
    XFERCNTBUF   = 153, << XFER COUNT BUFFER >>                <<M9297>>26551290
    CPWAITEND    = 87,  << WAIT AND END >>                     <<M9297>>26551310
    CPCLEAR      = 109, << CLEAR POWER ON STATUS >>            <<M9297>>26551320
    CPWRITEEND   = 113, << WRITE END COMMAND >>                <<M9297>>26551330
  ENDEQ          =     0;                                      <<M9297>>26551340
                                                               <<M9297>>26551350
                                                               <<M9297>>26551360
         << MISCELLANEOUS BIT DEFINITIONS >>                   <<M9297>>26551370
                                                               <<M9297>>26551380
  DEFINE                                                       <<M9297>>26551390
    BANKAD       = ( 8:8)#,  << BANK ADDRESS FIELD >>          <<M9297>>26551400
    BLOCKCNT     = ( 8:4)#,  << CPBUF,DATA CHAIN BLK CNT FIELD><<M9297>>26551410
    ERRORCODE    = ( 0:3)#,  << CPVA, ERROR CODE FIELD >>      <<M9297>>26551420
    TIMEDOUT     = (13:1)#,  << CPVA, TIMED OUT TFER ABORT >>  <<M9297>>26551430
  ENDDEF         = 0#;                                         <<M9297>>26551440
                                                               <<M9297>>26551450
ARRAY CHAN'PGM(*) = PB :=                                      <<M9297>>26551460
                                                               <<M9297>>26551470
<< ************** >>                                           <<M9297>>26551480
<< Jump to start. >>                                           <<M9297>>26551490
<< ************** >>                                           <<M9297>>26551500
                                                               <<M9297>>26551510
<< 0   >>       0,                                             <<M9297>>26551520
<< 1   >>       0, << CSTART'JVEC.>>                           <<M9297>>26551530
                                                               <<M9297>>26551540
<< ************************************** >>                   <<M9297>>26551550
<< Read record and tape command requests. >>                   <<M9297>>26551560
<< ************************************** >>                   <<M9297>>26551570
                                                               <<M9297>>26551580
<< Send READ record or Tape Command >>                         <<M9297>>26551590
<< 2   >>   %2001,                                             <<M9297>>26551600
<< 3   >>       1,                                             <<M9297>>26551610
<< 4   >>       0,                                             <<M9297>>26551620
<< 5   >>  %42000,                                             <<M9297>>26551630
<< 6   >>       0, << CTAPE'CMD'ADR >>                         <<M9297>>26551640
                                                               <<M9297>>26551650
<< Wait for parallel poll. >>                                  <<M9297>>26551660
<< 7   >>   %1000,                                             <<M9297>>26551670
<< 8   >>       0,                                             <<M9297>>26551680
                                                               <<M9297>>26551690
<< DSJ, check status of command. >>                            <<M9297>>26551700
<< 9   >>   %2402,                                             <<M9297>>26551710
<< 10  >>       0,                                             <<M9297>>26551720
<< 11  >>       0, << CCMD'DSJ0.>> << DSJ 0 returned.>>        <<M9297>>26551730
<< 12  >>      32,                 << DSJ 1 returned.>>        <<M9297>>26551740
<< 13  >>      44,                 << DSJ 2 returned.>>        <<M9297>>26551750
                                                               <<M9297>>26551760
<< Execute DMA tranfer to device   >>                          <<M9297>>26551770
<< 14  >>   %1400, << CRD'EXEC.    >>                          <<M9297>>26551780
<< 15  >>       0, << CRD'BYTE'CNT.>>                          <<M9297>>26551790
<< 16  >>       0,                                             <<M9297>>26551800
<< 17  >>       0, << CRD'BANK.    >>                          <<M9297>>26551810
<< 18  >>       0, << CRD'ADR.     >>                          <<M9297>>26551820
                                                               <<M9297>>26551830
<< Send END DATA command >>                                    <<M9297>>26551840
<< 19  >>   %2007, << CEND'DATA,    >>                         <<M9297>>26551850
                   << CDIAG'JUMP,   >>                         <<M9297>>26551860
                   << CLOOP'JUMP,   >>                         <<M9297>>26551870
                   << CTEST'JUMP,   >>                         <<M9297>>26551880
                   << CLOG'JUMP,    >>                         <<M9297>>26551890
                   << CFIRM'JUMP.   >>                         <<M9297>>26551900
<< 20  >>       1, << CEND'DATA'CNT,>>                         <<M9297>>26551910
                   << CDIAG'JVEC,   >>                         <<M9297>>26551920
                   << CLOOP'JVEC.   >>                         <<M9297>>26551930
                   << CTEST'JVEC.   >>                         <<M9297>>26551940
                   << CLOG'JVEC.    >>                         <<M9297>>26551950
                   << CFIRM'JVEC.   >>                         <<M9297>>26551960
<< 21  >>       0,                                             <<M9297>>26551970
<< 22  >>  %42000,                                             <<M9297>>26551980
<< 23  >>       0, << CEND'DATA'ADR >>                         <<M9297>>26551990
                                                               <<M9297>>26552000
<< DSJ, check status of DMA transfer >>                        <<M9297>>26552010
<< 24  >>   %2402,                                             <<M9297>>26552020
<< 25  >>       0,                                             <<M9297>>26552030
<< 26  >>       0, << DSJ 0 returned.>>                        <<M9297>>26552040
<< 27  >>      17, << DSJ 1 returned.>>                        <<M9297>>26552050
<< 28  >>      17, << DSJ 2 returned.>>                        <<M9297>>26552060
                                                               <<M9297>>26552070
<< Read actual byte count. >>                                  <<M9297>>26552080
<< 29  >>   %1402,                                             <<M9297>>26552090
<< 30  >>       2,                                             <<M9297>>26552100
<< 31  >>       0,                                             <<M9297>>26552110
<< 32  >>   %2000,                                             <<M9297>>26552120
<< 33  >>       0, << CACT'CNT'ADR >>                          <<M9297>>26552130
                                                               <<M9297>>26552140
<< ************************* >>                                <<M9297>>26552150
<< Interrupt, halt code = 0. >>                                <<M9297>>26552160
<< ************************* >>                                <<M9297>>26552170
                                                               <<M9297>>26552180
<< Read device status. >>                                      <<M9297>>26552190
<< 34  >>   %1401,                                             <<M9297>>26552200
<< 35  >>       6,                                             <<M9297>>26552210
<< 36  >>       0,                                             <<M9297>>26552220
<< 37  >>   %2000,                                             <<M9297>>26552230
<< 38  >>       0, << CSTAT1'ADR.>>                            <<M9297>>26552240
                                                               <<M9297>>26552250
<< Send END COMPLETE command. >>                               <<M9297>>26552260
<< 39  >>   %2007, << End complete.    >>                      <<M9297>>26552270
<< 40  >>       1,                                             <<M9297>>26552280
<< 41  >>       0,                                             <<M9297>>26552290
<< 42  >>  %42000,                                             <<M9297>>26552300
<< 43  >>       0, << CEND'CMPL1'ADR.>>                        <<M9297>>26552310
                                                               <<M9297>>26552320
<< Interrupt. >>                                               <<M9297>>26552330
<< 44  >>    %601,                                             <<M9297>>26552340
<< 45  >>       0, << Halt code.>>                             <<M9297>>26552350
                                                               <<M9297>>26552360
<< ************************* >>                                <<M9297>>26552370
<< Interrupt, halt code = 1. >>                                <<M9297>>26552380
<< ************************* >>                                <<M9297>>26552390
                                                               <<M9297>>26552400
<< Read device status. >>                                      <<M9297>>26552410
<< 46  >>   %1401,                                             <<M9297>>26552420
<< 47  >>       6,                                             <<M9297>>26552430
<< 48  >>       0,                                             <<M9297>>26552440
<< 49  >>   %2000,                                             <<M9297>>26552450
<< 50  >>       0, << CSTAT2'ADR >>                            <<M9297>>26552460
                                                               <<M9297>>26552470
<< Send END COMPLETE command. >>                               <<M9297>>26552480
<< 51  >>   %2007, << End complete.    >>                      <<M9297>>26552490
<< 52  >>       1,                                             <<M9297>>26552500
<< 53  >>       0,                                             <<M9297>>26552510
<< 54  >>  %42000,                                             <<M9297>>26552520
<< 55  >>       0, << CEND'CMPL2'ADR.>>                        <<M9297>>26552530
                                                               <<M9297>>26552540
<< Interrupt. >>                                               <<M9297>>26552550
<< 56  >>    %601,                                             <<M9297>>26552560
<< 57  >>       1, << Halt code.>>                             <<M9297>>26552570
                                                               <<M9297>>26552580
<< ************************* >>                                <<M9297>>26552590
<< Interrupt, halt code = 2. >>                                <<M9297>>26552600
<< ************************* >>                                <<M9297>>26552610
                                                               <<M9297>>26552620
<< Read device status. >>                                      <<M9297>>26552630
<< 58  >>   %1401,                                             <<M9297>>26552640
<< 59  >>       6,                                             <<M9297>>26552650
<< 60  >>       0,                                             <<M9297>>26552660
<< 61  >>   %2000,                                             <<M9297>>26552670
<< 62  >>       0, << CSTAT3'ADR.>>                            <<M9297>>26552680
                                                               <<M9297>>26552690
<< Send END COMPLETE command. >>                               <<M9297>>26552700
<< 63  >>   %2007,                                             <<M9297>>26552710
<< 64  >>       1,                                             <<M9297>>26552720
<< 65  >>       0,                                             <<M9297>>26552730
<< 66  >>  %42000,                                             <<M9297>>26552740
<< 67  >>       0, << CEND'CMPL3'ADR.>>                        <<M9297>>26552750
                                                               <<M9297>>26552760
<< Interrupt. >>                                               <<M9297>>26552770
<< 68  >>    %601,                                             <<M9297>>26552780
<< 69  >>       2, << Halt code.>>                             <<M9297>>26552790
                                                               <<M9297>>26552800
<< ************************* >>                                <<M9297>>26552810
<< Interrupt, halt code = 3. >>                                <<M9297>>26552820
<< ************************* >>                                <<M9297>>26552830
                                                               <<M9297>>26552840
<< Read device status. >>                                      <<M9297>>26552850
<< 70  >>   %1401,                                             <<M9297>>26552860
<< 71  >>       6,                                             <<M9297>>26552870
<< 72  >>       0,                                             <<M9297>>26552880
<< 73  >>   %2000,                                             <<M9297>>26552890
<< 74  >>       0, << CSTAT4'ADR >>                            <<M9297>>26552900
                                                               <<M9297>>26552910
<< Send END COMPLETE command. >>                               <<M9297>>26552920
<< 75  >>   %2007,                                             <<M9297>>26552930
<< 76  >>       1,                                             <<M9297>>26552940
<< 77  >>       0,                                             <<M9297>>26552950
<< 78  >>  %42000,                                             <<M9297>>26552960
<< 79  >>       0, << CEND'CMPL4'ADR.>>                        <<M9297>>26552970
                                                               <<M9297>>26552980
<< Interrupt. >>                                               <<M9297>>26552990
<< 80  >>    %601,                                             <<M9297>>26553000
<< 81  >>       3, << Halt code.>>                             <<M9297>>26553010
                                                               <<M9297>>26553020
<< ********************************* >>                        <<M9297>>26553030
<< Write record or Identify request. >>                        <<M9297>>26553040
<< ********************************* >>                        <<M9297>>26553050
                                                               <<M9297>>26553060
<< Send WRITE record or IDENTIFY command. >>                   <<M9297>>26553070
<< 82  >>   %2001, << CWR'CMD,      >>                         <<M9297>>26553080
                   << CIDENTIFY.    >>                         <<M9297>>26553090
<< 83  >>       2, << CWR'CMD'CNT,  >>                         <<M9297>>26553100
                   << CIDENT'CODE.  >>                         <<M9297>>26553110
<< 84  >>       0, << Identify jump.>>                         <<M9297>>26553120
<< 85  >>   %2000, << CWR'CMD'BANK, >>                         <<M9297>>26553130
                   << CIDENT'JVEC.  >>                         <<M9297>>26553140
<< 86  >>       0, << CWR'CMD'ADR.  >>                         <<M9297>>26553150
                                                               <<M9297>>26553160
<< Wait for parallel poll. >>                                  <<M9297>>26553170
<< 87  >>   %1000,                                             <<M9297>>26553180
<< 88  >>       0,                                             <<M9297>>26553190
                                                               <<M9297>>26553200
<< DSJ, check status of command. >>                            <<M9297>>26553210
<< 89  >>   %2402,                                             <<M9297>>26553220
<< 90  >>       0,                                             <<M9297>>26553230
<< 91  >>       0, << CWR'CMD'DSJ0,>>                          <<M9297>>26553240
                   << CIDENT'DSJ0. >>                          <<M9297>>26553250
<< 92  >>     -48,                                             <<M9297>>26553260
<< 93  >>     -36,                                             <<M9297>>26553270
                                                               <<M9297>>26553280
<< Execute DMA transfer to device. >>                          <<M9297>>26553290
<< 94  >>   %2000, << CWR'EXEC.    >>                          <<M9297>>26553300
<< 95  >>       0, << CWR'BYTE'CNT.>>                          <<M9297>>26553310
<< 96  >>       0,                                             <<M9297>>26553320
<< 97  >>       0, << CWR'BANK.    >>                          <<M9297>>26553330
<< 98  >>       0, << CWR'ADR.     >>                          <<M9297>>26553340
                                                               <<M9297>>26553350
<< Wait for parallel poll. >>                                  <<M9297>>26553360
<< 99  >>   %1000,                                             <<M9297>>26553370
<< 100 >>       0,                                             <<M9297>>26553380
                                                               <<M9297>>26553390
<< DSJ, check status of DMA transfer. >>                       <<M9297>>26553400
<< 101 >>   %2402,                                             <<M9297>>26553410
<< 102 >>       0,                                             <<M9297>>26553420
<< 103 >>     -72, << CWR'DSJ0.>>                              <<M9297>>26553430
<< 104 >>     -60, << CWR'DSJ1.>>                              <<M9297>>26553440
<< 105 >>     -36, << CWR'DSJ2.>>                              <<M9297>>26553450
                                                               <<M9297>>26553460
<< ********************* >>                                    <<M9297>>26553470
<< Idle Channel Program. >>                                    <<M9297>>26553480
<< ********************* >>                                    <<M9297>>26553490
                                                               <<M9297>>26553500
<< Send END IDLE command. >>                                   <<M9297>>26553510
<< 106 >>   %2007, << CIDLE'CP,       >>                       <<M9297>>26553520
                   << CEND'IDLE,      >>                       <<M9297>>26553530
                   << CCLEAR.         >>                       <<M9297>>26553540
<< 107 >>       1, << CEND'IDLE'CNT,  >>                       <<M9297>>26553550
                   << CCLEAR'WD2.     >>                       <<M9297>>26553560
<< 108 >>       0, << CEND'IDLE'WORD3,>>                       <<M9297>>26553570
                   << CCLEAR'JUMP.    >>                       <<M9297>>26553580
<< 109 >>  %42000, << CEND'IDLE'BANK, >>                       <<M9297>>26553590
                   << CCLEAR'JVEC.    >>                       <<M9297>>26553600
<< 110 >>       0, << CEND'IDLE'ADR.  >>                       <<M9297>>26553610
                                                               <<M9297>>26553620
<< Wait for parallel poll. >>                                  <<M9297>>26553630
<< 111 >>   %1000,                                             <<M9297>>26553640
<< 112 >>       0,                                             <<M9297>>26553650
                                                               <<M9297>>26553660
<< DSJ, check idle device status. >>                           <<M9297>>26553670
<< 113 >>   %2402, << CIDLE'DSJ,       >>                      <<M9297>>26553680
                   << CEND'DIAG.       >>                      <<M9297>>26553690
<< 114 >>       0, << CEND'DIAG'CODE.  >>                      <<M9297>>26553700
<< 115 >>       0, << DSJ 0 returned.  >>                      <<M9297>>26553710
<< 116 >>      12, << DSJ 1 returned.  >>                      <<M9297>>26553720
<< 117 >>      12, << DSJ 2 returned.  >>                      <<M9297>>26553730
                                                               <<M9297>>26553740
<< ************************ >>                                 <<M9297>>26553750
<< Interrupt, halt code = 0.>>                                 <<M9297>>26553760
<< ************************ >>                                 <<M9297>>26553770
                                                               <<M9297>>26553780
<< Read device status. >>                                      <<M9297>>26553790
<< 118 >>   %1401,                                             <<M9297>>26553800
<< 119 >>       6,                                             <<M9297>>26553810
<< 120 >>       0,                                             <<M9297>>26553820
<< 121 >>   %2000,                                             <<M9297>>26553830
<< 122 >>       0, << CIDLE'STAT1'ADR.>>                       <<M9297>>26553840
                                                               <<M9297>>26553850
<< Send END COMPLETE command. >>                               <<M9297>>26553860
<< 123 >>   %2007,                                             <<M9297>>26553870
<< 124 >>       1,                                             <<M9297>>26553880
<< 125 >>       0,                                             <<M9297>>26553890
<< 126 >>  %42000,                                             <<M9297>>26553900
<< 127 >>       0, << CEND'CMPL5'ADR.>>                        <<M9297>>26553910
                                                               <<M9297>>26553920
<< Interrupt. >>                                               <<M9297>>26553930
<< 128 >>    %601,                                             <<M9297>>26553940
<< 129 >>       0, << Halt code.>>                             <<M9297>>26553950
                                                               <<M9297>>26553960
<< ************************* >>                                <<M9297>>26553970
<< Interrupt, halt code = 1. >>                                <<M9297>>26553980
<< ************************* >>                                <<M9297>>26553990
                                                               <<M9297>>26554000
<< Read device status. >>                                      <<M9297>>26554010
<< 130 >>   %1401,                                             <<M9297>>26554020
<< 131 >>       6,                                             <<M9297>>26554030
<< 132 >>       0,                                             <<M9297>>26554040
<< 133 >>   %2000,                                             <<M9297>>26554050
<< 134 >>       0, << CIDLE'STAT2'ADR >>                       <<M9297>>26554060
                                                               <<M9297>>26554070
<< Send END COMPLETE command. >>                               <<M9297>>26554080
<< 134 >>   %2007,                                             <<M9297>>26554090
<< 136 >>       1,                                             <<M9297>>26554100
<< 137 >>       0,                                             <<M9297>>26554110
<< 138 >>  %42000,                                             <<M9297>>26554120
<< 139 >>       0, << CEND'CMPL6'ADR.>>                        <<M9297>>26554130
                                                               <<M9297>>26554140
<< Interrupt. >>                                               <<M9297>>26554150
<< 140 >>    %601,                                             <<M9297>>26554160
<< 141 >>       1, << Halt code. >>                            <<M9297>>26554170
                                                               <<M9297>>26554180
<< ************************************** >>                   <<M9297>>26554190
<< Miscellaneous channel program storage. >>                   <<M9297>>26554200
<< ************************************** >>                   <<M9297>>26554210
                                                               <<M9297>>26554220
<< 142 >>       0, << CTAPE'CMD.       >>                      <<M9297>>26554230
<< 143 >>       2, << CEND'DATA'CMD.   >>                      <<M9297>>26554240
<< 144 >>     %10, << CEND'CMPL'CMD.   >>                      <<M9297>>26554250
<< 145 >>       0, << CDEVSTAT1.       >>                      <<M9297>>26554260
<< 146 >>       0, << CDEVSTAT2.       >>                      <<M9297>>26554270
<< 147 >>       0, << CDEVSTAT3.       >>                      <<M9297>>26554280
<< 148 >>       0, << CSHORT'BUF1.     >>                      <<M9297>>26554290
<< 149 >>       0, << CSHORT'BUF2.     >>                      <<M9297>>26554300
<< 150 >>       0, << CSHORT'BUF3.     >>                      <<M9297>>26554310
<< 151 >>       0, << CACT'CNT.        >>                      <<M9297>>26554320
<< 152 >>       4, << CEND'IDLE'CMD.   >>                      <<M9297>>26554330
<< 153 >>       0; << XFER COUNT BUFFER >>                     <<M9297>>26554340
                                                               <<M9297>>26554350
   EQUATE                                                      <<M9297>>26554360
      CPLEN     = 154;                                         <<M9297>>26554370
                                                               <<M9297>>26554380
   BYTE POINTER                                                <<M9297>>26554390
      BPS0    = S-0;                                           <<M9297>>26554400
                                                               <<M9297>>26554410
   INTEGER ARRAY                                               <<M9297>>26554420
      CPBUF(0:CPLEN),                                          <<M9297>>26554430
      CPVA(0:6) = Q;                                           <<M9297>>26554440
                                                               <<M9297>>26554450
   LOGICAL   << HOLDS THE CURRENT DEVICE STATUS >>             <<M9297>>26554460
      DEVSTATUS,                                               <<M9297>>26554470
      DEVSTATUS1,                                              <<M9297>>26554480
      DEVSTATUS2;                                              <<M9297>>26554490
                                                               <<M9297>>26554500
   INTEGER ARRAY                                               <<M9297>>26554510
      LOGTOPHY(*) =PB := READCMD,REWUNLDCMD,FSFILECMD,0,       <<M9297>>26554520
                         IMMREPORT;                            <<M9297>>26554530
                                                               <<M9297>>26554540
   DOUBLE                                                      <<M9297>>26554550
      MEMADDR;            << HOLDS ABS BUFFER ADDRESS >>       << 1422>>26554560
                                                               <<M9297>>26554570
   INTEGER                                                     <<M9297>>26554580
      XFERCNT,            << BUFFER BYTE COUNT >>              <<M9297>>26554590
      TAPECMD,            << MAGTAPE CTLR COMMAND CODE >>      <<M9297>>26554600
      LEN,                << MAG TAPE STATE >>                 <<M9297>>26554610
      SIOBASE,            << ABS ADDRESS OF CPBUF >>           << 1422>>26554620
      I,                                                       <<M9297>>26554630
      BANK,                                                    <<M9297>>26554640
      ADR,                                                     <<M9297>>26554650
      S0        = S-0,                                         <<M9297>>26554660
      S1        = S-1,                                         <<M9297>>26554670
      S2        = S-2,                                         <<M9297>>26554680
      S3        = S-3,                                         <<M9297>>26554690
      MQ1       = Q-1,                                         <<M9297>>26554700
      X         = X;                                           <<M9297>>26554710
                                                               <<M9297>>26554720
   EQUATE                                                      <<M9297>>26554730
      CCE       = 2,                                           <<M9297>>26554740
      CCG       = 0,                                           <<M9297>>26554750
      CCL       = 1;                                           <<M9297>>26554760
                                                               <<M9297>>26554770
   DEFINE                                                      <<M9297>>26554780
      EOF         = DEVSTATUS.(0:1)#,                          <<M9297>>26554790
      BOT         = DEVSTATUS.(1:1)#,                          <<M9297>>26554800
      EOT         = DEVSTATUS.(2:1)#,                          <<M9297>>26554810
      CMD'REJ     = DEVSTATUS.(4:1)#,                          <<M9297>>26554820
      WRTPROTECT  = DEVSTATUS.(5:1)#,                          <<M9297>>26554830
      TRACKERR    = DEVSTATUS.(6:1)#,                          <<M9297>>26554840
      ONLINE      = DEVSTATUS.(7:1)#,                          <<M9297>>26554850
      UNKNOWNDEN  = DEVSTATUS.(9:1)#,                          <<M9297>>26554860
      PARITYERR   = DEVSTATUS.(10:1)#,                         <<M9297>>26554870
      TIMINGERR   = DEVSTATUS.(11:1)#,                         <<M9297>>26554880
      TAPERUN     = DEVSTATUS.(12:1)#,                         <<M9297>>26554890
      DOOROPEN    = DEVSTATUS.(13:1)#,                         <<M9297>>26554900
      IMMRPT      = DEVSTATUS.(15:1)#;                         <<M9297>>26554910
                                                               <<M9297>>26554920
SUBROUTINE LAUNCH( ENTRYADR );                                 <<M9297>>26554930
   VALUE ENTRYADR;                                             <<M9297>>26554940
   INTEGER ENTRYADR;                                           <<M9297>>26554950
BEGIN                                                          <<M9297>>26554960
   ZEROABS( TEMP'CPVA, 8);                                     <<M9297>>26554970
   PUSH( DB );                                                 <<M9297>>26554980
   TOS := TOS + @CPBUF;                                        <<M9297>>26554990
   ADR := TOS;                                                 <<M9297>>26555000
   BANK := TOS;                                                <<M9297>>26555010
   MABS( 0, SIOBASE, BANK, ADR, CPLEN);                        <<M9297>>26555020
   SIOP( SYSTAPEDRT, SIOBASE+ENTRYADR);                        <<M9297>>26555030
   IF <> THEN ERRMESSAGE( M2, SYSTAPEDRT);                     <<M9297>>26555040
   WHILE GETDRT(SYSTAPEDRT,CHANSTAT).(0:2) <> 0 DO;            <<M9297>>26555050
   DEVSTATUS := ABS(SIOBASE+STATUS);                           <<M9297>>26555060
   DEVSTATUS1 := ABS(X:=X+1);                                  <<M9297>>26555070
   DEVSTATUS2 := ABS(X:=X+1);                                  <<M9297>>26555080
   PUSH( DB );                                                 <<M9297>>26555090
   TOS := TOS + @CPVA;                                         <<M9297>>26555100
   MABS( *, *, 0, TEMP'CPVA, 7);                               <<M9297>>26555110
END;                                                           <<M9297>>26555120
SUBROUTINE WAITFORREADY;                                       <<M9297>>26555130
BEGIN                                                          <<M9297>>26555140
   LAUNCH( CPSTAT );                                           <<M9297>>26555150
   WHILE NOT ONLINE DO                                         <<M9297>>26555160
      LAUNCH( IDLE );                                          <<M9297>>26555170
END;                                                           <<M9297>>26555180
                                                               <<M9297>>26555190
SUBROUTINE PRINTERROR;                                         <<M9297>>26555200
BEGIN                                                          <<M9297>>26555210
   MOVE BLINE :=                                               <<M9297>>26555220
    ("FUNC=000000 CPVA=000000 000000 ",                        <<M9297>>26555230
    "STATUS=000000 000000 000000 PTR=000000");                 <<M9297>>26555240
   NTOA( FUNCTION, 8, BLINE(10));                              <<M9297>>26555250
   NTOA( CPVA, 8, BLINE(22));                                  <<M9297>>26555260
   NTOA( CPVA(1), 8, BLINE(29));                               <<M9297>>26555270
   NTOA( DEVSTATUS, 8, BLINE(43));                             <<M9297>>26555280
   NTOA( DEVSTATUS1, 8, BLINE(50));                            <<M9297>>26555290
   NTOA( DEVSTATUS2, 8, BLINE(57));                            <<M9297>>26555300
   NTOA( GETDRT(SYSTAPEDRT,0)-SIOBASE, 8, BLINE(68));          <<M9297>>26555310
   PRINTLINE;                                                  <<M9297>>26555320
END;                                                           <<M9297>>26555330
                                                               <<M9297>>26555340
   SIOBASE := ABS( TAPECHANPROG);                              << 1422>>26555350
   TAPECMD := LOGTOPHY( FUNCTION);                             <<M9297>>26555360
   XFERCNT := WORDS*2;                                         <<M9297>>26555370
   PUSH( DB );                                                 <<M9297>>26555380
   TOS := TOS + @BUF;                                          <<M9297>>26555390
   MEMADDR := TOS;                                             <<M9297>>26555400
START:                                                         <<M9297>>26555410
   MOVE CPBUF := CHAN'PGM,(CPLEN);                             <<M9297>>26555420
   CPBUF(6) := LOGICAL(SIOBASE) + CMDWORD;                     <<M9297>>26555430
   CPBUF(86) := LOGICAL(SIOBASE) + CMDWORD;                    <<M9297>>26555440
   CPBUF(23) := LOGICAL(SIOBASE) + SPFDCMD;                    <<M9297>>26555450
   CPBUF(38) := LOGICAL(SIOBASE) + STATUS;                     <<M9297>>26555460
   CPBUF(50) := LOGICAL(SIOBASE) + STATUS;                     <<M9297>>26555470
   CPBUF(43) := LOGICAL(SIOBASE) + ENDCMD;                     <<M9297>>26555480
   CPBUF(55) := LOGICAL(SIOBASE) + ENDCMD;                     <<M9297>>26555490
   CPBUF(127):= LOGICAL(SIOBASE) + ENDCMD;                     <<M9297>>26555500
   CPBUF(110):= LOGICAL(SIOBASE) + IDLEND;                     <<M9297>>26555510
   CPBUF(122):= LOGICAL(SIOBASE) + STATUS;                     <<M9297>>26555520
   CPBUF(62) := LOGICAL(SIOBASE) + STATUS;                     <<M9297>>26555530
   CPBUF(67) := LOGICAL(SIOBASE) + ENDCMD;                     <<M9297>>26555540
   CPBUF(74) := LOGICAL(SIOBASE) + STATUS;                     <<M9297>>26555550
   CPBUF(79) := LOGICAL(SIOBASE) + ENDCMD;                     <<M9297>>26555560
   CPBUF(134) := LOGICAL(SIOBASE) + STATUS;                    <<M9297>>26555570
   CPBUF(139) := LOGICAL(SIOBASE) + ENDCMD;                    <<M9297>>26555580
   CPBUF(BADDR'RC) := LOGICAL(SIOBASE) + XFERCNTBUF;           <<M9297>>26555590
   CPBUF(CMDWORD) := TAPECMD;                                  <<M9297>>26555600
                                                               <<M9297>>26555610
   IF LASTTAPEDRT <> SYSTAPEDRT THEN                           <<M9297>>26555620
      BEGIN<< RESET PWR-ON STATUS; SET 7974/78 PROTOCOL >>     <<M9297>>26555630
      LASTTAPEDRT := SYSTAPEDRT;                               <<M9297>>26555640
      INIT( SYSTAPEDRT);                                       <<M9297>>26555650
      MOVE CPBUF( CPCLEAR) := (%4400,0);<< CLEAR >>            <<M9297>>26555660
      LAUNCH( CPCLEAR);                                        <<M9297>>26555670
      MT7974( IMMEDIATERPT, I, 0);                             <<M9297>>26555680
      GO START;                                                <<M9297>>26555690
      END;                                                     <<M9297>>26555700
                                                               <<M9297>>26555710
   IF FUNCTION = WAIT THEN                                     <<M9297>>26555720
      BEGIN                                                    <<M9297>>26555730
      WAITFORREADY;                                            <<M9297>>26555740
      CC := CCE;                                               <<M9297>>26555750
      RETURN;                                                  <<M9297>>26555760
      END;                                                     <<M9297>>26555770
                                                               <<M9297>>26555780
   IF FUNCTION = READ THEN                                     <<M9297>>26555790
      BEGIN  <<READ COMMAND>>                                  <<M9297>>26555800
      IF XFERCNT = 0 THEN                                      <<M9297>>26555810
         BEGIN                                                 <<M9297>>26555820
         TAPECMD := FSRECORDCMD;                               <<M9297>>26555830
         GO START;                                             <<M9297>>26555840
         END;                                                  <<M9297>>26555850
      TOS :=MEMADDR;  <<GET BUFFER ADDRESS>>                   <<M9297>>26555860
      CPBUF(BADDR1) :=TOS;  <<BUFFER>>                         <<M9297>>26555870
      CPBUF(MEMX1) :=TOS;         <<BANK>>                     <<M9297>>26555880
      CPBUF(RDBYCNT) :=XFERCNT;                                <<M9297>>26555890
                                                               <<M9297>>26555900
      END <<READ COMMAND>>                                     <<M9297>>26555910
   ELSE                                                        <<M9297>>26555920
      BEGIN   << MUST BE A CONTROL REQUEST! >>                 <<M9297>>26555930
      CPBUF(11) := 20;                                         <<M9297>>26555940
      END;                                                     <<M9297>>26555950
TRY'AGAIN:                                                     <<M9297>>26555960
                                                               <<M9297>>26555970
   LAUNCH( 0 );                                                <<M9297>>26555980
                                                               <<M9297>>26555990
   IF DOOROPEN THEN  <<DOOR OPEN?>>                            <<M9297>>26556000
      BEGIN                                                    <<M9297>>26556010
      MOVE BLINE := "CLOSE MAGTAPE DOOR";                      <<M9297>>26556020
      PRINTLINE;                                               <<M9297>>26556030
      END;                                                     <<M9297>>26556040
                                                               <<M9297>>26556050
   IF CPVA(1).(14:2) = 2 THEN  << RETURN TO WAIT FOR POLL>>    <<M9297>>26556060
      BEGIN                                                    <<M9297>>26556070
      CPBUF(1) := 5;                                           <<M9297>>26556080
      GO TO TRY'AGAIN;                                         <<M9297>>26556090
      END;                                                     <<M9297>>26556100
                                                               <<M9297>>26556110
   IF CPVA(1).(14:2) = 3 THEN                                  <<M9297>>26556120
      BEGIN                                                    <<M9297>>26556130
      << RETURN TO WAIT FOR POLL AFTER THE DMA TRANSFER >>     <<M9297>>26556140
      CPBUF(1) := 97;                                          <<M9297>>26556150
      GO TO TRY'AGAIN;                                         <<M9297>>26556160
      END;                                                     <<M9297>>26556170
                                                               <<M9297>>26556180
                                                               <<M9297>>26556190
         << C O N T I N U A T O R   S E C T I O N >>           <<M9297>>26556200
                                                               <<M9297>>26556210
   IF CPVA.ERRORCODE = 6 OR CPVA.ERRORCODE = 7  THEN           <<M9297>>26556220
      BEGIN                                                    <<M9297>>26556230
      PRINTERROR;                                              <<M9297>>26556240
      ERRMESSAGE( M3, CPVA);                                   <<M9297>>26556250
      END;                                                     <<M9297>>26556260
                                                               <<M9297>>26556270
   IF CPVA(1).(14:2) <> 0 THEN                                 <<M9297>>26556280
      BEGIN                                                    <<M9297>>26556290
      IF NOT ONLINE THEN                                       <<M9297>>26556300
         BEGIN                                                 <<M9297>>26556310
         MESSAGE( M2407, SYSTAPEUNIT);                         <<M9297>>26556320
         WAITFORREADY;                                         <<M9297>>26556330
         GO START; << TRY IT AGAIN !!! >>                      <<M9297>>26556340
         END;                                                  <<M9297>>26556350
                                                               <<M9297>>26556360
      IF (DEVSTATUS LAND %5170) <> 0 THEN                      <<M9297>>26556370
         BEGIN                                                 <<M9297>>26556380
         PRINTERROR;                                           <<M9297>>26556390
         IF CMD'REJ THEN MT7974 := M5;                         <<M9297>>26556400
         IF TRACKERR THEN MT7974 := M7;                        <<M9297>>26556410
         IF TIMINGERR THEN MT7974 := M8;                       <<M9297>>26556420
         IF TAPERUN THEN MT7974 := M9;                         <<M9297>>26556430
         IF PARITYERR THEN MT7974 := M7;                       <<M9297>>26556440
         IF UNKNOWNDEN THEN MT7974 := M36;                     <<M9297>>26556450
         CC := CCL;                                            <<M9297>>26556460
         RETURN;                                               <<M9297>>26556470
         END;                                                  <<M9297>>26556480
                                                               <<M9297>>26556490
      IF (DEVSTATUS1 LAND %37400) <> 0 THEN                    <<M9297>>26556500
         BEGIN                                                 <<M9297>>26556510
         PRINTERROR;                                           <<M9297>>26556520
         MT7974 := M36; << TAPE UNIT FAILURE >>                <<M9297>>26556530
         CC := CCL;                                            <<M9297>>26556540
         RETURN;                                               <<M9297>>26556550
         END;                                                  <<M9297>>26556560
      END;                                                     <<M9297>>26556570
                                                               <<M9297>>26556580
   CC := CCE;                                                  <<M9297>>26556590
                                                               <<M9297>>26556600
   IF FUNCTION = READ THEN                                     <<M9297>>26556610
      BEGIN  << RETURN TRANSFER COUNT >>                       <<M9297>>26556620
      MT7974 := (XFERCNT-ABS(SIOBASE+RDBYCNT)+1)&LSR(1);       <<M9297>>26556630
      IF EOF THEN CC := CCG;                                   <<M9297>>26556640
      END;                                                     <<M9297>>26556650
END;                                                           <<M9297>>26556660
INTEGER PROCEDURE COLD'LOAD'MEDIA( FUNC, BUF, WORDC, RTN);     <<M9297>>26567000
   VALUE FUNC, WORDC, RTN;                                     <<M9297>>26567100
   INTEGER FUNC, WORDC;                                        <<M9297>>26567200
   LOGICAL RTN;                                                <<M9297>>26567300
   ARRAY BUF;                                                  <<M9297>>26567400
   OPTION VARIABLE;                                            <<M9297>>26567500
BEGIN                                                          <<M9297>>26567600
   LOGICAL VAR = Q-4;                                          <<M9297>>26567700
         CASE (SYSTAPESTYPE).(14:2) OF                         <<M9297>>26628000
            BEGIN                                              <<M9297>>26629000
            TOS := MTAPE( FUNC, BUF, WORDC);                   <<M9297>>26630000
            TOS := MT7976( FUNC, BUF, WORDC);                  <<M9297>>26631000
            TOS := MT7974( FUNC, BUF, WORDC);                  <<M9297>>26632000
            TOS := MT7974( FUNC, BUF, WORDC);                  <<M9297>>26633000
            END;                                               <<M9297>>26634000
         COLD'LOAD'MEDIA := TOS;                               <<M9297>>26635000
      IS ALLOWED. (THIS SHOULD ONLY BE USED WHEN ABSLY         << 1422>>26796000
  DOUBLE  CUR'DL,      << CURRENT ABS DL ADDRESS >>            << 1422>>27532000
<< COMPUTE ABS DL ADDRESS >>                                   << 1422>>27548000
  ASSEMBLE(CAB, ADD);  << ABS DL ADDRESS >>                    << 1422>>27552000
   DCOREADDR;   << ABS CORE ADDRESS--BANK AND OFFSET >>        << 1422>>27774000
          ELSE ASSEMBLE(ADD);  <<ABS DL VALUE>>                << 1422>>28044000
         << COMPUTE ABS DL ADDRESS >>                          << 1422>>28342000
         ASSEMBLE(CAB, ADD);  << ABS DL ADDRESS >>             << 1422>>28346000
   IF VAR.(15:1) THEN ABS(SYSIX) := BUILDSYSPTR(MEMADR);       << 1422>>28396000
   ISTR;   << Initialize System Table Registers >>             <<01403>>28396100
     @PTR := @SEGT(SEGT(SEG'HEAD+SLTYP)+38+CSTNUM*3);          <<*1948>>28708000
     PTR := %177600;   << XFORM >>                             <<*1948>>28710000
               -ABS(DFC);                                      << 1422>>28760000
   SIZE := (DST(INX).(3:13)) *4;                            << abst>>   28854000
         MAX'DICT'SIZE = 32764;                                <<d1212>>29258000
   INTEGER err;                                                <<F9416>>31013000
   err := DFSIO(1, ldev'of'map'in'buffer,                      <<F9416>>31032000
         add'of'map'page'in'buffer, bit'map'buffer,            <<F9416>>31034000
         actual'words'per'page);                               <<F9416>>31034100
   if <> then errmessage( M336, err);                          <<F9416>>31035000
   INTEGER err;                                                <<F9416>>31195000
         err := DFSIO(0, ldev'index'to'ldev (ldev'index),      <<F9416>>31238000
               sector'address, dt'buffer, sector'size);        <<F9416>>31240000
         if <> then errmessage( M336, err);                    <<F9416>>31241000
   INTEGER err;                                                <<F9416>>31437000
   err := DFSIO(0, ldev'index'to'ldev(ldev'index),             <<F9416>>31502000
         add'of'map'page'in'buffer, bit'map'buffer,            <<F9416>>31504000
         actual'words'per'page);                               <<F9416>>31504100
   if <> then errmessage( M336, err);                          <<F9416>>31505000
                               page'size) - 1D;                <<L2243>>35202000
 <<SECTOR'SIZE IS DELETED FROM THE FORMULA CALCULATING >>      <<L2243>>35203000
 <<ENDING'BIT'MAP'ADDRESS TO OBTAIN A CORRECT ADDRESS FOR IT>> <<L2243>>35203100
  << SR 5000016014 >>                                          <<L2243>>35203200
$EDIT                                                          <<S9171>>36076000
          IF = THEN RETURN;                                    <<S9171>>36083000
          IF = THEN RETURN;                                    <<S9171>>36085000
              TOS := ABS(DBBANK);                              << 1422>>36362000
              TOS := ABS(DB);                                  << 1422>>36364000
          TOS := ABS(DBBANK);                                  << 1422>>36402000
          TOS := ABS(DB);                                      << 1422>>36404000
          TOS := TOS+@BUF;  <<ABS BUFFER ADDRESS>>             << 1422>>36416000
          IF EXTENT<>FLNUMEXTS THEN                            <<Q2310>>36526000
            GETEXTLEN := FLEXTSIZE                             <<Q2310>>36526010
$EDIT VOID=36526100                                            <<Q2310>>36526020
$EDIT VOID=36568000                                            <<Q2310>>36530000
            GETEXTLEN := FLLASTEXTSIZE;                        <<Q2310>>36570000
        LMBX:=CSTN MOD 51 * 128 + CSTN / 51 * 25 ;             <<L1914>>37776000
  LOOP:   IF SEGXFORM(I:=I+1)&LSR(7)=LCST THEN                          38016000
   INTEGER I,LCSTX ;                                           <<L1948>>38054000
   FOR I:=STT(STTINDEX).(0:8)+1 UNTIL STT(STTINDEX).(8:8) DO   <<L1948>>38062000
      BEGIN                                                    <<L1948>>38064000
      IF STT(STTINDEX-I).(8:8) = %377 THEN                     <<L1948>>38066000
         STT(STTINDEX-I).(8:8) := %104001                      <<L1948>>38068000
         <<UNSATISFIED EXTERNAL- LINK TO ININ >>               <<L1948>>38070000
      ELSE IF STT(STTINDEX-I).(0:1) = 1 THEN                   <<L1948>>38072000
         << EXTERNAL STT HAS SEGMENT >>                                 38074000
         << NUM > 255. BIT0 OF STT WILL BE CONCATENATED TO>>   <<L1948>>38076000
         << SEG. NUM TO GET THE PHYS. CST ACCORDINGLY  >>      <<L1948>>38078000
         BEGIN                                                 <<L1948>>38080000
         LCSTX := 256 + STT(X).(8:8);  << X = STTINDEX-1 >>    <<L1948>>38082000
         STT(STTINDEX-I).(8:8) := PHYSCST (LCSTX) ;            <<L1948>>38084000
         STT(X).(0:1) := 1; << X = STTINDEX-1 >>               <<L1948>>38086000
         END   << OF IF STT OF SLX >>                          <<L1948>>38088000
      ELSE  << STT OF SL < 255 >>                              <<L1948>>38090000
         BEGIN                                                 <<L1948>>38092000
         STT(STTINDEX - I ).(8:8) := PHYSCST (STT(X).(8:8)) ;  <<L1948>>38094000
         STT(X).(0:1) := 1 ;                                   <<L1948>>38096000
         END;                                                  <<L1948>>38098000
      IF NOT LOGICALMAPPING  THEN                              <<L1948>>38100000
      << IF NOT CST EXTENSION FIRMWARE THEN PUT STT BACK >>    <<L1948>>38102000
      << TO MPEIV FORMAT                                 >>    <<L1948>>38104000
          STT (STTINDEX).(0:8)  := %100 ; << SET UNCALL. BIT>> <<L1948>>38106000
      END;  << OF FOR LOOP>>                                   <<L1948>>38108000
                 ABS(DFC)                                      << 1422>>38156000
                SEGLEN,SEGADR,NC,SLX,CONCODE:=CCG;                      38390000
                                                                        38398100
        << EXPANDED SL REQUIRES BIT 0 OF STT AS A FLAG. >>     <<L1948>>38399000
        << IF SEG. NUM. IS GREATER THAN 255 THEN BIT 0 >>      <<L1948>>38399100
        <<IS SET. IF STT IN MPEV FORMAT, THE BIT 0  >>         <<L1948>>38399200
        << OF EXT. STT WILL BE RESET TEMPORARILY TO >>         <<L1948>>38399300
        << ACCOMODATE THIS NEW IMPLEMENTATION.     >>          <<L1948>>38399400
        << IF STT IN MPEIV FORMAT, NUMBER OF LOCAL >>          <<L1948>>38399500
        << STT WILL BE STORED TEMPORARILY IN THE   >>          <<L1948>>38399600
        << FIRST 8 BIT OF PL, THEN BIT 0 OF EXT. STT >>        <<L1948>>38399700
        << ARE RESET. AFTER WE CONVERT LST TO CST, WE >>       <<L1948>>38399800
        << WILL PUT MPEIV STT FORMAT BACK IN PLACE   >>        <<L1948>>38399900
        << AGAIN .                                   >>        <<L1948>>38399910
              IF REFTAB(INDEX).(1:1) = 1 THEN                  <<L1948>>38401000
              << CHECK IF STT IN MPEV OR MPEIV FORMAT>>        <<L1948>>38401100
                  BEGIN                                        <<L1948>>38401200
                  NRINTS := STT(STTINDEX).(0:8);               <<L1948>>38401300
                  << NUMBER OF INTERNAL STT's >>               <<L1948>>38401310
                  FOR I := NRINTS+1 UNTIL STT(STTINDEX).(8:8)  <<L1948>>38401400
                     DO STT(STTINDEX-I).(0:1) := 0;            <<L1948>>38401500
                     << RESET BIT 0 OF EXT. STT's >>           <<L1948>>38401600
                  END  << OF IF STT IN MPEV FORMAT>>           <<L1948>>38401700
              ELSE  << STT IN MPEIV FORMAT>>                   <<L1948>>38401800
                  BEGIN                                        <<L1948>>38401900
                  NRINTS := 0; << # OF INTERNALS >>            <<L1948>>38401910
                  FOR I := 1 UNTIL STT(STTINDEX).(8:8) DO      <<L1948>>38401920
                     IF STT(STTINDEX-I) >= 0 THEN              <<L1948>>38401930
                        NRINTS := NRINTS+1;                    <<L1948>>38401940
                  STT(STTINDEX).(0:8) := NRINTS;               <<L1948>>38401950
                  FOR I := NRINTS+1 UNTIL STT(STTINDEX).(8:8)  <<L1948>>38401960
                     DO STT(STTINDEX-I).(0:1) := 0;            <<L1948>>38401970
                     << RESET BIT 0 OF EXT. STT's >>           <<L1948>>38401980
                  END; << OF ELSE >>                           <<L1948>>38401990
              EXTSIZE := (REFTAB(INDEX+2)-SEGLEN/128-2)*128;   <<L1948>>38402000
              << MINUS 2 INDICATES 2 RECORDS FOR STT BIT MAP>> <<L1948>>38403000
              << ARRAY FOR EXTENDED SL, IT USED TO BE 1 REC. >><<L1948>>38403100
              EXTREC := TOS+SEGADR+2;<<ADDR OF EXTERNAL LIST>> <<L1948>>38418000
              << PLUS 2 IS 2 RECORDS FOR STT BIT MAP ARRAY IN>><<L1948>>38419000
              << THE NEW FORMAT OF SL ( IT WAS 1 REC. BEFORE)>><<L1948>>38419100
              SLX := S0.(2:1);                                 <<L1948>>38423000
              << SLX BIT INDICATING IF THE SEG. NUM. IS   >>   <<L1948>>38423100
              << GREATER THAN 255                         >>   <<L1948>>38423200
                  IF BPS0="'" OR BPS0="_" THEN                 <<01657>>38456000
                  TOS := EXTLIST(EXTINDEX);  << PLABEL >>               38482000
                  STT(X).(8:8) := TOS;   <<FIX UP STT ENTRY>>           38488000
                  IF LOGICAL(SLX) THEN << CHECK IF SEG.> 255>> <<L1948>>38489000
                      STT(X).(0:1) := 1 ; << THEN SET BIT 0 >> <<L1948>>38489100
          DO IF SEGXFORM(I)&LSR(7) = LCST THEN GOTO NOALLOC    <<L1948>>38508000
          << USE FIRST 9 BITS OF SEGXFORM TO DISTINGUISH >>    <<L1948>>38509000
          << THE LOGICAL SEGMENT NUM. ALREADY ALLOCATED  >>    <<L1948>>38509100
          << OR NOT >>                                         <<L1948>>38509200
          TOS := 2;                                            <<L1948>>38516000
          << THE REF. TABLE ENTRIES ARE PACKED TWO TO A >>     <<L1948>>38517000
          <<RECORD TO ACCOMODATE THE EXTENDED SIZE OF THESE>>  <<L1948>>38517100
          << ENTRIES FROM 32 WORDS TO 64 WORDS          >>     <<L1948>>38517200
          INDEX := TOS&LSL(6);<<INDEX INTO REF TABLE RECORD>>  <<L1948>>38520000
          <<THE SIZE OF EACH ENTRY IS 64 WORDS, TOS IS THE >>  <<L1948>>38521000
          <<REMAINDER OF LCST/2, LSL(6) THIS VALUE WILL ALLOW>><<L1948>>38521100
          <<THE 1ST OR THE 2ND ENTRY TO BE INDEXED CORRECTLY>> <<L1948>>38521200
             << IF RECORD POINTER IS DIFFERENT FROM THE >>     <<L1948>>38527000
             << LAST ONE, WE THEN READ IN A NEW RECORD  >>     <<L1948>>38527100
             <<  (128 W). WE WILL INDEX TO THE SPECIFIC>>      <<L1948>>38527200
            << SEG. ENTRY BY USING THE VAR.INDEX>>             <<L1948>>38527300
             << REMEMBER NOW WE PACK 2 ENTRIES PER RECORD>>    <<L1948>>38527400
            SEGXFORM(CSTN):=LCST&LSL(7)+(FLAGS.(4:3)&LSL(1));  <<L1948>>38556000
            << USING FIRST 9 BIT OF SEGXFORM FOR SEGMENT NUM.>><<L1948>>38557000
              LMBX:=CSTN MOD 51 * 128 + CSTN / 51 * 25;        <<L1914>>38560000
                  IF BPS0="'" OR BPS0="_" THEN                 <<01657>>38574000
                  TOS := TOS + LNTOA(LCST,8,BPS0);             <<L1948>>38588000
                  <<PRINT CST AND LCST IN LOAD MAP>>           <<L1948>>38589000
$EDIT VOID=38650000                                                     38642000
$EDIT VOID=38674000                                                     38668000
        INTEGER ARRAY REFSEG(0:31);                            <<L1948>>38722000
                                                                        38723000
        << EXTENDED SL REQUIRES 32 WORD BIT MAP ARRAY OF >>    <<L1948>>38723100
        << REFERENCED SEGMENTS FOR EACH SEGMENT IN THE   >>    <<L1948>>38723200
        << SEG. REF. TABLE  >>                                 <<L1948>>38723300
          MOVE REFSEG := REFTAB(INDEX+16),(32);                <<L1948>>38728000
          UNTIL I=511;                                         <<L1948>>38744000
  INTEGER PROCEDURE EXTLABEL(NAME,SLX);                        <<L1948>>38756000
    INTEGER SLX    ;   <<FLAG IS PASSED BACK AS VALUE=1 TO >>  <<L1948>>38759000
                       <<INDICATE THE PROCEDURE FOUND IS IN >> <<L1948>>38759100
                       <<LOG. SEG. > 255, OTHERWISE IT IS 0 >> <<L1948>>38759200
         SLX := BEXTLIST(I).(10:1) ; << SLX IS 1 IF EXTERNAL>> <<L1948>>38833000
         <<PROC. IS IN SEG.> 255, OTHERWISE IT IS 0  >>        <<L1948>>38833100
      INTEGER SLX:=0; <<FLAG TO INDICATE IF THE PROC. IS IN >> <<L1948>>38867000
                     << SEG. > 255 >>                          <<L1948>>38867100
                                                                        38867200
          TOS := EXTLABEL(NAME,SLX);                           <<L1948>>38868000
          << GET LOGICAL EXTERNAL LABEL WITH FLAG RETURNED >>  <<L1948>>38869000
          << TO INDICATE IF THE PROC. IS IN SEG > 255      >>  <<L1948>>38869100
                                                                        38869200
          IF LOGICAL(SLX) THEN                                 <<L1948>>38873000
               X := 256 + X ; <<LOG. SEG. > 255 >>             <<L1948>>38873100
                                                               << 1948>>39008010
                                                               << 1948>>39008015
Comment       SEGT is the Loader Segment Table Primary DB      << 1948>>39008020
           Initial's code sets up the table as follows:        << 1948>>39008025
                                                               << 1948>>39008030
              SEGT                                             << 1948>>39008035
          -----------                                          << 1948>>39008040
      % 0 |    %274 |  @DIR                                    << 1948>>39008045
          -----------                                          << 1948>>39008050
      % 1 |   %1332 |  SEG DIR LENGTH                          << 1948>>39008055
          -----------                                          << 1948>>39008060
      % 2 |     %47 |  @LCT                                    << 1948>>39008065
          -----------                                          << 1948>>39008070
               :                                               << 1948>>39008075
          -----------                                          << 1948>>39008080
      % 7 |     %74 |  @SBUF                                   << 1948>>39008085
          -----------                                          << 1948>>39008090
               :                                               << 1948>>39008095
          -----------                                          << 1948>>39008100
      %24 |     %52 |  Type 0  Garbage  SEG'HEAD               << 1948>>39008105
          -----------                                          << 1948>>39008110
      %25 |      %0 |  Type 1  SL (set to %52 by SEGDIRENT)    << 1948>>39008115
          -----------                                          << 1948>>39008120
      %26 |      %0 |  Type 2  Program                         << 1948>>39008125
          -----------                                          << 1948>>39008130
               :         :                                     << 1948>>39008135
          -----------                                          << 1948>>39008140
      %34 |      %0 |  Type 8  Loadproc                        << 1948>>39008145
          -----------                                          << 1948>>39008150
      %35 |      %0 |  Type 0  Garbage  SEG'TAIL               << 1948>>39008155
          -----------                                          << 1948>>39008160
      %36 |      %0 |  Type 1  SL (set to %52 by SEGDIRENT)    << 1948>>39008165
          -----------                                          << 1948>>39008170
      %37 |      %0 |  Type 2  Program                         << 1948>>39008175
          -----------                                          << 1948>>39008180
               :         :                                     << 1948>>39008185
          -----------                                          << 1948>>39008190
      %45 |      %0 |  Type 8  Loadproc                        << 1948>>39008195
          -----------                                          << 1948>>39008200
      %46 |         |  Loader Auxillary DST                    << 1948>>39008205
          ===========  Beginning of LCT                        << 1948>>39008210
      %47 |      %0 |  Forward SL Link                         << 1948>>39008215
          -----------                                          << 1948>>39008220
      %50 |      %0 |  Backward SL Link                        << 1948>>39008225
          -----------                                          << 1948>>39008230
      %51 |   %1332 |  Length (initialized value)              << 1948>>39008235
          -----------                                          << 1948>>39008240
      %52 |  s   %1 |  Entry Type SL  = @SEGDIR                << 1948>>39008245
          -----------              s  = Bit 2, if 1 = SL.PUB.SY<< 1948>>39008250
      %53 |  HODA   |                                          << 1948>>39008255
          -----------                                          << 1948>>39008260
      %54 |  LODA   |                                          << 1948>>39008265
          -----------                                          << 1948>>39008270
      %55 | PV INFO |                                          << 1948>>39008275
          -----------                                          << 1948>>39008280
      %56 | # A seg |  # of Allocated Segments                 << 1948>>39008285
          -----------                                          << 1948>>39008290
      %57 | #seg ent|  # of Segment Entries                    << 1948>>39008295
          -----------                                          << 1948>>39008300
      %60 | 32 word |                                          << 1948>>39008305
          | Segment |                                          << 1948>>39008310
      %117| Bit Map |                                          << 1948>>39008315
          -----------                                          << 1948>>39008320
      %120|  LCST   |                                          << 1948>>39008325
          -----------                                          << 1948>>39008330
      %121|    1    |                                          << 1948>>39008335
          -----------                                          << 1948>>39008340
      %122| PHYSCST |                                          << 1948>>39008345
          -----------                                          << 1948>>39008350
               :                                               << 1948>>39008355
               :                                               << 1948>>39008360
               :                                               << 1948>>39008365
          -----------                                          << 1948>>39008370
  last-1  |  LCST   |                                          << 1948>>39008375
          -----------                                          << 1948>>39008380
  last-2  |    1    |                                          << 1948>>39008385
          -----------                                          << 1948>>39008390
  last-3  | PHYSCST |                                          << 1948>>39008395
          -----------                                          << 1948>>39008400
end of comment;                                                << 1948>>39008405
                                                               << 1948>>39008410
COMMENT    This subroutine first calculates the word offset    << 1948>>39016100
into the bit map array using LOGSEG.(0:12), and then           << 1948>>39016200
calculates the bit offset into the word using LOGSEG.(12:4).   << 1948>>39016300
END OF COMMENT;                                                << 1948>>39016400
       << ENTTYPE = 1 FOR SL.PUB.SYS >>                        << 1948>>39037000
   TOS:=FID;    <<FID is a double holding HODA and LODA >>     << 1948>>39046000
   TOS:=SEGDIR(1);               <<HODA>>                      << 1948>>39048000
   TOS:=SEGDIR(2);               <<LODA>>                      << 1948>>39050000
      BEGIN                      <<DISC ADDRESSES MATCH>>      << 1948>>39056000
      <<SEGLISTPTR PTR INTO SEGLIST RIGHT AFTER BIT MAP. FOR>> << 1948>>39057000
      <<SL.PUB.SYS ENTRY, BIT MAP IS 32 WORDS, ELSE 16 WORDS>> << 1948>>39057100
      <<THE COUNT STARTS AT THE ENTRY TYPE WORD, SO 5 WORDS >> << 1948>>39057200
      <<FOR DISC ADDR, PV INFO, # ALLOCATED SEGS, AND # OF  >> << 1948>>39057300
      <<OF SEGLIST ENTRIES PLUS (32 OR 16) PLUS 1 POINTS AT >> << 1948>>39057400
      <<THE FIRST SEGLIST ENTRY. SEGLISTPTR IS INITIALIZED  >> << 1948>>39057500
      <<TO 38(5+32+1) OR 22(5+16+1) DEPENDING ON ENTRY TYPE.>> << 1948>>39057600
      SEGLISTPTR:=IF SEGDIR.(2:1)=1 THEN 38 ELSE 22;           << 1948>>39058000
         LOGSEGNR:=SEGXFORM(PHYCST).(0:9);                     << 1948>>39064000
         SETBIT(LOGSEGNR,SEGDIR(6)); <<SEGDIR(6) is the first>><< 1948>>39068000
                                     <<word of the bit map.  >><< 1948>>39069000
                                                               << 1948>>39070000
         SEGDIR(4) := SEGDIR(4)+1;<<Inc cnt of allocated segs>><< 1948>>39072000
         WHILE SEGDIR(SEGLISTPTR).(0:9) <> 255                 << 1948>>39076000
   IF ENTTYPE=1 THEN SEGDIR.(2:1):=1;  <<MARK AS SL.PUB.SYS>>  << 1948>>39125000
   SEGDIR(2):=TOS;                    <<LODA>>                 << 1948>>39128000
   SEGDIR(1):=TOS;                    <<HODA>>                 << 1948>>39130000
   SEGDIR(X:=X+1) :=0;      << # SEG LIST ENTRIES>>            << 1948>>39135000
   SEGDIR(X:=X+1):=0;   << INITIALIZE SEG ARRAY TO ZEROS >>    << 1948>>39136000
   IF ENTTYPE=1 THEN << FOR SL.PUB.SYS, ZERO OUT 32 WORDS>>    << 1948>>39137000
      MOVE SEGDIR(X:=X+1):=SEGDIR(X:=X-1),(31)                 << 1948>>39138000
   ELSE                                                        << 1948>>39138100
      MOVE SEGDIR(X:=X+1):=SEGDIR(X:=X-1),(15);                << 1948>>39138200
   SEGLISTPTR:=IF SEGDIR.(2:1)=1 THEN 38 ELSE 22;              << 1948>>39146000
      LOGSEGNR:=SEGXFORM(PHYCST).(0:9);                        << 1948>>39152000
         SETBIT(LOGSEGNR,SEGDIR(SAGL+6));                      << 1948>>39156000
      SEGDIR(4) := SEGDIR(4)+1;                                << 1948>>39160000
      SEGDIR(SEGLISTPTR):=%177600;       <<FREE>>              << 1948>>39188000
   SEGDIR(5) := 200;                     <<# SEGLIST ENTRIES>> << 1948>>39198000
         X _ (CSTX:=ABS(DFS))+2;                               << 1422>>39260000
        INTEGER SLX :=0     ; <<FLAG INDICATES THE EXT. >>     <<L1948>>39403000
                              << PROC. FROM THE HASH LIST IS>> <<L1948>>39403100
                              << IN EXTENDED SL (>255)  >>     <<L1948>>39403200
         FLCLID := ABS(COLD'LOAD'ID);                          << 1422>>39418000
          TOS := EXTLABEL(EXTBUF(INDEX),SLX);                  <<L1948>>39496000
          << GET EXTERNAL PLABEL, FLAG SLX IS SET IF PLABEL>>  <<L1948>>39497000
          << IS IN SEG. > 255   >>                             <<L1948>>39497100
          IF LOGICAL(SLX) THEN                                 <<L1948>>39515000
          <<IF PLABEL RETURNED FROM EXTLABEL >>                <<L1948>>39515010
          << BELONGS TO SEG. > 255, THEN SLX IS SET    >>      <<L1948>>39515100
               TOS := TOS + 256 ;                              <<L1948>>39515200
              TOS := ABS(SLDISCADR1);                          << 1422>>39566000
              TOS := ABS(X:=X+1);                              << 1422>>39568000
                           -ABS(DFC))/4 + I;                   << 1422>>39596000
   while brotherinfo <> 0   do                                 << 9334>>39856000
      begin                                                    << 9334>>39857000
      end;                                                     << 9334>>39860000
                                BIT 15=1 MEANS ABS DB>>        << 1422>>39912000
            THEN ABS(LPROCTAB+LOGPCBN) := PCBN*PCBSIZE;        << 1422>>40126000
          SSEA(MARKER+2D, ABS(TERMINTLAB));                    << 1422>>40174000
          TEMP := ABS(TERMEXTLAB).(8:8);                       << 1422>>40176000
   SUBTYP <> LINUS AND SUBTYP <> BUFFALO AND SUBTYP <> MERLIN  <<n1366>>40658000
   THEN SYSDISC'TYPE := TRUE                                   <<n1366>>40660000
$EDIT VOID=40695120                                            <<S9277>>40695000
   TYPE = 2 << FLOPPY DISC >> OR                               <<S9277>>40700000
   TYPE = 3 <<CS'80>> THEN                                     <<S9277>>40702000
$EDIT                                                          <<S9277>>40703000
        PARM,              << used to fake CP completion >>    <<01742>>40768200
                                                               <<01742>>40770100
DOUBLE TIMEOUT,                                                <<01742>>40770200
       STARTIME,                                               <<01742>>40770300
       CURTIME;                                                <<01742>>40770400
                                                               <<01742>>40770500
LOGICAL LAST'RCLK,                                             <<01742>>40770600
        NEW'RCLK;                                              <<01742>>40770700
<< COMPUTE ABS ADDRESS OF 'BUF' >>                             << 1422>>40782000
<<   Loop and keep track of time so we can timeout  >>         <<01742>>40825000
<<   if the device identify takes longer than 100ms.>>         <<01742>>40825200
                                                               <<01742>>40825400
   TIMEOUT := 100D;  << allow only 100ms for device identify >><<01742>>40825600
   STARTIME := 0D;        << SET INITIAL TIME CLOCK >>         <<01742>>40825800
   CURTIME := 0D;         << INITIALIZE CURRENT TIME CLOCK >>  <<01742>>40826000
   LAST'RCLK := RCLK;     << GET INITIAL RCLK >>               <<01742>>40826200
                                                               <<01742>>40826400
   DO                     << LOOP UNTIL CHANNEL PROGRAM     >> <<01742>>40826600
      BEGIN               <<    ENDS OR TIMEOUT IS REACHED  >> <<01742>>40826800
      NEW'RCLK := RCLK;                                        <<01742>>40827000
      IF NEW'RCLK <> LAST'RCLK THEN    <<INCREMENT CLOCK IF >> <<01742>>40827200
         CURTIME := CURTIME + 1D;      <<   RCLK HAS TICKED >> <<01742>>40827400
      LAST'RCLK := NEW'RCLK;                                   <<01742>>40827600
                                                               <<01742>>40827800
                          << TIMEOUT=0 MEANS NEVER TIMEOUT  >> <<01742>>40828000
      IF TIMEOUT = 0D THEN CURTIME := STARTIME;                <<01742>>40828200
      END                                                      <<01742>>40828400
   UNTIL (GETDRT(DRT,CHANSTAT).(0:2) = 0 OR                    <<01742>>40828600
          CURTIME - STARTIME > TIMEOUT);                       <<01742>>40828800
                                                               <<01742>>40830000
IF ABS(GETDRT(DRT,DBI)).ERRCODE = 4 AND                        <<01742>>40834000
                (CURTIME - STARTIME <= TIMEOUT) THEN           <<01742>>40834100
ELSE BEGIN                                                     <<01742>>40840000
   IF CURTIME - STARTIME > TIMEOUT THEN   << TIMED OUT >>      <<01742>>40842100
      BEGIN                                                    <<01742>>40842200
      PARM := GETDRT( DRT, CHANSTAT);     << FAKE CP        >> <<01742>>40842300
      PARM.(0:2) := 0;                    <<    COMPLETION  >> <<01742>>40842400
      PUTDRT(DRT, CHANSTAT, PARM);                             <<01742>>40842500
      END;                                                     <<01742>>40842600
                                                               <<01742>>40842700
   END;                                                        <<01742>>40849000
                                                               <<01656>>41198000
          IF INTEGER(BPS0)="*" OR INTEGER(BPS0)="#"            <<01656>>41212000
             OR INTEGER(BPS0)="/" OR INTEGER(BPS0)=SPEC        <<01656>>41212100
             OR INTEGER(BPS0)=" "                              <<01656>>41212200
          IF CARRY THEN                                        <<01656>>41224100
             BEGIN                                             <<01656>>41224200
   NOBLANK:    ASSEMBLE(DECA);                                 <<01656>>41224300
               IF INTEGER(BPS0)=SPACE THEN GOTO NOBLANK        <<01656>>41224400
               ELSE ASSEMBLE(INCA);                            <<01656>>41224500
             END                                               <<01656>>41224600
          ELSE                                                 <<01656>>41226000
                MOVE BLINE(12) :="I/O,C";                      <<O9772>>43529000
<< ----------------------------------------------------- >>    <<O9772>>43998000
<<                DETERMINE CLASS TYPE                   >>    <<O9772>>44000000
<< ----------------------------------------------------- >>    <<O9772>>44001000
                                                               <<O9772>>44002000
PROCEDURE DETERMCTYP( ERRLABEL, DCT, ASKIO);                   <<O9772>>44003000
   VALUE ERRLABEL, DCT, ASKIO;                                 <<O9772>>44004000
   INTEGER ERRLABEL;                                           <<O9772>>44005000
   INTEGER POINTER DCT;                                        <<O9772>>44006000
   LOGICAL ASKIO;                                              <<O9772>>44007000
                                                               <<O9772>>44008000
   << -------------------------------------------------- >>    <<O9772>>44009000
   << This procedure determines the type of the class to >>    <<O9772>>44010000
   << which DCT points to in the device class table...   >>    <<O9772>>44011000
   << Most importantly, it determines if the  different  >>    <<O9772>>44012000
   << types of access combinations possible in each class>>    <<O9772>>44013000
   << are legal or illegal.  The following table explains>>    <<O9772>>44014000
   << the value of the CASE statement ACCESS'COMBINATION >>    <<O9772>>44015000
   << used below:                                        >>    <<O9772>>44016000
   << CASE VALUE      ACCESS COMBINATIONS     ACCESS TYPE>>    <<O9772>>44017000
   << ----------      -------------------     ----------->>    <<O9772>>44018000
                                                               <<O9772>>44019000
   <<    0            uninitialized             illegal  >>    <<O9772>>44020000
   <<    1            normal all DA             legal    >>    <<O9772>>44021000
   <<    2            normal all SERINPUT       legal    >>    <<O9772>>44022000
   <<    3            DA, SERINPUT              illegal  >>    <<O9772>>44023000
   <<    4            normal all CONIO          legal    >>    <<O9772>>44024000
   <<    5            DA, CONIO                 illegal  >>    <<O9772>>44025000
   <<    6            SERINPUT, CONIO           legal    >>    <<O9772>>44026000
   <<    7            DA, SERINPUT, CONIO       illegal  >>    <<O9772>>44027000
   <<    8            normal all NONCONIO       legal    >>    <<O9772>>44028000
   <<    9            DA, NONCONIO,             illegal  >>    <<O9772>>44029000
   <<   10            SERINPUT, NONCONIO        legal    >>    <<O9772>>44030000
   <<   11            DA, SERINPUT, NONCONIO    illegal  >>    <<O9772>>44031000
   <<   12            CONIO, NONCONIO           legal    >>    <<O9772>>44032000
   <<   13            DA, CONIO, NONCONIO       illegal  >>    <<O9772>>44033000
   <<   14            SERINPUT, NONCONIO        legal    >>    <<O9772>>44034000
   <<   15            DA, SERINPUT, NONCONIO    illegal  >>    <<O9772>>44035000
   <<   16            normal all SEROUTPUT      legal    >>    <<O9772>>44036000
   <<   17            SEROUTPUT, DA             illegal  >>    <<O9772>>44037000
   <<   18            SEROUTPUT, SERINPUT       illegal  >>    <<O9772>>44038000
   <<   19            SEROUTPUT,SERINPUT, DA    illegal  >>    <<O9772>>44039000
   <<   20            SEROUTPUT, CONIO          legal    >>    <<O9772>>44040000
   <<   21            SEROUTPUT, CONIO, DA      illegal  >>    <<O9772>>44041000
   <<   22            SEROUTPUT,CONIO,SERINPUT  illegal  >>    <<O9772>>44042000
   <<   23            SEROUT,SERIN,CONIO,DA     illegal  >>    <<O9772>>44043000
   <<   24            SEROUTPUT, NONCONIO       legal    >>    <<O9772>>44044000
   <<   25            SEROUTPUT, NONCONIO, DA   illegal  >>    <<O9772>>44045000
   <<   26            SEROUTPUT,NONCONIO,SERIN  illegal  >>    <<O9772>>44046000
   <<   27            SEROUT,NONCONIO,DA,SERIN  illegal  >>    <<O9772>>44047000
   <<   28            SEROUTPUT, NONCONIO,CONIO legal    >>    <<O9772>>44048000
   <<   29            SEROUT,NCONIO,CONIO,DA    illegal  >>    <<O9772>>44049000
   <<   30            SEROUT,NCONIO,CONIO,SERIN illegal  >>    <<O9772>>44050000
   <<   31            all access combinations   illegal  >>    <<O9772>>44051000
   <<   32            out of bounds precaution  illegal  >>    <<O9772>>44052000
   << -------------------------------------------------- >>    <<O9772>>44053000
                                                               <<O9772>>44054000
                                                               <<O9772>>44055000
   BEGIN                                                       <<O9772>>44056000
                                                               <<O9772>>44057000
   EQUATE                                                      <<O9772>>44058000
      FDISC   = 7,                                             <<O9772>>44059000
      SDISC   =31;                                             <<O9772>>44060000
                                                               <<O9772>>44061000
   INTEGER                                                     <<O9772>>44062000
      I,                                                       <<O9772>>44063000
      ACCESS'COMBINATION,                                      <<O9772>>44064000
      ACCESS'RANGE1,                                           <<O9772>>44065000
      ACCESS'RANGE2,                                           <<O9772>>44066000
      CURRENT'CLASS'ACCESS'TYPE,                               <<O9772>>44067000
      DEVICE'TYPE1,                                            <<O9772>>44068000
      LDT'INDEX,                                               <<O9772>>44069000
      LPDT'INDEX,                                              <<O9772>>44070000
      NUM'DEVICES,                                             <<O9772>>44071000
      SUBTYPE,                                                 <<O9772>>44072000
      TYPE;                                                    <<O9772>>44073000
                                                               <<O9772>>44074000
   BYTE POINTER                                                <<O9772>>44075000
      DCT'B;                                                   <<O9772>>44076000
                                                               <<O9772>>44077000
   BYTE ARRAY                                                  <<O9772>>44078000
      MESSAGE'BUFFER(0:8);                                     <<O9772>>44079000
                                                               <<O9772>>44080000
   LOGICAL                                                     <<O9772>>44081000
      VALID'RESPONSE   :=TRUE,                                 <<O9772>>44081100
      ALL'SAME'TYPE    :=TRUE,                                 <<O9772>>44082000
      ALL'SAME'RANGE   :=TRUE,                                 <<O9772>>44083000
      CANBESERIAL      :=TRUE;                                 <<O9772>>44084000
                                                               <<O9772>>44085000
   SUBROUTINE PROMPT'C'NC;                                     <<O9772>>44086000
                                                               <<O9772>>44087000
      BEGIN                                                    <<O9772>>44088000
                                                               <<O9772>>44089000
      << ----------------------------------------------- >>    <<O9772>>44090000
      << This subroutine is called when the acess type is>>    <<O9772>>44091000
      << is concurrent but we need to verify whether it  >>    <<O9772>>44092000
      << is NON-concurrent or concurrent I/O...          >>    <<O9772>>44093000
      << ----------------------------------------------- >>    <<O9772>>44094000
                                                               <<O9772>>44095000
     VALID'RESPONSE := FALSE;                                  <<O9772>>44096000
     IF DCT'ACCESS'TYPE = CONINOUT   OR                        <<O9772>>44097000
        DCT'ACCESS'TYPE = CONINOUT'2 THEN <<IO'CONCURRENT>>    <<O9772>>44098000
        DO                                                     <<O9772>>44099000
          BEGIN                                                <<O9772>>44100000
          MESSAGE(-M2351); << CONCURRENT OR NON-CONCURRENT >>  <<O9772>>44101000
          READINPUT;                                           <<O9772>>44102000
          GETSTR(BTYP, @PROMPT'C'NC, 1,2);                     <<O9772>>44103000
          IF BTYP  = "NC"   OR                                 <<O9772>>44104000
             BTYP  = "C"    OR                                 <<O9772>>44105000
             BTYP  = "C "   OR                                 <<O9772>>44106000
             BTYP  = "CO"   THEN                               <<O9772>>44107000
             VALID'RESPONSE := TRUE;                           <<O9772>>44107100
          IF NOT VALID'RESPONSE                                <<O9772>>44108000
             THEN MESSAGE(M2453)     << ILLEGAL INPUT >>       <<O9772>>44109000
          ELSE IF BTYP = "NC" THEN                             <<O9772>>44110000
               DCT'CLASS'ACC'TYPE := NCONINOUT & LSL(3);       <<O9772>>44111000
          END                                                  <<O9772>>44112000
       UNTIL VALID'RESPONSE;                                   <<O9772>>44113000
   END;  << SUBROUTINE PROMPT'C'NC >>                          <<O9772>>44114000
                                                               <<O9772>>44115000
   SUBROUTINE PROMPT'IN'OUT;                                   <<O9772>>44116000
                                                               <<O9772>>44117000
      BEGIN                                                    <<O9772>>44118000
                                                               <<O9772>>44118100
      << ------------------------------------------------- >>  <<O9772>>44118200
      << This subroutine is called when the access type is >>  <<O9772>>44118300
      << concurrent but we need to verify whether it is IN,>>  <<O9772>>44118400
      << OUT, or IN/OUT...                                 >>  <<O9772>>44118500
      << ------------------------------------------------- >>  <<O9772>>44118600
                                                               <<O9772>>44119000
      VALID'RESPONSE := FALSE;                                 <<O9772>>44120000
      DO                                                       <<O9772>>44121000
         BEGIN                                                 <<O9772>>44122000
         MESSAGE(-M2350);  << IN, OUT, OR IN/OUT? >>           <<O9772>>44123000
         READINPUT;                                            <<O9772>>44123500
         GETSTR(BTYP, @PROMPT'IN'OUT, 1,6, "/");               <<O9772>>44124000
         IF BTYP = "IN    "   OR                               <<O9772>>44125000
            BTYP = "OUT   "   OR                               <<O9772>>44126000
            BTYP = "IN/OUT"   OR                               <<O9772>>44127000
            BTYP = "IO    "   THEN                             <<O9772>>44128000
            VALID'RESPONSE := TRUE;                            <<O9772>>44129000
         IF NOT VALID'RESPONSE THEN                            <<O9772>>44130000
            MESSAGE(M2453)       << ILLEGAL INPUT >>           <<O9772>>44131000
         ELSE IF BTYP = "IN    " THEN                          <<O9772>>44132000
              DCT'CLASS'ACC'TYPE := SERINPUT & LSL(3)          <<O9772>>44132500
         ELSE IF BTYP = "OUT   " THEN                          <<O9772>>44133000
              DCT'CLASS'ACC'TYPE := SEROUTPUT & LSL(3);        <<O9772>>44133500
         END                                                   <<O9772>>44133600
       UNTIL VALID'RESPONSE;                                   <<O9772>>44133700
                                                               <<O9772>>44133800
      IF BTYP = "IN/OUT" OR                                    <<O9772>>44133900
         BTYP = "IO    " THEN PROMPT'C'NC;                     <<O9772>>44133910
                                                               <<O9772>>44133920
      END; << SUBROUTINE PROMPT'IN'OUT >>                      <<O9772>>44133930
                                                               <<O9772>>44133940
                                                               <<O9772>>44134000
   SUBROUTINE DIRECT'ACCESS'CHECK;                             <<O9772>>44134500
                                                               <<O9772>>44135000
      BEGIN                                                    <<O9772>>44135500
                                                               <<O9772>>44136000
      << ----------------------------------------------- >>    <<O9772>>44136500
      << This subroutine verifies if a direct access type>>    <<O9772>>44137000
      << (0-7) can be a serial or foreign device in which>>    <<O9772>>44137500
      << case we update the device class access type.    >>    <<O9772>>44138000
      << If its not a serial or foreign device all       >>    <<O9772>>44138500
      << we really care about is that the access field   >>    <<O9772>>44139000
      << contain the value (0) irregardless of the type  >>    <<O9772>>44139500
      << ----------------------------------------------- >>    <<O9772>>44140000
                                                               <<O9772>>44140500
      IF CURRENT'CLASS'ACCESS'TYPE <> SDISC AND                <<O9772>>44141000
         CURRENT'CLASS'ACCESS'TYPE <> FDISC THEN               <<O9772>>44141500
         IF ALL'SAME'TYPE THEN                                 <<O9772>>44142000
            DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                 <<O9772>>44142500
         ELSE DCT'CLASS'ACC'TYPE := DIRACCESS;                 <<O9772>>44143000
                                                               <<O9772>>44143500
      IF CANBESERIAL AND ASKIO THEN                            <<O9772>>44144000
         IF LGETYESNO(M2327)       << SERIAL DISC CLASS ? >>   <<O9772>>44144500
            THEN DCT'CLASS'ACC'TYPE := SDISC                   <<O9772>>44145000
         ELSE IF LGETYESNO(M2334)  << FOREIGN DISC CLASS? >>   <<O9772>>44145500
                 THEN DCT'CLASS'ACC'TYPE := FDISC;             <<O9772>>44146000
                                                               <<O9772>>44146500
      END; << SUBROUTINE DIRECT'ACCESS'CHECK >>                <<O9772>>44147000
                                                               <<O9772>>44147500
   SUBROUTINE SERIAL'INPUT'CHECK;                              <<O9772>>44148000
                                                               <<O9772>>44148500
      BEGIN                                                    <<O9772>>44149000
                                                               <<O9772>>44149500
      << ----------------------------------------------- >>    <<O9772>>44150000
      << This subroutine simply checks to see if all the >>    <<O9772>>44150500
      << ldevs in a class entry are the same type.  If so>>    <<O9772>>44151000
      << it assigns it the type of the first ldev. Other->>    <<O9772>>44151500
      << wise if they are all serial input type then the >>    <<O9772>>44152000
      << type is assigned the first type in this range...>>    <<O9772>>44152500
      << type = 8...                                     >>    <<O9772>>44153000
      << ----------------------------------------------- >>    <<O9772>>44153500
                                                               <<O9772>>44154000
      IF ALL'SAME'TYPE THEN                                    <<O9772>>44154500
         DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                    <<O9772>>44155000
      ELSE IF ALL'SAME'RANGE OR ASKIO THEN                     <<O9772>>44155500
              DCT'CLASS'ACC'TYPE := SERINPUT & LSL(3);         <<O9772>>44156000
                                                               <<O9772>>44156500
      END;  << SUBROUTINE SERIAL'INPUT'CHECK >>                <<O9772>>44157000
                                                               <<O9772>>44157500
   SUBROUTINE CONIO'ACCESS'CHECK;                              <<O9772>>44158000
                                                               <<O9772>>44158500
      BEGIN                                                    <<O9772>>44159000
                                                               <<O9772>>44159500
      << ----------------------------------------------- >>    <<O9772>>44160000
      << This subroutine verifies the input/output con-  >>    <<O9772>>44160500
      << currency of the device type.  Note, the class   >>    <<O9772>>44161000
      << access type is assigned the first type in this  >>    <<O9772>>44161500
      << range... type = 16                              >>    <<O9772>>44162000
      << ----------------------------------------------- >>    <<O9772>>44162500
                                                               <<O9772>>44163000
      IF ALL'SAME'TYPE THEN                                    <<O9772>>44163500
         DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                    <<O9772>>44164000
      ELSE IF ALL'SAME'RANGE THEN                              <<O9772>>44164500
           DCT'CLASS'ACC'TYPE := CONINOUT & LSL(3);            <<O9772>>44165000
                                                               <<O9772>>44165500
      IF ASKIO THEN                                            <<O9772>>44166000
         PROMPT'IN'OUT;                                        <<O9772>>44166500
                                                               <<O9772>>44167000
      END; << SUBROUTINE CONIO'ACCESS'CHECK >>                 <<O9772>>44167500
                                                               <<O9772>>44168000
   SUBROUTINE NONCONIO'ACCESS'CHECK;                           <<O9772>>44168500
                                                               <<O9772>>44169000
      BEGIN                                                    <<O9772>>44169500
                                                               <<O9772>>44170000
      << ---------------------------------------------- >>     <<O9772>>44170500
      << This subroutine simply assigns the class access>>     <<O9772>>44171000
      << type the first type in this range ...type = 24;>>     <<O9772>>44171500
      << and if necessary verifies in/out concurrency.  >>     <<O9772>>44172000
      << ---------------------------------------------- >>     <<O9772>>44172500
                                                               <<O9772>>44173000
      IF ALL'SAME'TYPE THEN                                    <<O9772>>44173100
         DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                    <<O9772>>44173200
      ELSE IF ALL'SAME'RANGE THEN                              <<O9772>>44173300
              DCT'CLASS'ACC'TYPE := NCONINOUT & LSL(3);        <<O9772>>44173500
      IF ASKIO THEN PROMPT'IN'OUT;                             <<O9772>>44174000
                                                               <<O9772>>44174500
      END; << SUBROUTINE NONCONIO'ACCESS'CHECK >>              <<O9772>>44175000
                                                               <<O9772>>44175500
   SUBROUTINE SERIAL'OUTPUT'CHECK;                             <<O9772>>44176000
                                                               <<O9772>>44176500
      BEGIN                                                    <<O9772>>44177000
                                                               <<O9772>>44177500
      << ---------------------------------------------- >>     <<O9772>>44178000
      << This subroutine simply assigns the access type >>     <<O9772>>44178500
      << the device type of the first ldev in the class >>     <<O9772>>44179000
      << entry if all the ldevs are of the same type.   >>     <<O9772>>44179500
      << Otherwise, it assigns the class access type the>>     <<O9772>>44180000
      << first type in this range ... type = 32         >>     <<O9772>>44180500
      << ---------------------------------------------- >>     <<O9772>>44181000
                                                               <<O9772>>44181500
      IF ALL'SAME'TYPE THEN                                    <<O9772>>44182000
         DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                    <<O9772>>44182500
      ELSE IF ALL'SAME'RANGE OR ASKIO THEN                     <<O9772>>44183000
              DCT'CLASS'ACC'TYPE := SEROUTPUT & LSL(3);        <<O9772>>44183500
                                                               <<O9772>>44184000
      END; << SUBROUTINE SERIAL'OUTPUT'CHECK >>                <<O9772>>44184500
                                                               <<O9772>>44185000
   SUBROUTINE CLASS'ACCESS'ERROR;                              <<O9772>>44185500
                                                               <<O9772>>44186000
      BEGIN                                                    <<O9772>>44186500
                                                               <<O9772>>44187000
      << ---------------------------------------------- >>     <<O9772>>44187500
      << This subroutine first checks if all the devices>>     <<O9772>>44188000
      << are of the same type.  If not, it prints out an>>     <<O9772>>44188500
      << error message and returns control to calling   >>     <<O9772>>44189000
      << procedure.                                     >>     <<O9772>>44189500
      << ---------------------------------------------- >>     <<O9772>>44190000
                                                               <<O9772>>44190500
      IF ALL'SAME'TYPE THEN                                    <<O9772>>44191000
         DCT'CLASS'ACC'TYPE := DEVICE'TYPE1                    <<O9772>>44191500
      ELSE IF ASKIO THEN                                       <<O9772>>44192000
              BEGIN                                            <<O9772>>44192500
              << ------------------------------------- >>      <<O9772>>44193000
              << Illegal type combinations in class ...>>      <<O9772>>44193500
              << ------------------------------------- >>      <<O9772>>44194000
              MESSAGE'BUFFER(0) := " ";                        <<O9772>>44194500
              MOVE MESSAGE'BUFFER(1) := MESSAGE'BUFFER,(9);    <<O9772>>44195000
              MESSAGE'BUFFER :=                                <<O9772>>44195500
                  MOVEAN(MESSAGE'BUFFER(1),DEVCLASS,8);        <<O9772>>44196000
              MESSAGE(M123,,,,,MESSAGE'BUFFER);                <<O9772>>44196500
              RETURNP := ERRLABEL;                             <<O9772>>44197000
              END;                                             <<O9772>>44197500
      RETURN;                                                  <<O9772>>44198000
      END; << SUBROUTINE CLASS'ACCESS'ERROR >>                 <<O9772>>44198500
                                                               <<O9772>>44199000
 << ------------------------------------------------------ >>  <<O9772>>44199500
 << Initialize the main device type and access range using >>  <<O9772>>44200000
 << the first logical device # in the given device class   >>  <<O9772>>44200500
 << entry pointed to by DCT.  Note: since we opened up a   >>  <<O9772>>44201000
 << second range of concurrent IO (device types 40-47), we >>  <<O9772>>44201500
 << default the access type to the old range = 2.  The same>>  <<O9772>>44202000
 << mechanism may be used when we decide to use up the     >>  <<O9772>>44202500
 << access ranges 6 and 7...                               >>  <<O9772>>44203000
 << ------------------------------------------------------ >>  <<O9772>>44203500
                                                               <<O9772>>44204000
 I := -1;                                                      <<O9772>>44204500
 NUM'DEVICES := DCT'NUM'DEVICES;                               <<O9772>>44205000
 ACCESS'COMBINATION := 0;                                      <<O9772>>44205500
 CURRENT'CLASS'ACCESS'TYPE := DCT'CLASS'ACC'TYPE;              <<O9772>>44206000
 LDT'INDEX := DCT(DCT'FIRST'LDEV) * LDTSIZE;                   <<O9772>>44206500
 DEVICE'TYPE1 := LDT'DEVICE'TYPE;                              <<O9772>>44207000
 ACCESS'RANGE1 := IF LDT'ACCESS'TYPE = CONINOUT'2              <<O9772>>44207500
                     THEN CONINOUT                             <<O9772>>44208000
                     ELSE LDT'ACCESS'TYPE;                     <<O9772>>44208500
                                                               <<O9772>>44209000
<< --------------------------------------------------------- >><<O9772>>44209500
<< Now compare device types and access types with other devic>><<O9772>>44210000
<< in the same class and then check for all possible combina->><<O9772>>44210500
<< tions of access types.  See the chart above for a descrip->><<O9772>>44211000
<< tion of legal and illegal combinations.                   >><<O9772>>44211500
<< --------------------------------------------------------- >><<O9772>>44212000
                                                               <<O9772>>44212500
WHILE (I:= I+1) < DCT'NUM'DEVICES DO                           <<O9772>>44213000
   BEGIN                                                       <<O9772>>44213500
   LDT'INDEX := DCT(DCT'FIRST'LDEV + I) * LDTSIZE;             <<O9772>>44214000
   LPDT'INDEX := DCT(DCT'FIRST'LDEV + I) * LPDTSIZE;           <<O9772>>44214500
   TYPE := LDT'DEVICE'TYPE;                                    <<O9772>>44215000
   SUBTYPE := LPDT'SUBTYPE;                                    <<O9772>>44215500
   IF DEVICE'TYPE1 <> TYPE                                     <<O9772>>44216000
      THEN ALL'SAME'TYPE := FALSE;                             <<O9772>>44216500
   ACCESS'RANGE2 := IF LDT'ACCESS'TYPE = CONINOUT'2            <<O9772>>44217000
                       THEN CONINOUT                           <<O9772>>44217500
                       ELSE LDT'ACCESS'TYPE;                   <<O9772>>44218000
   IF ACCESS'RANGE1 <> ACCESS'RANGE2                           <<O9772>>44218500
      THEN ALL'SAME'RANGE := FALSE;                            <<O9772>>44219000
                                                               <<O9772>>44219500
   CASE ACCESS'RANGE2 OF                                       <<O9772>>44220000
      BEGIN                                                    <<O9772>>44220500
                                                               <<O9772>>44221000
<<0>> BEGIN                                                    <<O9772>>44221500
      ACCESS'COMBINATION.DIRACC := 1;  <<set bit 15:1>>        <<O9772>>44222000
      IF NOT SDISC'TYPE(TYPE, SUBTYPE)                         <<O9772>>44222500
         THEN CANBESERIAL := FALSE;                            <<O9772>>44223000
      END;                                                     <<O9772>>44223500
                                                               <<O9772>>44224000
<<1>> ACCESS'COMBINATION.SERINP := 1;  <<set bit 14:1>>        <<O9772>>44224500
<<2>> ACCESS'COMBINATION.CONIO  := 1;  <<set bit 13:1>>        <<O9772>>44225000
<<3>> ACCESS'COMBINATION.NCONIO := 1;  <<set bit 12:1>>        <<O9772>>44225500
<<4>> ACCESS'COMBINATION.SEROUT := 1;  <<set bit 11:1>>        <<O9772>>44226000
                                                               <<O9772>>44226500
      END; << OF CASE >>                                       <<O9772>>44227000
     END;  << OF WHILE >>                                      <<O9772>>44227300
                                                               <<O9772>>44227500
   CASE ACCESS'COMBINATION OF                                  <<O9772>>44228000
      BEGIN                                                    <<O9772>>44228500
                                                               <<O9772>>44229000
<<0>>   CLASS'ACCESS'ERROR;                                    <<O9772>>44229500
<<1>>   DIRECT'ACCESS'CHECK;                                   <<O9772>>44230000
<<2>>   SERIAL'INPUT'CHECK;                                    <<O9772>>44230500
<<3>>   CLASS'ACCESS'ERROR;                                    <<O9772>>44231000
<<4>>   CONIO'ACCESS'CHECK;                                    <<O9772>>44231500
<<5>>   CLASS'ACCESS'ERROR;                                    <<O9772>>44232000
<<6>>   SERIAL'INPUT'CHECK;                                    <<O9772>>44232500
<<7>>   CLASS'ACCESS'ERROR;                                    <<O9772>>44233000
<<8>>   NONCONIO'ACCESS'CHECK;                                 <<O9772>>44233500
<<9>>   CLASS'ACCESS'ERROR;                                    <<O9772>>44234000
<<10>>  SERIAL'INPUT'CHECK;                                    <<O9772>>44234500
<<11>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44235000
<<12>>  NONCONIO'ACCESS'CHECK;                                 <<O9772>>44235500
<<13>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44236000
<<14>>  SERIAL'INPUT'CHECK;                                    <<O9772>>44236500
<<15>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44237000
<<16>>  SERIAL'OUTPUT'CHECK;                                   <<O9772>>44237500
<<17>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44238000
<<18>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44238500
<<19>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44239000
<<20>>  SERIAL'OUTPUT'CHECK;                                   <<O9772>>44239500
<<21>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44240000
<<22>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44240500
<<23>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44241000
<<24>>  SERIAL'OUTPUT'CHECK;                                   <<O9772>>44241500
<<25>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44242000
<<26>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44242500
<<27>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44243000
<<28>>  SERIAL'OUTPUT'CHECK;                                   <<O9772>>44243500
<<29>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44244000
<<30>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44245100
<<31>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44245200
<<32>>  CLASS'ACCESS'ERROR;                                    <<O9772>>44245300
                                                               <<O9772>>44245400
        END; << OF GIGANTIC CASE STATEMENT >>                  <<O9772>>44245500
END; << OF DETERMCTYP VERSION 2 >>                             <<O9772>>44245700
      CHECK DEVICE TABLE FOR NON-EXISTENT OUTPUT DEVICES,      <<D9191>>44264000
    MORE THAN ONE DDUMP DEVICE CLASS CONFIGURED, DUPLICATELY   <<D9191>>44265000
        EQUATE TERMDEVTYPE = 16, << TERMINAL DEVICE TYPE >>    <<O9772>>44290000
               ODIEETYPE   = 42; << ODIEE FOR ADV DS     >>    <<O9772>>44291000
       LOGICAL SUBROUTINE CONCURRENT'RANGES;                   <<O9772>>44355000
          BEGIN                                                <<O9772>>44355100
                                                               <<O9772>>44355200
          IF (LDT'ACCESS'TYPE = CONINOUT)   AND                <<O9772>>44355300
             (K = CONINOUT'2)               OR                 <<O9772>>44355400
             (LDT'ACCESS'TYPE = CONINOUT'2)  AND               <<O9772>>44355500
             (K = CONINOUT)  THEN                              <<O9772>>44355600
             CONCURRENT'RANGES := TRUE                         <<O9772>>44355700
          ELSE CONCURRENT'RANGES := FALSE;                     <<O9772>>44355800
          END;  << SUBROUTINE CONCURRENT'RANGES >>             <<O9772>>44355900
                                                               <<O9772>>44355910
                 ELSE IF TYPE = TERMDEVTYPE OR                 <<O9772>>44654000
                         TYPE = ODIEETYPE THEN                 <<O9772>>44655000
                         TYPE2 = ODIEETYPE    OR               <<O9772>>44659000
                         TYPE2 = ODIEETYPE   OR                <<O9772>>44673000
              IF TYPE = TERMDEVTYPE   OR  << TERMINAL >>       <<O9772>>44706000
                 TYPE = ODIEETYPE     OR  << ADV DS >>         <<O9772>>44707000
                 RS232'PRINTER(TYPE, SUBTYP)                   <<O9772>>44708000
                 THEN                                          <<O9772>>44710000
              IF DCTB'CLASS'NAME = "DDUMP   " THEN             <<D9191>>44859050
                BEGIN                                          <<D9191>>44859060
                  IF DCT'NUM'DEVICES > 1 THEN                  <<D9191>>44859070
                    BEGIN                                      <<D9191>>44859080
                      MESSAGE (M139); <<MORE THAN ONE DEVICE>> <<D9191>>44859090
                               <<CONFIGURED WITH CLASS DDUMP>> <<D9191>>44859100
                      ERRORS := TRUE;                          <<D9191>>44859110
                    END;                                       <<D9191>>44859120
                END;                                           <<D9191>>44859130
              THEN K := DIRACCESS                              <<O9772>>44866000
              IF K = DIRACCESS    OR    <<DIRECT ACCESS>>      <<O9772>>44878000
                 K = CONINOUT     OR    <<IO'CONCURRENT>>      <<O9772>>44880000
                 K = CONINOUT'2   THEN  <<IO'CONCURRENT 2>>    <<O9772>>44881000
                  IF LDT'ACCESS'TYPE <> K AND                  <<O9772>>44896000
                     NOT CONCURRENT'RANGES THEN                <<O9772>>44897000
                  IF LDEVRANGE = DIRACCESS THEN <<DIRECT'ACC>> <<O9772>>44954000
                  IF (K = SERINPUT) << SERIAL INPUT >>         <<O9772>>44970000
                     AND (LDEVRANGE = SEROUTPUT) <<SERIAL'OUT>><<O9772>>44972000
                     OR (K = SEROUTPUT) << SERIAL'OUTPUT>>     <<O9772>>44974000
                     AND ( LDEVRANGE = SERINPUT) <<SERIAL'IN>> <<O9772>>44976000
                     OR (K = NCONINOUT) << IO'NONCONCURRENT >> <<O9772>>44978000
                     AND (LDEVRANGE <> NCONINOUT) <<IO'NONC>>  <<O9772>>44980000
                     AND (LDEVRANGE <> CONINOUT) <<IO'CONCURR>><<O9772>>44982000
                     AND (LDEVRANGE <> CONINOUT'2)             <<O9772>>44983000
                IF LPDT'SUBTYPE<>0 AND                         <<L9772>>46078000
                   LPDT'SUBTYPE<>9 THEN                        <<L9772>>46079000
        BYTE POINTER PHONE,IDLIST,BCSLDTX=PHONE,btemp'ptr  ;   <<09309>>46464000
          ELSE  BEGIN                                          <<l9158>>47144000
                <<ADDING AN LDEV THAT DIDNT PREVIOUSLY EXIST>> <<l9158>>47146000
                IF LDEV > HLDEV                                <<l9158>>47148000
                        THEN HLDEV := LDEV;                    <<l9158>>47150000
                LPDT'INDEX := LDEV * LPDTSIZE;                 <<l9158>>47152000
                LPDT(LPDT'INDEX) := 0;                         <<l9158>>47154000
                MOVE LPDT(LPDT'INDEX + 1) :=                   <<l9158>>47156000
                     LPDT(LPDT'INDEX),(LPDTSIZE - 1);          <<l9158>>47158000
                END;                                           <<l9158>>47160000
            move btemp := " ";                                 <<09309>>47297000
            move btemp(1) := btemp,(71);   << blank it out >>  <<09309>>47297500
               if tl'term'type <> %37   then                   <<09309>>47308000
                  if tl'term'type <> %37   then                <<09309>>47325000
                     move * := " , ", 2;                       <<09309>>47326000
                  << add file name >>                          <<09309>>47327000
                  @btemp'ptr := tos;                           <<09309>>47327500
                  MOVE BTEMP'PTR := TL'ENTB(NAME'PTR), (8), 2; <<P1613>>47328000
                  scan btemp'ptr until " ", 1;                 <<09309>>47329000
                  << add group name >>                         <<09309>>47331000
                  @btemp'ptr := tos - 8;                       <<09309>>47333000
                  scan btemp'ptr until " ", 1;                 <<09309>>47333500
                  << add account name >>                       <<09309>>47335000
                  @btemp'ptr := tos - 8;                       <<09309>>47337000
                  scan btemp'ptr until " ", 1;                 <<09309>>47337500
                  if not (0 <= termtype <= %36)   then         <<09309>>47382000
          IF CSDEVICE AND                                      <<L9772>>47572000
             LPDT'SUBTYPE <> 9  THEN                           <<L9772>>47573000
            <<SKIP ALL CS-RELATED DIALOGUE FOR THE LANIC>>     <<L9772>>47575000
            <<DRIVER : TYPE = 17; SUBTYPE = 9           >>     <<L9772>>47575100
                    IF 0<=S0<=999 THEN                         << 9566>>47692000
          IF CSDEVICE AND LPDT'SUBTYPE = 9 THEN GO REQDVR;     <<L9772>>47781000
                DEL;     << remove scanned lgth from TOS >>    << 9124>>48051000
                TOS := @BINBUF; << prep TOS for GETSTR >>      << 9124>>48059000
          << THIS PREVENTS CS DEVICE DAT FROM CHANGING TO 16>> <<09268>>48634800
          IF NOT ( CSDEV)   THEN                               <<09268>>48635000
             DETERMCTYP(@SAMEPLACE,DCT,FALSE);                 <<09268>>48636000
                                                               <<09481>>48920100
            << GET THE LDEV ENTRIES >>                         <<09481>>48920200
            DVR'INDEX := LDEV * DVRSIZE;                       <<09481>>48920300
            LDT'INDEX := LDEV * LDTSIZE;                       <<09481>>48920400
            LDTX'INDEX := LDEV * LDTXSIZE;                     <<09481>>48920500
            LPDT'INDEX := LDEV * LPDTSIZE;                     <<09481>>48920600
                                                               <<09481>>48920700
          MOVE DEVCLASS := 16(%40);                            <<01680>>49109000
          IF = AND NOT LAST THEN GO TO REQACLS ;               <<01680>>49113000
          <<DETECT WHEN CLASS NAME IS ENTERED ONLY BY A CR>>   <<01680>>49113100
COMMENT                                                        <<01303>>49165010
                 Device Class Table/Terminal Descriptor Table           49165020
                                                                        49165030
                         DST %50    SIR %50                             49165040
            ____      _______________________                           49165050
Low Memory  ^        |      Segment Size     |  0  DCTH'SEGMENT'SIZE    49165060
               D     |-----------------------|                          49165070
               C     |  DCT Entry Size (VAR.)|  1  DCTH'ENTRY'SIZE = 1  49165080
               T     |-----------------------|                          49165090
                     |   # of DCT entries    |  2  DCTH'NUM'DCT'ENTRIES 49165100
               H     |-----------------------|                          49165110
               E     | DCT Base seg relative |  3  DCTH'DCT'BASE = 6    49165120
               A     |-----------------------|                          49165130
               D     |   # of TDT entries    |  4  DCTH'NUM'DCT'ENTRIES 49165140
               E     |-----------------------|                          49165150
            v  R     | TDT Base seg relative |  5  DCTH'TDT'BASE        49165160
            ----     |-----------------------|                          49165170
                     |                       |  6                       49165180
                     |         ASCII         |  7                       49165190
                     |       Class Name      | 10                       49165200
                     |                       | 11                       49165210
                     |-----------------------|                          49165220
                     | cyl ptr    | acc type | 12                       49165230
DCT'NEXT'ENTRY =     |-----------------------|                          49165240
DCT'NUM'DEVICES + 6  |     # of devices      | 13  DCT'NUM'DEVICES      49165250
                     |-----------------------|                          49165260
                     |         ldev          | 14  DCT'FIRST'LDEV       49165270
                     :                       :                          49165280
                     :                       :                          49165290
                     |                       |                          49165300
                     |  Last DCT Entry ldev  |                          49165310
                     |***********************|     Base of TDT or the   49165320
                     |                       |  0  beginning of the     49165330
                     |       File Name       |  1  Volume Table.  The   49165340
                     |                       |  2  TDT is not required. 49165350
                     |                       |  3                       49165360
                     |-----------------------|                          49165370
                     |                       |  4                       49165380
                     |       Group Name      |  5                       49165390
                     |                       |  6                       49165400
                     |                       |  7                       49165410
                     |-----------------------|                          49165420
                     |                       | 10                       49165430
                     |       Account Name    | 11                       49165440
                     |                       | 12                       49165450
                     |                       | 13                       49165460
TDT'NEXT'ENTRY =     |-----------------------|                          49165470
TDT'NUM'DEVICES + 13 | # of devices in class | 14                       49165480
                     |-----------------------|                          49165490
                     |        ldev           | 15                       49165500
                     :                       :                          49165510
                     :                       :                          49165520
                     | Last TDT Entry Ldev   |                          49165530
High Memory          |-----------------------|                          49165540
END OF COMMENT;                                                         49165550
                                                                        49165560
          <<  I is a count of the number of ldevs entered.  >> <<01303>>49179000
                                                               <<01303>>49183500
          <<  Push ldev onto TOS.  TOS will be used as an   >> <<01303>>49183510
          <<  integer array "IAS0" later on.                >> <<01303>>49183520
                                                               <<01303>>49215500
          << Search thru the device classes to see if the   >> <<01303>>49215510
          << entered name matches an existing name.  If     >> <<01303>>49215520
          << there is a match, jump to OLDENT.  Otherwise   >> <<01303>>49215530
          << @DCT will be pointing to the next location     >> <<01303>>49215540
          << for the new class name.                        >> <<01303>>49215550
                                                               <<01303>>49227500
          <<  Now we want to increase the table by one      >> <<01303>>49227510
          <<  entry size, plus space for all the ldevs      >> <<01303>>49227520
          <<  with the class name.                          >> <<01303>>49227530
                                                               <<01303>>49229510
          << @DCT currently points to the beginning of the  >> <<01303>>49229520
          << TDT.  MOVEDLTABLES moves all the tables below  >> <<01303>>49229530
          << DCT down. To make room for the new entry, we   >> <<01303>>49229540
          << need to adjust the pointer to point at the     >> <<01303>>49229550
          << new end of the the Device Class Table.         >> <<01303>>49229560
                                                               <<01303>>49235500
          <<  Fill the entry's header information.          >> <<01303>>49235510
                                                               <<01303>>49243500
          <<  TOS will now point to the 1st ldev location.  >> <<01303>>49243510
                                                               <<01303>>49245500
          << Use X as subscript variable for IAS0 array.    >> <<01303>>49245510
                                                               <<01303>>49247500
          <<  Put ldevs from TOS to entry's ldevs location  >> <<01303>>49247510
          <<  Increment TOS to point to next ldev location  >> <<01303>>49247520
                                                               <<01303>>49257500
          <<  Update the DCT Header.                        >> <<01303>>49257510
          << Check each ldev entered to see if it matches   >> <<01303>>49273500
          << any previously existing ldev for this class.   >> <<01303>>49273510
          << M is the counter for existing ldevs. K is the  >> <<01303>>49273520
          << counter for the entered ldevs.                 >> <<01303>>49273530
                                                               <<01303>>49317510
          << DEST points to the beginning of the TDT - 1.   >> <<01303>>49317520
          << This is the last location of the hole created  >> <<01303>>49317530
          << for additional ldevs to be added.  SOURCE      >> <<01303>>49317540
          << points to the last ldev of the last class.     >> <<01303>>49317550
          << Count is the number of words between the last  >> <<01303>>49317560
          << ldev of the target class and the last ldev     >> <<01303>>49317570
          << of the last class.  MOVE copies everything     >> <<01303>>49317580
          << from SOURCE thru the last ldev of the target   >> <<01303>>49317590
          << class to DEST. This creates a hole after the   >> <<01303>>49317600
          << last ldev of the target class.                 >> <<01303>>49317610
          @DEST := (@DCT'HEAD + DCTH'TDT'BASE) + I - 1;        <<01303>>49322000
          << Put the ldevs entered on TOS into the class    >> <<01303>>49331500
          << entry.  TOS is used as an integer array IAS0   >> <<01303>>49331510
          << and a pointer PS0 at the same time.  PS0 is    >> <<01303>>49331520
          << location to put the value of IAS0(X).          >> <<01303>>49331530
                                                               <<01303>>49345500
          << Update the DCT Header information.             >> <<01303>>49345510
                                                               <<01303>>49351500
          << Reset TOS by putting the number of items to POP>> <<01303>>49351510
          << off on TOS and then removing them using SUBS 0.>> <<01303>>49351520
   LDT'ACCESS'TYPE = DIRACCESS THEN  << DIRECT'ACCESS >>       <<O9772>>51148000
      -1,24,56,-1,56,119,-1,-1,78,-1,      << AVAILABLE BY  >> <<09138>>51868000
      LDT'INDEX := LDEV * LDTSIZE;                             <<01203>>52450000
      ABS(SYSVDSENTRY) := CURR'VOL'MAP + STARTVDS -            << 1422>>52662000
      ABS(SYSVDSMAP) := CURR'VOL'MAP+STARTVDS-SYSBASE;         << 1422>>52666000
        SYSENTRY := ABS(SYSVDSENTRY);                          << 1422>>52672000
        SYSMAP := ABS(SYSVDSMAP);                              << 1422>>52674000
  ABS(SYSVDSENTRY) := SYSENTRY;                                << 1422>>52968000
  ABS(SYSVDSMAP) := SYSMAP;                                    << 1422>>52970000
  << 31*>>         0, << DATA BUFFER ABS ADDRESS     >>        << 1422>>55906000
  <<  4*>>         0, << COMMAND BUFFER ABS ADDRESS  >>        << 1422>>55938000
  << 13*>>         0, << DATA BUFFER ABS ADDRESS     >>        << 1422>>55956000
<< COMPUTE ABS JUMP TARGET >>                                  << 1422>>56158000
      TEMP1 := ABS(-1); << SAVE LAST LOCATION >>               << 1422>>56920000
      ABS(-1) := %30000;<< REPLACE WITH SIO END INSTRUCTON     << 1422>>56922000
      TEMP2 := ABS(0);  << SAVE CST POINTER >>                 << 1422>>56924000
         ABS(0) := TEMP2;                                      << 1422>>56966000
      ABS(-1) := TEMP1; << REPLACE LAST LOCATION >>            << 1422>>56970000
          SBANK := ABS(ABS(QI)-5);                             << 1422>>57000000
          ABS( CHANPROG) := S0+INFOSIZE;                       << 1422>>57016000
            ABS(DRTBANK):=0;  <<DRT TAB IN BANK 0 >>           << 1422>>57030000
            ABS(DRTADDR):=0;                                   << 1422>>57032000
          ABS(ABS(QI)-6) := ABS(ABS(QI)-10); <<S>>             << 1422>>57116000
                COREADR;       <<ABS ADDRESS OF CODE SEGMENT>> << 1422>>57348000
          TOS := ABS(DBBANK);                                  << 1422>>57350000
          TOS := ABS(DB);                                      << 1422>>57352000
              X := TOS&LSL(2)+ABS(CSTP);                       << 1422>>57398000
              ABS(X).(0:1) := 1;  <<ABSENCE BIT>>              << 1422>>57400000
          COREADR := TOS;  <<ABS CORE ADDRESS>>                << 1422>>57414000
          TOS := ABS(ABS(CSTP)+ABSCST&LSL(2));                 << 1422>>57416000
          ABS(X) := TOS;                                       << 1422>>57422000
          ABS(X:=X+3) := TOS;                                  << 1422>>57426000
          ABS(X:=X-1) := TOS;  <<PUT CORE ADDRESS IN CST ENTRY><< 1422>>57428000
                 ELSE IF CTAB(CSTNUM) > 192  <<OLD CST LIMIT>> << 1422>>57590000
                         THEN 192                              << 1422>>57592000
                      ELSE CTAB(CSTNUM);                       << 1422>>57594000
    <<  4M       2M         32        5                     >> <<t1776>>57678000
    <<  8M       4M         64        6       SERIES-37     >> <<t1776>>57680000
    <<  16M      8M         128       7       SERIES-45     >> <<W1962>>57682000
    <<  32M      16M        256       8       ICF-44'55     >> <<t1776>>57684000
    <<  8G       4G         65536     16                    >> <<t1776>>57700000
<< 0>>  64, 80, 96, 128, 160, 192, 224, 256, 384, 512, 768,    <<t1776>>57714000
<<11>>  1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, 2048,  <<t1776>>57716000
<<20>>  2176, 2304, 2432, 2560, 2688, 2816, 2944, 3072, <<27>> <<t1776>>57718000
<<28>>  3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096, <<35>> <<t1776>>57720000
<<36>>  4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192, <<43>> <<t1776>>57720100
<<44>>  8704, 9216, 9728,10240,10752,11264,11776,12288, <<51>> <<t1776>>57720200
<<52>> 12800,13312,13824,14336,14848,15360,15872,16384; <<59>> <<t1776>>57720300
        <<NOTE: AS IMPLEMENTED HERE, THE SERIES 64 IS >>       <<t1776>>57730000
        << RESTRICTED TO 256 BANKS CAPABILITY >>               <<t1776>>57732000
        INTEGER ARRAY MAXCPU'COREX (0:8) = PB :=               <<t1776>>57736000
           0,   <<CPU-0   SERIES-I  128Kb>>                    <<t1776>>57738000
           7,   <<CPU-1   SERIES-II  512kb   4 BANKS (2)  >>   <<t1776>>57740000
          11,   <<CPU-2   SERIES-33  2Mb    16 BANKS (4)  >>   <<t1776>>57742000
          11,   <<CPU-3   SERIES-III 2Mb    16 BANKS (4)  >>   <<t1776>>57744000
          35,   <<CPU-4   S/44 & 58  8Mb   128 BANKS (6)  >>   <<t1776>>57746000
          43,   <<CPU-5   SERIES 68 16Mb   128 BANKS (7)  >>   <<U2271>>57748000
          19,   <<CPU-6   SERIES-37  4Mb    64 BANKS (5)  >>   <<t1776>>57750000
          43,   <<CPU-7   SERIES-45 16Mb   128 BANKS (7)  >>   <<U2271>>57750500
          43;   <<CPU-8   SERIES-35 16Mb   128 BANKS (7)  >>   <<W1962>>57751000
   IF LOGICALMAPPING THEN                                      << 1422>>58103000
      GETNEWVAL(3001, CTAB(CSTNUM), 80, 2048)                  << 1422>>58104000
   ELSE                                                        << 1422>>58104010
      BEGIN  << HARDWARE LIMITED TO %300 >>                    << 1422>>58104020
      IF CTAB(CSTNUM) > 192 THEN   << EXCEEDS OLD CST LIMIT >> << 1422>>58104030
         BEGIN                                                 << 1422>>58104040
         BLANKLINE;                                            << 1422>>58104050
         MESSAGE(2480, 192);                                   << 1422>>58104060
         BLANKLINE;                                            << 1422>>58104070
         CTAB(CSTNUM) := 192;                                  << 1422>>58104080
         END;                                                  << 1422>>58104090
                                                               << 1422>>58104100
      GETNEWVAL(3001, CTAB(CSTNUM), 80, 192);                  << 1422>>58104110
      END;   << HARDWARE LIMITED TO %300 >>                             58104120
           %(16)214,   3,     10,   "MH7937U0",  40,           <<n1366>>58310500
           %(16)215,   3,      9,   "MH7936U0",  35,           <<n1366>>58310600
           %(16)22A,   3,     11,   "MH7957U0",  15,           <<f2354>>58310700
           %(16)22B,   3,     12,   "MH7958U0",  20,           <<f2354>>58310800
       INTEGER  TYPE,       << DEVICE TYPE >>                  <<C9454>>58334000
                SUBTYP,     << DEVICE SUBTYPE >>               <<C9454>>58336000
                 SIZE,      << TEMP >>                         <<C9454>>58338000
                 LDEV;                                         <<C9454>>58339000
        LOGICAL UPDATE'VE'VERSION := FALSE;                    <<C9454>>58341000
        EQUATE SDISC=31,FDISC=7, MAGTAPETYPE = 24;             <<C9454>>58342000
        3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096,        <<09311>>58356000
        4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192,        <<09311>>58356100
        8704, 9216, 9728,10240,10752,11264,11776,12288,        <<09311>>58356200
       12800,13312,13824,14336,14848,15360,15872,16384;        <<09311>>58356300
        <<3968>>%17400000D,<<4096K>>%20000000D,                <<09311>>58398000
        <<4608>>%22000000D,<<5120K>>%24000000D,                <<09311>>58398100
        <<5632>>%26000000D,<<6144K>>%30000000D,                <<09311>>58398200
        <<6656>>%32000000D,<<7168K>>%34000000D,                <<09311>>58398300
        <<7680>>%36000000D,<<8192K>>%40000000D,                <<09311>>58398400
        <<8704>>%42000000D,<<9216K>>%44000000D,                <<09311>>58398500
        <<9728>>%46000000D,<<10240>>%50000000D,                <<09311>>58398600
        <<10752>>%52000000D,<<11264>>%54000000D,               <<09311>>58398700
        <<11776>>%56000000D,<<12288>>%60000000D,               <<09311>>58398800
        <<12800>>%62000000D,<<13312>>%64000000D,               <<09311>>58398900
        <<13824>>%66000000D,<<14336>>%70000000D,               <<09311>>58399000
        <<14848>>%72000000D,<<15360>>%74000000D,               <<09311>>58399100
        <<15872>>%76000000D,<<16384>>%100000000D;              <<09311>>58399200
        ARRAY SYSDISC'DRT(0:8)=PB := <<DEFAULT SYSDISC DRTS>>  <<U2271>>58436000
          5,4,49,4,89,25,33,33,33;<<FOR SERIES I,II,33,III, >> <<U2271>>58438000
                                  << 44,55,37,45,35         >> <<U2271>>58440000
       << ------------------------------------------- >>       <<i9137>>58488100
       << Define bits for last load option used...    >>       <<i9137>>58488200
       << ------------------------------------------- >>       <<i9137>>58488300
                                                               <<i9137>>58488400
        EQUATE                                                 <<i9137>>58489000
            L'NEW             =  1,                            <<i9137>>58489010
            L'SPR'COM'REST    =  2,                            <<i9137>>58489100
            L'REL'ACCTS       =  3,                            <<i9137>>58489200
            L'REL'NULL        =  4,                            <<i9137>>58489300
            L'UPDATE          =  5,                            <<i9137>>58489400
            L'COLD            =  6;                            <<i9137>>58489500
                                                               <<i9137>>58489600
             ABS(ABSFLAGS).(14:1) := 1; << 7976 NEW REQ >>     << 1422>>58526000
          ISTR;  << Initialize System Table Registers >>       <<01403>>58533000
            ABS(DRTBANK):=0;  <<DRT TAB IN BANK 0 >>           << 1422>>58548000
            ABS(DRTADDR):=0;                                   << 1422>>58550000
          ABS(DB) := TOS;                                      << 1422>>58578000
          ABS(DBBANK) := TOS;                                  << 1422>>58580000
                ABS(GETDRT(SYSTAPEDRT,0)-2) <> %600            << 1422>>58758000
         PUSH(DB);             << GET ABS ADDRESS >>           << 1422>>59240000
$EDIT VOID=59453240                                                     59452200
             UPDATE'VE'VERSION := TRUE;                        <<C9454>>59457000
<< ------------------------------------------------------ >>   <<C9454>>59529000
<< In case of conversion from VE to T-MIT, convert auto   >>   <<C9454>>59529020
<< reply bit...                                           >>   <<C9454>>59529040
<< ------------------------------------------------------ >>   <<C9454>>59529060
           IF UPDATE'VE'VERSION THEN                           <<C9454>>59529070
              BEGIN                                            <<C9454>>59529080
              LDEV := 0;                                       <<C9454>>59529090
              WHILE (LDEV := LDEV + 1) <= HLDEV DO             <<C9454>>59529100
                  BEGIN                                        <<C9454>>59529110
                  LDT'INDEX := LDEV * LDTSIZE;                 <<C9454>>59529120
                  LPDT'INDEX:= LDEV * LPDTSIZE;                <<C9454>>59529130
                  TYPE := LDT'DEVICE'TYPE;                     <<C9454>>59529140
                  IF TYPE = MAGTAPETYPE THEN                   <<C9454>>59529300
                     LPDT'AUTO'ALLOC :=                        <<C9454>>59529310
                     LPDT'TAPE'AUTO'ALLOC;                     <<C9454>>59529320
                  END;                                         <<C9454>>59529330
              END;                                             <<C9454>>59529340
                                                               <<09269>>59584100
       << ------------------------------------------- >>       <<09269>>59584200
       << If this is a load from tape, initialize the >>       <<09269>>59584300
       << last load from tape option in the comm array>>       <<09269>>59584400
       << and reset the appropriate bit.              >>       <<09269>>59584500
       << ------------------------------------------- >>       <<09269>>59584600
                                                               <<09269>>59584700
       IF LOADFROMTAPE THEN                                    <<09269>>59584800
       BEGIN                                                   <<09269>>59584810
       IF UPDATE THEN                                          <<09269>>59584900
          COMM(LASTLOADOPT) := L'UPDATE                        <<09269>>59585000
       ELSE IF OPT=COLD THEN                                   <<09269>>59585100
          COMM(LASTLOADOPT) := L'COLD                          <<09269>>59585200
       ELSE IF RELOAD THEN                                     <<09269>>59585300
          BEGIN                                                <<09269>>59585400
          IF ACCTSONLY THEN                                    <<09269>>59585500
             COMM(LASTLOADOPT) := L'REL'ACCTS                  <<09269>>59585600
          ELSE IF COMM(FILESDUMPED) = 0 THEN                   <<09269>>59585700
             COMM(LASTLOADOPT) := L'REL'NULL                   <<09269>>59585800
          ELSE IF STARTTYPE = CBNEW THEN                       <<09269>>59585900
             COMM(LASTLOADOPT) := L'NEW                        <<09269>>59585920
          ELSE COMM(LASTLOADOPT) := L'SPR'COM'REST ;           <<09269>>59585940
          END;                                                 <<09269>>59585960
      END;                                                     <<09269>>59585980
                                                               <<09269>>59585990
                   GETNEWVAL(M2007,TEMP,256,8192);             <<01302>>59628000
          GETNEWVAL(M2007,TEMP,256,8192);                      <<01302>>59664000
          <<**WARNING** DO NOT INTERRUPT THE STARTUP PROCESS>> <<*9190>>59683000
          <<AFTER THIS TIME.  OTHERWISE YOU MAY BE FORCED TO>> <<*9190>>59683010
          <<DO A RELOAD AND THAT IS NO FUN.                 >> <<*9190>>59683020
                                                               <<*9190>>59683030
          blankline;                                           << 9427>>59683035
          MESSAGE(M2474);                                      <<*9190>>59683040
          MESSAGE(M2475);                                      << 9427>>59683042
          blankline;                                           << 9427>>59683044
                                                               <<*9190>>59683050
                 LDT'ACCESS'TYPE = DIRACCESS THEN <<DIRECT'AC>><<O9772>>59888000
<< ------------------------------------------------------ >>   <<i9137>>60165000
<< ADDVOL only changes hvol.  Therefore, equate mvol to   >>   <<i9137>>60165100
<< hvol so that we won't try to delete a PV area that     >>   <<i9137>>60165200
<< doesn't exist and subsequently add an extra entry...   >>   <<i9137>>60165300
<< See below                                              >>   <<i9137>>60165310
<< ------------------------------------------------------ >>   <<i9137>>60165400
                                                               <<i9137>>60165500
                MVOL := HVOL;                                  <<i9137>>60165600
               LDT'ACCESS'TYPE = DIRACCESS THEN <<DIRECT'ACC>> <<O9772>>60602000
              VTAB(INDEX+VTAB12).VTABLDEV := LDEV;             <<L2243>>61181000
              << THIS LINE IS TO FIX SR 5000016014>>           <<L2243>>61181010
                                                                        61181100
              <<THE CODE LINE ABOVE IS COPIED FROM LINE 61406>><<L2243>>61181200
              <<TO THIS AREA TO FIX THE INVALID LDEV NO.    >> <<L2243>>61181300
              <<OBTAINED FROM THE VOLUME TABLE DUE TO THE   >> <<L2243>>61181400
              <<INITIALIZATION OF ALL LDEVS TO 0 AT LINE    >> <<L2243>>61181500
              <<60588. THIS WILL FIX THE PROBLEM THAT INITIAL>><<L2243>>61181600
              <<CAN'T RECOGNIZE THE DEFECTIVE TRACKS IN THE  >><<L2243>>61181700
              <<VIRTUAL MEMORY AND WHETHER TO RECOVER LOST >>  <<L2243>>61181800
              <<DISC SPACE ACCORDINGLY >>                      <<L2243>>61181900
              VTAB(INDEX+VTAB12).VTABLDEV := LDEV;                      61406000
              LDT'ACCESS'TYPE = DIRACCESS THEN << DIRECT'ACC>> <<O9772>>61880000
                                                               <<01679>>61912010
   EQUATE  VMIND1 = 1 ,                                        <<01679>>61912020
           VMIN   = 0 ,                                        <<01679>>61912030
           VMAX   = 255 ;                                      <<01679>>61912040
   INTEGER ARRAY                                               <<C9394>>61912100
      TABLE(*)   = DB+0;                                       <<C9394>>61912200
      OWN BYTE ARRAY BBUF (0:10) := 9,"FOR LDEV# ";            <<01679>>61912300
      MEMADR,                                                  <<C9394>>61915000
      INPUT'VAL ,                                              <<01679>>61951000
      ERR,                                                     <<C9394>>61952000
      DSTNR,                                                   <<C9394>>61953000
        3200, 3328, 3456, 3584, 3712, 3840, 3968, 4096,        <<09311>>62042000
        4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192,        <<09311>>62042100
        8704, 9216, 9728,10240,10752,11264,11776,12288,        <<09311>>62042200
       12800,13312,13824,14336,14848,15360,15872,16384;        <<09311>>62042300
        <<3968>>%17400000D,<<4096K>>%20000000D,                <<09311>>62084000
        <<4608>>%22000000D,<<5120K>>%24000000D,                <<09311>>62084100
        <<5632>>%26000000D,<<6144K>>%30000000D,                <<09311>>62084200
        <<6656>>%32000000D,<<7168K>>%34000000D,                <<09311>>62084300
        <<7680>>%36000000D,<<8192K>>%40000000D,                <<09311>>62084400
        <<8704>>%42000000D,<<9216K>>%44000000D,                <<09311>>62084500
        <<9728>>%46000000D,<<10240>>%50000000D,                <<09311>>62084600
        <<10752>>%52000000D,<<11264>>%54000000D,               <<09311>>62084700
        <<11776>>%56000000D,<<12288>>%60000000D,               <<09311>>62084800
        <<12800>>%62000000D,<<13312>>%64000000D,               <<09311>>62084900
        <<13824>>%66000000D,<<14336>>%70000000D,               <<09311>>62085000
        <<14848>>%72000000D,<<15360>>%74000000D,               <<09311>>62085100
        <<15872>>%76000000D,<<16384>>%100000000D;              <<09311>>62085200
                                                               <<C9394>>62085300
   SUBROUTINE APPEND'TO'INITIAL;                               <<C9394>>62085310
   BEGIN                                                       <<C9394>>62085320
      SIZE := DST(DSTNR*4).(3:13)*4;                           <<C9394>>62085330
      MEMADR := INITIAL'MEMADR;                                <<C9394>>62085340
      INITIAL'MEMADR := INITIAL'MEMADR - D'L(SIZE));           <<C9394>>62085350
      IF MEMADR&DLSR(16) <> INITIAL'MEMADR&DLSR(16) THEN       <<C9394>>62085360
         BEGIN << CROSSED OVER A BANK BOUNDARY >>              <<C9394>>62085370
         TOS := INITIAL'MEMADR;                                <<C9394>>62085380
         S0 := -SIZE-2;                                        <<C9394>>62085390
         INITIAL'MEMADR := TOS;                                <<C9394>>62085400
         END;                                                  <<C9394>>62085410
      TOS := INITIAL'MEMADR;                                   <<C9394>>62085420
      ASMB( XCHD );                                            <<C9394>>62085430
      MFDS(TABLE,DSTNR,0,SIZE);                                <<C9394>>62085440
      SET( DB );                                               <<C9394>>62085450
      INSERTDST(INITIAL'MEMADR,DSTNR,SIZE,0);                  <<C9394>>62085460
   END;                                                        <<C9394>>62085470
                                                               <<C9394>>62085480
  MESSAGE(-M2217,VMAX);  << ENTER VOLUME, SIZE  >>             <<01679>>62114000
                               << IN KILO SECTORS    >>        <<01679>>62115000
      LDEV := GETLDEV (VOLUME) ;                               <<01679>>62163000
    INPUT'VAL := INTEGER ( SECTORS );                          <<01679>>62197000
    IF (LDEV=1) AND (INPUT'VAL = VMIN) THEN                    <<01679>>62197100
         BEGIN                                                 <<01679>>62197200
         MESSAGE(M2458,VMIND1,VMAX,LDEV,,BBUF);                <<01679>>62197300
         GO TO REDO;                                           <<01679>>62197400
         END                                                   <<01679>>62197500
   ELSE IF (LDEV=1) AND (INPUT'VAL>VMAX) THEN                  <<01679>>62197600
        BEGIN                                                  <<01679>>62197700
        MESSAGE(M2458,VMIND1,VMAX,LDEV,,BBUF);                 <<01679>>62197800
        GO TO REDO;                                            <<01679>>62197900
        END                                                    <<01679>>62197910
   ELSE IF (INPUT'VAL < VMIN ) OR (INPUT'VAL >VMAX) THEN       <<01679>>62197920
        BEGIN                                                  <<01679>>62197930
        MESSAGE( M2458,VMIN,VMAX,LDEV,,BBUF);                  <<01679>>62197940
        GO TO REDO;                                            <<01679>>62197950
        END;                                                   <<01679>>62197960
  IF LOADFROMTAPE THEN                                         <<i9137>>62359000
       COMM(SYSTAPELDEV') := COLDLOADLDEV; <<SET BY CHECKDEV>> <<i9137>>62360000
   I    := 1;  << set I to 1 rather than 0; otherwise  >>      <<01740>>62374000
               << we will loop through the code for    >>      <<01740>>62374100
               << MAXSPOOLF + 1 times and possibly     >>      <<01740>>62374200
               << allow LDEV and HLDEV to be > 1023.   >>      <<01740>>62374300
                                                               << 9174>>62490000
REQMKILS:         GETNEWVAL'DOUB( M2353, DCTAB0(KILOSECTS),    << 9174>>62492000
                                  0D, 777777D);                << 9174>>62494000
$EDIT VOID=62516000                                            << 9174>>62496000
                     NRSECT := DOUBLE((TCSTINFO(I*5)+127)/128);<<S9171>>62798000
                     TCSTINFO(X) := 0; << FLAG SPACE RELEASED>><<S9171>>62798333
                     DISC(WRITE,SYSDISC,D'L(INFOSECTOR)),INFO, <<S9171>>62798666
                        INFOSIZE);                             <<S9171>>62799000
            <<  DESTORY SOFT DUMP COLD LOAD SECTOR  >>         <<S9387>>62942100
            <<  THIS WILL PREVENT US FROM WRITING   >>         <<S9387>>62942200
            <<  32K OF MEMORY TO WHERE THE SDFLOAD  >>         <<S9387>>62942300
            <<  FILE WAS BEFORE THIS LOAD.          >>         <<S9387>>62942400
            ZEROBUF( BUF, 128);                                <<S9387>>62942500
            DISC(WRITE,SYSDISC,3D,BUF,128);                    <<S9387>>62942600
                                                               <<S9387>>62942700
      CLDPNTR(1) := D'L(ABS(CSTP)));                           << 1422>>63000000
      CLDPNTR(1) := D'L(ABS(QI)-BOOTQI));                      << 1422>>63062000
            BUF := ABS(CSTP);  << CST PNTR >>                  << 1422>>63130000
            BUF(QI) := ABS(QI);                                << 1422>>63132000
            BUF(ZI) := ABS(ZI);                                << 1422>>63134000
            BUF(DB) := ABS(DB);                                << 1422>>63140000
            BUF(DBBANK) := ABS(DBBANK);                        << 1422>>63142000
            BUF(BOOTQI+2) := ABS(DB);<<DISPATCHER DB>>         << 1422>>63156000
            BUF(BOOTQI+1) := ABS(DBBANK);<<DISP BANK>>         << 1422>>63158000
            BUF(BOOTQI-4) := ABS(DB);                          << 1422>>63160000
            BUF(BOOTQI-5) := ABS(DBBANK);                      << 1422>>63162000
          ISTR;  << Initialize System Table Registers >>       <<01403>>63755000
             ABS(DRTBANK) := 0;                                << 1422>>63872000
             ABS(DRTADDR) := 0;                                << 1422>>63874000
             IF LDT'ACCESS'TYPE = DIRACCESS AND  <<DIRECT'ACC>><<O9772>>63946000
      ELSE IF CTAB(CSTNUM) > 192 THEN 192  << OLD CST LIMIT >> << 1422>>63996000
      ELSE CTAB(CSTNUM);                                       << 1422>>63997000
   ENPF;  << Enable Performance Features >>                    <<X1714>>64071000
   <<------------------------------------>>                    <<F9416>>64088100
   <<   SETUP DFS CACHING DATA SEGMENT   >>                    <<F9416>>64088200
   <<------------------------------------>>                    <<F9416>>64088300
                                                               <<F9416>>64088400
   DSTNR := DFSCACHECTL( CACHE'INIT);                          <<F9416>>64088500
   IF <> THEN ERRMESSAGE( M336, DSTNR);                        <<F9416>>64088600
   APPEND'TO'INITIAL;                                          <<F9416>>64088700
                                                               <<F9416>>64088800
   IF RELOAD OR RECOVERY THEN                                  <<F9416>>64088900
      BEGIN                                                    <<F9416>>64089000
      ERR := DFSCACHECTL( CACHE'INTEGOFF);                     <<F9416>>64089100
      IF <> THEN ERRMESSAGE( M336, ERR);                       <<F9416>>64089200
      END;                                                     <<F9416>>64089300
          ABS(DIRDISCADR2) := TOS;                             << 1422>>64140000
          ABS(X:=X-1) := TOS;                                  << 1422>>64142000
          << INITIALIZE DIRECTORY CACHE >>                     <<C9394>>64204100
          DSTNR := DIRCACHECTL( CACHE'INIT);                   <<C9394>>64204200
          IF <> THEN ERRMESSAGE( M279, DSTNR);                 <<C9394>>64204300
          APPEND'TO'INITIAL;                                   <<C9394>>64204400
          IF RELOAD THEN                                       <<C9394>>64204500
             BEGIN                                             <<C9394>>64204600
             ERR := DIRCACHECTL( CACHE'INTEGOFF);              <<C9394>>64204700
             IF <> THEN ERRMESSAGE( M279, ERR);                <<C9394>>64204800
             END;                                              <<C9394>>64204900
          ABS(COLD'LOAD'ID) := TOS;                            << 1422>>64212000
          ABS(LOGFILENUM) := LBUF(LOG'FILE'NUM');              << 1422>>64230000
                                                               <<B2222>>64230200
          IF RELOAD   THEN                                     <<B2222>>64230300
             BEGIN                                             <<B2222>>64230400
             << Update sector %40 word %30 with creation date>><<B2222>>64230500
             LBUF(24):=COMM(41);    << of tape SR# 5000-93823>><<B2222>>64230600
             COMM(41):=0;                                      <<B2222>>64230700
             END;                                              <<B2222>>64230800
              ERR := DIRCACHECTL( CACHE'INTEGOFF);             <<C9394>>64253000
              IF <> THEN ERRMESSAGE( M279, ERR);               <<C9394>>64253100
              ERR := DIRCACHECTL( CACHE'INTEGON);              <<C9394>>64283000
              IF <> THEN ERRMESSAGE( M279, ERR);               <<C9394>>64283100
     ERR := DFSCACHECTL( CACHE'INTEGON);                       <<F9416>>64283200
     IF <> THEN ERRMESSAGE( M336, ERR);                        <<F9416>>64283300
                                                               <<F9416>>64283400
   ERR,                                                        <<C9394>>64343000
          ERR := DIRCACHECTL( CACHE'INTEGOFF);                 <<C9394>>64949000
          IF <> THEN ERRMESSAGE( M279, ERR);                   <<C9394>>64949100
          IF NOT RELOAD THEN                                   <<C9394>>64973000
             BEGIN                                             <<C9394>>64973100
             ERR := DIRCACHECTL( CACHE'INTEGON);               <<C9394>>64973200
             IF <> THEN ERRMESSAGE( M279, ERR);                <<C9394>>64973300
             END;                                              <<C9394>>64973400
      ILTLOC,         << ABS LOCATION OF CURRENT ILT >>        << 1422>>65238000
      DITLOC,         << ABS LOCATION OF CURRENT DIT >>        << 1422>>65240000
      TABLOC,         << ABS ADDRESS OF CURRENT TABLE >>       << 1422>>65242000
      MEMLOC,         << ABS MEMORY LOCATION  >>               << 1422>>65244000
      ABSPRI,        << ABS PRIORITY >>                        << 1422>>65266000
                                                               <<W1962>>65469000
          << ----------------------------------------- >>      <<W1962>>65469100
          <<    Protect WCS file from being purged.    >>      <<W1962>>65469200
          << ----------------------------------------- >>      <<W1962>>65469300
                  ABS(INITTCP):=TABADR-SYSBASE;                << 1422>>66894000
               ABS(POINTERADR+LOGICAL(K)):=DRIVERADR           << 1422>>67182000
                  TOS := ABS(TOS+SYSBASE+DDLTP);               << 1422>>67344000
                  X := ABS(ILT(X)+SYSBASE+DDLTP);              << 1422>>67526000
   ABS(SYSBUSY) := S0;   <<BUSY TABLE PTR>>                    << 1422>>67708000
   ABS(SYSHEAD) := S0;   <<HEAD TABLE PTR>>                    << 1422>>67712000
   ABS(SYSTAIL) := TOS;  <<TAIL TABLE PTR>>                    << 1422>>67716000
   <<   ASSIGN ABS PRIORITIES TO PROCESSES   >>                << 1422>>67792000
   ABS(NBANKS):=TOS;                                           << 1422>>67842000
      ABS(SYSLASTBASE):=%177777;                               << 1422>>67854000
      ABS(SYSLASTBANK):=TOS;                                   << 1422>>67860000
      ABS(SYSLASTBASE):=TOS;                                   << 1422>>67870000
      ABS(SYSLASTBANK):=TOS;                                   << 1422>>67874000
$EDIT VOID=67966000                                            <<09310>>67958000
              ILTADR, << ABS ADDRESS OF ILT >>                 << 1422>>67992000
          ABS(MAXCODESEG) := CTAB(MCSS);                       << 1422>>68072000
          ABS(MAXSEGPROC) := CTAB(MCSP);                       << 1422>>68074000
          ABS(MAXDATA) := CTAB(MSTACK);                        << 1422>>68076000
          ABS(MAXXTRADSEG) := CTAB(MXDSS);                     << 1422>>68078000
          ABS(MAXDSEGPROC) := CTAB(MXDSP);                     << 1422>>68080000
          ABS(STDSTACK) := CTAB0(SSS);                         << 1422>>68082000
          ABS(LOGONLIM) := CTAB0(LOGON);                       << 1422>>68084000
          ABS(CPUTIME)  := CTAB0(CPULIM);                      << 1422>>68086000
          ABS(HSYSDRT) := COMM(DRTNUM);                        << 1422>>68088000
                 ABS(DRTBANK),      <<    TEMPORARILY  >>      << 1422>>68126000
                 ABS(DRTADDR),I);                              << 1422>>68128000
            ABS( DRTBANK) := BANK;                             << 1422>>68144000
            ABS( DRTADDR) := OFFSET;                           << 1422>>68146000
            ABS( DRTBANK):= SAVDRTBANK;                        << 1422>>68164000
            ABS( DRTADDR):= SAVDRTADDR;                        << 1422>>68166000
                                                               <<09310>>68169000
          <<--------------------------------->>                <<09310>>68169200
          << INITIALIZE INCORE MESSAGE TABLE >>                <<09310>>68169400
          <<--------------------------------->>                <<09310>>68169600
          INIT'MESSAGE'SYSTEM;                                 <<09310>>68169800
   ABS(PCBP) := 0;                                             << 1422>>68182000
   ABS(DEFAULTQUEUE) := DEFAULTJOBPRI;                         << 1422>>68276000
   ABS(MAXQUEUE) := DEFAULTJOBPRI;                             << 1422>>68278000
       << For logically mapping systems, we want to give them>><< 1422>>68435100
       << the CSTs configured including an insurance that    >><< 1422>>68435200
       << there are enough for 255 system segments. If we are>><< 1422>>68435300
       << not logically mapping, then we want to give them up>><< 1422>>68435400
       << to 192 system segments.  We they wanted more, we   >><< 1422>>68435500
       << change the value for them and provide a message.   >><< 1422>>68435600
       << Fixes SR 4700-157990. Hang when too many segs in SL>><< 1422>>68435700
       << The 192 (%300) is the hardware limitation of       >><< 1422>>68435800
       << pre-MPE IV systems like S/III, S/33, S/44          >><< 1422>>68435900
          IF LOGICALMAPPING THEN                               << 1422>>68436000
             HCST := MAXPHYCST    << 255 + HEADER >>           << 1422>>68436100
          ELSE                                                 << 1422>>68436200
             IF CTAB(CSTNUM) > 192 THEN   <<OLD CST LIMIT>>    << 1422>>68436300
                BEGIN  << # OF CSTS EXCEEDS SYSTEM LIMIT >>    << 1422>>68436400
                HCST := 192 + 1; << ADD 1 FOR HEADER>>         << 1422>>68436500
                BLANKLINE;                                     << 1422>>68436550
                MESSAGE(2480, 192);   << OLD CST LIMIT>>       << 1422>>68436600
                BLANKLINE;                                     << 1422>>68436650
                                                               << 1422>>68436700
                << UPDATE CONFDATA.PUB.SYS >>                  << 1422>>68436800
                CTABFNUM := FOPEN(CTABFILE);                   << 1422>>68436900
                TOS := FCBDBL + D'L(FCB(FCBSECTOFF)));         << 1422>>68437000
                BS1 := 0;      << ZERO LDEV >>                 << 1422>>68437100
                DTEMP := TOS;  << USED BY WRITECONFTABLE >>    << 1422>>68437200
                                                               << 1422>>68437300
                CTAB(CSTNUM) := 192;                           << 1422>>68437400
                                                               << 1422>>68437500
                WRITECONFTABLE( CTABSIZE, CTABRECNUM, CTAB,    << 1422>>68437600
                                CTABINFOX);                    << 1422>>68437700
                FCLOSE( CTABFNUM);                             << 1422>>68437800
                END    << # OF CSTS EXCEEDS SYSTEM LIMIT >>    << 1422>>68437900
             ELSE                                              << 1422>>68438000
                HCST := CTAB(CSTNUM) + 1; << ADD 1 FOR HEADER>><< 1422>>68438100
          << SEGT(38) is Loader Aux Info word, initialized     <<L2187>>68457000
          << by the Loader.                                    <<L2187>>68457100
          << SEGT(39) is DST number of Loader Reference Table, <<L2187>>68457200
          << also initialized by the Loader.                   <<L2187>>68457300
          SEGT(40) := 0;           << CUR # LSTXs >>           <<L2187>>68457400
          SEGT(41) := 0;           << MAX # LSTXs >>           <<L2187>>68457500
          SEGT(42) := 0;           << LST BKWD LINK >>         <<L2187>>68457600
          SEGT(43) := 18;          << CURRENT LST DST # >>     <<L2187>>68457700
          SEGT(44) := 0;           << LSTX FWD LINK >>         <<L2187>>68457800
          SEGT(45) := 0;  << No temp EXTENSION allocated >>    <<L2187>>68457850
          SEGT(46) := 0;  << No temp LOADPROCMASTER allocated  <<L2187>>68457900
             SEGXFORM(X) := %177600;                           <<L1948>>68490000
             << SEGXFORM NOW HAS BIT (0:8)= 9 BITS USED >>     <<L1948>>68491000
             << FOR LOGICAL SEG. NUMBER (0-511)         >>     <<L1948>>68491100
          <<  write 1 blank header record - 128 words  >>      <<L1914>>68512000
          FREAD(SLFNUM,0D,SLREC0,384);  <<RECORDS 0,1 AND 2>>  <<L1948>>68530000
          << READ FIRST 3 RECORDS OF SL FILE; RECORD 1 & 2 >>  <<L1948>>68531000
          << ARE USED FOR REFERENCE TABLE POINTERS >>          <<L1948>>68531100
          FLCLID := ABS(COLD'LOAD'ID);                         << 1422>>68564000
          ABS(SLDISCADR2) := TOS;                              << 1422>>68576000
          ABS(X:=X-1) := TOS;                                  << 1422>>68578000
          ABS(TERMINTLAB) := INTLABEL(ABS(TERMEXTLAB) :=       << 1422>>68584000
          ABS(CIINTLAB) := INTLABEL(ABS(CIEXTLAB) :=           << 1422>>68588000
          ABS(FIXL) := COMM(FIXLEVEL');                        << 1422>>68592000
          ABS(UPDATEL) := COMM(UPDATEL');                      << 1422>>68594000
          ABS(VERSION) := COMM(VERSION');                      << 1422>>68596000
          ABS(CCLOSELAB) := PLABEL(CCLOSENAME);                << 1422>>69408000
          ABS(CSIOWLAB) := PLABEL(CSIOWAITNAME);               << 1422>>69410000
          ABS(DSCHECKLAB) := PLABEL(BINBUF);                   << 1422>>69414000
          ABS(DSOPENLAB) := PLABEL(BINBUF);                    << 1422>>69418000
          ABS(DSCLOSELAB) := PLABEL(BINBUF);                   << 1422>>69422000
          ABS(MWRITECONVLAB) := PLABEL(BINBUF);                << 1422>>69426000
          ABS(CONSDSLINE'LAB) := PLABEL(BINBUF);               << 1422>>69430000
          ABS(CONSMPLINE'LAB) := PLABEL(BINBUF);               << 1422>>69434000
          ABS(CONSMRJE'LAB) := PLABEL(BINBUF);                 << 1422>>69438000
          ABS(CONSHOWCOM'LAB) := PLABEL(BINBUF);               << 1422>>69446000
          ABS(CXREMOTELAB) := PLABEL(BINBUF);                  << 1422>>69450000
          ABS(CXDSLINELAB) := PLABEL(BINBUF);                  << 1422>>69454000
          ABS(CXRFALAB) := PLABEL(BINBUF);                     << 1422>>69458000
          ABS(DSIMAGELAB) := PLABEL(BINBUF);                   << 1422>>69462000
          ABS(DSBREAKLAB) := PLABEL(BINBUF);                   << 1422>>69466000
          ABS(SDSLDEVLAB) := PLABEL(BINBUF);                   << 1422>>69470000
          ABS(SYSDIT8) := LPDT'DIT'PTR+SYSBASE+8;              << 1422>>69480000
          ABS(12+PI) := PLABEL(CLOCKNAME); <<CLOCK INT HANDLER><< 1422>>69484000
          ABS(12+DBI) := ABS(SYSTRL)+SYSBASE; <<CLOCK DB>>     << 1422>>69486000
          ABS(CONSLDEV) := CONSPEED&LSL(8)+CONSOLELDEV;        << 1422>>69488000
          ABS(CONSLDEV) := CONSOLELDEV;                        << 1422>>69492000
          ABS(IOMESSSTOP) := PROCREATE(IOMESSNAME,IOMESSPROC,  << 1422>>69506000
          ABS(X:=X+1) := %20;                                  << 1422>>69512000
           ABS(NPROCSTOP):=5;                                  << 1422>>69514000
        SYSGLOBEXT(PORT'MAX'SER'CNTR):=%100;                   <<02078>>69523000
             ABS(NMMONSTOP) := PROCREATE (NMMONNAME,           << 1422>>69544000
             ABS(NMMONSTOP+1) := 4;    << AWAKE ON MSG >>      << 1422>>69550000
             ABS(NPROCSTOP) := 6;      << ADD TO TOTAL >>      << 1422>>69552000
ABS(AVR) := 1; << TURN ON AVR >>                               << 1422>>69708000
                ERR,                                           <<C9394>>69751000
            LDT'ACCESS'TYPE = CONINOUT'2 OR                    <<O9772>>70065000
            LDT'ACCESS'TYPE = CONINOUT'2 OR                    <<O9772>>70169000
   ABS(NUMSSECT) := 0;                                         << 1422>>70232000
   ABS(NUMSSECT1) := 0;                                        << 1422>>70234000
   ABS(INITINTLAB):=INTLABEL(ABS(INITEXTLAB):=                 << 1422>>70240000
   ABS(SPOOLININTLAB):=INTLABEL(ABS(SPOOLINEXTLAB)             << 1422>>70246000
   ABS(SPOOLOUTINTLAB):=INTLABEL(ABS(SPOOLOUTEXTLAB)           << 1422>>70252000
   ABS(RECLOGDELTAP):=INTLABEL(ABS(RECLOGPLABEL)               << 1422>>70258000
   ABS(ULOGDELTAP):=INTLABEL(ABS(ULOGPLABEL)                   << 1422>>70264000
   ABS(ULOGRSTARTDELTAP) :=                                    << 1422>>70270000
      INTLABEL(ABS(ULOGRSTARTPLABEL) := PLABEL(BINBUF));       << 1422>>70272000
   SSEA( MEMADR+2D, 6144);                                     <<01402>>70292000
   ABSENT( FMAVTDSTN, 6144);                                   <<01402>>70294000
          ABS(MAXSSECT1) := TOS;                               << 1422>>70328000
          ABS(MAXSSECT) := TOS;                                << 1422>>70330000
          ABS(EXTSSECT) := CTAB0(EXTSSECT');                   << 1422>>70332000
          ABS(DSTLOGON) := LOGONLOC;                           << 1422>>70442000
          ABS(SYSSTOPS) := 0;  << MARK TABLE UNLOCKED >>       << 1422>>70672000
   MEMADR := INITTABLE( CTAB0(LOGRECSIZE)*8, 128,              <<02123>>70724000
   MEMADR := INITTABLE( CTAB0(LOGRECSIZE)*8, 128,              <<02123>>70730000
           ABS(MEMLGSTOP):=CREATE(MEMLGFILE,MEMLGPROC,MEMLGPRI,<< 1422>>70774000
           ABS(X:=X+1):=%20;                                   << 1422>>70780000
          ABS(UCOPSTOP) := CREATE(UCOPFILE,UCOPPROC,UCOPPRI,   << 1422>>70804000
          ABS(X:=X+1) := %20;                                  << 1422>>70808000
          ABS(DEVRECSTOP) := CREATE(DEVRECFILE,DEVRECPROC,     << 1422>>70828000
          ABS(X:=X+1) := %20;                                  << 1422>>70834000
          DTEMP := 1D;                                         <<L1914>>70978000
   ICS(-JCUT') := ABS(SYSJCUT)+SYSBASE;                        << 1422>>71014000
          ERR := DIRCACHECTL( CACHE'CLOSE);                    <<C9394>>71030100
          IF <> THEN ERRMESSAGE( M279, ERR);                   <<C9394>>71030200
          <<--------------------->>                            <<F9416>>71036100
          <<   CLOSE DFS CACHE   >>                            <<F9416>>71036200
          <<--------------------->>                            <<F9416>>71036300
                                                               <<F9416>>71036400
          ERR := DFSCACHECTL( CACHE'CLOSE );                   <<F9416>>71036500
          IF <> THEN ERRMESSAGE( M336, ERR);                   <<F9416>>71036600
                                                               <<F9416>>71036700
          IF SEGDIR(5) - SEGDIR(4) > 20 THEN                   << 1948>>71052000
             SEGDIR(5) := SEGDIR(4) + 20;                      << 1948>>71058000
             I := 38 + SEGDIR(5) * 3;   << NEW LENGTH >>       << 1948>>71060000
          ABS(MAXSYSDST):=DST(3)-4;                            << 1422>>71280000
          ABS(MAXSYSCST):=CST(3)-4+CTAB(DSTNUM)&LSL(2);        << 1422>>71282000
             ABS( GETDRT(I,DBI) ) := 0                         << 1422>>71412000
          ABS(SYSTCST) := 0;  << INITIAL'S CST POINTER >>      << 1422>>71420000
          ABS(CPCB):=0;                                        << 1422>>71422000
          ABS(CPCB):=-1;<<SIGNAL TO INIT LDEV1>>               << 1422>>71426000
          ABS(CSTP) := ABS(SYSCST)+  << SWITCH TO >>           << 1422>>71468000
             TOS := (ABS(DFS)-ABS(DFC))&LSR(2);                << 1422>>71486000
             ABS(ABS(CSTP)) := TOS;   <<HDR=#CSTS-1>>          << 1422>>71492000
             ABS(X:=X+2) := TOS;    <<HEADER+2=#LOG CSTS>>     << 1422>>71496000
             ABS(X:=X+1) := TOS; <<HDR+3=PTR 1st LOG CST>>     << 1422>>71500000
