ASMB,Q,C   ** R/T INPUT/OUTPUT CONTROL MODULE **
      HED ** R/T INPUT/OUTPUT CONTROL MODULE ** 
*     DATE:   5/05/75 
*     NAME:   RTIOCM
*     SOURCE: 92060-18016 
*     RELOC:  92060-16016 
*     PGMR:   G.A.A.,L.W.A.,D.L.S.
* 
*  ***************************************************************
*  * (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 RTIOCM 92060-16016 REV.1926 790506
* 
***** AMD-DAS ***** FEB,72 ***** REV.LWH *****
***** AMD-DAS ***** AUG,72 ***** REV.GAA *****
* 
* 
* 
***** AMD-DAS ***** APR,75 ***** REV.LWA *****
* 
* 
* 
* 
* 
      ENT $CIC,$XSIO,$SYMG,$IORQ,$IOUP,$IODN
      ENT $ETEQ,$IRT,$XCIC,$DEVT
      ENT $GTIO,$UPIO,$CVEQ,$YCIC 
      ENT $BITB,$UNLK,$XXUP,$DLAY,$DMEQ,$CKLO 
      ENT $BLLO,$BLUP,$DVM,$RSM,$MEU
      ENT $OPSY,$DATC 
* 
      EXT $RQST,$CLCK,$XEQ,$TYPE,$LIST,$ALC,$RTN
      EXT $LUSW,$SCD3,$RNTB,$CVT3,$ERMG 
      EXT $CVT1,$CLAS,$REIO,$ABRT,$INER,$ZZZZ 
      EXT $PDSK 
      SUP 
      EXT $ERAB,$IDNO,$SMAP,$MATA 
      EXT $MRMP,$MVBF 
* 
* 
* 
*  MODULE  OF THE  R E A L - T I M E  E X E C U T I V E 
* 
* 
*  THIS INCLUDES THE FOLLOWING MAJOR SECTIONS:
* 
*    1)  CENTRAL  INTERRUPT  CONTROL
* 
*    2)  INPUT  /  OUTPUT  CONTROL
*         - I/O REQUEST PROCESSING
*         - I/O COMPLETION PROCESSING 
*         - GENERAL I/O ERROR PROCESSING
* 
*    3)  SYSTEM ERROR DIAGNOSTIC PRINT ROUITNE
* 
*    4)  PROCESSOR FOR OPERATOR I/O STATEMENTS
* 
      HED <  CENTRAL  INTERRUPT  CONTROL  > 
* 
*** C E N T R A L   I N T E R R U P T   C O N T R O L  ***
* 
*   THE PROCESSING OF SYSTEM INTERRUPTS IS CONTROLLED 
*  BY DIRECTING ALL SOURCES TO THE ENTRY POINT < $CIC>. 
*  < $CIC> IS RESPONSIBLE FOR SAVING AND RESTORING
*  THE CURRENT STATE OF THE MACHINE, ANALYSING THE
*  SOURCE OF THE INTERRUPT, AND ACTIVATING THE
*  APPROPRIATE PROCESSOR. THIS ROUTINE IS TABLE-DRIVEN
*  BY THE *INTERRUPT TABLE*.
* 
*   SPECIAL PROCESSING FOR A "PRIVILEGED" CLASS OF
*  INTERRUPTS IS PROVIDED BY $CIC. THIS IS DESCRIBED
*  FULLY IN SECTION III BELOW. BRIEFLY, A SPECIAL 
*  I/O CARD CAN BE USED TO SEPARATE SPECIAL INTERRUPTS
*  FROM NORMAL SYSTEM CONTROLLED INTERRUPTS. THE
*  PRESENCE AND LOCATION OF THE SPECIAL CARD IS 
*  NOTED AT SYSTEM CONFIGURATION TIME. IF IT IS 
*  PRESENT, THE EXEC OPERATIONS ARE NOT PERFORMED 
*  WITH THE INTERRUPT SYSTEM DISABLED BUT RATHER
*  WITH THE CONTROL SET ON THE SPECIAL CARD TO
*  HOLD OFF SYSTEM I/O INTERRUPTS.
* 
* I. INTERRUPT TABLE (INTBL)
* 
*     A TABLE, ORDERED BY HARDWARE INTERRUPT PRIORITY,
*    DESIGNATES THE ASSOCIATED SOFTWARE PROCESSOR AND 
*    THE PROCEDURE FOR INITIATING THE PROCESSOR. THIS 
*    TABLE IS CONSTRUCTED BY  *RTGEN* ON INFORMATION
*    SUPPLIED BY THE USER IN CONFIGURING THE SYSTEM.
*    THE TABLE CONSISTS OF ONE ENTRY PER INTERRUPT
*    SOURCE: EACH ENTRY CONTAINS ONLY ONE WORD. THE 
*    CONTENTS OF EACH VALID ENTRY IS THE IDENTIFIER 
*    OF THE PROCESSOR. SYSTEM PROCESSORS ARE NOTED
*    BY POSITIVE VALUES, USER PROCESSORS BY NEGATIVE
*    VALUES:
* 
*      1. SYSTEM -  THE IDENTIFIER IS THE ADDRESS OF
*            THE EQT ENTRY IDENTIFYING THE I/O DEVICE.
* 
*      2. USER   -  THE ADDRESS OF THE PROGRAM
*            IDENTIFICATION SEGMENT IS IN 2-S COMPLEMENT
*            FORM IN THE ENTRY. 
* 
*      3. ILLEGAL  -  AN ENTRY CORRESPONDING TO AN
*            ILLEGAL INTERRUPT SOURCE CONTAINS ZERO.
* 
*     A PROCESSOR IS CALLED DIRECTLY IF IT RESPONDS 
*    TO STANDARD SYSTEM INTERRUPT (E.G., $CLCK, 
*    MEMORY PROTECT, I/O DEVICE CONTROLLED BY A 
*    SYSTEM DRIVER) OR IS SCHEDULED IN THE NORMAL 
*    PRIORITY ORDER IF IT RESPONDS TO A USER
*    CONTROLLED DEVICE OR INTERRUPT SOURCE. 
      SKP 
