ASMB,R,L,B,C
        HED 6128C/6129C/6130C/6131C/6933B DVS DEV. SUBR. TO DVR70 
      NAM LKDVS,7 
      ENT DCVSL,DCVSH,DCVRS,DCVCL 
* 
******************************************************* 
* 
*        PRODUCT:  29100-16001
*        ERS:      A-29100-16001-1
*        LISTING:  A-29100-16001-2
*        SOURCE:   29100-18001
*        RELOC:    29100-16001
* 
******************************************************* 
* 
*             W PARRISH     JULY 15, 1974    REV A     (8.1)
* 
* 
*         *** UTILITY ROUTINES ***
      EXT IFIX,.ENTR,ERROR,ERRCD
      EXT ..FCM,.FSB,.FMP,.FDV,EXEC 
* 
* 
*         *** SUBROUTINE OPTIONS ***
* 
      EXT #DCVU       LOGICAL UNIT # OF DVS'S 
      EXT #ERRU       ERROR LOGICAL UNIT #
      EXT #DCVT 
*         #DCVT IS THE STARTING ADDRESS 
*         OF AN 8-WORD, DVS SUBSYSTEM CONFIGURATION TABLE 
*         FOR POWER SUPPLIES 1 TO 8 CONTAINING
*         THE DECIMAL INTEGER REPRESENTATION OF 
*         THE POWER SUPPLY TYPE. USE 0 FOR
*         UNASSIGNED POWER SUPPLIES.
*         EXAMPLE:IN A 5 POWER SUPPLY SUBSYSTEM,
*                 UNIT #1 =6933,
*                 UNIT #2 =6128 
*                 UNIT #3 =6131 
*                 UNIT #4 =6130 
*                 UNIT #5 =6129 
* 
*         THE SYSTEM CONFIGURATION TABLE WOULD BE : 
* 
*         ENT #DCVT 
*  #DCVT  DEC 6933    * DVS # 1 IS A 6933 
*         DEC 6128    * DVS # 2 IS A 6128 
*         DEC 6131    * DVS # 3 IS A 6131 
*         DEC 6130    * DVS # 4 IS A 6130 
*         DEC 6129    * DVS # 5 IS A 6129 
*         NOP         * DVS # 6,
*         NOP         *        7, 
*         NOP         *         8 DO NOT EXIST
      SKP 
*    ***  ENTRY FORMATS AND FUNCTIONS***
* 
*         CALL DCVSH(IU,V,CL)  SET DVS TO HIGH RANGE. 
* 
*         CALL DCVSL(IU,V,CL)  SET DVS TO LOW RANGE.
* 
*           WHERE: IU = UNIT NUMBER (INTEGER) 
*                   V = DESIRED VOLTAGE (FL.PT) 
*                   C = CURRENT LIMIT (FL.PT) 
* 
* 
*         CALL DCVRS(IAV,ISTAT,LATCH,HSTRY)      DVS READ STATUS
* 
*            WHERE : IAV = AVAILABILITY OF SUBSYSTEM
*                    ISTAT = CURRENT LATCH STATUS FOR SUBSYSTEM 
*                    LATCH=CURRENT LATCH STATUS WORD FOR DVS'S
*                    HSTRY=LATCH STATUS HISTORY WORD FOR DVS'S
* 
* 
*          CALL DCVCL                         CLEAR DVS SUBSYSTEM 
* 
*           INITIALIZE CURRENT LATCH HISTORY TO 0 
*           PREVENT INTERRUPTS FROM DVS'S 
* 
* 
********************************************************************* 
      SKP 
* 
*         ENTRY TO SET POWER SUPPLY TO HIGH RANGE 
* 
* TABLE OF CALL PARAMETER ADDRESSES 
AUNIT BSS 1         UNIT # (INTEGER)
AV    BSS 1         VOLTAGE (FL.PT.)
ACL   BSS 1         CURRENT LIMIT(FL.PT.) 
* 
DCVSH NOP           ENTRY PT. FOR HIGH V RANGE
      JSB .ENTR     FILL PARAMETER ADRS TABLE 
      DEF AUNIT 
      JSB GTABL     GET FIRST ADDRESS OF DVS TABLE
      CLA 
      STA WORD1+1     SELECT LOW V RESOLUTION 
      LDA A50       V LIMIT ADDRESS 
      LDB LRMFA     SELECT V*200
