HFM 
          IDENT  HFM,HFM
          PERIPH
          BASE   MIXED
          SST 
*COMMENT  HFM - HARDWARE FUNCTION MANAGER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  HFM - HARDWARE FUNCTION MANAGER. 
          SPACE  4
***       HFM - HARDWARE FUNCTION MANAGER.
*         A. J. BEEKMAN.     74/06/13.
          SPACE  4
***       *HFM* PROCESSES FUNCTIONS FOR CPU PROGRAMS THAT OPERATE ON
*         THE STATUS AND CONTROL REGISTERS OF THE CYBER 170 OR THE
*         INTERLOCK REGISTER OF THE CYBER 70. 
* 
*         ALL *HFM* FUNCTIONS REQUIRE THAT THE JOB IS SYSTEM ORIGIN 
*         OR THE USER HAS SYSTEM ORIGIN PRIVILEDGES WITH DEBUG MODE 
*         ON, THAT THE CALLING PROGRAM HAS AN SSJ= ENTRY POINT, 
*         AND THAT AUTO RECALL IS SET.  ERRORS ENCOUNTERED BY *HFM* 
*         CAUSE THE REQUEST TO BE DROPPED AND ABORT THE JOB.
          SPACE  4
***       CALL. 
* 
*T IR     24/ *HFMP*,12/ CODE,6/ 0,18/ ADDR 
*         CODE - FUNCTION CODE. 
*         ADDR - ADDRESS OF PARAMETER WORD. 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         * CHANNEL 36 NOT ACTIVE.* - INCORRECT REQUEST FOR CHANNEL 36. 
* 
*         * HFM ARGUMENT ERROR.* - INCORRECT FUNCTION CODE OR PARAMETER 
*         WORD ADDRESS OUT OF RANGE.
* 
*         * HFM INCORRECT REQUEST.* - NOT SSJ= CALLER, AUTO RECALL NOT
*         SET, OR NOT SYSTEM ORIGIN WITH USER NOT VALIDATED FOR 
*         SYSTEM PRIVILEDGES, OR NOT CYBER 70 OR CYBER 170 MAINFRAME. 
          SPACE  4
*CALL     COMPMAC 
*CALL     COMSPIM 
*CALL     COMSSCR 
*CALL     COMSSSJ 
          TITLE  DIRECT LOCATION ASSIGNMENTS. 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CM       EQU    10 - 14     CM WORD BUFFER 
 CN       EQU    20 - 24     CM WORD BUFFER 
 PW       EQU    30 - 34     PARAMETER WORD BUFFER
 NB       EQU    35          NUMBER OF BITS IN REGISTER 
 MT       EQU    36          MACHINE TYPE FLAG
  
  
*         CONSTANTS.
  
 CH       EQU    CHSC        STATUS/CONTROL REGISTER CHANNEL
****
 HFM      TITLE  MAIN PROGRAM.
*         HFM - MAIN PROGRAM. 
  
          ORG    PPFW 
 HFM      RJM    PRS         PRESET 
          LDM    TFCN,IR+2   SET FUNCTION PROCESSOR 
          STM    HFMA 
          LJM    *           PROCESS REQUEST
 HFMA     EQU    *-1
  
*         RETURN FROM FUNCTION. 
  
 HFM1     MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
          SPACE  4
**        TFCN - TABLE OF FUNCTION CODE PROCESSORS. 
*         ENTRY = 1 WORD. 
*         INDEXED BY FUNCTION CODE. 
* 
*T        12/ ADDR
*         ADDR   ADDRESS OF FUNCTION PROCESSOR. 
  
  
 TFCN     BSS    0
          LOC    0
  
          CON    TDB         TRANSFER DATA BLOCK
          CON    PRF         PROCESS REGISTER FUNCTION
  
          LOC    *O 
 TFCNL    EQU    *-TFCN 
 ERR      TITLE  SUBROUTINES. 
**        ERR -  ERROR PROCESSOR. 
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
* 
*         EXIT   TO PPR (JOB HAS BEEN ABORTED). 
* 
*         CALLS  DFM. 
* 
*         MACROS MONITOR. 
  
  
 ERR      RJM    DFM         ISSUE DAYFILE MESSAGE
          MONITOR  ABTM      ABORT JOB
          LJM    PPR         EXIT TO PP RESIDENT
 TDB      TITLE  FUNCTION PROCESSORS. 