* II.   INTERRUPT PROCESSING
* 
*     INTERRUPT ACKNOWLEDGEMENT BY THE CPU CAUSES 
*    THE INSTRUCTION IN THE WORD CORRESPONDING
*    TO THE I/O CHANNEL ADDRESS TO BE EXECUTED. 
*    FOR ALL ACTIVE I/O CHANNELS ( PLUS LOCATIONS 
*    5-7 ) CONTROLLED BY THE SYSTEM, THE INSTRUCTION
*    SET IN EACH INTERRUPT LOCATION IS A JUMP 
*    SUBROUTINE INDIRECTLY TO < $CIC>.
* 
      SKP 
*    <$CIC> PERFORMS THE FOLLOWING: 
* 
*       1. DISABLES THE INTERRUPT SYSTEM. 
* 
*       2. SAVES ALL REGISTERS PLUS THE INTERRUPT 
*          RETURN POINT IN THE EXECUTING
*          ID SEGMENT.
* 
*       3. CLEARS THE FLAG OF THE INTERRUPT SOURCE. 
* 
*       4. SETS 'MPTFL' = 1 TO MEAN MEMORY PROTECT
*          IS OFF - FLAG FOR PRIVILEGED PROCESSORS. 
* 
*       5. CHECKS FOR SPECIAL INTERRUPT PROCESSING. 
*          IF 'DUMMY' IN BASE PAGE COMMUNICATION
*          AREA = 0, THEN LEAVE THE INTERRUPT SYSTEM
*          DISABLED AND GO TO STEP 6. 
* 
*           'DUMMY' > 0  - PRIVILEGED INTERRUPTS: 
*           -THE CONTENTS OF 'DUMMY' IS THE I/O 
*            ADDRESS OF THE CARD; THIS IS USED TO 
*            SET THE CONTROL FF ON THE CARD (FLAG 
*            IS ALREADY SET) TO HOLD OFF LOWER
*            PRIORITY INTERRUPTS (SYSTEM INTERRUPTS)
*           -CLEARS THE CONTROL FLIP-FLOP OF
*            EACH DMA CHANNEL TO PROHIBIT POSSIBLE
*            INTERRUPTS FROM OCCURRING. 
*           -ENABLE THE INTERRUPT SYSTEM. 
* 
*       6. TRANSFERS DIRECTLY TO THE INTERRUPT
*          PROCESSOR FOR SOURCES OF:
* 
*           5 - MEMORY PROTECT VIOLATION
*           6 - TIME BASE GENERATOR(TBG)INTERRUPT 
* 
*          FOR OTHER SOURCES, THE INTERRUPT SOURCE
*          CODE IS USED TO INDEX THE INTERRUPT TABLE. 
*          THE CONTENTS OF THE INTBL ENTRY DETERMINES 
*          THE MANNER IN INITIATING THE PROCESSOR:
* 
*         A. +, THE CONTENTS OF THE ENTRY IS
*            ASSUMED TO BE THE FWA OF AN EQT ENTRY. 
*            THE ADDRESSES OF THE 15-WORD ENTRY 
*            ARE SET IN <EQT1 - EQT15> AND CONTROL
*            TRANSFERRED DIRECTLY TO THE COMPLETION 
*            SECTION ADDRESS (WORD 3 OF EQT ENTRY). 
* 
*          B. -, THE VALUE IS SET POSITIVE AND IS 
*            SET IN A CALL TO <$LIST> IN THE
*            SCHEDULING MODULE- THE CALL IS MADE IF 
*            THE USER PROGRAM IS DORMANT- CONTROL IS
*            TRANSFERRED TO $XEQ. IF THE PROGRAM IS 
*            NOT DORMANT, IT IS NOT SCHEDULED AND THE 
*            DIAGNOSTIC "SC03 INT XXXXX" IS OUTPUT
*            TO THE SYSTEM TTY- XXXXX IS THE PROGRAM
*            NAME. CONTROL IS RETURNED TO THE INTER-
*            RUPTED SEQUENCE. 
* 
*          C. 0, ILLEGAL OR UNDEFINED INTERRUPTS ARE
*               NOT PROCESSED BUT THE DIAGNOSTIC
*               "ILL INT XX" IS OUTPUT TO THE SYSTEM
*               TTY. XX IS THE INTERRUPT CODE.
* 
*       7. I/O DRIVER RETURNS INDICATE CONTINUATION 
*         OR COMPLETION OF THE OPERATION BY THE 
*         DRIVER OR DEVICE: 
* 
*          A. RETURN AT (P+1): COMPLETION OF THE
*                              OPERATION. $CIC TRANS- 
*                              FERS DIRECTLY TO THE 
*                              IOC COMPLETION SECTION 
*                              AT  < IOCOM >. CONTROL 
*                              IS NOT RETURNED TO 
*                              < $CIC>. 
* 
*          B. RETURN AT (P+2): CONTINUATION OF THE
*                              OPERATION. $CIC RETURNS
*                              TO THE INTERRUPTED 
*                              SEQUENCE AS DESCRIBED
*                              IN STEP 8 FOLLOWING. 
* 
*       8. RESTORING INTERRUPT CONDITIONS AND RETURN
*           TO POINT OF INTERRUPTION. AN ENTRY POINT
*           CALLED '$IRT' IS PROVIDED FOR USE BY
*           OTHER MODULES OF THE R/T EXEC TO RESET
*           FLAGS AND THE DMA CHANNELS AND RETURN TO
*           THE USER PROGRAM. 
* 
*           THE CALLING SEQUENCE IS JUST: 
* 
*              - JMP $IRT          -
* 
*          $IRT PERFORMS THE FOLLOWING: 
*        1  - DISABLES THE INTERRUPT SYSTEM 
*        2  - SETS 'MPTFL' = 0 TO MEAN THAT MEMORY
*              PROTECT IS ON (ENABLED). 
*        3  - SKIP TO 6 IF NOT A PRIVILEGED SYSTEM
*        4  - ISSUES A CLC TO CLEAR THE CONTROL 
*             FF ON THE SPECIAL CARD. 
*        5  - SETS THE CONTROL FF ON EITHER DMA 
*              CHANNEL IF BIT 15 OF THE INTBL WORD
*              =1 TO MEAN IT IS ACTIVE. THIS
*              ENABLES DMA INTERRUPTS ONLY. 
*        6  - RESTORES THE REGISTERS AND
*        7  - EXECUTES THE CURRENT PROGRAM AT XSUSP.
      SKP 