SLENT STB MFACT     V MULTIPLYING FACTOR
* 
* LOOK UP DVS TYPE IN EXTERNAL TABLE
* 
      LDB FIRST        GET ADDRESS BEFORE TABLE 
      ADB AUNIT,I        GET ADDRESS OF ENTRY 
      LDB 1,I            GET DVS TYPE 
      SZB,RSS 
      JMP ERR1      UNIT NUMBER NOT ASSIGNED
      CPA A16       LOW V-RANGE ? 
      JMP STALM     YES 
      CPB .6128     NO,VERIFY DVS IS NOT 6128/6133
      JMP ERR1      NO HIGH V-RANGE ON 6128 
      CPB .6933 
      JMP ERR1      NO HIGH V-RANGE ON 6133 
      CPB .6131     IF 6131,
      ADA .2            LIMIT IS 100 V
STALM STA LIMIT 
      LDA M8        - NO. OF ENTRIES
      CPB .6131        IN I-LIMIT TABLE 
      ADA .2          (2 LESS FOR 6131) 
      STA CLISZ 
* 
* DETERMINE APPLICABLE CURRENT LIMIT TABLE
* 
      LDA A.1       ADDRESS OF 1.0
      CPB .6129 
      ADA .2        ADDRESS OF 5.0
      CPB .6128 
      ADA .6        ADDRESS OF 12.5 
      CPB .6933 
      ADA .4        ADDRESS OF 15.0 
      STA DIVFA     ADRS OF I-LIMIT DIVIDER 
* 
* PROCESS VOLTAGE PARAMETER & SET UP OUTPUT WORD1 
* 
      DLD AV,I
      STA VSIGN     SAVE VOLTAGE SIGN 
      SSA           TAKE ABSOLUTE 
      JSB ..FCM          VALUE OF V 
      STA VOLT
      STB VOLT+1
      JSB .FSB      DOES V EXCEED LIMIT ? 
LIMIT NOP           PRESET WITH ADRS OF 16/50/100 
      SSA,RSS 
      JMP ERR1      V REQUESTED > MAX ALLOWED 
      LDA VOLT
      LDB VOLT+1
      JSB .FMP
MFACT NOP           PRESET WITH ADRS OF 200/2000
      JSB IFIX     INTEGERIZE 
      LDB VSIGN 
      SSB           NEGATIVE VOLTAGE ?
      CMA,INA       YES- TAKE 2'S COMPLEMENT
      STA WORD1      SET UP OUTPUT WORD1
* 
* PROCESS CURRENT LIMIT 
* 
      DLD ACL,I 
      JSB .FDV
DIVFA NOP           STUFFED WITH ADRS OF 1/5/15 
      JSB IFIX     INTEGERIZE 
      SSA 
      JMP ERR1      CURRENT LIMIT IS NEGATIVE 
      CMA,INA 
      STA SAVEA 
      CLA 
      LDB CLADD     INITIALIZE POINTER TO 
      STB TEMPA        CURRENT LIMIT TABLE ENTRIES
CLTBL LDB SAVEA     GET NEXT CL TABLE VALUE 
      ADB TEMPA,I 
      SSB,RSS 
      JMP CLFND     CL FOUND
      INA 
      ISZ TEMPA 
      ISZ CLISZ     PRESET TO -8 OR -6
      JMP CLTBL 
      JMP ERR1      CL > ALLOWABLE MAX
* 
* FORMAT OUTPUT WORD1+1 
* 
CLFND ALF,RAR       LINE UP CL BITS 
      IOR WORD1+1     BRING IN RESOLUTION BIT 
      LDB M9
      ADB AUNIT,I   VERIFY VALIDITY OF UNIT # 
      SSB,RSS 
      JMP ERR1      UNIT # > 8
      ADB .8
      SSB 
      JMP ERR1      UNIT # < 1
      ADA 1         FORMAT
      STA WORD1+1        DVS ADDRESS
      SKP 