***       TDB -  TRANSFER DATA BLOCK (FUNCTION 0).
* 
*         TRANSFER DATA BLOCK BIT BY BIT TO THE STATUS AND CONTROL
*         REGISTER, OR 128 BITS TO THE INTERLOCK REGISTER ON A CYBER
*         70.  SET OR CLEAR THE CORRESPONDING BITS IN THE REGISTER
*         AS IN THE DATA BLOCK.  THIS ALLOWS THE USER TO SET ERROR
*         OR CONTROL BITS MANUALLY. 
* 
*         CALLING FORMAT: 
* 
*T ADDR   2/F,58/ 0 
*T,DB+0   60/ REGISTER BITS  59 -   0 
*T,DB+1   60/ REGISTER BITS 119 -  60 
*T,DB+2   60/ REGISTER BITS 179 - 120 
*T,DB+3   60/ REGISTER BITS 239 - 180 
* 
*         ADDR   PARAMETER WORD ADDRESS.
*         DB     DATA BLOCK ADDRESS (ADDR+1). 
*         F      CHANNEL 36 REGISTER FLAG (BIT 59). 
* 
* 
*         ENTRY  (PW) = PARAMETER WORD. 
*                PARAMETER WORD BIT 59 SET - CHANNEL 36 REGISTER. 
*                DATA BLOCK  WORD 0 - BITS 59 - 0.
*                            WORD 1 - BITS 119 - 60.
*                            WORD 2 - BITS 179 - 120. 
*                            WORD 3 - BITS 239 - 180. 
* 
*         EXIT   DATA BLOCK TRANSFERRED TO CORRECT REGISTER.
* 
*         USES   T2 - T4. 
* 
*         CALLS  CLO, CTY, CCH, SFC, CLL. 
  
  
 TDB      BSS    0
          RJM    CLO         CHECK LOCK OUT 
          RJM    CTY         CHECK TYPE OF REGISTER 
          LDD    PW          PARAMETER WORD 
          SHN    21-13
          PJN    TDB1        IF CHANNEL 16
          RJM    CCH         CHANGE CHANNEL 
  
*         READ DATA BLOCK.
  
 TDB1     LDD    IR+3        READ DATA BLOCK
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          ADN    1
          CRM    SCRB+17,ON  WORD 0 
          CRM    SCRB+12,ON  WORD 1 
          CRM    SCRB+5,ON   WORD 2 
          CRM    SCRB,ON     WORD 3 
          LDC    SCRB+23     S/C WORD TO READ 
          STD    T3 
          LDN    0           FIRST BIT NUMBER 
          STD    T4 
  
*         TRANSFER DATA BLOCK TO HARDWARE REGISTER. 
  
 TDB2     LDN    14          NUMBER OF BITS PER WORD
          STD    T2 
 TDB3     LDI    T3 
          SHN    21-0        GET NEXT BIT 
          STI    T3 
          MJN    TDB4        IF BIT TO BE SET 
          LDC    FCCL        CLEAR BIT
          UJN    TDB5 
  
 TDB4     LDC    FCSB        SET BIT
 TDB5     LMC    0           ADD BIT NUMBER 
 TDBA     EQU    *-1
          RJM    SFC         SEND FUNCTION
          AOD    T4          INCREMENT BIT NUMBER 
          STM    TDBA 
          SBD    NB 
          ZJN    TDB6        IF ALL BITS TRANSFERRED
          SOD    T2          DECREMENT BITS PER WORD
          NJN    TDB3        IF ENTIRE WORD NOT TRANSFERRED 
          SOD    T3          SET NEXT WORD ADDRESS
          UJN    TDB2        LOOP FOR ALL BITS
  
 TDB6     RJM    CLL         CLEAR LOCK BIT 
          LJM    HFM1        RETURN 
 PRF      EJECT 