* III.  SPECIAL  (PRIVILEGED) INTERRUPTS
* 
*       THIS PROVISION ALLOWS INTERRUPTS FROM SPECIAL 
*      DEVICES TO BE RECOGNIZED WITHIN 100 MICRO SECONDS
*      AND TO BE PROCESSED BY SPECIAL, COMPLETELY 
*      INDEPENDENT ROUTINES CLASSIFIED AS SYSTEM TYPE 
*      PROGRAMS. INTERRUPTS ARE CHANNELED DIRECTLY
*      TO THE ENTRY POINT OF A ROUTINE BY A JSB INDIRECT
*      IN THE CORRESPONDING CORE LOCATION. $CIC IS
*      NOT AWARE OF THESE SPECIAL INTERRUPTS OCCURRING; 
*      IT ONLY ALLOWS THE INTERRUPT SYSTEM TO BE
*      ENABLED AND A SOFTWARE FLAG SET TO INDICATE
*      THE STATUS OF MEMORY PROTECT. THE JSB TO THE 
*      ENTRY POINT FOR A ROUTINE IS SET BY USING THE
*      "ENT,XXXXX" STATEMENT IN RTGEN WHEN CONFIGURING
*      A REAL-TIME SYSTEM.
*       THE SPECIAL PROCESSING ROUTINES CANNOT USE
*      ANY FEATURES OR REQUESTS OF THE STANDARD 
*      R/T EXEC. THESE ARE INDEPENDENT ROUTINES.
*      COMMUNICATION BETWEEN A NORMAL PROGRAM UNDER 
*      THE CONTROL OF THE R/T EXEC AND A SPECIAL
*      INTERRUPT PROCESSOR CAN BE DONE THROUGH
*      THE APPROPRIATE COMMON REGION: I.E. FLAGS OR 
*      INDICATORS CAN BE SET IN PRE-DEFINED WORDS 
*      IN COMMON TO INITIATE PROCESSING.  THE NORMAL
*      USER PROGRAM CAN BE SCHEDULED TO RUN AT A
*      PERIODIC TIME INTERVAL TO SCAN THE INDICATORS. 
*      THIS FACILITY IS PROVIDED TO ACCOMODATE HIGH-
*      SPEED PROGRAM CONTROLED DATA TRANSMISSION
*      WHICH REQUIRES QUICK RESPONSE. 
*       THE SPECIAL INTERRUPT PROCESSORS ARE
*      RESPONSIBLE FOR SAVING AND RESTORING ALL 
*      REGISTERS USED AND FOR RESTORING MEMORY
*      PROTECT TO ITS STATE BEFORE THE SPECIAL
*      INTERRUPT OCCURRED. MEMORY PROTECT IS
*      AUTOMATICALLY DISABLED AT THE OCCURRENCE 
*      OF ANY INTERRUPT. THE WORD 'MPTFL' IN THE
*      BASE PAGE COMMUNICATION AREA IS SET BY THE 
*      R/T EXEC TO INDICATE THE STATUS OF THE 
*      MEMORY PROTECT:
* 
*       'MPTFL' = 0  MEANS MEMORY PROTECT IS 'ON'.
*                    THE SPECIAL ROUTINE MUST ISSUE 
*                    A STC 5  IMMEDIATELY BEFORE
*                    RETURNING TO THE INTERRUPTED 
*                    SEQUENCE BY A  JMP -,I 
* 
*               = 1  MEANS THAT THE R/T EXEC ITSELF 
*                    WAS EXECUTING WHEN THE INTERRUPT 
*                    OCCURRED AND THAT MEMORY 
*                    PROTECT IS 'OFF'.  THE ROUTINE 
*                    MUST NOT ISSUE THE STC 5 IN
*                    THIS CASE. 
* 
*       IF  A SPECIAL INTERRUPT ROUTINE MUST EXECUTE
*      WITH THE INTERRUPT SYSTEM DISABLED, THE
*      STC 0 TO RE-ENABLE INTERRUPTS JUST PRIOR TO
*      EXITING MUST BE IN THE FOLLOWING SEQUENCE IF 
*      MEMORY PROTECT IS ALSO TO BE TURNED ON:
* 
*          - STF 0    - 
*          - STC 5    - 
*          - JMP -,I  - 
      SKP 
