$CONTROL MAP,CODE,USLINIT                                               00010000
<<MEMLOGAN>>                                                            00015000
<< HP32002C MPE SOURCE C.00.00 >>                                       00020000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00025000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00030000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00035000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00040000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00045000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00050000
$CONTROL MAIN=MEMLOGAN,SEGMENT=MEMLOGAN                                 00055000
$CONTROL PRIVILEGED,NOWARN                                              00060000
$TITLE "- ERROR CORRECTING MEMORY LOG ANALYZER"                         00065000
$THIRTY                                                                 00070000
BEGIN                                                                   00075000
                                                                        00080000
<<------------------------------------------------------------          00085000
*                                                            *          00090000
*           ERROR CORRECTING MEMORY LOG ANALYZER             *          00095000
*                                                            *          00100000
------------------------------------------------------------>>          00105000
                                                                        00110000
DEFINE                                                         <<01.01>>00115000
PTITLE = ("MEMLOGAN B.01.03 (C) HEWLETT-PACKARD CO., 1980")#;  <<04932>>00120000
$INCLUDE INCLVUF                                               <<04932>>00125000
INTEGER S0 = S-0;                                                       00130000
                                                                        00135000
INTEGER PARM = Q-4;  <<RUN PARM PARAMETER>>                             00140000
INTEGER LOGFNUM,OUTFNUM;                                                00145000
INTEGER I,REC,CHIP,BANKS,FAULT,ERRCNT,CHECKBIT,                         00150000
        DELAY:=0,LINECNT:=0,ERRORCOUNT:=0;                     <<00.05>>00155000
INTEGER BIT,ROW,OLDROW,BANK,OLDBANK,BOARD,OLDBOARD,OLDCONTROLLER;<<2MB>>00160000
INTEGER                                                        <<03020>>00165000
  OLD'WORD = OLDROW;                                           <<03020>>00170000
                                                               <<03020>>00175000
INTEGER                                                        <<03020>>00180000
  WORD     = ROW;                                              <<03020>>00185000
                                                                        00190000
LOGICAL HEADING:=TRUE,PRINTIMES:=TRUE;                         <<00.01>>00195000
                                                                        00200000
DOUBLE STIME,UTIME,ERRTIME1,ERRTIME2;                          <<01.01>>00205000
                                                                        00210000
INTEGER CPU'TYPE;                                              <<RK2MB>>00215000
                                                               <<RK2MB>>00220000
INTEGER ARRAY NEXT'CONTROLLER(1:6) := 2, 8, 8, 16, %77777, 4;  <<M8068>>00225000
                                                               <<RK2MB>>00230000