***       PRF -  PROCESS REGISTER FUNCTION (FUNCTION 1).
* 
*         PROCESS STATUS AND CONTROL REGISTER FUNCTION.  SEND THE 
*         SPECIFIED FUNCTION TO THE REGISTER AND RETURN THE REPLY.
*         IF CYCLE IS REQUESTED, SEND THE FUNCTION THE NUMBER OF
*         TIMES AND AT THE TIME INTERVAL GIVEN IN THE PARAMETER WORD, 
*         AND RETURN THE REPLY AFTER THE FINAL CYCLE. 
* 
*         CALLING FORMAT: 
* 
*T ADDR   2/F,10/ 0,12/ LENGTH,12/ NUMBER,12/ FUNCTION,12/ REPLY
* 
*         ADDR   PARAMETER WORD ADDRESS.
*         F      CHANNEL 36 REGISTER FLAG (BIT 59). 
*                CYCLE FLAG (BIT 58). 
*         LENGTH  NUMBER OF PERIODS PER CYCLE (PERIOD = 20B MS.). 
*         NUMBER  NUMBER OF CYCLES. 
*         FUNCTION  REGISTER FUNCTION.
*                0YYY        READ BYTE YYY. 
*                1XXX        TEST BIT XXX.
*                2XXX        CLEAR BIT XXX. 
*                3XXX        TEST/CLEAR BIT XXX.
*                4XXX        SET BIT XXX. 
*                5XXX        TEST/SET BIT XXX.
*                6000        CLEAR ALL BITS.
*                7000        TEST ERROR BITS. 
*         REPLY  FUNCTION REPLY.
* 
* 
*         ENTRY  (PW - PW+4) = PARAMETER WORD CONTENTS. 
*                PARAMETER WORD BIT 59 SET - CHANNEL 36.
*                      BITS 12 - 23 - S/C INSTRUCTION.
*                      BIT 58 SET - PROCESS CYCLE.
*                      BITS 24 - 35 - NUMBER OF CYCLES. 
*                      BITS 36 - 47 - CYCLE TIME. 
* 
*         EXIT   S/C INSTRUCTION PROCESSED. 
*                REPLY IN BITS 0 - 11 OF PARAMETER WORD.
* 
*         USES   CM - CM+4, CN - CN+4, PW - PW+4. 
* 
*         CALLS  CCH, CEB, CTY, SFC.
* 
*         MACROS MONITOR, PAUSE.
  
  
 PRF      BSS    0
          RJM    CTY         CHECK TYPE OF REGISTER 
          LDD    PW          PARAMETER WORD 
          SHN    21-13
          PJN    PRF1        IF CHANNEL 16
          RJM    CCH         CHANGE CHANNEL 
 PRF1     RJM    CEB         CHECK FOR CHANNEL 36 ERROR BIT 
          LDD    PW 
          SHN    21-12
          PJN    PRF3        IF PROCESS CYCLE BIT NOT SET 
  
*         ON CYCLE, READ REAL TIME CLOCK. 
  
          MONITOR RCPM       REQUEST CPU
 PRF2     LDC    RTCL        READ REAL TIME CLOCK 
          CRD    CN 
  
*         SEND FUNCTION AND RETURN REPLY. 
  
 PRF3     LDD    PW+3 
          RJM    SFC         SEND FUNCTION
          STD    PW+4        SAVE SCR DATA
          LDD    T4          CHECK CHANNEL 36 ERROR BIT FLAG
          ZJN    PRF4        IF NOT ERROR BIT 
          LDC    FCSB+EISP   SET ERROR IN SECOND PPS BIT
          OAN    16 
          IAN    16+40
 PRF4     LDD    PW 
          SHN    21-12
          MJN    PRF5        IF CYCLE BIT SET 
          LDD    IR+3        COPY DATA TO CALLING PROGRAM 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CWD    PW 
          LJM    HFM1        RETURN 
  
*         CHECK CYCLE TIMING. 
  
 PRF5     LDC    RTCL        READ REAL TIME CLOCK 
          CRD    CM 
          LDD    CM+4 
          SBD    CN+4 
          SHN    -4          NUMBER OF CYCLES SINCE LAST INSTRUCTION
          SBD    PW+1        CYCLE TIME 
          PJN    PRF6        IF TIME TO SEND INSTRUCTION
          PAUSE 
          UJN    PRF5        LOOP FOR CYCLE TIME
  
*         CHECK FOR END OF CYCLE. 
  
 PRF6     SOD    PW+2        NUMBER OF CYCLES 
          SBN    1
          ZJN    PRF7        IF TIME UP 
          LDD    IR+3        READ PARAMETER WORD
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CRD    CN 
          LDD    CN          CHECK FOR END OF CYCLE 
          SHN    21-12
          PJN    PRF7        IF STOP CYCLE SIGNAL 
          LJM    PRF2        LOOP FOR NEXT INSTRUCTION
  
 PRF7     LDN    0           CLEAR CYCLE BIT
          STD    PW 
          LJM    PRF3        LOOP FOR LAST INSTRUCTION
 CCH      TITLE  SECONDARY SUBROUTINES. 