$CIC  NOP 
* 
CLF   CLF 0        DISABLE  INTERRUPT SYSTEM
* 
* PRESERVE CURRENT STATUS OF MACHINE
* 
      SSM $MEU      SAVE MEU STATUS AT INTERRUPT FOR $MESS
      STA XA,I      SAVE REGISTERS
      STB XB,I      SAVE REGISTERS
      ERA,ALS        A,B
      SOC            E AND
      INA            OVERFLOW 
      STA XEO,I 
      LIA 4        GET INTERRUPT SOURCE CODE. 
      CPA .5        IF MP/PE
      JMP $YCIC     SKIP CLF (CLEARS SIGN BIT IF PE)
* 
      IOR CLF      CONSTRUCT A  CLF XX  INSTRUCTION 
      STA *+1       AND CLEAR INTERRUPT FLAG TO 
*                                    ALLOW SPECIAL USER INTERRUPTS
      NOP             TO BE ACKNOWLEDGED. 
* 
$XCIC LIA 4    ### SPECIAL ENTRY TO SKIP CLF ###
$YCIC STA INTCD     SAVE INTERRUPT SOURCE CODE. 
* 
      ISZ MPTFL     SET 'MPTFL' = 1 TO MEAN MP IS OFF.
* 
SW1   JMP CIC.0     (STC DUMMY IF PRIVILEDGED OPTION) 
* 
* PROVIDE FOR SPECIAL  (PRIVILEGED) INTERRUPTS
* 
* 
      CLC 6         CLEAR DMA CHANNELS
      CLC 7          CONTROL FF.
* 
      STF 0         RE-ENABLE INTERRUPTS
* 
* 
CIC.0 EQU * 
MX1   EQU *         ADDRESS OF JMP NMX1 
      LDA XI        SAVE INDEX REGISTERS
      CXB 
      XSB A,I       STORE X THROUGH USER MAP
      INA 
      CYB 
      XSB A,I       STORE Y THROUGH USER MAP
      LDA INTCD     RESTORE THE INT CODE
NMX1  LDB $CIC      SAVE P-REGISTER A POSSIBLE
      STB XSUSP,I    POINT OF SUSPENSION. 
* 
* CHECK FOR TRANSFER TO NON-I/O SYSTEM PROCESSOR
* 
      CPA .5       IF MEMORY PROTECT VIOLATION, 
      JMP $RQST     GO TO EXAMINE MP VIOLATION. 