DEFINE                                                         <<RK2MB>>00235000
     BANKNUM      = ABSOLUTE (MEMBANKNUM)#,                    <<03020>>00240000
     PRONTO       = (CPU'TYPE = 4)#,                           <<01397>>00245000
     PRONTO'2NDCNTLR = LOGICAL(MCS'STATUS.(15:1))#,            <<01397>>00250000
     RAMS'ARE'16K = (CPU'TYPE > 1)#,                           <<RK2MB>>00255000
     TP'FLAG      = (CPU'TYPE = 2)#,                           <<RK2MB>>00260000
     TWO'MB'FLAG  = (CPU'TYPE = 3)#;                           <<RK2MB>>00265000
EQUATE RECSIZE  =  4112;  <<MEMLOG REC SIZE: 2048 WORDS LOG  >><<01397>>00270000
ARRAY LOGREC(0:RECSIZE-1);                                              00275000
DOUBLE ARRAY LOGRECD(*) = LOGREC;                                       00280000
                                                                        00285000
                                                               <<01169>>00290000
DOUBLE CAPD;            << CAPABILITIES FROM WHO INTRINSIC >>  <<01169>>00295000
LOGICAL CAP=CAPD;                                              <<01169>>00300000
INTEGER MCS'STATUS;    << MEM STATUS RETURNED BY MCS >>        <<01397>>00305000
DEFINE SYSMGR = CAP.(0:1)#;                                    <<01169>>00310000
DEFINE                                                         <<01169>>00315000
SYSMGR'MSG = (" * PROGRAM REQUIRES SYS. MGR. CAPABILITY *")#;  <<01169>>00320000
                                                               <<01169>>00325000
BYTE ARRAY PBUF(0:71);                                                  00330000
BYTE ARRAY FNAME(*) = PBUF;                                             00335000
BYTE ARRAY ERRMSG(*) = PBUF;                                            00340000
ARRAY WPBUF (*) = PBUF;                                        <<01.01>>00345000
BYTE ARRAY HEAD1(0:61) :=                                               00350000
     "I       ADDRESS        I           ERROR TYPE        I ERROR I";  00355000
BYTE ARRAY HEAD2(0:61) :=                                               00360000
     "I MEMORY I  LOC  I ROW I  TYPE   BIT   BOARD   CHIP  I COUNT I";  00365000
BYTE ARRAY HEAD3(0:61) :=                                               00370000
     "--------------------------------------------------------------";  00375000
BYTE ARRAY HEAD4(0:61) :=                                               00380000
     "------------------------------------------------------       -";  00385000
BYTE ARRAY HEAD1'16K(0:61) :=                                  <<RK2MB>>00390000
     "I         ADDRESS             I      ERROR TYPE      I ERROR I";  00395000
BYTE ARRAY HEAD2'16K(0:61) :=                                  <<RK2MB>>00400000
     "I CONTROLLER    I BOARD I ROW I  TYPE   BIT   CHIP   I COUNT I";  00405000
                                                                        00410000
EQUATE                                                                  00415000
     FSERR    =     0,                                                  00420000
     SYSDB    = %1000,  << System DB offset.                >> <<03020>>00425000
     OUTYPE   =     0,  <<OUTPUT FILE TYPE - ERRMESSAGE>>               00430000
     LOGTYPE  =     1,  <<OUTPUT FILE TYPE - ERRMESSAGE>>               00435000
     LINEMAX  =    40,  <<PRINT LINES PER PAGE>>                        00440000
     MEMBANKNUM = SYSDB + %47,   << Number of memory banks. >> <<03020>>00445000
     RELEASE  =     4,  <<FCLOSE DISPOSITION VALUE>>                    00450000
     FOPTIONS = %2001,  <<FOR MEMLOG FOPEN>>                            00455000
     ICF55    =     5,  << CPU'TYPE returned by THISCPU.    >> <<03020>>00460000
     MM       =     6,  << CPU'TYPE RETURNED BY THISCPU     >> <<M8068>>00465000
     FILECODE = -1234;                                                  00470000
                                                                        00475000
EQUATE                                                                  00480000
     ROWNUM   = 8,                                                      00485000
     ROWNUM'TP= 4,                                             <<RK2MB>>00490000
     CHECKNUM = 4;                                                      00495000
                                                                        00500000
EQUATE  << FIRST AND SECOND CONTROLLER BOARDS >>                        00505000
     CONTROLLER'A  = 0,                                        <<RK2MB>>00510000
     CONTROLLER'B  = 1;                                        <<RK2MB>>00515000
                                                                        00520000
EQUATE << LOG RECORD LOCATIONS >>                                       00525000
     STARTIME  =  2048, <<DOUBLE LOCATION>>                    <<01397>>00530000
     LASTIME   =  2049, <<DOUBLE LOCATION>>                    <<01397>>00535000
     FERRTIME  =  2050, <<DOUBLE LOCATION>>                    <<01397>>00540000
     LERRTIME  =  2051, <<DOUBLE LOCATION>>                    <<01397>>00545000
     BANKNUMB  = 4104,                                         <<01397>>00550000
     DELAYLOC  = 4105;                                         <<01397>>00555000
                                                                        00560000
DEFINE TYPEF = (0:8)#;                                                  00565000
                                                                        00570000
DEFINE  << FILE INFORMATION - NUMBER AND TYPE >>                        00575000
     OUTFILE = (OUTFNUM + OUTYPE & LSL(8))#,                            00580000
     LOGFILE = (LOGFNUM + LOGTYPE & LSL(8))#;                           00585000
                                                               <<01397>>00590000
                                                               <<01397>>00595000
DEFINE MCS  =   ASSEMBLE(CON %20302;CON 7;)#;                  <<01397>>00600000
                                                               <<01397>>00605000
                                                               <<01397>>00610000
                                                                        00615000
<< FAULT CONDITION RANGES (FAULTS ARRAY VALUES)                         00620000
     0 - 15: DATA BIT ERRORS (DATA BITS 0 - 15)                         00625000
    16 - 20: CHECK BIT ERRORS (CHECK BITS A -E)                         00630000
         21: DOUBLE BIT ERROR                                           00635000
         22: READ CLOCK FAILURE                                         00640000
         23: CHECK BIT I/O DRIVER FAULT                                 00645000
         24: ERROR IN MEMORY LOGGING FIRMWARE.                          00650000
>>                                                                      00655000
                                                                        00660000
INTEGER ARRAY FAULTS(0:31) :=                                           00665000
    <<  0 >>     24,  << LOGGING SYSTEM ERROR >>                        00670000
    <<  1 >>     16,  << CHECK BIT A          >>                        00675000
    <<  2 >>     17,  << CHECK BIT B          >>                        00680000
    <<  3 >>      3,  << DATA BIT  3          >>                        00685000
    <<  4 >>     18,  << CHECK BIT C          >>                        00690000
    <<  5 >>     21,  << DOUBLE BIT ERROR     >>                        00695000
    <<  6 >>      9,  << DATA BIT  9          >>                        00700000
    <<  7 >>      0,  << DATA BIT  0          >>                        00705000
    <<  8 >>     19,  << CHECK BIT D          >>                        00710000
    <<  9 >>      6,  << DATA BIT  6          >>                        00715000
    << 10 >>     22,  << READ CLOCK FAILURE   >>                        00720000
    << 11 >>      1,  << DATA BIT  1          >>                        00725000
    << 12 >>     13,  << DATA BIT 13          >>                        00730000
    << 13 >>      4,  << DATA BIT  4          >>                        00735000
    << 14 >>      8,  << DATA BIT  8          >>                        00740000
    << 15 >>     21,  << DOUBLE BIT ERROR     >>                        00745000
    << 16 >>     20,  << CHECK BIT E          >>                        00750000
    << 17 >>      7,  << DATA BIT  7          >>                        00755000
    << 18 >>     11,  << DATA BIT 11          >>                        00760000
    << 19 >>      2,  << DATA BIT  2          >>                        00765000
    << 20 >>     14,  << DATA BIT 14          >>                        00770000
    << 21 >>      5,  << DATA BIT  5          >>                        00775000
    << 22 >>     21,  << DOUBLE BIT ERROR     >>                        00780000
    << 23 >>     21,  << DOUBLE BIT ERROR     >>                        00785000
    << 24 >>     15,  << DATA BIT 15          >>                        00790000
    << 25 >>     21,  << DOUBLE BIT ERROR     >>                        00795000
    << 26 >>     10,  << DATA BIT 10          >>                        00800000
    << 27 >>     21,  << DOUBLE BIT ERROR     >>                        00805000
    << 28 >>     12,  << DATA BIT 12          >>                        00810000
    << 29 >>     21,  << DOUBLE BIT ERROR     >>                        00815000
    << 30 >>     23,  << DRIVER FAULT         >>                        00820000
    << 31 >>     23;  << DRIVER FAULT         >>                        00825000
                                                                        00830000
INTEGER ARRAY FAULTS'TP(0:31) :=                               <<RK2MB>>00835000
    <<  0 >>     16,  << CHECK BIT 0          >>                        00840000
    <<  1 >>     21,  << CHECK BIT 5          >>                        00845000
    <<  2 >>     20,  << CHECK BIT 4          >>                        00850000
    <<  3 >>     15,  << DATA BIT  15         >>                        00855000
    <<  4 >>     19,  << CHECK BIT 3          >>                        00860000
    <<  5 >>     25,  << LOGGING SYSTEM ERROR >>                        00865000
    <<  6 >>     14,  << DATA BIT 14          >>                        00870000
    <<  7 >>     13,  << DATA BIT 13          >>                        00875000
    <<  8 >>     18,  << CHECK BIT 2          >>                        00880000
    <<  9 >>     25,  << LOGGING SYSTEM ERROR >>                        00885000
    << 10 >>     25,  << LOGGING SYSTEM ERROR >>                        00890000
    << 11 >>     12,  << DATA BIT 12          >>                        00895000
    << 12 >>     11,  << DATA BIT 11          >>                        00900000
    << 13 >>     10,  << DATA BIT 10          >>                        00905000
    << 14 >>      9,  << DATA BIT  9          >>                        00910000
    << 15 >>     25,  << LOGGING SYSTEM ERROR >>                        00915000
    << 16 >>     17,  << CHECK BIT 1          >>                        00920000
    << 17 >>      8,  << DATA BIT  8          >>                        00925000
    << 18 >>     25,  << LOGGING SYSTEM ERROR >>                        00930000
    << 19 >>      7,  << DATA BIT  7          >>                        00935000
    << 20 >>     25,  << LOGGING SYSTEM ERROR >>                        00940000
    << 21 >>      6,  << DATA BIT  6          >>                        00945000
    << 22 >>      5,  << DATA BIT 5           >>                        00950000
    << 23 >>     25,  << LOGGING SYSTEM ERROR >>                        00955000
    << 24 >>      4,  << DATA BIT  4          >>                        00960000
    << 25 >>      3,  << DATA BIT  3          >>                        00965000
    << 26 >>      2,  << DATA BIT  2          >>                        00970000
    << 27 >>     25,  << LOGGING SYSTEM ERROR >>                        00975000
    << 28 >>      1,  << DATA BIT  1          >>                        00980000
    << 29 >>     25,  << LOGGING SYSTEM ERROR >>                        00985000
    << 30 >>     25,  << LOGGING SYSTEM ERROR >>                        00990000
    << 31 >>      0;  << DATA BIT 0           >>                        00995000
                                                                        01000000
INTEGER ARRAY FAULTS'2MB(0:31) :=                              <<RK2MB>>01005000
    <<  0 >>     16,  << CHECK BIT 0          >>                        01010000
    <<  1 >>     21,  << CHECK BIT 5          >>                        01015000
    <<  2 >>     20,  << CHECK BIT 4          >>                        01020000
    <<  3 >>      3,  << DATA BIT  3          >>                        01025000
    <<  4 >>     19,  << CHECK BIT 3          >>                        01030000
    <<  5 >>     23,  << FORCED D.E.W         >>                        01035000
    <<  6 >>      9,  << DATA BIT  9          >>                        01040000
    <<  7 >>      0,  << DATA BIT  0          >>                        01045000
    <<  8 >>     18,  << CHECK BIT 2          >>                        01050000
    <<  9 >>      6,  << DATA BIT  6          >>                        01055000
    << 10 >>     24,  << MISSING ARRAY BOARD  >>                        01060000
    << 11 >>      1,  << DATA BIT  1          >>                        01065000
    << 12 >>     13,  << DATA BIT 13          >>                        01070000
    << 13 >>      4,  << DATA BIT  4          >>                        01075000
    << 14 >>      8,  << DATA BIT  8          >>                        01080000
    << 15 >>     22,  << DOUBLE BIT ERROR     >>                        01085000
    << 16 >>     17,  << CHECK BIT 1          >>                        01090000
    << 17 >>      7,  << DATA BIT  7          >>                        01095000
    << 18 >>     11,  << DATA BIT 11          >>                        01100000
    << 19 >>      2,  << DATA BIT  2          >>                        01105000
    << 20 >>     14,  << DATA BIT 14          >>                        01110000
    << 21 >>      5,  << DATA BIT  5          >>                        01115000
    << 22 >>     22,  << DOUBLE BIT ERROR     >>                        01120000
    << 23 >>     22,  << DOUBLE BIT ERROR     >>                        01125000
    << 24 >>     15,  << DATA BIT 15          >>                        01130000
    << 25 >>     22,  << DOUBLE BIT ERROR     >>                        01135000
    << 26 >>     10,  << DATA BIT 10          >>                        01140000
    << 27 >>     22,  << DOUBLE BIT ERROR     >>                        01145000
    << 28 >>     12,  << DATA BIT 12          >>                        01150000
    << 29 >>     22,  << DOUBLE BIT ERROR     >>                        01155000
    << 30 >>     22,  << DOUBLE BIT ERROR     >>                        01160000
    << 31 >>     22;  << DOUBLE BIT ERROR     >>                        01165000
                                                               <<01397>>01170000
                                                               <<01397>>01175000
INTEGER ARRAY FAULTS'PRONTO(0:63) :=                           <<01397>>01180000
    <<  0 >>     22,  << ***  >>                               <<01397>>01185000
    <<  1 >>     22,  << ***  >>                               <<01397>>01190000
    <<  2 >>     22,  << ***  >>                               <<01397>>01195000
    <<  3 >>     -9,  << DATA BIT  24         >>               <<01397>>01200000
    <<  4 >>     22,  << ***  >>                               <<01397>>01205000
    <<  5 >>     22,  << *** >>                                <<01397>>01210000
    <<  6 >>     22,  << *** >>                                <<01397>>01215000
    <<  7 >>    -13,  << DATA BIT 28 >>                        <<01397>>01220000
    <<  8 >>      2,  << DATA  BIT 2          >>               <<01397>>01225000
    <<  9 >>     22,  << *** >>                                <<01397>>01230000
    << 10 >>     22,  << *** >>                                <<01397>>01235000
    << 11 >>     22,  << *** >>                                <<01397>>01240000
    << 12 >>     22,  << *** >>                                <<01397>>01245000
    << 13 >>     -7,  << DATA BIT 22          >>               <<01397>>01250000
    << 14 >>     12,  << DATA BIT  12         >>               <<01397>>01255000
    << 15 >>    -16,  << DATA BIT 31 >>                        <<01397>>01260000
    << 16 >>     22,  << *** >>                                <<02017>>01265000
    << 17 >>     22,  << *** >>                                <<01397>>01270000
    << 18 >>     22,  << *** >>                                <<01397>>01275000
    << 19 >>    -11,  << DATA BIT  26         >>               <<01397>>01280000
    << 20 >>     22,  << *** >>                                <<01397>>01285000
    << 21 >>     -5,  << DATA BIT  20         >>               <<01397>>01290000
    << 22 >>     22,  << *** >>                                <<01397>>01295000
    << 23 >>    -15,  << DATA BIT 30 >>                        <<01397>>01300000
    << 24 >>      3,  << DATA BIT 3 >>                         <<01397>>01305000
    << 25 >>     -3,  << DATA BIT  18         >>               <<01397>>01310000
    << 26 >>     10,  << DATA BIT  10         >>               <<01397>>01315000
    << 27 >>     22,  << *** >>                                <<01397>>01320000
    << 28 >>      6,  << DATA BIT 6 >>                         <<01397>>01325000
    << 29 >>     22,  << *** >>                                <<01397>>01330000
    << 30 >>     14,  << DATA BIT 14          >>               <<01397>>01335000
    << 31 >>    -18,  << CHECK BIT 1          >>               <<01397>>01340000
    << 32 >>     01,  << DATA BIT 1 >>                         <<01397>>01345000
    << 33 >>     22,  << *** >>                                <<01397>>01350000
    << 34 >>     22,  << ***  >>                               <<01397>>01355000
    << 35 >>    -10,  << DATA BIT 25 >>                        <<01397>>01360000
    << 36 >>     22,  << *** >>                                <<01397>>01365000
    << 37 >>     22,  << *** >>                                <<01397>>01370000
    << 38 >>     22,  << *** >>                                <<01397>>01375000
    << 39 >>    -14,  << DATA BIT 29  >>                       <<01397>>01380000
    << 40 >>     22,  << *** >>                                <<01397>>01385000
    << 41 >>     -2,  << DATA BIT 17 >>                        <<01397>>01390000
    << 42 >>      9,  << DATA BIT 9 >>                         <<01397>>01395000
    << 43 >>     22,  << *** >>                                <<01397>>01400000
    << 44 >>      5,  << DATA BIT  5          >>               <<01397>>01405000
    << 45 >>     -8,  << DATA BIT 23 >>                        <<01397>>01410000
    << 46 >>     13,  << DATA BIT 13 >>                        <<01397>>01415000
    << 47 >>    -19,  << CHECK BIT 2 >>                        <<01397>>01420000
    << 48 >>     22,  << *** >>                                <<01397>>01425000
    << 49 >>     -1,  << DATA BIT  16         >>               <<01397>>01430000
    << 50 >>      8,  << DATA BIT 8 >>                         <<01397>>01435000
    << 51 >>    -12,  << DATA BIT  27         >>               <<01397>>01440000
    << 52 >>      4,  << DATA BIT 4 >>                         <<01397>>01445000
    << 53 >>     -6,  << DATA BIT 21 >>                        <<01397>>01450000
    << 54 >>     15,  << DATA BIT 15 >>                        <<01397>>01455000
    << 55 >>    -20,  << CHECK BIT 3          >>               <<01397>>01460000
    << 56 >>      0,  << DATA BIT   0         >>               <<01397>>01465000
    << 57 >>     -4,  << DATA BIT 19 >>                        <<01397>>01470000
    << 58 >>     11,  << DATA BIT 11  >>                       <<01397>>01475000
    << 59 >>    -21,  << CHECK BIT 4 >>                        <<01397>>01480000
    << 60 >>      7,  << DATA BIT  7          >>               <<01397>>01485000
    << 61 >>    -22,  << CHECK BIT 5 >>                        <<01397>>01490000
    << 62 >>    -23,  << CHECK BIT 6          >>               <<01397>>01495000
    << 63 >>    -17;  << CHECK BIT 0          >>               <<01397>>01500000
                                                               <<01397>>01505000
                                                               <<01397>>01510000
                                                               <<01397>>01515000
                                                               <<01397>>01520000
                                                                        01525000
                                                               <<03020>>01530000
COMMENT --                                                     <<03020>>01535000
  This is the faults array for the ICF55 (CPU'TYPE =  5).  The <<03020>>01540000
addresses of elements in the array correspond to the six LSB's <<03020>>01545000
of address of elements in the LOGREC array (which is the first <<03020>>01550000
record of MEMLOG.PUB.SYS).  The first 4096 elements of  MEMLOG <<03020>>01555000
contain error counts for memory IC chips.  The address of each <<03020>>01560000
of these elements is a mapping from the  address  fed  to  the <<03020>>01565000
error  logging RAM in the ICF55.  ICF55 memory is organized as <<03020>>01570000
follows:  1 to 8 memory array boards, each of which contains 4 <<03020>>01575000
39-bit "words" (this is what  the  ICF55  people  call  them). <<03020>>01580000
Each  such word consists of 39 1 x N RAM's, where N can be 16K <<03020>>01585000
or 64K.  The 39 bits are broken down into 32 data bits  and  7 <<03020>>01590000
check  bits.  The check bits are capable of detecting all mem- <<03020>>01595000
ory errors, and can be used to correct all single-bit  errors. <<03020>>01600000
Thus  one  access  to memory will access 1 bit from each of 39 <<03020>>01605000
RAM chips.  Since there are four such words per  array  board, <<03020>>01610000
each board contains 156 RAM chips.                             <<03020>>01615000
  Now back to MEMLOG.  The address of each of the  first  4096 <<03020>>01620000
elements  of  LOGREC  map  to the error logging RAM address as <<03020>>01625000
follows:  Bits (4:3) designate  one  of  the  8  memory  array <<03020>>01630000
boards.  Bits  (7:2)  specify  one  of the 4 39-bit "words" on <<03020>>01635000
that board.  The remaining seven bits (9:7) may specify a par- <<03020>>01640000
ticular chip in the word.  I say "may" because there are  only <<03020>>01645000
39  valid combinations out of 128 possibilities.  FAULTS'ICF55 <<03020>>01650000
is reduced to 64 elements by noting that  all  valid  combina- <<03020>>01655000
tions  of  bits  (9:7) possess odd parity, thus it suffices to <<03020>>01660000
check this separately and use  only  bits  (10:6)  to  address <<03020>>01665000
FAULTS'ICF55. The 25 forbidden combinations (= 64 - 39) should <<03020>>01670000
never be accessed.  If they are, or if (9:7) has even  parity, <<03020>>01675000
a "multiple-bit error" code (22) is obtained.                  <<03020>>01680000
  So much for addresses in FAULTS'ICF55.  What about the  con- <<03020>>01685000
tents?  The  contents range from -23 to 15, as well as 22, and <<03020>>01690000
are mapped to the data and check bits of a memory word as fol- <<03020>>01695000
lows:  -23 to -17 correspond to check bits 6 to 0, respective- <<03020>>01700000
ly.  -16 to -1 correspond to data bits 31 to 16.  0 to 15 cor- <<03020>>01705000
respond to data bits 0 to 15.  Finally, 22 is the no-no  which <<03020>>01710000
causes "multiple-bit error" to be displayed. (This is the same <<03020>>01715000
numbering scheme used in the FAULTS'PRONTO  array,  used  with <<03020>>01720000
CPU'TYPE  =  4, the ICF44 with PRONTO memory, although the ad- <<03020>>01725000
dresses of -23 to 15 and 22 differ in that  array).  A  number <<03020>>01730000
between  -23 and 15 obtained from this array is used, together <<03020>>01735000
with bits (7:2) of the LOGREC address, to enter the DATA'ICF55 <<03020>>01740000
array (see below) and retrieve  the  proper  U  (chip)  number <<03020>>01745000
which corresponds to THIS data bit in THIS "word". Since the U <<03020>>01750000
numbers are the same for each board, we only need one  board's <<03020>>01755000
worth of U numbers.  The board address, shown elsewhere in the <<03020>>01760000
user display, is obtained from bits (4:3) of the LOGREC array. <<03020>>01765000
;                                                              <<03020>>01770000
                                                               <<03020>>01775000
INTEGER ARRAY FAULTS'ICF55 (0:63) :=                           <<03020>>01780000
    <<  0 >>    -17,  << Check bit  0.        >>               <<03020>>01785000
    <<  1 >>    -23,  << Check bit  6.        >>               <<03020>>01790000
    <<  2 >>    -22,  << Check bit  5.        >>               <<03020>>01795000
    <<  3 >>     22,                                           <<03020>>01800000
    <<  4 >>    -21,  << Check bit  4.        >>               <<03020>>01805000
    <<  5 >>     22,                                           <<03020>>01810000
    <<  6 >>     22,                                           <<03020>>01815000
    <<  7 >>     22,                                           <<03020>>01820000
    <<  8 >>    -20,  << Check bit  3.        >>               <<03020>>01825000
    <<  9 >>     22,                                           <<03020>>01830000
    << 10 >>     22,                                           <<03020>>01835000
    << 11 >>     22,                                           <<03020>>01840000
    << 12 >>     22,                                           <<03020>>01845000
    << 13 >>     22,                                           <<03020>>01850000
    << 14 >>     22,                                           <<03020>>01855000
    << 15 >>     22,                                           <<03020>>01860000
    << 16 >>    -19,  << Check bit  2.        >>               <<03020>>01865000
    << 17 >>     22,                                           <<03020>>01870000
    << 18 >>     22,                                           <<03020>>01875000
    << 19 >>     22,                                           <<03020>>01880000
    << 20 >>     22,                                           <<03020>>01885000
    << 21 >>     22,                                           <<03020>>01890000
    << 22 >>     22,                                           <<03020>>01895000
    << 23 >>     22,                                           <<03020>>01900000
    << 24 >>      0,  << Data  bit  0.        >>               <<03020>>01905000
    << 25 >>      1,  << Data  bit  1.        >>               <<03020>>01910000
    << 26 >>      2,  << Data  bit  2.        >>               <<03020>>01915000
    << 27 >>      3,  << Data  bit  3.        >>               <<03020>>01920000
    << 28 >>      4,  << Data  bit  4.        >>               <<03020>>01925000
    << 29 >>      5,  << Data  bit  5.        >>               <<03020>>01930000
    << 30 >>      6,  << Data  bit  6.        >>               <<03020>>01935000
    << 31 >>      7,  << Data  bit  7.        >>               <<03020>>01940000
    << 32 >>    -18,  << Check bit  1.        >>               <<03020>>01945000
    << 33 >>     22,                                           <<03020>>01950000
    << 34 >>     22,                                           <<03020>>01955000
    << 35 >>     22,                                           <<03020>>01960000
    << 36 >>     22,                                           <<03020>>01965000
    << 37 >>     22,                                           <<03020>>01970000
    << 38 >>     22,                                           <<03020>>01975000
    << 39 >>     22,                                           <<03020>>01980000
    << 40 >>      8,  << Data  bit  8.        >>               <<03020>>01985000
    << 41 >>      9,  << Data  bit  9.        >>               <<03020>>01990000
    << 42 >>     10,  << Data  bit 10.        >>               <<03020>>01995000
    << 43 >>     11,  << Data  bit 11.        >>               <<03020>>02000000
    << 44 >>     12,  << Data  bit 12.        >>               <<03020>>02005000
    << 45 >>     13,  << Data  bit 13.        >>               <<03020>>02010000
    << 46 >>     14,  << Data  bit 14.        >>               <<03020>>02015000
    << 47 >>     15,  << Data  bit 15.        >>               <<03020>>02020000
    << 48 >>     -1,  << Data  bit 16.        >>               <<03020>>02025000
    << 49 >>     -2,  << Data  bit 17.        >>               <<03020>>02030000
    << 50 >>     -3,  << Data  bit 18.        >>               <<03020>>02035000
    << 51 >>     -4,  << Data  bit 19.        >>               <<03020>>02040000
    << 52 >>     -5,  << Data  bit 20.        >>               <<03020>>02045000
    << 53 >>     -6,  << Data  bit 21.        >>               <<03020>>02050000
    << 54 >>     -7,  << Data  bit 22.        >>               <<03020>>02055000
    << 55 >>     -8,  << Data  bit 23.        >>               <<03020>>02060000
    << 56 >>     -9,  << Data  bit 24.        >>               <<03020>>02065000
    << 57 >>    -10,  << Data  bit 25.        >>               <<03020>>02070000
    << 58 >>    -11,  << Data  bit 26.        >>               <<03020>>02075000
    << 59 >>    -12,  << Data  bit 27.        >>               <<03020>>02080000
    << 60 >>    -13,  << Data  bit 28.        >>               <<03020>>02085000
    << 61 >>    -14,  << Data  bit 29.        >>               <<03020>>02090000
    << 62 >>    -15,  << Data  bit 30.        >>               <<03020>>02095000
    << 63 >>    -16;  << Data  bit 31.        >>               <<03020>>02100000
                                                               <<03020>>02105000
INTEGER ARRAY DATAB(0:135) :=                                           02110000
<<                            ROW (BITS 8:3)                     >>     02115000
<<               000   001   010   011   100   101   110   111   >>     02120000
<<     FAULT     ---   ---   ---   ---   ---   ---   ---   ---   >>     02125000
                                                                        02130000
    <<  0 >>     93,   83,   73,   63,   43,   33,   23,   13,          02135000
    <<  1 >>     94,   84,   74,   64,   44,   34,   24,   14,          02140000
    <<  2 >>     95,   85,   75,   65,   45,   35,   25,   15,          02145000
    <<  3 >>     96,   86,   76,   66,   46,   36,   26,   16,          02150000
    <<  4 >>     97,   87,   77,   67,   47,   37,   27,   17,          02155000
    <<  5 >>     98,   88,   78,   68,   48,   38,   28,   18,          02160000
    <<  6 >>     99,   89,   79,   69,   49,   39,   29,   19,          02165000
    <<  7 >>    910,  810,  710,  610,  410,  310,  210,  110,          02170000
    <<  8 >>    911,  811,  711,  611,  411,  311,  211,  111,          02175000
    <<  9 >>    912,  812,  712,  612,  412,  312,  212,  112,          02180000
    << 10 >>    913,  813,  713,  613,  413,  313,  213,  113,          02185000
    << 11 >>    914,  814,  714,  614,  414,  314,  214,  114,          02190000
    << 12 >>    915,  815,  715,  615,  415,  315,  215,  115,          02195000
    << 13 >>    916,  816,  716,  616,  416,  316,  216,  116,          02200000
    << 14 >>    917,  817,  717,  617,  417,  317,  217,  117,          02205000
    << 15 >>    918,  818,  718,  618,  418,  318,  218,  118,          02210000
    <<  A >>    919,  819,  719,  619,  419,  319,  219,  119;          02215000
                                                               <<01397>>02220000
                                                               <<01397>>02225000
INTEGER ARRAY DATA'PRONTO(-23:15) :=                           <<01397>>02230000
                                                               <<01397>>02235000
<<  FAULT #    CHIP U-       BIT DESCRIPTION  >>               <<01397>>02240000
                                                               <<01397>>02245000
      <<-23>>     53,    << CHECK BIT 6>>                      <<01397>>02250000
      <<-22>>     63,    << CHECK BIT 5>>                      <<01397>>02255000
      <<-21>>     73,    << CHECK BIT 4 >>                     <<01397>>02260000
      <<-20>>     83,    << CHECK BIT 3 >>                     <<01397>>02265000
      <<-19>>     93,    << CHECK BIT 2 >>                     <<01397>>02270000
      <<-18>>    103,    << CHECK BIT 1 >>                     <<01397>>02275000
      <<-17>>    113,    << CHECK BIT 0 >>                     <<01397>>02280000
      <<-16>>    123,    << DATA BIT 31 >>                     <<01397>>02285000
      <<-15>>    133,    << DATA BIT 30 >>                     <<01397>>02290000
      <<-14>>    143,    << DATA BIT 29 >>                     <<01397>>02295000
      <<-13>>    153,    << DATA BIT 28 >>                     <<01397>>02300000
      <<-12>>    163,    << DATA BIT 27 >>                     <<01397>>02305000
      <<-11>>    173,    << DATA BIT 26 >>                     <<01397>>02310000
      <<-10>>    183,    << DATA BIT 25 >>                     <<01397>>02315000
      <<- 9>>    193,    << DATA BIT 24 >>                     <<01397>>02320000
      <<- 8>>    203,    << DATA BIT 23 >>                     <<01397>>02325000
      <<- 7>>    213,    << DATA BIT 22 >>                     <<01397>>02330000
      <<- 6>>    223,    << DATA BIT 21 >>                     <<01397>>02335000
      <<- 5>>    233,    << DATA BIT 20 >>                     <<01397>>02340000
      <<- 4>>     42,    << DATA BIT 19 >>                     <<01397>>02345000
      <<- 3>>     52,    << DATA BIT 18 >>                     <<01397>>02350000
      <<- 2>>     62,    << DATA BIT 17 >>                     <<01397>>02355000
      <<- 1>>     72,    << DATA BIT 16 >>                     <<01397>>02360000
      <<  0>>    232,    << DATA BIT  0 >>                     <<01397>>02365000
      <<  1>>    222,    << DATA BIT  1 >>                     <<01397>>02370000
      <<  2>>    212,    << DATA BIT  2 >>                     <<01397>>02375000
      <<  3>>    202,    << DATA BIT  3 >>                     <<01397>>02380000
      <<  4>>    192,    << DATA BIT  4 >>                     <<01397>>02385000
      <<  5>>    182,    << DATA BIT  5 >>                     <<01397>>02390000
      <<  6>>    172,    << DATA BIT  6 >>                     <<01397>>02395000
      <<  7>>    162,    << DATA BIT  7 >>                     <<01397>>02400000
      <<  8>>    152,    << DATA BIT  8 >>                     <<01397>>02405000
      <<  9>>    142,    << DATA BIT  9 >>                     <<01397>>02410000
      << 10>>    132,    << DATA BIT 10 >>                     <<01397>>02415000
      << 11>>    122,    << DATA BIT 11 >>                     <<01397>>02420000
      << 12>>    112,    << DATA BIT 12 >>                     <<01397>>02425000
      << 13>>    102,    << DATA BIT 13 >>                     <<01397>>02430000
      << 14>>     92,    << DATA BIT 14 >>                     <<01397>>02435000
      << 15>>     82;    << DATA BIT 15 >>                     <<01397>>02440000
                                                               <<01397>>02445000
                                                               <<01397>>02450000
                                                                        02455000
COMMENT --                                                     <<03020>>02460000
  This is the data array for the ICF55.  Its contents are  the <<03020>>02465000
U numbers of the RAM chips on a memory array board, or rather, <<03020>>02470000
one-fourth of the U numbers, the numbers for  ICF55  "word"  0 <<03020>>02475000
only.  (See  the capsule description of ICF55 memory preceding <<03020>>02480000
the FAULTS'ICF55 array).  The U number for word 1, 2 or  3  is <<03020>>02485000
obtained by adding two, four or six, respectively, to the num- <<03020>>02490000
ber obtained from word 0.  The element address for  DATA'ICF55 <<03020>>02495000
is obtained from the contents of FAULTS'ICF55  (FAULT,  below) <<03020>>02500000
and  the  word field (7:2) of the LOGREC array element address <<03020>>02505000
(WORD). The chip number is then obtained from DATA'ICF55, add- <<03020>>02510000
ing the appropriate increment if other than word 0 is  indica- <<03020>>02515000
ted.  The statement is as follows:                             <<03020>>02520000
                                                               <<03020>>02525000
     CHIP := DATA'ICF55 (FAULT) + WORD*2;                      <<03020>>02530000
                                                               <<03020>>02535000
INTEGER ARRAY DATA'ICF55 (-23:15) :=                           <<03020>>02540000
                                                               <<03020>>02545000
<<          WORD 0                                          >> <<03020>>02550000
<< FAULT    CHIP U-    DESCRIPTION                          >> <<03020>>02555000
<< -------------------------------------------------------- >> <<03020>>02560000
                                                               <<03020>>02565000
 << -23 >>   403,      << Check bit  6.                     >> <<03020>>02570000
 << -22 >>   503,      << Check bit  5.                     >> <<03020>>02575000
 << -21 >>   603,      << Check bit  4.                     >> <<03020>>02580000
 << -20 >>   703,      << Check bit  3.                     >> <<03020>>02585000
 << -19 >>   803,      << Check bit  2.                     >> <<03020>>02590000
 << -18 >>   903,      << Check bit  1.                     >> <<03020>>02595000
 << -17 >>  1003,      << Check bit  0.                     >> <<03020>>02600000
 << -16 >>  1103,      << Data  bit 31.                     >> <<03020>>02605000
 << -15 >>  1203,      << Data  bit 30.                     >> <<03020>>02610000
 << -14 >>  1303,      << Data  bit 29.                     >> <<03020>>02615000
 << -13 >>  1403,      << Data  bit 28.                     >> <<03020>>02620000
 << -12 >>  1503,      << Data  bit 27.                     >> <<03020>>02625000
 << -11 >>  1603,      << Data  bit 26.                     >> <<03020>>02630000
 << -10 >>  1703,      << Data  bit 25.                     >> <<03020>>02635000
 << - 9 >>  1803,      << Data  bit 24.                     >> <<03020>>02640000
 << - 8 >>  1903,      << Data  bit 23.                     >> <<03020>>02645000
 << - 7 >>  2003,      << Data  bit 22.                     >> <<03020>>02650000
 << - 6 >>  2103,      << Data  bit 21.                     >> <<03020>>02655000
 << - 5 >>  2203,      << Data  bit 20.                     >> <<03020>>02660000
 << - 4 >>   302,      << Data  bit 19.                     >> <<03020>>02665000
 << - 3 >>   402,      << Data  bit 18.                     >> <<03020>>02670000
 << - 2 >>   502,      << Data  bit 17.                     >> <<03020>>02675000
 << - 1 >>   602,      << Data  bit 16.                     >> <<03020>>02680000
 <<   0 >>  2202,      << Data  bit  0.                     >> <<03020>>02685000
 <<   1 >>  2102,      << Data  bit  1.                     >> <<03020>>02690000
 <<   2 >>  2002,      << Data  bit  2.                     >> <<03020>>02695000
 <<   3 >>  1902,      << Data  bit  3.                     >> <<03020>>02700000
 <<   4 >>  1802,      << Data  bit  4.                     >> <<03020>>02705000
 <<   5 >>  1702,      << Data  bit  5.                     >> <<03020>>02710000
 <<   6 >>  1602,      << Data  bit  6.                     >> <<03020>>02715000
 <<   7 >>  1502,      << Data  bit  7.                     >> <<03020>>02720000
 <<   8 >>  1402,      << Data  bit  8.                     >> <<03020>>02725000
 <<   9 >>  1302,      << Data  bit  9.                     >> <<03020>>02730000
 <<  10 >>  1202,      << Data  bit 10.                     >> <<03020>>02735000
 <<  11 >>  1102,      << Data  bit 11.                     >> <<03020>>02740000
 <<  12 >>  1002,      << Data  bit 12.                     >> <<03020>>02745000
 <<  13 >>   902,      << Data  bit 13.                     >> <<03020>>02750000
 <<  14 >>   802,      << Data  bit 14.                     >> <<03020>>02755000
 <<  15 >>   702;      << Data  bit 15.                     >> <<03020>>02760000
                                                               <<03020>>02765000
                                                               <<03020>>02770000
INTEGER ARRAY DATA'TP(0:87):=                                  <<RK2MB>>02775000
<<              ROW (BITS 9:2)             >>                           02780000
<<               000   001   010   011     >>                           02785000
<<     FAULT     ---   ---   ---   ---     >>                           02790000
                                                                        02795000
    <<  0 >>     11,   12,   13,   14,                                  02800000
    <<  1 >>     21,   22,   23,   24,                                  02805000
    <<  2 >>     31,   32,   33,   34,                                  02810000
    <<  3 >>     41,   42,   43,   44,                                  02815000
    <<  4 >>     51,   52,   53,   54,                                  02820000
    <<  5 >>     61,   62,   63,   64,                                  02825000
    <<  6 >>     91,   92,   93,   94,                                  02830000
    <<  7 >>    101,  102,  103,  104,                                  02835000
    <<  8 >>    111,  112,  113,  114,                                  02840000
    <<  9 >>    121,  122,  123,  124,                                  02845000
    << 10 >>    131,  132,  133,  134,                                  02850000
    << 11 >>    161,  162,  163,  164,                                  02855000
    << 12 >>    171,  172,  173,  174,                                  02860000
    << 13 >>    181,  182,  183,  184,                                  02865000
    << 14 >>    191,  192,  193,  194,                                  02870000
    << 15 >>    201,  202,  203,  204,                                  02875000
    << H0 >>    211,  212,  213,  214,                                  02880000
    << H1 >>    241,  242,  243,  244,                                  02885000
    << H2 >>    251,  252,  253,  254,                                  02890000
    << H3 >>    261,  262,  263,  264,                                  02895000
    << H4 >>    271,  272,  273,  274,                                  02900000
    << H5 >>    281,  282,  283,  284;                                  02905000
                                                                        02910000
INTEGER ARRAY DATA'2MB(0:175) :=                               <<RK2MB>>02915000
<<                            ROW (BITS 8:3)                            02920000
<<               000   001   010   011   100   101   110   111          02925000
<<     FAULT     ---   ---   ---   ---   ---   ---   ---   ---          02930000
                                                                        02935000
    <<  0 >>     19,   18,   17,   16,   15,   14,   13,   12,          02940000
    <<  1 >>     29,   28,   27,   26,   25,   24,   23,   22,          02945000
    <<  2 >>     39,   38,   37,   36,   35,   34,   33,   32,          02950000
    <<  3 >>     49,   48,   47,   46,   45,   44,   43,   42,          02955000
    <<  4 >>     59,   58,   57,   56,   55,   54,   53,   52,          02960000
    <<  5 >>     69,   68,   67,   66,   65,   64,   63,   62,          02965000
    <<  6 >>     79,   78,   77,   76,   75,   74,   73,   72,          02970000
    <<  7 >>     89,   88,   87,   86,   85,   84,   83,   82,          02975000
    <<  8 >>     99,   98,   97,   96,   95,   94,   93,   92,          02980000
    <<  9 >>    109,  108,  107,  106,  105,  104,  103,  102,          02985000
    << 10 >>    119,  118,  117,  116,  115,  114,  113,  112,          02990000
    << 11 >>    149,  148,  147,  146,  145,  144,  143,  142,          02995000
    << 12 >>    159,  158,  157,  156,  155,  154,  153,  152,          03000000
    << 13 >>    169,  168,  167,  166,  165,  164,  163,  162,          03005000
    << 14 >>    179,  178,  177,  176,  175,  174,  173,  172,          03010000
    << 15 >>    189,  188,  187,  186,  185,  184,  183,  182,          03015000
    << C0 >>    199,  198,  197,  196,  195,  194,  193,  192,          03020000
    << C1 >>    209,  208,  207,  206,  205,  204,  203,  202,          03025000
    << C2 >>    219,  218,  217,  216,  215,  214,  213,  212,          03030000
    << C3 >>    229,  228,  227,  226,  225,  224,  223,  222,          03035000
    << C4 >>    239,  238,  237,  236,  235,  234,  233,  232,          03040000
    << C5 >>    249,  248,  247,  246,  245,  244,  243,  242;          03045000
                                                                        03050000
INTEGER ARRAY CHECKB(0:127) :=                                          03055000
<<                   BIT B      BIT C      BIT D      BIT E      >>     03060000
<<     (6:5)         -----      -----      -----      -----      >>     03065000
                                                                        03070000
    << 00000 >>       93,        94,        95,        96,              03075000
    << 00001 >>       83,        84,        85,        86,              03080000
    << 00010 >>       73,        74,        75,        76,              03085000
    << 00011 >>       63,        64,        65,        66,              03090000
    << 00100 >>       43,        44,        45,        46,              03095000
    << 00101 >>       33,        34,        35,        36,              03100000
    << 00110 >>       23,        24,        25,        26,              03105000
    << 00111 >>       13,        14,        15,        16,              03110000
    << 01000 >>       97,        98,        99,       910,              03115000
    << 01001 >>       87,        88,        89,       810,              03120000
    << 01010 >>       77,        78,        79,       710,              03125000
    << 01011 >>       67,        68,        69,       610,              03130000
    << 01100 >>       47,        48,        49,       410,              03135000
    << 01101 >>       37,        38,        39,       310,              03140000
    << 01110 >>       27,        28,        29,       210,              03145000
    << 01111 >>       17,        18,        19,       110,              03150000
    << 10000 >>      911,       912,       913,       914,              03155000
    << 10001 >>      811,       812,       813,       814,              03160000
    << 10010 >>      711,       712,       713,       714,              03165000
    << 10011 >>      611,       612,       613,       614,              03170000
    << 10100 >>      411,       412,       413,       414,              03175000
    << 10101 >>      311,       312,       313,       314,              03180000
    << 10110 >>      211,       212,       213,       214,              03185000
    << 10111 >>      111,       112,       113,       114,              03190000
    << 11000 >>      915,       916,       917,       918,              03195000
    << 11001 >>      815,       816,       817,       818,              03200000
    << 11010 >>      715,       716,       717,       718,              03205000
    << 11011 >>      615,       616,       617,       618,              03210000
    << 11100 >>      415,       416,       417,       418,              03215000
    << 11101 >>      315,       316,       317,       318,              03220000
    << 11110 >>      215,       216,       217,       218,              03225000
    << 11111 >>      115,       116,       117,       118;              03230000
                                                                        03235000
INTRINSIC FOPEN,FCLOSE,FREADDIR,FWRITE,FWRITEDIR,              <<01.01>>03240000
          FLOCK,FUNLOCK;                                       <<01.01>>03245000
INTRINSIC PRINT,ASCII,TERMINATE,PRINT'FILE'INFO,WHO;           <<01169>>03250000
                                                                        03255000
INTEGER PROCEDURE THISCPU;                                     <<RK2MB>>03260000
OPTION EXTERNAL;                                               <<RK2MB>>03265000
                                                               <<RK2MB>>03270000
PROCEDURE HELP;                                                         03275000
 OPTION EXTERNAL;                                                       03280000
                                                                        03285000
PROCEDURE SPACE(SPACENUM);                                              03290000
VALUE SPACENUM; INTEGER SPACENUM;                                       03295000
BEGIN                                                                   03300000
     INTEGER I;                                                         03305000
     ARRAY BLANK(0:0);                                         <<01.01>>03310000
                                                                        03315000
     BLANK(0) := "  ";                                         <<01.01>>03320000
     FOR I:=1 UNTIL SPACENUM DO FWRITE(OUTFNUM,BLANK,-1,0);             03325000
END  <<SPACE >>;                                                        03330000
                                                                        03335000
PROCEDURE ERRMESSAGE(FILENUM,ERRNUMB);                                  03340000
VALUE FILENUM,ERRNUMB;                                                  03345000
INTEGER FILENUM,ERRNUMB;                                                03350000
BEGIN                                                                   03355000
     IF ERRNUMB = FSERR THEN  <<FILE SYSTEM PROBLEM>>                   03360000
     BEGIN                                                              03365000
          PRINT'FILE'INFO(FILENUM.(8:8));                               03370000
          IF FILENUM.TYPEF = OUTYPE THEN  <<OUT FILE ERROR>>            03375000
          MOVE PBUF:="* OUT",2 ELSE         <<LOG FILE ERROR>>          03380000
          MOVE PBUF:="* LOG",2;                                         03385000
          MOVE * :=" FILE ERROR *";                                     03390000
          PRINT(WPBUF,-18,0);                                  <<01.01>>03395000
     END ELSE                                                           03400000
     BEGIN                                                              03405000
          MOVE ERRMSG:="* MEMLOGAN ERROR:     *";                       03410000
          ASCII(ERRNUMB,10,ERRMSG(18));                                 03415000
          PRINT(WPBUF,-22,0);                                  <<01.01>>03420000
     END;                                                               03425000
     TERMINATE;                                                         03430000
END <<ERRMESSAGE>>;                                                     03435000
                                                                        03440000
PROCEDURE GETIMEINFO;                                          <<00.04>>03445000
BEGIN                                                          <<00.04>>03450000
     DOUBLE FTIME,LTIME;                                       <<00.04>>03455000
     INTEGER                                                   <<00.04>>03460000
          FTIME1 = FTIME,                                      <<00.04>>03465000
          LTIME1 = LTIME;                                      <<00.04>>03470000
                                                               <<00.04>>03475000
     ERRTIME1:=ERRTIME2:=0D;                                   <<00.04>>03480000
     FOR REC:=CONTROLLER'A UNTIL CONTROLLER'B DO               <<RK2MB>>03485000
     BEGIN                                                     <<00.04>>03490000
          FREADDIR(LOGFNUM,LOGREC,RECSIZE,DOUBLE(REC));        <<00.04>>03495000
          IF < THEN ERRMESSAGE(LOGFILE,FSERR);                 <<00.04>>03500000
          IF REC = CONTROLLER'A THEN <<GET START/UPDATE TIMES>><<RK2MB>>03505000
          BEGIN                                                <<00.05>>03510000
               STIME:=LOGRECD(STARTIME);  <<START TIME>>       <<00.05>>03515000
               UTIME:=LOGRECD(LASTIME);   <<LAST UPDATE>>      <<00.05>>03520000
               DELAY:=LOGREC(DELAYLOC);   <<TIMING INTERVAL>>  <<00.05>>03525000
          END;                                                 <<00.05>>03530000
          FTIME:=LOGRECD(FERRTIME);                            <<00.04>>03535000
          LTIME:=LOGRECD(LERRTIME);                            <<00.04>>03540000
          FTIME1.(0:1):=0;  <<FOR DATE COMPARISON (> 0D)>>     <<00.04>>03545000
          LTIME1.(0:1):=0;  <<FOR DATE COMPARISON (> 0D)>>     <<00.04>>03550000
          ERRTIME1:=IF FTIME = 0D THEN ERRTIME1 ELSE           <<00.04>>03555000
                    IF ERRTIME1=0D THEN LOGRECD(FERRTIME) ELSE <<00.04>>03560000
                    IF ERRTIME1 < LOGRECD(FERRTIME) THEN       <<00.05>>03565000
                    LOGRECD(FERRTIME) ELSE ERRTIME1;           <<00.05>>03570000
          ERRTIME2:=IF LTIME = 0D THEN ERRTIME2 ELSE           <<00.05>>03575000
                    IF ERRTIME2=0D THEN LOGRECD(LERRTIME) ELSE <<00.05>>03580000
                    IF ERRTIME2 > LOGRECD(LERRTIME) THEN       <<00.05>>03585000
                    LOGRECD(LERRTIME) ELSE ERRTIME2;           <<00.05>>03590000
     END;                                                      <<00.04>>03595000
END << GETIMEINFO >>;                                          <<00.04>>03600000
                                                               <<00.04>>03605000
PROCEDURE FILL'DATE'TIME(DATETIME,LOC);                        <<00.04>>03610000
VALUE DATETIME,LOC;                                            <<00.04>>03615000
DOUBLE DATETIME;                                               <<00.04>>03620000
INTEGER LOC;                                                   <<00.04>>03625000
BEGIN                                                                   03630000
                                                               <<00.04>>03635000
                                                                        03640000
     INTEGER                                                            03645000
          DATE  = DATETIME,                                             03650000
          TIME  = DATETIME + 1;                                         03655000
                                                                        03660000
     INTEGER M,D,Y;                                                     03665000
     INTEGER ARRAY DTAB(0:11)=PB:=                                      03670000
            0,  31,  59,  90, 120, 151, 181,                            03675000
          212, 243, 273, 304, 334;                                      03680000
                                                                        03685000
                                                               <<00.04>>03690000
     MOVE PBUF(LOC):="DATE:   /  /     TIME:   :0     ";                03695000
     << FILL DATE >>                                                    03700000
     Y:=DATE.(0:7);                                                     03705000
     D:=DATE.(7:9);                                                     03710000
     IF Y.(14:2) = 0 AND D >= 60 THEN D:=D-1;  <<LEAP YEAR>>            03715000
     M:=12;  <<ASSUME DECEMBER>>                                        03720000
     DO  M:=M-1 UNTIL DTAB(M) < D;  <<FIND CORRECT MONTH>>              03725000
     D:=D-DTAB(M);  <<DAY OF THE MONTH>>                                03730000
     M:=M+1;  <<FIX MONTH FOR OUTPUT PURPOSES>>                         03735000
     ASCII(M,-10,PBUF(LOC+7));                                          03740000
     ASCII(D,-10,PBUF(LOC+10));                                         03745000
     ASCII(Y,-10,PBUF(LOC+13));                                         03750000
     << FILL TIME OF DAY INFORMATION>>                                  03755000
     ASCII(TIME.(0:8),-10,PBUF(LOC+24));                                03760000
     ASCII(TIME.(8:8),-10,PBUF(LOC+27));                                03765000
     FWRITE(OUTFNUM,WPBUF,-50,0);                              <<01.01>>03770000
END << FILL'DATE'TIME >>;                                               03775000
                                                                        03780000
PROCEDURE OPEN'FILES;                                                   03785000
BEGIN                                                                   03790000
     MOVE FNAME:="MEMLOG.PUB.SYS ";                                     03795000
     LOGFNUM:=FOPEN(FNAME,FOPTIONS,%744,RECSIZE,,,,,,,,,FILECODE);      03800000
     IF <> THEN ERRMESSAGE(LOGFILE,FSERR);                              03805000
     MOVE FNAME:="OUT ";                                                03810000
     OUTFNUM:=FOPEN(FNAME,%414,%1); <<FOPT:CCTL,$STDLIST,ASCII;AOPT:WR>>03815000
     IF <> THEN ERRMESSAGE(OUTFILE,FSERR);                              03820000
END << OPEN'FILES >>;                                                   03825000
                                                                        03830000
PROCEDURE PRINT'TIMES;                                         <<00.01>>03835000
BEGIN                                                          <<00.01>>03840000
     INTEGER H,M;                                              <<00.05>>03845000
                                                               <<00.02>>03850000
     PRINTIMES:=FALSE;  <<PRINT TIME INFO ONLY ONCE>>          <<00.01>>03855000
     MOVE PBUF:="LOGGING STARTED    - ";                       <<00.01>>03860000
     FILL'DATE'TIME(STIME,21);  <<LOG START TIME>>             <<00.05>>03865000
     IF ERRTIME1 <> 0D THEN  <<AT LEAST ONE ERROR>>            <<00.04>>03870000
     BEGIN                                                     <<00.01>>03875000
          MOVE PBUF:="FIRST ERROR LOGGED - ";                  <<00.01>>03880000
          FILL'DATE'TIME(ERRTIME1,21);                         <<00.04>>03885000
          MOVE PBUF:="LAST ERROR LOGGED  - ";                  <<00.01>>03890000
          FILL'DATE'TIME(ERRTIME2,21);                         <<00.04>>03895000
     END;                                                      <<00.01>>03900000
     MOVE PBUF:="LAST LOG UPDATE    - ";                       <<00.01>>03905000
     FILL'DATE'TIME(UTIME,21);  <<LAST UPDATE TIME>>           <<00.05>>03910000
     MOVE PBUF:="TIMING INTERVAL    -  0:00:00 ";              <<00.01>>03915000
                                                               <<00.05>>03920000
     H:=DELAY/3600;          <<HOURS >>                        <<00.01>>03925000
     DELAY:=DELAY-(H * 3600);                                  <<00.01>>03930000
     M:=DELAY/60;            <<MINUTES>>                       <<00.01>>03935000
     DELAY:=DELAY-(M * 60);  <<SECONDS>>                       <<00.01>>03940000
     ASCII(H,-10,PBUF(22));                                    <<00.01>>03945000
     ASCII(M,-10,PBUF(25));                                    <<00.01>>03950000
     ASCII(DELAY,-10,PBUF(28));                                <<00.01>>03955000
     FWRITE(OUTFNUM,WPBUF,-29,0);                              <<01.01>>03960000
     SPACE(2);  <<DOUBLE SPACE OUTPUT DEVICE>>                 <<00.01>>03965000
END <<PRINT'TIMES>>;                                           <<00.01>>03970000
                                                               <<00.01>>03975000
PROCEDURE PRINT'HEADING;                                                03980000
BEGIN                                                                   03985000
                                                                        03990000
     MOVE PBUF:=HEAD3,(62);                                             03995000
     FWRITE(OUTFNUM,WPBUF,-62,0);                              <<01.01>>04000000
     IF RAMS'ARE'16K THEN                                      <<RK2MB>>04005000
     MOVE PBUF:=HEAD1'16K,(62) ELSE                            <<RK2MB>>04010000
     MOVE PBUF:=HEAD1,(62);                                             04015000
     FWRITE(OUTFNUM,WPBUF,-62,0);                              <<01.01>>04020000
     MOVE PBUF:=HEAD4,(62);                                             04025000
     FWRITE(OUTFNUM,WPBUF,-62,0);                              <<01.01>>04030000
     IF RAMS'ARE'16K THEN                                      <<RK2MB>>04035000
     MOVE PBUF:=HEAD2'16K,(62) ELSE                            <<RK2MB>>04040000
     MOVE PBUF:=HEAD2,(62);                                             04045000
     FWRITE(OUTFNUM,WPBUF,-62,0);                              <<01.01>>04050000
     MOVE PBUF:=HEAD3,(62);                                             04055000
     FWRITE(OUTFNUM,WPBUF,-62,0);                              <<01.01>>04060000
     PBUF:=" "; MOVE PBUF(1):=PBUF,(71);                                04065000
     IF RAMS'ARE'16K THEN                                      <<RK2MB>>04070000
     PBUF:=PBUF(16):=PBUF(24):=PBUF(30):=PBUF(53):=PBUF(61):="I" <<2MB>>04075000
     ELSE                                                      <<RK2MB>>04080000
     PBUF:=PBUF(9):=PBUF(17):=PBUF(23):=PBUF(53):=PBUF(61):="I";        04085000
END <<PRINT'HEADING>>;                                                  04090000
$PAGE                                                          <<03020>>04095000
PROCEDURE PRINT'HEAD'ICF55;                                    <<03020>>04100000
BEGIN COMMENT                                                  <<03020>>04105000
  PRINT'HEAD'ICF55 is, as its name suggests, analogous to  the <<03020>>04110000
PRINT'HEADING procedure, but for the ICF55. It has been made a <<03020>>04115000
separate procedure because all the record lengths and spacings <<03020>>04120000
are  different,  and I felt that this was more straightforward <<03020>>04125000
than including a bunch of special-case code in PRINT'HEADING.  <<03020>>04130000
;                                                              <<03020>>04135000
MOVE PBUF := HEAD3, (47);   << "--------...---------------" >> <<03020>>04140000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<03020>>04145000
                                                               <<03020>>04150000
MOVE PBUF := "I    ADDRESS   I      ERROR TYPE      I ERROR I";<<03020>>04155000
                                                                        04160000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<03020>>04165000
                                                               <<03020>>04170000
MOVE PBUF := HEAD4(15), (47);                                  <<03020>>04175000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<03020>>04180000
                                                               <<03020>>04185000
MOVE PBUF := "I BOARD I WORD I  TYPE   BIT   CHIP   I COUNT I";<<03020>>04190000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<03020>>04195000
                                                               <<03020>>04200000
MOVE PBUF := HEAD3, (47);                                      <<03020>>04205000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<03020>>04210000
END;   << of PRINT'HEAD'ICF55.                              >> <<03020>>04215000
PROCEDURE PRINT'HEAD'MM;                                       <<M8068>>04220000
BEGIN COMMENT                                                  <<M8068>>04225000
  PRINT'HEAD'MM is, as its name suggests, analogous to  the    <<M8068>>04230000
PRINT'HEADING procedure, but for the MM. It has been made a    <<M8068>>04235000
separate procedure because all the record lengths and spacings <<M8068>>04240000
are  different,  and I felt that this was more straightforward <<M8068>>04245000
than including a bunch of special-case code in PRINT'HEADING.  <<M8068>>04250000
;                                                              <<M8068>>04255000
MOVE PBUF := HEAD3, (47);   << "--------...---------------" >> <<M8068>>04260000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<M8068>>04265000
                                                               <<M8068>>04270000
MOVE PBUF := "I    ADDRESS   I      ERROR TYPE      I ERROR I";<<M8068>>04275000
                                                                        04280000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<M8068>>04285000
                                                               <<M8068>>04290000
MOVE PBUF := HEAD4(15), (47);                                  <<M8068>>04295000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<M8068>>04300000
                                                               <<M8068>>04305000
MOVE PBUF := "I BOARD I ROW  I  TYPE   BIT   CHIP   I COUNT I";<<M8068>>04310000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<M8068>>04315000
                                                               <<M8068>>04320000
MOVE PBUF := HEAD3, (47);                                      <<M8068>>04325000
FWRITE (OUTFNUM, WPBUF, -47, 0);                               <<M8068>>04330000
END;   << of PRINT'HEAD'MM.                                 >> <<M8068>>04335000
PROCEDURE PRINT'LOGREC(MEMREC);                                         04340000
VALUE MEMREC; INTEGER MEMREC;                                           04345000
BEGIN                                                                   04350000
                                                               <<00.01>>04355000
     BYTE ARRAY DATAERR(0:1)=PB:=    "DATA                     ";       04360000
     BYTE ARRAY CHECKERR(0:1)=PB:=   "CHECK                    ";       04365000
     BYTE ARRAY MULTIPLERR(0:1)=PB:= "MULTIPLE BIT ERROR       ";       04370000
     BYTE ARRAY CLOCKERR(0:1)=PB:=   "READ CLOCK FAILURE       ";       04375000
     BYTE ARRAY DRIVERR(0:1)=PB:=    "I/O DRIVER FAULT         ";       04380000
     BYTE ARRAY LOGSYSERR(0:1)=PB:=  "LOGGING SYSTEM ERROR     ";       04385000
                                                                        04390000
     ERRCNT:=0;                                                         04395000
     IF MEMREC = 0 THEN  <<FIRST RECORD - PRINT TIME STAMP>>            04400000
     IF LOGRECD(STARTIME) = 0D THEN  <<NULL LOG>>                       04405000
     BEGIN                                                              04410000
          MOVE PBUF:="* NO ENTRIES IN MEMLOG FILE *";                   04415000
          FWRITE(OUTFNUM,WPBUF,-29,0);                         <<01.01>>04420000
          REC:=CONTROLLER'B;  << STOP OUTER BLOCK LOOP >>      <<RK2MB>>04425000
          ERRORCOUNT:=-1;  <<FOR CLEANUPOUTPUT PROCEDURE>>     <<00.01>>04430000
     END;                                                      <<00.01>>04435000
     IF LOGRECD(STARTIME) = 0D THEN RETURN;  <<NULL RECORD>>            04440000
     FOR I:=0 UNTIL 1023 DO                                             04445000
     IF LOGREC(I) <> 0 THEN  <<ERROR OCCURRED AT ADDRESS I>>            04450000
     BEGIN                                                              04455000
          ERRCNT:=ERRCNT+1;                                             04460000
          ERRORCOUNT:=ERRORCOUNT+1;  <<BOTH CONTROLLERS>>      <<RK2MB>>04465000
     END;                                                               04470000
     IF ERRCNT <> 0 THEN  <<ERRORS LOGGED>>                             04475000
     BEGIN                                                              04480000
          IF PRINTIMES THEN PRINT'TIMES;                       <<00.01>>04485000
          OLDBANK:=OLDBOARD:=OLDROW:=-1;                                04490000
          FOR I:=0 UNTIL 1023 DO                                        04495000
          BEGIN                                                         04500000
               IF LOGREC(I) <> 0 THEN  <<ERRORS OCCURRED>>              04505000
               BEGIN                                                    04510000
                    IF HEADING THEN                                     04515000
                    BEGIN                                               04520000
                         HEADING:=FALSE;                                04525000
                         PRINT'HEADING;                                 04530000
                    END;                                                04535000
                    IF (BOARD:=I.(6:2)) <> OLDBOARD THEN                04540000
                    BEGIN                                               04545000
                         OLDBOARD:=BOARD;                               04550000
                         BANK:=(BOARD & LSR(1)) + (MEMREC & LSL(1));    04555000
                         IF BANK <> OLDBANK THEN                        04560000
                         BEGIN                                          04565000
                              OLDBANK:=BANK;                            04570000
                              MOVE PBUF(2):="BANK  ";                   04575000
                              ASCII(BANK,10,PBUF(7));                   04580000
                         END ELSE                                       04585000
                         MOVE PBUF(2):="      ";  <<BLANK BANK NO.>>    04590000
                         MOVE PBUF(13):="32K";                          04595000
                         PBUF(12):=IF LOGICAL(BOARD) THEN "U" ELSE "L"; 04600000
                    END ELSE                                            04605000
                    BEGIN                                               04610000
                         MOVE PBUF(2):="      ";  <<BLANK BANK NUMBER>> 04615000
                         MOVE PBUF(12):="    ";  <<BLANK 32K NUMBER>>   04620000
                    END;                                                04625000
                    ROW:=I.(8:3);                                       04630000
                    FAULT:=FAULTS(I.(11:5));                            04635000
                    IF (0<=FAULT<=20) THEN  <<DATA/CHECK BIT ERROR>>    04640000
                    BEGIN                                               04645000
                         IF (0<=FAULT<=16) THEN  <<DATA/CHECK A ERROR>> 04650000
                         BEGIN                                          04655000
                              CHIP:=DATAB((FAULT*ROWNUM)+ROW);          04660000
                              IF FAULT = 16 THEN  <<CHECK BIT A>>       04665000
                              BEGIN                                     04670000
                                   MOVE PBUF(26):=CHECKERR,(25);        04675000
                                   PBUF(35):="A";                       04680000
                              END ELSE                                  04685000
                              BEGIN                                     04690000
                                   MOVE PBUF(26):=DATAERR,(25);         04695000
                                   ASCII(FAULT,-10,PBUF(35));           04700000
                              END;                                      04705000
                         END ELSE  <<CHECK BITS B,C,D, OR E>>           04710000
                         BEGIN                                          04715000
                              CHECKBIT:=FAULT-17;                       04720000
                              CHIP:=CHECKB((I.(6:5)*CHECKNUM)+CHECKBIT);04725000
                              MOVE PBUF(26):=CHECKERR,(25);             04730000
                              PBUF(35):=(FAULT-16) + %101;  <<ASCII>>   04735000
                         END;                                           04740000
                         IF (0<=FAULT<=16) THEN                         04745000
                         MOVE PBUF(40):="SMA" ELSE                      04750000
                         MOVE PBUF(40):="FCA";                          04755000
                         PBUF(47):="U";                                 04760000
                         ASCII(CHIP,10,PBUF(48));                       04765000
                    END ELSE                                            04770000
                    CASE * (FAULT-21) OF                                04775000
                    BEGIN                                               04780000
                         MOVE PBUF(26):=MULTIPLERR,(25);                04785000
                         MOVE PBUF(26):=CLOCKERR,(25);                  04790000
                         MOVE PBUF(26):=DRIVERR,(25);                   04795000
                         MOVE PBUF(26):=LOGSYSERR,(25);                 04800000
                    END  <<CASE STATEMENT>>;                            04805000
                    MOVE PBUF(19):="   ";  <<BLANK ROW NUMBER>>         04810000
                    MOVE PBUF(55):="    "; <<BLANK ERROR COUNT>>        04815000
                    ASCII(ROW,-10,PBUF(21));                            04820000
                    ASCII(LOGREC(I),-10,PBUF(59));                      04825000
                    FWRITE(OUTFNUM,WPBUF,-62,0);               <<01.01>>04830000
                    IF (LINECNT:=LINECNT+1) = LINEMAX THEN              04835000
                    BEGIN                                               04840000
                         LINECNT:=0;                                    04845000
                         MOVE PBUF:=HEAD3,(62);                         04850000
                         FWRITE(OUTFNUM,WPBUF,-62,%61);        <<01.01>>04855000
                         HEADING:=TRUE;                                 04860000
                         OLDBANK:=OLDBOARD:=-1;                         04865000
                    END;                                                04870000
               END;                                                     04875000
          END;                                                          04880000
     END;                                                               04885000
END  << PRINT'LOGREC >>;                                                04890000
LOGICAL PROCEDURE ODD'PARITY(I);                               <<01397>>04895000
 VALUE I;                                                      <<01397>>04900000
 LOGICAL I;                                                    <<01397>>04905000
 BEGIN;                                                        <<01397>>04910000
  TOS := I;                                                    <<01397>>04915000
  ASSEMBLE(  DUP;                                              <<01397>>04920000
             CSR  4;                                           <<01397>>04925000
             XOR,DUP;                                          <<01397>>04930000
             CSR  2;                                           <<01397>>04935000
             XOR,DUP;                                          <<01397>>04940000
             CSR 1;                                            <<01397>>04945000
             XOR,DUP;                                          <<01397>>04950000
             CSR 8;                                            <<01397>>04955000
             XOR;);                                            <<01397>>04960000
  ODD'PARITY := TOS;                                           <<01397>>04965000
 END;                                                          <<01397>>04970000
                                                               <<RK2MB>>04975000
PROCEDURE PRINT'LOGREC'16K(MEMREC);                            <<RK2MB>>04980000
VALUE MEMREC; INTEGER MEMREC;                                           04985000
BEGIN                                                                   04990000
                                                                        04995000
     EQUATE MULTIPLE'BIT'ERR = 22;                             <<01397>>05000000
     EQUATE LOG'SYS'ERR = 25;                                  <<02017>>05005000
                                                               <<01397>>05010000
      INTEGER PRONTO'FAULT;                                    <<01397>>05015000
     BYTE ARRAY DATAERR(0:1)=PB:=    "DATA                ";            05020000
     BYTE ARRAY CHECKERR(0:1)=PB:=   "CHECK               ";            05025000
     BYTE ARRAY MULTIPLERR(0:1)=PB:= "MULTIPLE BIT ERROR  ";            05030000
     BYTE ARRAY DEWERR(0:1)=PB:=     "FORCED D.E.W.       ";            05035000
     BYTE ARRAY NOBOARDERR(0:1)=PB:= "MISSING ARRAY BOARD ";            05040000
     BYTE ARRAY LOGSYSERR(0:1)=PB:=  "LOGGING SYSTEM ERROR";            05045000
     INTEGER ARRAY MLA'HIGH'ADR(0:4)=PB :=                     <<01397>>05050000
                    1023,1023,4095,1023,4095;                  <<01397>>05055000
                                                                        05060000
     ERRCNT:=0;                                                         05065000
     IF MEMREC = 0 THEN  <<FIRST RECORD - PRINT TIME STAMP>>            05070000
     IF LOGRECD(STARTIME) = 0D THEN  <<NULL LOG>>                       05075000
     BEGIN                                                              05080000
          MOVE PBUF:="* NO ENTRIES IN MEMLOG FILE *";                   05085000
          FWRITE(OUTFNUM,WPBUF,-29,0);                                  05090000
          REC:=CONTROLLER'B;  << STOP OUTER BLOCK LOOP >>               05095000
          ERRORCOUNT:=-1;  <<FOR CLEANUPOUTPUT PROCEDURE>>              05100000
     END;                                                               05105000
     IF LOGRECD(STARTIME) = 0D THEN RETURN;  <<NULL RECORD>>            05110000
     FOR I:=0 UNTIL MLA'HIGH'ADR(CPU'TYPE)  DO                 <<01397>>05115000
     IF LOGREC(I) <> 0 THEN  <<ERROR OCCURRED AT ADDRESS I>>            05120000
     BEGIN                                                              05125000
          ERRCNT:=ERRCNT+1;                                             05130000
          ERRORCOUNT:=ERRORCOUNT+1;  <<CONTROLLER A AND B >>            05135000
     END;                                                               05140000
     IF ERRCNT <> 0 THEN  <<ERRORS LOGGED>>                             05145000
     BEGIN                                                              05150000
          IF PRINTIMES THEN PRINT'TIMES;                                05155000
          OLDCONTROLLER:=OLDBOARD:=OLDROW:=-1;                          05160000
          FOR I:=0 UNTIL MLA'HIGH'ADR(CPU'TYPE)  DO            <<01397>>05165000
          BEGIN                                                         05170000
               IF LOGREC(I) <> 0 THEN  <<ERRORS OCCURRED>>              05175000
               BEGIN                                                    05180000
                    IF HEADING THEN                                     05185000
                    BEGIN                                               05190000
                         HEADING:=FALSE;                                05195000
                         PRINT'HEADING;                                 05200000
                    END;                                                05205000
                    BOARD:=IF TP'FLAG THEN I.(6:3) ELSE I.(6:2);        05210000
                    IF PRONTO THEN   BOARD := I.(4:3);         <<01397>>05215000
                    IF BOARD <> OLDBOARD THEN                           05220000
                    BEGIN                                               05225000
                         OLDBOARD:=BOARD;                               05230000
                         ASCII(BOARD,10,PBUF(20));                      05235000
                         IF MEMREC <> OLDCONTROLLER THEN                05240000
                         BEGIN                                          05245000
                              OLDCONTROLLER:=MEMREC;                    05250000
                              MOVE PBUF(2):="CONTROLLER   ";            05255000
                              PBUF(13):=%101+MEMREC;<<A OR B>>          05260000
                         END ELSE                                       05265000
                         MOVE PBUF(2):="             ";                 05270000
                    END ELSE                                            05275000
                    BEGIN                                               05280000
                         MOVE PBUF(2):="            ";                  05285000
                         MOVE PBUF(20):="  ";<<BLANK BOARD #>>          05290000
                    END;                                                05295000
                    ROW:=IF TP'FLAG THEN I.(9:2) ELSE I.(8:3);          05300000
                    IF PRONTO THEN   ROW := I.(7:2);           <<01397>>05305000
                    FAULT:=IF TP'FLAG THEN FAULTS'TP(I.(11:5))          05310000
                           ELSE FAULTS'2MB(I.(11:5));                   05315000
                    IF PRONTO THEN                             <<01397>>05320000
                       IF ODD'PARITY(I.(9:7))                  <<01397>>05325000
                         THEN FAULT := MULTIPLE'BIT'ERR        <<01397>>05330000
                         ELSE FAULT := FAULTS'PRONTO(I.(10:6));<<01397>>05335000
                    IF PRONTO AND I.(9:7)=%177                 <<02017>>05340000
                      THEN FAULT := LOG'SYS'ERR;               <<02017>>05345000
                    PRONTO'FAULT := FAULT;                     <<01397>>05350000
                    IF (-23<=FAULT<=21) THEN <<DATA/CHK ERROR>><<01397>>05355000
                    BEGIN                                               05360000
                         IF FAULT >= 16  OR   <<CHECK BIT>>    <<01397>>05365000
                  FAULT < -16  THEN <<PRONTO C. BIT>>          <<01397>>05370000
                         BEGIN                                          05375000
                              MOVE PBUF(33):=CHECKERR,(20);             05380000
                     IF FAULT<-16 THEN FAULT:= -FAULT-1;       <<01397>>05385000
                              ASCII((FAULT-16),-10,PBUF(42));           05390000
                         END ELSE                                       05395000
                         BEGIN                                          05400000
                     IF FAULT < 0 THEN FAULT:=-FAULT+15;       <<01397>>05405000
                              MOVE PBUF(33):=DATAERR,(20);              05410000
                              ASCII(FAULT,-10,PBUF(42));                05415000
                         END;                                           05420000
                         PBUF(46):="U";                                 05425000
                         CHIP:=IF TP'FLAG THEN                          05430000
                               DATA'TP((FAULT*ROWNUM'TP)+ROW)           05435000
                          ELSE DATA'2MB((FAULT*ROWNUM)+ROW);            05440000
                    IF PRONTO THEN                             <<01397>>05445000
                      CHIP := DATA'PRONTO(PRONTO'FAULT)+ROW*2; <<01397>>05450000
                         ASCII(CHIP,10,PBUF(47));                       05455000
                    END ELSE                                            05460000
                    CASE  (FAULT-22) OF                                 05465000
                    BEGIN                                               05470000
                         MOVE PBUF(33):=MULTIPLERR,(20);                05475000
                         MOVE PBUF(33):=DEWERR,(20);                    05480000
                         MOVE PBUF(33):=NOBOARDERR,(20);                05485000
                         MOVE PBUF(33):=LOGSYSERR,(20);                 05490000
                    END  <<CASE STATEMENT>>;                            05495000
                    MOVE PBUF(26):="   ";  <<BLANK ROW NUMBER>>         05500000
                    MOVE PBUF(55):="     "; <<BLANK ERR COUNT>>         05505000
                    ASCII(ROW,-10,PBUF(27));                            05510000
                    ASCII(LOGREC(I),-10,PBUF(59));                      05515000
                    FWRITE(OUTFNUM,WPBUF,-62,0);                        05520000
                    IF (LINECNT:=LINECNT+1) = LINEMAX THEN              05525000
                    BEGIN                                               05530000
                         LINECNT:=0;                                    05535000
                         MOVE PBUF:=HEAD3,(62);                         05540000
                         FWRITE(OUTFNUM,WPBUF,-62,%61);<<EJECT>>        05545000
                         HEADING:=TRUE;                                 05550000
                         OLDCONTROLLER:=OLDBOARD:=-1;                   05555000
                    END;                                                05560000
               END;                                                     05565000
          END;                                                          05570000
     END;                                                               05575000
END; << PRINT'LOGREC'16K >>                                    <<03020>>05580000
PROCEDURE PRINT'MM(MEMREC);                                    <<M8068>>05585000
VALUE MEMREC; INTEGER MEMREC;                                  <<M8068>>05590000
BEGIN                                                          <<M8068>>05595000
                                                               <<M8068>>05600000
  BYTE ARRAY DATAERR(0:1)=PB :=      "DATA                ";   <<M8068>>05605000
  BYTE ARRAY CHECKERR(0:1)=PB :=     "CHECK               ";   <<M8068>>05610000
  BYTE ARRAY MULTIPLERR(0:1)=PB :=   "MULTIPLE BIT ERROR  ";   <<M8068>>05615000
  BYTE ARRAY BLANKS(0:61)=PB :=                                <<M8068>>05620000
"                                                            ";<<M8068>>05625000
  INTEGER ARRAY FAULT'ARRAY(0:77)=PB :=                        <<M8068>>05630000
  << 0 >>  1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,     <<*8720>>05635000
  << 1 >>  901, 902, 903, 904, 905, 906, 907, 908, <<BLOCK 1>> <<*8720>>05640000
  << 2 >>  801, 802, 803, 804, 805, 806, 807, 808, <<BLOCK 0>> <<*8720>>05645000
  << 3 >>  701, 702, 703, 704, 705, 706, 707, 708, <<BLOCK 1>> <<*8720>>05650000
  << 4 >>  601, 602, 603, 604, 605, 606, 607, 608, <<BLOCK 0>> <<*8720>>05655000
  << 5 >>  501, 502, 503, 504, 505, 506, 507, 508, <<BLOCK 1>> <<*8720>>05660000
  << 6 >>  401, 402, 403, 404, 405, 406, 407, 408, <<BLOCK 0>> <<*8720>>05665000
  << 7 >>  301, 302, 303, 304, 305, 306, 307, 308, <<BLOCK 1>> <<*8720>>05670000
  << 8 >>  201, 202, 203, 204, 205, 206, 207,    <<CHECK BIT>> <<*8720>>05675000
  << 9 >>  101, 102, 103, 104, 105, 106, 107;      <<BLOCK 1>> <<*8720>>05680000
                                                               <<M8068>>05685000
                                                               <<M8068>>05690000
  EQUATE ENTRIES = 79;                                         <<M8068>>05695000
                                                               <<M8068>>05700000
  INTEGER                                                      <<M8068>>05705000
    CHIP,       I,       INDEX,        OFFSET,                 <<M8068>>05710000
    REMAINDER,  ROW;                                           <<M8068>>05715000
                                                               <<M8068>>05720000
  IF MEMREC = 0 THEN  <<FIRST RECORD - PRINT TIME STAMP>>      <<M8068>>05725000
  IF LOGRECD(STARTIME) = 0D THEN                               <<M8068>>05730000
    BEGIN                                                      <<M8068>>05735000
      MOVE PBUF := "* NO ENTRIES IN MEMLOG FILE *";            <<M8068>>05740000
      FWRITE(OUTFNUM,WPBUF,-29,0);                             <<M8068>>05745000
      REC := CONTROLLER'B;                                     <<M8068>>05750000
      ERRORCOUNT := -1;  <<FOR CLEANUPOUTPUT PROCEDURE>>       <<M8068>>05755000
    END;                                                       <<M8068>>05760000
  IF LOGRECD(STARTIME) = 0D THEN RETURN;                       <<M8068>>05765000
  IF BANKS >= 8 THEN NEXT'CONTROLLER(CPU'TYPE) := 16;          <<M8068>>05770000
  FOR I := 0 UNTIL ENTRIES DO                                  <<M8068>>05775000
    BEGIN                                                      <<M8068>>05780000
      IF LOGREC(I) <> 0 THEN   << ERROR DETECTED >>            <<M8068>>05785000
        BEGIN                                                  <<M8068>>05790000
          ERRORCOUNT := ERRORCOUNT + 1;                        <<M8068>>05795000
          IF PRINTIMES THEN PRINT'TIMES;                       <<M8068>>05800000
          IF HEADING THEN                                      <<M8068>>05805000
          BEGIN                                                <<M8068>>05810000
            HEADING := FALSE;                                  <<M8068>>05815000
            PRINT'HEAD'MM;                                     <<M8068>>05820000
          END;                                                 <<M8068>>05825000
        PBUF := " ";  MOVE PBUF(1) := PBUF, (61);              <<M8068>>05830000
        PBUF := PBUF(8) := PBUF(15) := PBUF(38) := PBUF(46)    <<M8068>>05835000
             := "I";                                           <<M8068>>05840000
        ASCII(MEMREC,10,PBUF(4));                              <<M8068>>05845000
        MOVE PBUF(11) := " ";     << CLEAR ROW NO >>           <<M8068>>05850000
        MOVE PBUF(41) := "     "; << CLEAR COUNT NO >>         <<M8068>>05855000
        IF (I = 39 OR I = 79) THEN                             <<M8068>>05860000
          BEGIN                                                <<M8068>>05865000
            MOVE PBUF(18) := MULTIPLERR,(20);                  <<M8068>>05870000
          END                                                  <<M8068>>05875000
        ELSE                << DATA OR CHECK BIT ERROR >>      <<M8068>>05880000
          BEGIN                                                <<M8068>>05885000
            IF I < 40 THEN                                     <<M8068>>05890000
              BEGIN                                            <<M8068>>05895000
                OFFSET := 0;                                   <<M8068>>05900000
                INDEX := I;                                    <<M8068>>05905000
              END                                              <<M8068>>05910000
            ELSE                                               <<M8068>>05915000
              BEGIN                                            <<M8068>>05920000
                OFFSET := 1;                                   <<M8068>>05925000
                INDEX := I - 40;                               <<M8068>>05930000
              END;                                             <<M8068>>05935000
            IF INDEX < 32 THEN                                 <<M8068>>05940000
              BEGIN                                            <<M8068>>05945000
                MOVE PBUF(18) := DATAERR,(20);                 <<M8068>>05950000
                ASCII(INDEX,-10,PBUF(27));                     <<M8068>>05955000
              END                                              <<M8068>>05960000
            ELSE                                               <<M8068>>05965000
              BEGIN                                            <<M8068>>05970000
                MOVE PBUF(18) := CHECKERR,(20);                <<M8068>>05975000
                ASCII((INDEX-32),-10,PBUF(27));                <<M8068>>05980000
              END;                                             <<M8068>>05985000
            ROW := INDEX / 8;                                  <<M8068>>05990000
            REMAINDER := INDEX MOD 8;                          <<M8068>>05995000
            ROW := ROW * 2 + OFFSET;                           <<M8068>>06000000
            IF ROW = 9 THEN REMAINDER := REMAINDER - 1;        <<M8068>>06005000
            CHIP := ROW * 8 + REMAINDER;                       <<M8068>>06010000
            PBUF(31) := "U";                                   <<M8068>>06015000
            ASCII(ROW,-10,PBUF(11));                           <<M8068>>06020000
            ASCII(FAULT'ARRAY(CHIP),10,PBUF(32));              <<M8068>>06025000
            ASCII(LOGREC(I),-10,PBUF(44));                     <<M8068>>06030000
          END;              << DATA OR CHECK BIT ERROR >>      <<M8068>>06035000
                                                               <<M8068>>06040000
          FWRITE(OUTFNUM,WPBUF,-47,0);                         <<M8068>>06045000
                                                               <<M8068>>06050000
          IF ( LINECNT := LINECNT + 1) = LINEMAX THEN          <<M8068>>06055000
            BEGIN                                              <<M8068>>06060000
              LINECNT := 0;                                    <<M8068>>06065000
              MOVE PBUF := HEAD3,(47);                         <<M8068>>06070000
              FWRITE(OUTFNUM,WPBUF,-47,%61);                   <<M8068>>06075000
              HEADING := TRUE;                                 <<M8068>>06080000
            END;                                               <<M8068>>06085000
        END;                << ERROR DETECTED          >>      <<M8068>>06090000
    END;  << FOR >>                                            <<M8068>>06095000
END;                                                           <<M8068>>06100000
$PAGE                                                          <<03020>>06105000
PROCEDURE PRINT'LOGREC'ICF55;                                  <<03020>>06110000
BEGIN COMMENT --                                               <<03020>>06115000
  As with PRINT'HEAD'ICF55, PRINT'LOGREC'ICF55 has been made a <<03020>>06120000
separate procedure to avoid further cluttering  of  PRINT'LOG- <<03020>>06125000
REC'16K. I at first thought to restructure PRINT'LOGREC'16K as <<03020>>06130000
a CASE statement based on CPU'TYPE. ICF55 would then be a log- <<03020>>06135000
ical extension of this construct.  The idea fell through  when <<03020>>06140000
the  display  record length was shortened from 62 to 47 bytes. <<03020>>06145000
The flow in here is similar to earlier  PRINT'LOG'REC's,  with <<03020>>06150000
allowances  for  a  different  display record length, only one <<03020>>06155000
memory controller, and such as that.                           <<03020>>06160000
;                                                              <<03020>>06165000
EQUATE                                                         <<03020>>06170000
  MULTIPLE'BIT'ERR = 22;                                       <<03020>>06175000
                                                               <<03020>>06180000
IF LOGRECD (STARTIME) = 0D THEN                                <<03020>>06185000
   BEGIN   << Null log.                                     >> <<03020>>06190000
   MOVE PBUF := "* NO ENTRIES IN MEMLOG FILE *";               <<03020>>06195000
   FWRITE (OUTFNUM, WPBUF, -29, 0);                            <<03020>>06200000
   ERRORCOUNT := -1;   << for CLEANUPOUTPUT procedure.      >> <<03020>>06205000
   RETURN;                                                     <<03020>>06210000
   END;                                                        <<03020>>06215000
FOR I := 0 UNTIL 4095 DO                                       <<03020>>06220000
  IF LOGREC(I) <> 0 THEN ERRORCOUNT := ERRORCOUNT + 1;         <<03020>>06225000
IF ERRORCOUNT <> 0 THEN                                        <<03020>>06230000
   BEGIN   << Got at least one error.                       >> <<03020>>06235000
   IF PRINTIMES THEN PRINT'TIMES;                              <<03020>>06240000
   OLDBOARD := OLD'WORD := -1;                                 <<03020>>06245000
   FOR I := 0 UNTIL 4095 DO                                    <<03020>>06250000
     IF LOGREC(I) <> 0 THEN                                    <<03020>>06255000
      BEGIN   << At least one error at this address.        >> <<03020>>06260000
      IF HEADING THEN                                          <<03020>>06265000
         BEGIN   << New page, print a new heading.          >> <<03020>>06270000
         HEADING := FALSE;                                     <<03020>>06275000
         PRINT'HEAD'ICF55;                                     <<03020>>06280000
         END;                                                  <<03020>>06285000
      PBUF := " ";  MOVE PBUF(1) := PBUF, (61);                <<03020>>06290000
      PBUF := PBUF(8) := PBUF(15) := PBUF(38) := PBUF(46)      <<03020>>06295000
        := "I";                                                <<03020>>06300000
      IF (BOARD := I.(4:3)) <> OLDBOARD THEN                   <<03020>>06305000
         BEGIN   << Board number changed, add to display.   >> <<03020>>06310000
         OLDBOARD := BOARD;   << So we don't repeat display >> <<03020>>06315000
         ASCII (BOARD, 10, PBUF(4));                           <<03020>>06320000
         END;                                                  <<03020>>06325000
      IF (WORD := I.(7:2)) <> OLD'WORD THEN                    <<03020>>06330000
         BEGIN   << Word number changed, add to display.    >> <<03020>>06335000
         OLD'WORD := WORD;   << So we don't repeat display. >> <<03020>>06340000
         ASCII (WORD, 10, PBUF(11));                           <<03020>>06345000
         END;                                                  <<03020>>06350000
      IF ODD'PARITY (I.(9:7))                                  <<03020>>06355000
        THEN FAULT := FAULTS'ICF55 (I.(10:6))                  <<03020>>06360000
        ELSE FAULT := MULTIPLE'BIT'ERR;                        <<03020>>06365000
      IF FAULT = MULTIPLE'BIT'ERR                              <<03020>>06370000
        THEN MOVE PBUF(18) := "MULTIPLE BIT ERROR"             <<03020>>06375000
        ELSE                                                   <<03020>>06380000
         BEGIN  << Single-bit error, get type, bit and chip >> <<03020>>06385000
                                                               <<03020>>06390000
<< See comments at the declaration of DATA'ICF55 for an ex- >> <<03020>>06395000
<< planation of how we arrive at the following statement.   >> <<03020>>06400000
                                                               <<03020>>06405000
         CHIP := DATA'ICF55 (FAULT) + WORD*2;                  <<03020>>06410000
         IF -23 <= FAULT <= -17                                <<03020>>06415000
           THEN                                                <<03020>>06420000
            BEGIN   << Check bit failed.                    >> <<03020>>06425000
            MOVE PBUF(18) := "CHECK";                          <<03020>>06430000
            FAULT := -FAULT - 17;                              <<03020>>06435000
            END                                                <<03020>>06440000
           ELSE                                                <<03020>>06445000
            BEGIN   << Data bit failed.                     >> <<03020>>06450000
            MOVE PBUF(18) := "DATA";                           <<03020>>06455000
            IF FAULT < 0 THEN FAULT := -FAULT + 15;            <<03020>>06460000
            END;                                               <<03020>>06465000
         ASCII (FAULT, -10, PBUF(27));                         <<03020>>06470000
         ASCII (CHIP,  -10, PBUF(35));                         <<03020>>06475000
         PBUF(31) := "U";                                      <<03020>>06480000
         ASCII (LOGREC(I), -10, PBUF(44));                     <<03020>>06485000
         FWRITE (OUTFNUM, WPBUF, -47, 0);                      <<03020>>06490000
         IF (LINECNT := LINECNT + 1) >= LINEMAX THEN           <<03020>>06495000
            BEGIN   << Time to start a new page.            >> <<03020>>06500000
            LINECNT := 0;                                      <<03020>>06505000
            MOVE PBUF := HEAD3, (47);                          <<03020>>06510000
            FWRITE (OUTFNUM, WPBUF, -47, %61);                 <<03020>>06515000
            HEADING := TRUE;                                   <<03020>>06520000
            OLDBOARD := OLD'WORD := -1;                        <<03020>>06525000
            END;   << of starting new page.                 >> <<03020>>06530000
         END;      << of single-bit error.                  >> <<03020>>06535000
      END;         << of <> 0 error count in this LOGREC(I) >> <<03020>>06540000
   END;            << of at least one error.                >> <<03020>>06545000
END;               << of PRINT'LOGREC'ICF55.                >> <<03020>>06550000
$PAGE                                                          <<03020>>06555000
PROCEDURE CLEANUPOUTPUT;                                                06560000
BEGIN                                                                   06565000
                                                               <<03020>>06570000
INTEGER                                                        <<03020>>06575000
  LENGTH;                                                      <<03020>>06580000
                                                               <<03020>>06585000
     IF ERRORCOUNT = 0 THEN  <<NO ERRORS FOUND IN ANY BANK>>            06590000
     BEGIN                                                              06595000
          PRINT'TIMES;  <<PRINT TIME INFO>>                    <<00.01>>06600000
          MOVE PBUF:="*** NO ERRORS LOGGED ***";                        06605000
          FWRITE(OUTFNUM,WPBUF,-24,0);                         <<01.01>>06610000
     END ELSE                                                           06615000
     IF ERRORCOUNT > 0 THEN  <<SOME ERRORS FOUND>>                      06620000
     BEGIN                                                              06625000
          IF (CPU'TYPE = ICF55 OR CPU'TYPE = MM) THEN          <<M8068>>06630000
             LENGTH := 47                                      <<M8068>>06635000
          ELSE                                                 <<M8068>>06640000
             LENGTH := 62;                                     <<M8068>>06645000
          MOVE PBUF := HEAD3, (LENGTH);                        <<03020>>06650000
          FWRITE (OUTFNUM, WPBUF, -LENGTH, 0);                 <<03020>>06655000
     END;                                                               06660000
END  << CLEANUPOUTPUT >>;                                      <<00.04>>06665000
     MOVE PBUF := PTITLE,2;                                    <<01.01>>06670000
     I := TOS-@PBUF;                                           <<01.01>>06675000
     MOVE PBUF(9) := OFFICIAL'VUUFF; << PUT VUF INTO TITLE >>  <<04932>>06680000
     PRINT(WPBUF,-I,%60);                                      <<01.01>>06685000
                                                               <<01169>>06690000
     WHO(,CAPD);                                               <<01169>>06695000
     IF NOT SYSMGR THEN                                        <<01169>>06700000
       BEGIN                                                   <<01169>>06705000
       MOVE PBUF := SYSMGR'MSG,2;                              <<01169>>06710000
       I := TOS - @PBUF;                                       <<01169>>06715000
       PRINT(WPBUF,-I,0);                                      <<01169>>06720000
       TERMINATE;                                              <<01169>>06725000
       END;                                                    <<01169>>06730000
     OPEN'FILES;                                               <<00.03>>06735000
     FLOCK(LOGFNUM,1);                                                  06740000
     IF < THEN ERRMESSAGE(LOGFILE,1);                                   06745000
     GETIMEINFO;                                               <<00.04>>06750000
     FOR REC:=CONTROLLER'A UNTIL CONTROLLER'B DO               <<RK2MB>>06755000
     BEGIN                                                              06760000
          FREADDIR(LOGFNUM,LOGREC,RECSIZE,DOUBLE(REC));                 06765000
          IF < THEN ERRMESSAGE(LOGFILE,FSERR);                          06770000
          BANKS:=LOGREC(BANKNUMB);                                      06775000
     CPU'TYPE := THISCPU;                                      <<02017>>06780000
     IF CPU'TYPE = 2 OR CPU'TYPE = 4                           <<03020>>06785000
       THEN                                                    <<02017>>06790000
        BEGIN                                                  <<02017>>06795000
         IF BANKNUM >= NEXT'CONTROLLER (4)                     <<03020>>06800000
          THEN TOS := %4000000D                                <<02017>>06805000
          ELSE TOS := %0D;                                     <<02017>>06810000
         MCS;                                                  <<02017>>06815000
         MCS'STATUS := TOS;  << SAVE STATUS RETURNED BY MCS >> <<02017>>06820000
         IF 8<=MCS'STATUS.(12:4)<=9 THEN CPU'TYPE:=4 <<PRONTO>><<02017>>06825000
          ELSE CPU'TYPE := 2;  << AMIGO MEMORY >>              <<02017>>06830000
         ASSEMBLE(DDEL;);                                      <<02017>>06835000
        END;                                                   <<02017>>06840000
          IF CPU'TYPE = ICF55                                  <<03020>>06845000
            THEN PRINT'LOGREC'ICF55                            <<03020>>06850000
            ELSE                                               <<03020>>06855000
          IF CPU'TYPE = MM THEN PRINT'MM(REC)                  <<M8068>>06860000
          ELSE                                                 <<M8068>>06865000
          IF RAMS'ARE'16K THEN                                 <<RK2MB>>06870000
          PRINT'LOGREC'16K(REC) ELSE                           <<RK2MB>>06875000
          PRINT'LOGREC(REC);                                            06880000
          IF PARM = 1 THEN  <<RESET LOGGING INFO>>                      06885000
          BEGIN                                                         06890000
               LOGRECD(STARTIME):=0D;  <<FOR LOGGING PROCESS>>          06895000
               FOR I:=0 UNTIL (RECSIZE-1) DO LOGREC(I):=0;              06900000
               FWRITEDIR(LOGFNUM,LOGREC,RECSIZE,DOUBLE(REC));           06905000
               IF < THEN ERRMESSAGE(LOGFILE,FSERR);                     06910000
          END;                                                          06915000
          IF BANKS < NEXT'CONTROLLER(CPU'TYPE) THEN            <<RK2MB>>06920000
             REC:=CONTROLLER'B;                                <<RK2MB>>06925000
          IF PRONTO AND NOT PRONTO'2NDCNTLR <<ONLY ONE CNTLR>> <<01397>>06930000
             THEN REC:=CONTROLLER'B;                           <<01397>>06935000
     END;                                                               06940000
     FUNLOCK(LOGFNUM);                                                  06945000
     IF < THEN ERRMESSAGE(LOGFILE,2);                                   06950000
     CLEANUPOUTPUT;                                                     06955000
END.                                                                    06960000