* 
* OUTPUT DATA BY CALLING DVR70 THRU THE REAL TIME EXECUTIVE 
* 
      JSB EXEC     CALL RTE 
      DEF *+5 
      DEF .2       WRITE REQUEST
      DEF LUDVS    LU OF DVS SUBSYSTEM
      DEF WORD1    OUTPUT BUFFER
      DEF .2       BUFFER LENGTH
      JMP DCVSH,I   *** NORMAL EXIT *** 
      SKP 
* 
*         ENTRY TO SET POWER SUPPLY TO LOW RANGE
* 
* TABLE OF CALL PARAMETER ADDRESSES 
BUNIT BSS 1         UNIT # (INTEGER)
BV    BSS 1         VOLTAGE(FL.PT.) 
BCL   BSS 1         CURRENT LIMIT(FT.PT.) 
* 
DCVSL NOP           ENTRY PT. FOR LOW V-RANGE 
      JSB .ENTR     FILL PARAMETER ADRS TABLE 
      DEF BUNIT 
      JSB GTABL    GET FIRST ADDRESS OF DVS TABLE 
* 
* MOVE PRMTR ADRS & RETURN ADRS TO TABLE FOR DCVSH
* 
      LDA BUNIT 
      STA AUNIT 
      LDA BV
      STA AV
      LDA BCL 
      STA ACL 
      LDA DCVSL 
      STA DCVSH 
* 
* CHOOSE HIGH V RESOLUTION & LOW V LIMIT
* 
      LDA B100
      STA WORD1+1 
      LDB HRMFA     SELECT V*2000 
      LDA A16       VOLTAGE LIMIT = 16.383 V
      JMP SLENT     GO & EXECUTE DCVSH CODE 
      SKP 
* 
* ERROR PROCESSING
* 
ERR1  JSB ERROR     PRINT ERROR MESSAGE ON SYS. TTY 
      DEF *+5 
      DEF ONE 
      DEF A479E 
      DEF #ERRU 
      DEF DCVSH 
      JMP DCVSH,I 
* 
* GET FIRST ADDRESS OF DVS TABLE (CHAIN THROUGH INDIRECTS)
* 
GTABL NOP 
      CLA 
      STA ERRCD      CLEAR ERROR FLAG!
      LDA CTABL 
      SSA,RSS 
      JMP *+4 
      AND M7777 
      LDA 0,I 
      JMP *-4 
      CMA,INA          NOTE THAT FIRST IS ACTUALLY THE ADDRESS
      CMA              BEFORE THE START OF THE TABLE. 
      STA FIRST 
      JMP GTABL,I 
M7777 OCT 77777 
      SKP 
* 
* ENTRY TO SET ALL DVS'S TO ZERO, 
*  PREVENT INTERRUPTS & ERASE CURRENT LATCH HISTORY 
* 
DCVCL NOP 
* 
      JSB .ENTR 
      DEF DCVCL 
      JSB GTABL    GET FIRST ADDRESS OF DVS TABLE 
* SET ALL DVS'S IN SUBSYSTEM TO 0 VOLTS 
      LDB B77        WILL BE BUMPED TO B100 FOR 1ST DVS 
      STB ZERO+1
      LDA FIRST 
      STA WORD1 
NEXT  ISZ WORD1     ADDRESS OF DVS TYPE 
      LDB WORD1,I 
      SZB,RSS        IS THIS THE LAST DVS 
      JMP CLEAR 
      ISZ ZERO+1     INCREMENT DVS SUBCHANNEL ADDRESS 
      LDA ZERO+1             IS THIS
      CPA B110                THE 9TH DVS?
      JMP CLEAR               YES 
* PROGRAM DVS'S TO 0 VOLTS
      JSB EXEC
      DEF *+5 
      DEF .2
      DEF LUDVS 
      DEF ZERO
      DEF .2
      JMP NEXT
* CLEAR STATUS WORDS & PREVENT INTERRUPTS FROM DVS
CLEAR JSB EXEC
      DEF *+3 
      DEF .3        CONTROL REQUEST 
      DEF LUDVS 
      JMP DCVCL,I      RETURN 
      SKP 