* 
      CPA TBG      IF TIME BASE GENERATOR,
      JMP $CLCK     GO TO TBG PROCESSOR ROUTINE.
* 
* CHECK LEGALITY OF INTERRUPT 
* 
      ADA N6        CODE - 6. 
      STA B         (SAVE FOR TABLE INDEX)
      ADB INTBA     INDEX TO PROPER ENTRY 
      CMA,CLE,SSA  - ERROR IF CODE
      ADA INTLG     LESS THAN 6 OR BEYOND 
* 
* GET PROCESSOR IDENT FROM INTERRUPT TABLE
* 
      LDA B,I       GET CONTENTS OF ENTRY 
      SEZ            SKIP IF OUT OF INTBL RANGE.
      CLE,SZA,RSS  UNDEFINED INTERRUPT
      JMP CIC.4       IF VALUE = 0, ISSUE DIAG. 
* 
* 
      LDB INTCD     REMOVE
      ERB            BIT 15 OF INTBL WORD 
      CPB .3        IF DMA CHANNEL
      RAL,CLE,ERA    INTERRUPT. 
* 
      SSA,RSS      SYSTEM PROCESSOR IS TO BE CALLED 
      JMP CIC.2     IF VALUE IS POSITIVE. 
* 
** INTERRUPT PROCESSOR IS USER ROUTINE TO BE
**  SCHEDULED FOR PRIORITY EXECUTION
* 
      CMA,INA      SET POSITIVE TO GET ID SEGMENT 
      STA B         ADDRESS, SET IN B TO <$LIST>. 
* 
      ADA .15      CHECK STATUS OF PROGRAM. 
      LDA A,I      IF STATUS IS ZERO (DORMANT), 
      SZA           SCHEDULE PROGRAM, OTHERWISE 
      JMP CIC.5      ISSUE DIAGNOSTIC.
* 
      JSB $LIST    CALL SCHEDULER TO LINK PROGRAM 
      OCT 401       INTO SCHEDULE LIST. 
      JMP $XEQ
      SPC 1 
N6    DEC -6
      SKP 
* 
* 
* ASSUME PROCESSOR FOR CODE GT= 6 IS A
*  SYSTEM I/0 DRIVER. VALUE OF INTERRUPT
*  TABLE ENTRY IS THE STARTING ADDRESS
*  OF THE EQUIPMENT TABLE ENTRY CORRESPONDING 
*  TO THE INTERRUPTING DEVICE.
* 
CIC.2 JSB $ETEQ    SET EQT ENTRY ADDRESSES. 
* 
CIC.6 JSB $DVM      GO SET RIGHT MAP
* 
      LDA INTCD      (A) = INTERRUPT SOURCE CODE
* 
      LDB EQT14,I   SET DEVICE
      SZB            TIME-OUT CLOCK IF
      STB EQT15,I     USER SPECIFIED TIME-OUT.
* 
* CALL I/O PROCESSOR, COMPLETION SECTION
* 
      LDB EQT3,I   CALL  DRIVER 
      JSB B,I       *COMPLETION* SECTION. 
* 
      JMP IOCOM  (P+1): *COMPLETION RETURN* 
* 
      JSB $RSM      GO RESTORE USER 
* 
      CLA        (P+2): *CONTINUATION RETURN* 
      LDB OPATN    CHECK FOR OPERATOR ATTENTION.
      STA OPATN     -CLEAR OPERATOR FLAG- 
      SZB          IF FLAG SET, 
      JMP $TYPE     ACKNOWLEDGE.
* 
      LDA $LIST     IF $LIST ENTERED
      SZA,RSS       SKIP TO ENTER $XEQ
      JMP $IRT      RETURN TO POINT OF INTERRUPT
* 
      JMP $XEQ      GO DISPATCH POSSIBLE NEW PROGRAM
* 
*  ILLEGAL OR UNDEFINED INTERRUPT 
* 
CIC.4 LDA INTCD     GET THE INTERRUPT CODE. 
      JSB $CVT1     CONVERT.
      STA CICM1+6   STUFF IN THE MESSAGE
      LDA CICM1    PRINT
      JMP CIC.7     "ILL INT XX"
* 
* ISSUE DIAGNOSTIC FOR BEING UNABLE TO
*  SCHEDULE USER PROGRAM ON INTERRUPT.
* 
CIC.5 ADB .12       SET (B) TO ADDRESS OF NAME IN 
      LDA B,I        PROGRAM ID SEGMENT.
      STA CICM2+7  STORE
      INB           PROGRAM 
      DLD B,I      NAME IN
      DST CICM2+8   DIAGNOSTIC AND PRINT
      LDA CICM2     "SC03 INT XXXXX"
