ASMB,R,L,C     ** RTE-M TIME MODULE - TIMER **
*     NAME  : $MTI  
*     SOURCE: 92064-18020 
*     RELOC:  92064-16008 
*     PROGMR: E.J.W.  BASED ON RTE-III VERSIONS G.A.A.
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
* 
      NAM $MTI,0  92064-16008  REV.1650  761020 
* 
      SUP 
      ENT $CLCK,$TIME,$TIMV,$SCLK,$MPT6 
* 
*   $MTI  EXTERNAL REFERENCE NAMES
* 
      EXT $DEVT,$XEQ
      EXT $SYMG,$MIC
      EXT $TLST 
* 
********************************************************************
* 
*     THE $MTI MODULE OF THE RTE-M SYSTEM CONSISTS OF   * 
* 
*        1.  TIME PROCESSOR ROUTINES                               *
*        2.  CLOCK START UP ROUTINE.                               *
* 
********************************************************************
      HED REAL TIME CLOCK-TIME LIST PROCESSING
********************************************************************
*        THE REAL TIME CLOCK PROCESSOR SECTION OF HP REAL TIME* 
*     EXECUTIVE HANDLES ALL TIME DEPENDENT FUNCTIONS:              *
*        1. INCREMENT REAL TIME CLOCK VALUES EVERY 10 MILLISECOND. *
*        2. SCHEDULE PROGRAMS AT THE REQUESTED TIME AND COMPUTE ITS*
*              NEXT START TIME.                                    *
*        3. ADD PROGRAMS TO THE TIME LIST.                         *
*        4. REMOVE PROGRAMS FROM THE TIME LIST.                    *
*        5. OUTPUT CURRENT SYSTEM TIME TO USER ARRAY.              *
*        6. SET ID SEGMENT VALUES AS REQUESTED BY USER.            *
********************************************************************
      SPC 1 
*        THE $CLCK ROUTINE FUNCTIONS AS FOLLOWS:                   *
*              THE ROUTINE IS ENTERED EVERY 10 MILLISECOND DUE     *
*                  TO TIME BASE GENERATOR INTERRUPTS.              *
*              THE TIME VALUE IS INCREMENTED BY 10 MILLISECONDS.   *
*              THE TIME VALUES OF EACH PROGRAM IN TIME LIST IS     *
*                   COMPARED TO THE CURRENT TIME. IF THE TIMES     *
*                   COMPARE AND THE PROGRAM IS DORMANT, A SCHEDULE *
*                   REQUEST IS MADE VIA LIST PROCESSOR. REGARDLESS *
*                   OF PROGRAM STATUS, THE NEXT START TIME IS      *
*                   COMPUTED UNLESS THE MULTIPLE VALUE IS ZERO-    *
*                   WHICH MEANS THAT THE PROGRAM IS TO BE REMOVED  *
*                   FROM TIME LIST.                                *
*              THE TIME-OUT CLOCKS FOR ALL ACTIVE DEVICES ARE 
*                   UPDATED.  IF ANY DEVICE HAS TIMED-OUT,
*                   RTIOC IS ENTERED TO PROCESS THE CONDITION.
*                                                                  *
$CLCK ISZ $TIME     STEP THE LOW ORDER TIME VALUE 
      JMP CL010     GO TO PROCESS LISTS 
      ISZ $TIME+1   STEP THE HIGH ORDER TIME VALUE
      JMP CL010     GO TO PROCESS LISTS 
      LDA RS1       RESET THE COUNTER 
      LDB RS2       TO THE FULL 
      STA $TIME     DAYS WORTH OF 
      STB $TIME+1   OF TENS OF MS.
      ISZ $TIME+2   STEP THE DAYS/YEARS COUNTER 
* 
*     CHECK IF TIME TO SCHEDULE PROGRAM 
* 
CL010 JSB $TLST    DO TIME LIST THING 
* 
* 
*   PROCESS DEVICE TIME-OUT CLOCKS
* 
IOTOP JMP NMIC1  OR  105626 IF HAVE MICRO 
       DEF EQTA 
       JMP $DEVT    TIMED OUT EQT 
       JMP $XEQ     ALL DONE
* 
NMIC1 LDA EQT#      SET NEGATIVE OF 
      CMA,INA        NUMBER OF EQT
      STA $TIMV      ENTRIES FOR INDEX
      LDA EQTA      POINT TO WORD 15
IOTO2 ADA D14        OF FIRST EQT ENTRY 
      LDB A,I       LOAD WORKING CLOCK- 
      SZB           IS IT ACTIVE? 
      ISZ A,I        YES: INCREMENT IT
      INA,RSS       IT HAS NOT TIMED-OUT
      JMP $DEVT     GO TO TIME-OUT PROCESSOR
      ISZ $TIMV     THRU? 
      JMP IOTO2      NO: GO DO NEXT ONE 
      JMP $XEQ       YES; NO TIME-OUTS-RETURN 
      SPC 1 
RS1   OCT 25000 
RS2   OCT 177574
PRS1  OCT 153000
PRS2  OCT 203 
D2    DEC 2 
D14   DEC 14
      SPC 4 
* 
*     SYSTEM START TBG ROUTINE
* 
*     THE $SCLK ROUTINE STARTS THE CLOCK PROVIDES 
*     AN ENTRY POINT TO AID THE POWERFAIL ROUTINE.
* 
*     ON FIRST ENTRY THIS ROUTINE:
* 
*     1. CONFIGURES IT SELF 
*     2. STARTS THE TBG.
*     3. PRINTS "SET TIME"
*     4. EXITS TO THE DISPATCHER. 
* 
*     ON SUBSEQUENT ENTRIES IT IS A SUBROUTINE TO RESTART 
*     TIME BASE GENERATOR.
* 
$SCLK JMP CONFI     GO CONFIGURE ON FIRST ENTRY 
      LDA D2        PROGRAM THE TBG FOR 10'S OF MS. 
