         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
    DEVREC'WAKE = 1,                                           <<C9233>>00546000
    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
$PAGE "TIMER SUPPORT PROCEDURES."                                       09945990
$PAGE                                                                   09950000
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
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
   START'SPD'SNS(HELP'LDEV'DITP);                              <<S9357>>15537000