CIC.7 JSB $SYMG 
* 
*     RESET INTERRUPT CONDITIONS - RETURN TO SEQUENCE 
* 
*     ROUTINE: '$IRT' 
* 
*     THIS ROUTINE RETURNS TO THE CURRENT USER PROGRAM. 
*     IT DOES THE PRIV. INTERRUPT SYSTEM EXIT THING AND 
*     RESTORES THE PROGRAMS REGISTERS AND THE INTERRUPT 
*     AND MEMORY PROTECT SYSTEM.
* 
*     CALLING SEQUENCE: 
* 
*     SET UP XEQT AREA ON THE BASE PAGE FOR THE PROGRAM 
* 
*     JMP $IRT
* 
$IRT  LDA XSUSP,I   GET THE EXECUTE ADDRESS 
* 
      STA RTN       SAVE THE RETURN ADDRESS 
MX2   EQU *         ADDRESS OF JMP MX2
      SJP *+2 
      LDB XI        RESTORE INDEX REGISTERS 
      XLA B,I 
      INB 
      XLB B,I 
      CAX 
      CBY 
NMX2  LDA XEO,I     RESTORE E AND 
      CLO           O REGS. 
      SLA,ELA       PRIOR TO INTERRUPT TURN OFF 
      STF 1         TO KEEP TIME DOWN 
      CLA           CLEAR 'MPTFL' TO MEAN 
      CLF 0         TURN OFF THE INTERRUPT SYSTEM 
      STA MPTFL      MEMORY PROTECT IS ON.
* 
SW2   JMP IRT2      RETURN IF NOT PRIV. (ELSE CLC)
* 
STF1  STF 12B      BUFFER ON DUMMY I/O CARD 
* 
      DLD INTBA,I  CHECK CONDITION OF DMA CHANNELS
      SSA           IF BIT = 1 FOR DMA #1 (ACTIVE)
      STC 6          THEN SET CONTROL TO ENABLE 
      SSB          INTERRUPTS.  SAME FOR
      STC 7           DMA CHANNEL #2. 
* 
IRT2  LDA XA,I      RESTORE THE A AND B REGS
      LDB XB,I
      STF 0         TURN ON THE INTERRUPT SYSTEM
      STC 5         AND MEMORY PROTECT
      UJP *         ENABLE USER MAP AND RETURN
RTN   EQU *-1 
      SPC 4 
CICM1 DEF *+1 
      DEC -10 
      ASC 5,ILL INT XX
* 
CICM2 DEF *+1 
      DEC -15 
      ASC 8,SC03 INT  XXXXX 
* 
INTCD NOP           HOLDS INTERRUPT SOURCE CODE 
$MEU  NOP           MEU STATUS  AT INTERRUPT
D$LUT DEF $LUSW     ADDRESS OF BATCH LU TABLE 
$OPSY DEC -1        FLAG INDICATING RTE-III SYSTEM. 
$DATC DEC 1926      DATE CODE OF OPERATING SYSTEM MODULE. 
* 
$BLLO DEC -100      LOW BUFFER LIMITS       *1926DLS* 
$BLUP DEC -300      UPPER BUFFER LIMITS     *1926DLS* 
      HED <  RT EXECUTIVE  INPUT/OUTPUT CONTROL  >
***  I N P U T  /  O U T P U T  C O N T R O L  ***
* 
*  THE I/O SCHEDULING AND CONTROL MODULE  < IOC > 
* IS RESPONSIBLE FOR ALLOCATING THE USE OF ALL
* STANDARD I/O DEVICES AND THE TWO DMA CHANNELS.
*  I/O DRIVERS OPERATE UNDER CONTROL OF <IOC> AND 
* <$CIC> FOR INITIATION AND COMPLETION OF SYSTEM
* AND USER DIRECTED I/O OPERATIONS. I/O DRIVERS 
* ARE INDEPENDENT PROGRAMS IDENTIFIED TO <IOC>
* BY THE DEVICE ASSOCIATED EQUIPMENT TABLE. DRIVERS 
* ARE COMPOSED TO TWO SECTIONS: *INITIATION* AND
* *COMPLETION*.  THE *INITIATION* SECTION IS
* CALLED BY <IOC> TO EXAMINE AND INITIATE AN I/O
* OPERATION. THE *COMPLETION* SECTION IS CALLED 
* BY <$CIC> TO CONTINUE OR COMPLETE THE OPERATION.
* DRIVERS PROVIDE FOR SIMULTANEOUS MULTI-DEVICE 
* CONTROL BY USING THE DEVICE EQT ENTRY FOR 
* VARIABLE STORAGE. 
* 
* I.   * EQUIPMENT TABLE * (EQT)
* 
*   EACH I/O DEVICE CONTROLLED BY THE IOC/DRIVER
*  RELATIONSHIP IS DEFINED BY STATIC AND DYNAMIC
*  INFORMATION IN THE EQUIPMENT TABLE. THE EQT
*  IS A SYSTEM RESIDENT TABLE WHICH IS CONSTRUCTED
*  FROM USER DIRECTIVES BY <RTGEN>.  EACH EQT 
*  ENTRY IS COMPOSED OF 15-WORDS IN THE FOLLOWING FORMAT: 
* 
      SKP 