OTATB OTA 0 
STCTB OCT 1100      CONFIGURED TO A STC TBG,C 
STFTB OCT 1600      CONFIGURED TO A STF TBG 
      JMP $SCLK,I   RETURN
      SPC 2 
CONFI LDA TBG       CONFIGURE THE TBG 
TEMP  IOR OTATB     MAKE AN OTA TBG 
TEMP1 STA OTATB     SET IT
TEMP2 IOR STCTB     FORM AN STC TBG,C 
TCC   STA STCTB     SET THE STC 
      XOR STFTB     SET UP THE STF
      STA STFTB 
      LDB .IOT
      LDA $MIC
      SZA           ANY MICRO?
      STB IOTOP      YES, MAKE CALL 
TLINC JSB $SCLK     START THE TBG 
POINT LDA TUDAT     SEND THE
      JSB $SYMG     SET TIME
      JMP $XEQ      MESSAGE AND GO TO THE DISPATCHER
      SPC 2 
.IOT  OCT 105626
TUDAT DEF SETMS 
SETMS DEC -10       LENGTH OF SET TIME MESSAGE
      OCT 6412      PUT CR/LF OUT FIRST 
      ASC 4,SET TIME
      SPC 4 
$MPT6 DLD $TIME 
      JSB $TIMV 
      LDA RQRTN 
      STA XSUSP,I 
      JMP $XEQ
      SPC 4 
*         $TIMV ROUTINE TO GET CURRENT SYSTEM TIME
*        THE $TIMV ROUTINE CONVERTS THE CURRENT REAL TIME VALUES    * 
*              AND STORES THE VALUES INTO A USER SPECIFIED BUFFER. *
*                                                                  *
*    ROUTINE TO PROVIDE CURRENT TIME IS CALLED BY SCHED AND TMVAL 
*         CALLING SEQUENCE
*              DLD TIME  PUT TIME IN A AND B REGS.
*              JSB $TIMV
*              RQP2 CONTAINS BEGIN ADDRESS OF 5 WORD BUFFER 
*              RQP3 (OPTIONAL) CONTAINS ADDRESS OF YEAR BUFFER
*         ON RETURN,
*              ARRAY(1) = TENS OF MILLISECOND 
*              ARRAY(2) = SECONDS 
*              ARRAY(3) = MINUTES 
*              ARRAY(4) = HOURS 
*              ARRAY(5) = DAYS
*              RQP3,I   = YEAR (197X) 
* 
*              E IS SET 
*              A IS THE YEAR
* 
$TIMV ASC 1,ME      ENTRY/EXIT (END OF SET TIME MSS.) 
      CLE           CLE FOR ADDITION
      ADA PRS1      ADD POSITIVE 24 HRS.
      SEZ           TO GET A POSITIVE 
      INB           TIME
      ADB PRS2
      DIV TTAB3     DIVIDE BY 6000
      STA RQP4      SAVE MIN/HR 
      ASR 16        POSITION B (SEC/10MS) FOR DIVIDE
      DIV TTAB2     DIVIDE BY 100 TO GET SEC/10MS 
      STB RQP2,I    SET 10MS VALUE
      ISZ RQP2      STEP ADDRESS POINTER
      STA RQP2,I    SET SEC. VALUE
      ISZ RQP2      STEP TO MIN. ADDRESS. 
      CLB           SET UP FOR DIVIDE 
      LDA RQP4      FETCH MIN/HR
      DIV D60       SEPERATE
      STB RQP2,I    SET MINUTES 
      ISZ RQP2      STEP TO HR. ADDRESS 
      STA RQP2,I    SET HRS 
      ISZ RQP2      STEP ADDRESS
      CLB           SET B FOR DIVIDE
      LDA $TIME+2   GET DAYS FORM THE TIME
      DIV D365      SEPERATE DAYS AND YEARS 
      CCE,INB       STEP DAYS TO 1-365 FROM 0-364 
      STB RQP2,I    SET DAYS
      ADA D1970     ADD THE BASE YEAR TO YEAR 
      STA RQP3,I    SET YEAR
      JMP $TIMV,I   RETURN
      SPC 2 
D60   DEC 60
D365  DEC 365 
D1970 DEC 1970      BASE YEAR 
$TIME OCT 16000 
      OCT 177650
      OCT 3573
TTAB2 DEC 100 
TTAB3 DEC 6000
* 
* 
*         ** SYSTEM BASE PAGE COMMUNICATION AREA ** 
* 
* 
*** SYSTEM BASE PAGE  COMMUNICATION  AREA *** 
* 
.     EQU 1650B     ESTABLISH ORIGIN OF AREA
* 
* SYSTEM TABLE DEFINITION * 
* 
EQTA  EQU .+0      FWA  OF  EQUIPMENT TABLE 
EQT#  EQU .+1       # OF EQT ENTRIES
* 
TBG   EQU .+20     I/O ADDRESS OF TIME-BASE CARD
* 
* SYSTEM REQUEST PROCESSOR /'EXEC' COMMUNICATION *
* 
RQRTN EQU 1677B 
RQP2  EQU .+25
RQP3  EQU .+26       OF REQUEST 
RQP4  EQU .+27
XSUSP EQU 1730B 
A     EQU 0B        LOCATION OF A REGISTER
B     EQU 1B        LOCATION OF B REGISTER
      ORG *         PROGRAM LENGTH
      END $SCLK 
                                                                            