         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
    DEVREC'WAKE = 1,                                           <<C9233>>00546000
    SERIES'37'FAMILY = 15,    << LAST CPU # OF S/37 FAMILY >>  <<*2071>>01556000
    SERIES'64 = 5,            << CPU # OF SERIES 64 >>         <<*2071>>01557000
    LOGICAL PVPROCPCBP = DB + %363; << PVPROC PCB POINTER >>   <<C9233>>03941000
LOGICAL PROCEDURE START'SPD'SNS(DITP);                         <<S9357>>05500100
   VALUE DITP;                                                 <<S9357>>05500200
   INTEGER DITP;                                               <<S9357>>05500300
   OPTION EXTERNAL;                                            <<S9357>>05500400
                                                               <<S9357>>05500500
integer procedure THISCPU;                                     <<*2071>>05810100
option forward;                                                <<*2071>>05810200
                                                               <<*2071>>05810300
                                                               <<*2071>>06380000
   IF (SERIES'64 <= THISCPU <= SERIES'37'FAMILY) THEN          <<*2071>>06385000
                                                               <<*2071>>06650000
   IF (SERIES'64 <= THISCPU <= SERIES'37'FAMILY) THEN          <<*2071>>06655000
                                                               <<*2071>>08245000
   CPUNUM:=THISCPU;                                            <<*2071>>08250000
   IF (SERIES'64 <= CPUNUM <= SERIES'37'FAMILY) THEN           <<*2071>>08255000
       IF = or                   << DITP=0;unconfigured unit >><<*9950>>08715000
   IF (SERIES'64 <= CPUNUM <= SERIES'37'FAMILY) THEN           <<*2071>>08885000
                                                               <<*2071>>09190000
         IF (SERIES'64 <= THISCPU <= SERIES'37'FAMILY) THEN    <<*2071>>09195000
$PAGE "TIMER SUPPORT PROCEDURES."                                       09544900
                                                               <<u1715>>09945990
$PAGE                                                                   09950000
 DOUBLE PROCEDURE TIMER'70;                                    <<u1715>>09950010
 OPTION PRIVILEGED;                                            <<u1715>>09950020
                                                               <<u1715>>09950030
<<***********************************************************>><<u1715>>09950040
<<***********************************************************>><<u1715>>09950050
<<**                                                       **>><<u1715>>09950060
<<**                                                       **>><<u1715>>09950070
<<**    THIS IS THE MICROCODED VERSION OF TIMER.           **>><<u1715>>09950080
<<**                                                       **>><<u1715>>09950090
<<**    RETURNS AN UNSIGNED 31 BIT WORD.                   **>><<u1715>>09950100
<<**                                                       **>><<u1715>>09950110
<<**                                                       **>><<u1715>>09950120
<<**  ===================================================  **>><<u1715>>09950130
<<**  = WARNING   WARNING   WARNING   WARNING   WARNING =  **>><<u1715>>09950140
<<**  ===================================================  **>><<u1715>>09950150
<<**                                                       **>><<u1715>>09950160
<<**                                                       **>><<u1715>>09950170
<<**    THIS PROCEDURE IS INTENDED FOR USE ONLY WITH THE   **>><<u1715>>09950180
<<**    PERFORMANCE ENHANCEMENT MICROCODE WRITTEN TO       **>><<u1715>>09950190
<<**    REPLACE THE MPE PROCEDURE "TIMER".                 **>><<u1715>>09950200
<<**                                                       **>><<u1715>>09950210
<<**                                                       **>><<u1715>>09950220
<<**  ===================================================  **>><<u1715>>09950230
<<**  = CAUTION   CAUTION   CAUTION   CAUTION   CAUTION =  **>><<u1715>>09950240
<<**  ===================================================  **>><<u1715>>09950250
<<**                                                       **>><<u1715>>09950260
<<**                                                       **>><<u1715>>09950270
<<**         THE MICROCODE GROUP SHOULD EVALUATE ANY       **>><<u1715>>09950280
<<**         CHANGES TO THIS CODE TO AVOID POTENTIAL       **>><<u1715>>09950290
<<**         PROBLEMS.                                     **>><<u1715>>09950300
<<**                                                       **>><<u1715>>09950310
<<**                                                       **>><<u1715>>09950320
<<**    SEE TIMER FOR FURTHER INFORMATION.                 **>><<u1715>>09950330
<<**                                                       **>><<u1715>>09950340
<<**                                                       **>><<u1715>>09950350
<<***********************************************************>><<u1715>>09950360
<<***********************************************************>><<u1715>>09950370
                                                               <<u1715>>09950380
BEGIN                                                          <<u1715>>09950390
                                                               <<u1715>>09950400
ASSEMBLE(CON %020104, %33);        << MICROCODED TIMER >>      <<u1715>>09950410
END;    << TIMER'70 >>                                         <<u1715>>09950420
$PAGE                                                          <<u1715>>09950430
PROCEDURE ABORTTIMEREQ(TRLX);                                           09955000
VALUE TRLX;                                                             09960000
INTEGER TRLX;                                                           09965000
OPTION PRIVILEGED,UNCALLABLE;                                           09970000
                                                                        09975000
COMMENT: ABORTS THE TIMER REQUEST FOUND IN ENTRY TRLX.                  09980000
         THE ENTRY TRLX IS RELEASED.                                    09985000
;                                                                       09990000
                                                                        09995000
BEGIN                                                                   10000000
                                                                        10000010
INTEGER S, T := 8;                                                      10005000
INTEGER TRLPTR;                                                         10010000
                                                                        10015000
                                                                        10020000
TRLX := TRLX&LSL(2);          << FORM TABLE RELATIVE OFFSET  >>         10025000
IF = THEN RETURN;             << IGNORE ZERO FROM I/O SYSTEM >>         10030000
                                                                        10030010
IF NOT (%14 <= TRLX <= TRLNUMENTRIES*TRLENTRYSIZE) THEN                 10035000
   SUDDENDEATH(24);           <<INDEX BAD>>                             10040000
                                                                        10040010
DISABLE;                                                                10045000
IF TRLX = TRLFREELISTP THEN                                             10050000
   SUDDENDEATH(28);           <<RETURNING 1ST FREE?>>                   10055000
                                                                        10059010
<<*************************************************>>                   10059020
<<                                                 >>                   10059030
<<     IF ACTIVE REQUEST THEN SEARCH ACTIVE LIST   >>                   10059040
<<     FOR ENTRY THAT POINTS TO THIS ONE.          >>                   10059050
<<                                                 >>                   10059060
<<*************************************************>>                   10059070
                                                                        10059080
IF TRL(TRLX) < 0 THEN                                                   10060000
   BEGIN                      << ACTIVE REQUEST >>                      10065000
   WHILE T <> TRLX DO                                                   10070000
      BEGIN                                                             10075000
      S := T;                                                           10080000
      TRLPTR := S;                                                      10085000
      T := TRLPTRNEXT;                                                  10090000
      END;                                                              10095000
                                                                        10095010
   TRLPTR := S;                                                         10100000
   TRLLINK := TRL(T);                                                   10105000
   TRLPTR := T;                                                         10110000
   T := TRLPTRNEXT;                                                     10115000
                                                                        10115010
   IF <> THEN                                                           10120000
      BEGIN                                                             10125000
      TRLPTR := TRLX;                                                   10130000
      TOS := TRLSERVTIME1;                                              10135000
      TOS := TRLSERVTIME2;                                              10140000
      TRLPTR := T;                                                      10145000
      TOS := TRLSERVTIME1;                                              10150000
      TOS := TRLSERVTIME2;                                              10155000
      ASMB( DADD );                                                     10160000
      TRLSERVTIME2 := TOS;                                              10165000
      TRLSERVTIME1 := TOS;                                              10170000
      END;                                                              10175000
   END;                                                                 10180000
                                                                        10180010
TRL(TRLX) := TRLFREELISTP/TRLENTRYSIZE;                                 10185000
TOS := X;                                                               10190000
TRLFREELISTP := TOS;                                                    10195000
                                                                        10200000
                                                                        10205000
                                                                        10210000
TRLTRACEWORD := %20000 + TRLX;      << TRACE >>                         10215000
                                                                        10220000
                                                                        10225000
                                                                        10230000
END;  << A B O R T T I M E R E Q  >>                                    10235000
$PAGE                                                                   10240000
INTEGER PROCEDURE TIMEREQ(CODE,REQ,TIME);                               10245000
VALUE CODE,REQ,TIME;                                                    10250000
DOUBLE TIME;                                                            10255000
INTEGER CODE,REQ;                                                       10260000
OPTION UNCALLABLE,PRIVILEGED;                                           10265000
                                                                        10270000
COMMENT: SETS UP A TIME REQUEST.                                        10275000
         ACCEPTS TIME UP TO 2**32-1.                                    10280000
         MOST PRIORITARY REQUEST ALWAYS FIRST IN THE LIST.              10285000
                                                                        10290000
         ALL HEADER ENTRIES ARE TABLE WORD OFFSETS.                     10295000
         ENTRY # IN ENTRY IS THE NUMBER OF THE NEXT ENTRY.              10300000
;                                                                       10305000
                                                                        10310000
BEGIN                                                                   10315000
                                                                        10315010
INTEGER  TRLX, S, T := 8;                                               10320000
INTEGER  S0 = S-0, S1 = S-1;                                            10325000
INTEGER  MST = Q-5, LST = Q-4;   << TIME >>                             10330000
INTEGER TRLPTR;                                                         10335000
                                                                        10340000
TIME := TIME+100D;               << FIGURE TICKS >>                     10345000
TOS := 0;                                                               10350000
TOS := MST;                                                             10351000
TOS := 100;                                                             10355000
ASMB( LDIV );                                                           10360000
TOS := LST;                                                             10365000
TOS := 100;                                                             10370000
ASMB( LDIV,DEL );                                                       10375000
DISABLE;                                                                10380000
TRLX := TRLFREELISTP;                                                   10385000
IF = THEN SUDDENDEATH(3);                                               10390000
IF NOT(%14 <= TRLX <= TRLNUMENTRIES * TRLENTRYSIZE) THEN                10395000
                                                                        10400000
   SUDDENDEATH(25);                                                     10405000
                                                                        10405010
<< IF THIS IS LAST TRL ENTRY, REPORT TABLE'FULL >>                      10410000
TRLPTR := TRLX;                                                         10415000
TOS := TRLPTRNEXT;                                                      10420000
IF = THEN                                                               10425000
  MPE'TABLE'FULL(4);  << 4 IS TIMER REQ. LIST >>                        10430000
TRLFREELISTP := TOS;  << UPDATE NEXT POINTER>>                          10435000
TIMEREQ := TRLX&ASR(2);                                                 10440000
                                                                        10440010
DO                                                                      10445000
   BEGIN   << FIND POSITION IN LINE >>                                  10450000
   TRLPTR := T;                                                         10455000
   T := TRLPTRNEXT;                                                     10460000
   TOS := TRLSERVTIME1;                                                 10465000
   TOS := TRLSERVTIME2;                                                 10470000
   ASMB( DSUB );                                                        10475000
   END                                                                  10480000
UNTIL T = 0 OR S1 < TRL(T+2) OR = AND LOGICAL(S0) <                     10485000
       LOGICAL(TRL(X:=X+1));                                            10490000
                                                                        10490010
S := TRLPTR;                                                            10495000
                                                                        10500000
<< BUILD ENTRY >>                                                       10505000
                                                                        10505010
IF REQ=0 THEN SUDDENDEATH(26);                                          10510000
TIME := TOS;                                                            10515000
TRL(TRLX) := %100000+CODE&LSL(10)+(T/TRLENTRYSIZE);                     10520000
TRLPTR := X;                                                            10525000
TRLREQUEST := REQ;                                                      10530000
TRLSERVTIME1 := MST;                                                    10535000
TRLSERVTIME2 := LST;                                                    10540000
TRLPTR := S;                                                            10545000
TRLLINK := TRLX&ASR(2);    <<  CONVERT TO ENTRY # >>                    10550000
                                                                        10555000
<< CHECK FOR TIME ADJUST IN T >>                                        10560000
                                                                        10560010
IF  T <> 0  THEN                                                        10565000
   BEGIN                                                                10570000
   TRLPTR := T;                                                         10575000
   TOS := TRLSERVTIME1;                                                 10580000
   TOS := TRLSERVTIME2;                                                 10585000
   TOS := TOS-TIME;                                                     10590000
   TRLSERVTIME2 := TOS;                                                 10595000
   TRLSERVTIME1 := TOS;                                                 10600000
   END;                                                                 10605000
                                                                        10610000
                                                                        10615000
<< IF SIO TIMEOUT, DIT8.((CODE LAND %17):1) := 0 >>                     10620000
                                                                        10620010
TOS := CODE;                                                            10625000
TOS.(11:1) := 0;                                                        10630000
IF = THEN DEL                                                           10635000
ELSE                                                                    10640000
   BEGIN << SIO TIMEOUT >>                                              10645000
   TOS := F(%1010+REQ);                                                 10650000
   ASMB(XBX;                                                            10655000
        TRBC 0,X;                                                       10660000
        XCH,STAX;);                                                     10665000
   F(X) := TOS;                                                         10670000
   END;                                                                 10675000
                                                                        10680000
                                                                        10685000
                                                                        10690000
TRLTRACEWORD := %10000 + TRLX;                                          10695000
                                                                        10700000
                                                                        10705000
                                                                        10710000
END;  << T I M E R E Q  >>                                              10715000
$PAGE                                                                   10720000
INTEGER PROCEDURE TIMEREQ'70(CODE,REQ,TIME);                   <<u1715>>10720010
VALUE CODE,REQ,TIME;                                           <<u1715>>10720020
DOUBLE TIME;                                                   <<u1715>>10720030
INTEGER CODE,REQ;                                              <<u1715>>10720040
OPTION UNCALLABLE,PRIVILEGED;                                  <<u1715>>10720050
                                                               <<u1715>>10720060
<<***********************************************************>><<u1715>>10720070
<<***********************************************************>><<u1715>>10720080
<<**                                                       **>><<u1715>>10720090
<<**                                                       **>><<u1715>>10720100
<<**    THIS IS THE MICROCODED VERSION OF TIMEREQ.         **>><<u1715>>10720110
<<**                                                       **>><<u1715>>10720120
<<**    SETS UP A TIMER REQUEST.                           **>><<u1715>>10720130
<<**                                                       **>><<u1715>>10720140
<<**                                                       **>><<u1715>>10720150
<<**  ===================================================  **>><<u1715>>10720160
<<**  = WARNING   WARNING   WARNING   WARNING   WARNING =  **>><<u1715>>10720170
<<**  ===================================================  **>><<u1715>>10720180
<<**                                                       **>><<u1715>>10720190
<<**                                                       **>><<u1715>>10720200
<<**    THIS PROCEDURE IS INTENDED FOR USE ONLY WITH THE   **>><<u1715>>10720210
<<**    PERFORMANCE ENHANCEMENT MICROCODE WRITTEN TO       **>><<u1715>>10720220
<<**    REPLACE THE MPE PROCEDURE "TIMEREQ".               **>><<u1715>>10720230
<<**                                                       **>><<u1715>>10720240
<<**                                                       **>><<u1715>>10720250
<<**  ===================================================  **>><<u1715>>10720260
<<**  = CAUTION   CAUTION   CAUTION   CAUTION   CAUTION =  **>><<u1715>>10720270
<<**  ===================================================  **>><<u1715>>10720280
<<**                                                       **>><<u1715>>10720290
<<**                                                       **>><<u1715>>10720300
<<**         THE MICROCODE GROUP SHOULD EVALUATE ANY       **>><<u1715>>10720310
<<**         CHANGES TO THIS CODE TO AVOID POTENTIAL       **>><<u1715>>10720320
<<**         PROBLEMS.                                     **>><<u1715>>10720330
<<**                                                       **>><<u1715>>10720340
<<**                                                       **>><<u1715>>10720350
<<**    SEE TIMEREQ FOR FURTHER INFORMATION.               **>><<u1715>>10720360
<<**                                                       **>><<u1715>>10720370
<<**                                                       **>><<u1715>>10720380
<<***********************************************************>><<u1715>>10720390
<<***********************************************************>><<u1715>>10720400
                                                               <<u1715>>10720410
BEGIN                                                          <<u1715>>10720420
                                                               <<u1715>>10720430
                                                               <<u1715>>10720440
                                                               <<u1715>>10720450
TOS := CODE;                                                   <<u1715>>10720460
TOS := REQ;                                                    <<u1715>>10720470
TOS := TIME;                                                   <<u1715>>10720480
ASSEMBLE(CON %020104, %34);        << MICROCODED TIMEREQ >>    <<u1715>>10720490
IF > THEN ASSEMBLE(PCAL SUDDENDEATH)                           <<u1715>>10720500
ELSE IF < THEN ASSEMBLE(PCAL MPE'TABLE'FULL);                  <<u1715>>10720510
                                                               <<u1715>>10720520
END;  << TIMEREQ'70 >>                                         <<u1715>>10720530
$PAGE                                                          <<u1715>>10720540
LOGICAL PROCEDURE CHEKTRLFREE;                                          10725000
OPTION PRIVILEGED,UNCALLABLE;                                           10730000
                                                                        10730100
COMMENT: RETURNS TRUE IF A TIMER REQUEST ENTRY IS FREE                  10735000
         ELSE RETURNS FALSE                                             10740000
;                                                                       10745000
                                                                        10745100
BEGIN                                                                   10750000
                                                                        10750010
CHEKTRLFREE:= IF TRLFREELISTP <> 0 THEN TRUE ELSE FALSE;                10755000
                                                                        10755010
END;   << C H E K T R L F R E E >>                                      10760000
$PAGE                                                                   10760010
                                                               <<*1020>>12050000
             << FINISH CLEARING THE MEASINFO TABLE TO >>       <<*1020>>12050010
             << RELEASE THE SHARED CLOCK INTERFACE.   >>       <<*1020>>12050020
                                                               <<*1020>>12050030
             I := 59;                                          <<*1020>>12050040
             DO MEASINFOTABPTR(I) := 0                         <<*1020>>12050050
             UNTIL (I := I+ 1) > 62;                           <<*1020>>12050060
   START'SPD'SNS(HELP'LDEV'DITP);                              <<S9357>>15537000