* 
*  WORD            CONTENTS 
*  ----  ---------------------------- 
*    1   * I/O LIST . LINK POINTER  * 
*    2   *DRIVER *INITIATION ADDRESS* 
*    3   *DRIVER *COMPLETION ADDRESS* 
*    4   *DBPOT/----UNIT#--CHANNEL #* 
*    5   *AV-TYPE CODE- UNIT  STATUS* 
*    6   *REQUEST   CONTROL    WORD * 
*    7   *REQUEST  BUFFER   ADDRESS * 
*    8   *REQUEST  BUFFER   LENGTH  * 
*    9   *TEMPORARY OR DISC TRACK # * 
*   10   *TEMPORARY OR DISC SECTOR #* 
*   11   *DRIVER   TEMPORARY STORAGE* 
*   12   *  "          "        "   * 
*   13   *  "          "        "   * 
*   14   * DEVICE CLOCK RESET VALUE * 
*   15   *   "      "  WORKING  "   * 
* 
*  D: =1 IF A DMA CHANNEL REQUIRED FOR TRANSFER 
*  B: =1 IF AUTOMATIC OUPUT BUFFERING DESIRED 
*  P: =1 IF DRIVER TO HANDEL POWER FAIL RECOVERY. 
*  O: =1 IF DRIVER TO HANDEL TIME OUT.
*  T: DEVICE TIME-OUT BIT - CLEARED BEFORE EACH 
*              IO INITIATION; SET IF DEVICE TIMES-OUT.
*  UNIT#: LAST SUBCHANNEL REFERENCED ON THIS EQT. 
*  CHANNEL#: I/O SELECT CODE (LOWER # IF
*             MULTI-BOARD INTERFACE)
*  AV (AVAILABILITY INDICATOR): 
*     =0, UNIT AVAILABLE FOR OPERATION
*     =1, UNIT DISABLED 
*     =2, UNIT CURRENTLY IN OPERATION 
*     =3, UNIT WAITING FOR DMA CHANNEL
*  TYPE CODE: CODE IDENTIFYING TYPE OF I/O DEVICE 
*  UNIT STATUS: ACTUAL OR SIMULATED UNIT STATUS 
*              AT END OF OPERATION
* 
* II. * DEVICE REFERENCE TABLE * (DRT)
* 
*  THE DEVICE REFERENCE TABLE PROVIDES FOR
* LOGICAL DEVICE ADDRESSING OF PHYSICAL I-O 
* SLOTS DEFINED IN THE *EQT*.  THE *DRT* CONSISTS 
* OF TWO SEQUENTIAL TABLES EACH TABLE CONSISTING
* OF 1-WORD ENTRIES CORRESPONDING TO THE RANGE
* OF USER-SPECIFIED "LOGICAL" UNITS, 1 TO N 
* WHERE N IS LT OR = TO 63(10). THE CONTENTS OF 
* EACH LOGICAL UNIT'S WORD ONE IS AS FOLLOWS: 
*     BITS 5-0  DEVICE'S EQT NUMBER 
*     BITS 6-10 THE LOCKING RESOURCE NUMBER 
*     BITS 11-15  THE DEVICE'S SUBCHANNEL ON THE EQT. 
*  THE CONTENTS OF EACH LOGICAL UNIT'S DEVICE 
* REFERENCE TABLE WORD TWO CONTAINS A 
* POINTER TO THE I/O QUEUE OF THE I/O REQUESTS
* FOR THIS DEVICE WHEN THE DEVICE IS DOWN:
*     BIT 15=0 FOR AN UP LU.
*           =1 FOR A DOWN LU. 
*     BITS 14-0=0 FOR AN UP LU. 
*              #0 FOR A DOWN LU WHERE 
*                 = ADDRESS OF THE I/O QUEUE IF THIS
*                   IS THE FIRST LU(MAJOR LU)POINTING 
*                   TO THE DEVICE.
*                 = 1 TO 1777(8).  THE LU NUMBER OF 
*                   DEVICE(MAJOR LU)ON WHICH THE I/O
*                   IS QUEUED.
* 
*  CERTAIN LOGICAL UNIT #S ARE PERMANENTLY
* ASSIGNED TO FACILITATE SYSTEM, USER AND 
* SYSTEM SUPPORT I/O OPERATIONS. THESE ARE: 
* 
*     0  -   BIT BUCKET(DUMMY LU)(NO ENTRY IN DRT)
*     1  -   SYSTEM  TELETYPEWRITER 
*     2  -   SYSTEM  DISC 
*     3  -   AUXILIARY DISC 
*     4  -   'STANDARD' PUNCH UNIT
*     5  -   'STANDARD' INPUT UNIT
*     6  -   'STANDARD' LIST  UNIT
*     7  - ASSIGNED 
*     .     BY
*     .      USER 
*     63 -
      SKP 