* 
* ENTRY TO RETURN DVS STATUS INFORMATION
* 
* TABLE OF RETURNED CALL PARAMETER ADDRESSES
IAV   BSS 1 
ISTAT BSS 1 
LATCH BSS 1 
HSTRY BSS 1 
* 
DCVRS NOP 
      JSB .ENTR 
      DEF IAV 
      CLA 
      STA ERRCD           CLEAR ERROR FLAG
* GET STATUS FROM WORD 5 OF DVS EQT 
      JSB EXEC
      DEF *+4 
      DEF .13        STATUS REQUEST 
      DEF LUDVS      LU OF DVS SUBSYSTEM
      DEF ISTAT,I 
* GET AVAILABILITY BITS INTO LOWER 2 BITS OF IAV
      LDA ISTAT,I     GET BITS 14 & 15
      RAL,RAL 
      AND .3
      STA IAV,I 
      SZA             IF DVS SYSTEM IS NOT READY, RETURN
      JMP DCVRS,I      WITH ONLY AVAILABILITY STATUS
* GET HARDWARE STATUS WORD & HISTORY FROM DVS CARD
      JSB EXEC
      DEF *+5 
      DEF ONE       READ CALL 
      DEF LUDVS     LU OF DVS SUBSYSTEM 
      DEF STAT      READ BUFFER 
      DEF .2             BUFFER LENGTH
* GET STATUS FROM WORD 5 OF DVS EQT 
      JSB EXEC
      DEF *+4 
      DEF .13       STATUS REQUEST
      DEF LUDVS     LU OF DVS SUBSYSTEM 
      DEF ISTAT,I 
* RETURN STATUS 
      LDA ISTAT,I 
      AND .3
      STA ISTAT,I 
      LDA STAT
      AND B377         MASK OFF LOWER 8 BITS
      STA LATCH,I      RETURN LATCH STATUS
      LDA STAT+1
      AND B377         MASK OFF LOWER 8 BITS
      STA HSTRY,I      RETURN LATCH HISTORY 
      JMP DCVRS,I      RETURN!! 
      SKP 
* 
* CONSTANTS 
* 
.16   DEC 16.383502 VOLTAGE LIMIT TABLE 
.50   DEC 50.00001,100.00001
.1    DEC 1.,5.,15.,12.5
*** THE FOLLOWING CONSTANTS MUST NOT BE REARRANGED
* IE. DEC 20,50,70,100,200,500,700,1000 
*** 
CLMT  DEC 20        CURRENT LIMIT TABLE 
      DEC 50
      DEC 70
      DEC 100 
      DEC 200 
      DEC 500 
      DEC 700 
      DEC 1000
*** 
*** THE ABOVE CONSTANTS MUST NOT BE REARRANGED
* IE. DEC 20,50,70,100,200,500,700,1000 
* 
CLADD DEF CLMT      ADDR OF FIRST ENTRY IN CURR TBL 
HRMFA DEF HRMF     ADDRESS OF HGH RES MULT FACT 
HRMF  DEC 2000.002  HGH RES MULT FACT 
LRMFA DEF LRMF     ADDRESS OF LOW RES MULT FACT 
LRMF  DEC 200.      LOW RES MULT FACT 
A.1   DEF .1
A50   DEF .50 
A16   DEF .16 
ONE   DEC 1 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.6    DEC 6 
.8    DEC 8 
.13   DEC 13
B77   OCT 77
B100  OCT 100 
B110  OCT 110 
B377  OCT 377       LOWER 8 BITS
M8    DEC -8
M9    DEC -9
.6128 DEC 6128
.6129 DEC 6129
.6131 DEC 6131
.6933 DEC 6933
ZERO  DEC 0.0 
WORD1 BSS 2        OUTPUT BUFFER
* 
* EQUATED STORAGE 
* 
SAVEA EQU MFACT 
TEMPA EQU DIVFA 
VSIGN EQU BUNIT 
CLISZ EQU DCVCL         ISZ FOR CURRENT LIMIT TABLE 
VOLT  EQU BV
NCNT  EQU ISTAT 
LUDVS EQU #DCVU 
STAT  EQU WORD1 
* DEFINE ERROR PRINTOUT MNEMONIC
A479E DEC 3 
      ASC 2,DCV 
FIRST  BSS 1
CTABL DEF #DCVT 
* 
*  END OF DRIVER LINK 
* 
      END 
                                                                                                                                                                                                    