**        CCH -  CHANGE CHANNEL.
* 
*         EXIT   IF CHANNEL 36 AVAILABLE, INSTRUCTIONS IN *SFC* ARE 
*                SET TO CHANNEL 36. 
*                IF NOT AVAILABLE, ERROR MESSAGE ISSUED.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  ERR, CLL.
  
  
 CCH      SUBR               ENTRY/EXIT 
          LDD    MT          CHECK MACHINE TYPE 
          ZJN    CCH1        IF NOT CYBER 170 
          LDN    PPUL        READ PP CONFIGURATION
          CRD    CM 
          LDD    CM+2        CHECK NUMBER OF PP-S 
          SBN    13 
          MJN    CCH1        IF 10 PP-S 
          LDC    OANI+36     SET CHANNEL 36 
          STM    SFCA 
          LDC    IANI+36+40  SET CHANNEL 36 
          STM    SFCB 
          UJN    CCHX        RETURN 
  
 CCH1     LDD    IR+2 
          SBN    1
          PJN    CCH2        IF NOT FUNCTION 0
          RJM    CLL         CLEAR LOCK BIT 
 CCH2     LDC    =C* CHANNEL 36 NOT ACTIVE.*
          LJM    ERR         ISSUE MESSAGE AND ABORT
 CEB      SPACE  4,10 
**        CEB -  CHECK FOR CHANNEL 36 ERROR BIT.
* 
*         ENTRY  (PW) = CHANNEL 36 FLAG.
*                (PW+3) = REGISTER FUNCTION.
* 
*         EXIT   (T4) NONZERO IF CHANNEL 36 ERROR BIT TO BE SET.
* 
*         USES   T4.
  
  
 CEB      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR FLAG 
          STD    T4 
          LDD    PW 
          SHN    21-13
          PJN    CEBX        IF CHANNEL 16
          LDD    PW+3        CHECK FOR SET BIT FUNCTIONS
          SHN    -11
          SBN    4
          MJN    CEBX        IF FUNCTIONS 0-3 
          SBN    2
          PJN    CEBX        IF NOT SET OR TEST/SET FUNCTIONS 
          LDD    PW+3        CHECK BIT NUMBER 
          LPC    777
          SBN    NTEB        NUMBER OF TEST ERROR BITS
          PJN    CEBX        IF NOT ERROR BIT 
          AOD    T4          SET FLAG 
          UJN    CEBX        RETURN 
 CLL      SPACE  4,5
**        CLL -  CLEAR LOCK OUT.
* 
*         EXIT   LOCK OUT BIT CLEARED.
* 
*         USES   CM - CM+4. 
  
  
 CLL      SUBR               ENTRY/EXIT 
          LDC    SCRL        CLEAR LOCK OUT BIT 
          CRD    CM 
          LDD    CM 
          LPC    3777 
          STD    CM 
          LDC    SCRL 
          CWD    CM 
          UJN    CLLX        RETURN 
 CLO      SPACE  4,5
**        CLO -  CHECK MTR LOCK OUT.
* 
*         EXIT   LOCK OUT BIT SET.
* 
*         USES   CM - CM+4. 
  
  
 CLO      SUBR               ENTRY/EXIT 
 CLO1     LDC    SCRL        CHECK MTR LOCK BIT 
          CRD    CM 
          LDD    CM 
          SHN    6
          PJN    CLO2        IF LOCK OUT BIT NOT SET
          PAUSE 
          UJN    CLO1        LOOP UNTIL CLEAR 
  
 CLO2     LDC    4000        SET BIT
          RAD    CM 
          LDC    SCRL 
          CWD    CM 
          UJN    CLOX        RETURN 
 CTY      SPACE  4,7