* 
* III.  INPUT/OUTPUT REQUESTS 
* 
*    I/O REQUESTS INCLUDE COMMANDS FOR
*   READ, WRITE, CONTROL(FUNCTIONS) AND STATUS. 
*   THE FORMAT OF THESE REQUESTS CONFORM TO 
*   THE GENERAL SYSTEM REQUEST FORMAT. THE
*   NUMBER OF PARAMETERS VARIES DEPENDING 
*   ON THE TYPE OF REQUEST AND THE CHARAC-
*   TERISTICS OF THE REFERENCED DEVICE. 
* 
*    A USER I/O REQUEST IS DIRECTED TO <IOC>
*   AT -$IORQ- BY THE EXECUTIVE REQUEST 
*   PROCESSOR <$RQST>. SYSTEM I/O REQUESTS
*   ARE IN A DIFFERENT FORMAT AND ARE PROCESSED 
*   AT THE SECTION -$XSIO- IN <IOC>. REFER TO 
*   THAT SECTION FOR DETAILED DESCRIPTION.
* 
*    A *STATUS* REQUEST IS PROVIDED 
*   FOR USER AND SYSTEM SUPPORT PROGRAMS
*   WHICH REQUIRE KNOWLEDGE OF DEVICE 
*   CONDITIONS OR TYPE BEFORE A READ/WRITE/ 
*   CONTROL REQUEST IS MADE. THE PROGRAM
*   IS NOT SUSPENDED ON THIS CALL.
*   A PARAMETER WORD IS INCLUDED IN THE 
*   REQUEST TO CONTAIN THE DEVICE STATUS ON 
*   RETURN TO THE USER. THIS STATUS IS FROM WORD
*   5 OF THE EQT ENTRY FOR THE DEVICE.
*   ALSO, AN ADDITIONAL PARAMETER WORD CAN BE 
*   INCLUDED IN THE REQUEST- WORD 4 OF THE
*   EQT ENTRY IS RETURNED IF THE ADDITIONAL 
*   PARAMETER WORD IS INCLUDED. 
* 
*    A DYNAMIC STATUS REQUEST CAN BE MADE BY
*   MEANS OF A CONTROL REQUEST, THE FORMAT
*   OF WHICH IS DEFINED BELOW.  IN THIS CASE, 
*   THE REQUEST IS QUEUED, THE DRIVER IS ENTERED, 
*   AND THE STATUS IS RETURNED TO THE CALLING 
*   PROGRAM IN THE A REGISTER.
* 
      SKP 
* 
*  A.   READ/WRITE REQUEST FORMAT 
* 
*         EXT  EXEC 
*         JSB  EXEC 
*         DEF  EXIT     (DEFINE EXIT POINT) 
*         DEF  RCODE    (DEFINE READ (1) OR WRITE(2)) 
*         DEF  CONWD    (DEFINE CONTROL WORD) 
*         DEF  BUFFR    (DEFINE BUFFER LOCATION)
*         DEF  BUFFL    (DEFINE BUFFER LENGTH)
*         DEF  DTRAK   (OPTIONAL - DISC TRACK #)
*         DEF  DSECT   (OPTIONAL - DISC SECTOR #) 
*    EXIT --- 
*          .
*          .
*   RCODE DEC  1 OR 2 
*   CONWD OCT  NNNNN   CONTROL INFO/LOGICAL UNIT #
*   BUFFL DEC  N OR -N  WORD OR CHARACTER LENGTH
*   DTRAK DEC  N       DISC TRACK # 
*   DSECT DEC  N       STARTING SECTOR #
* 
*   BIT 12 OF THE CONTROL WORD SET ON NON-DISC REQUESTS 
*   INDICATES A DOUBLE BUFFER FOR THIS OPERATION. 
*   IN THIS CASE THE CONTROL BUFFER IS AT "DTRAK" AND IT'S
*   LENGTH IN WORDS-CHARACTERS  IS AT "DSECT".
* 
* 
*  B.   CONTROL   REQUEST FORMAT
* 
*         EXT  EXEC 
*         JSB  EXEC 
*         DEF  EXIT     (DEFINE EXIT POINT) 
*         DEF  RCODE    (DEFINE REQUEST CODE) 
*         DEF  CONWD    (DEFINE CONTROL WORD) 
*         DEF  PARAM    (DEFINE OPTIONAL PARAMETER) 
                                                                                                                                                                          