**        CTY -  CHECK TYPE OF REGISTER.
* 
*         EXIT   IF NOT CYBER 170, INSTRUCTIONS IN *SFC* SET TO 
*                CHANNEL 15.
*                (NB) = NUMBER OF BITS IN REGISTER. 
* 
*         USES   CM - CM+4, NB. 
  
  
 CTY1     LDC    NBIT        SET NUMBER OF BITS IN S/C REGISTER 
          STD    NB 
  
 CTY      SUBR               ENTRY/EXIT 
          LDD    MT          CHECK MACHINE TYPE 
          NJN    CTY1        IF CYBER 170 
          LDC    200         SET NUMBER OF BITS 
          STD    NB 
          SOM    SFCA        SET CHANNEL 15 
          SOM    SFCB 
          UJN    CTYX        RETURN 
 SFC      SPACE  4,5
**        SFC -  SEND FUNCTION TO S/C REGISTER. 
* 
*         ENTRY  (A) = S/C REGISTER FUNCTION. 
* 
*         EXIT   (A) = FUNCTION REPLY.
  
  
 SFC      SUBR               ENTRY/EXIT 
 SFCA     OAN    CH+40       SEND FUNCTION
*         OAN    CH+40+20    (IF CHANNEL 36 CALL) 
*         OAN    15          (IF CYBER 70 CALL) 
 SFCB     IAN    CH+40
*         IAN    CH+40+20    (IF CHANNEL 36 CALL) 
*         IAN    15+40       (IF CYBER 70 CALL) 
          UJN    SFCX        RETURN 
          SPACE  4
          USE    LITERALS 
  
  
*         BUFFERS.
  
  
 SCRB     EQU    *           S/C REGISTER BUFFER
 PRS      TITLE  PRESET.
**        PRS -  PRESET.
* 
*         EXIT   (PW - PW+4) = PARAMETER WORD CONTENTS. 
*                TO ERR, IF ANY ERROR ENCOUNTERED.
* 
*         USES   MT, CM - CM+4, PW - PW+4.
* 
*         CALLS  CRS, CUA, ERR. 
  
  
 PRS      SUBR               ENTRY/EXIT 
  
*         CHECK PARAMETER WORD ADDRESS. 
  
          LDD    IR+3        CHECK ADDRESS
          LPN    77 
          SHN    14 
          MJN    PRS2        IF OUT OF RANGE
          ADD    IR+4 
          ADN    5
          SHN    -6 
          SBD    FL 
          PJN    PRS2        IF .GT. FL - 5 
          LDD    IR+3        SET ADDRESS - 2
          LPN    77 
          SHN    14 
          ADD    IR+4 
          SBN    2
          PJN    PRS3        IF .GT. RA + 1 
 PRS2     LDC    =C* HFM ARGUMENT ERROR.* 
          UJN    PRS4.2      ISSUE MESSAGE AND ABORT
  
 PRS3     ADN    2           READ PARAMETER WORD
          SHN    14 
          ADD    RA 
          SHN    6
          CRD    PW 
  
*         CHECK FUNCTION CODE.
  
          LDD    IR+2        CHECK CODE 
          SBN    TFCNL
          PJN    PRS2        IF INCORRECT CODE
  
*         CHECK FOR LEGAL ACCESS. 
  
          LDD    CP          CHECK SSJ= BIT 
          ADC    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          PJN    PRS4        IF NOT SSJ= JOB
          RJM    CUA         CHECK USER ACCESS
          NJN    PRS4.1      IF *DEBUG* NOT TURNED ON 
          RJM    CRS         CHECK RECALL STATUS
          NJN    PRS5        IF AUTO RECALL SET 
 PRS4     LDC    =C* HFM INCORRECT REQUEST.*
          UJN    PRS4.2      ISSUE MESSAGE AND ABORT
  
 PRS4.1   LDC    =C* DEBUG NOT TURNED ON.*
 PRS4.2   LJM    ERR         ISSUE MESSAGE AND ABORT
  
 PRS5     LDK    MABL        CHECK MAINFRAME TYPE 
          CRD    CM 
          LDD    CM+1 
          SHN    -6 
          LPN    43 
          LMN    3
          ZJN    PRS4        IF CYBER 170-815/825/835/855 
          LMN    40 
          ZJN    PRS4        IF NOT CYBER 170 OR CYBER 70 MAINFRAME 
          LMN    2
          STD    MT          0 = CYBER 70, NONZERO = CYBER 170
          LJM    PRSX        RETURN 
          SPACE  4
*         COMMON DECKS. 
  
*CALL     COMPCRS 
 SSJ$     EQU    1           SET SSJ CHECKING FOR *COMPCUA* 
*CALL     COMPCUA 
  
  
          END 
