ASMB,R,B,L,C
     HED 12604B DSI DEVICE SUBROUTINE TO RTE DRIVER DVR40 
     NAM 12604,7    09601-16011 REV. A
* 
     ENT DSI
*********************************************************** 
* 
*     ERS:         09601-16011-1
*     LISTING:     09601-16011-2
*     SOURCE TAPE: 09601-18011
*     RELOC. TAPE: 09601-16011
* 
*********************************************************** 
* 
*     D. BOLIERE     3 APRIL 74 
*     B. PARRISH    22 AUG   74    REV A        (1.1) 
* 
*     *****EXTERNAL UTILITY ROUTINES USED*****
* 
*          ***SATISFIED BY RTE SYSTEM***
      EXT EXEC
*          ***SATISFIED BY DEV. SUBR LIBRARY*** 
      EXT CONV,ERROR,ERRCD
*          ***SATISFIED BY FLOATING PT. RELOCATABLE LIB.*** 
      EXT FLOAT,.DST,.ENTR
*          *** SATISFIED BY INSTRUMENT TAPE CONSTANTS *** 
      EXT #DSIT,#ERRU 
* 
*     *****CONFIGURATION INFORMATION***** 
* 
*          ENTRY FOR BASIC BRANCH AND MNEMONIC TABLE GENERATOR: 
* 
*               DSI(I,I,R,R),SUB=DSI
* 
*     *****ENTRY FORMAT AND FUNCTION***** 
* 
*          DSI(LU,N,V,F)
* 
*             U = DSI CARD UNIT NO. (A NEG UNIT# CAUSES NO ENCODE 
*             WHEN USED WITH DVR40 P/N 29100-60041) 
*             N  = NUMBER OF DIGITS TO BE CONVERTED (0,6,7,8) 
*             V  =
*                  IF N=0, SECOND WORD READ IN BCD FORMAT 
*                     N#0, VALUE OF SIX MOST SIGNIFICANT DATA DIGITS
*             F = 
*                  IF N=0, FIRST WORD READ IN BCD FORMAT
*                     N=6, FUNCTION DIGIT 
*                     N=7 OR 8, LEAST SIGNIFICANT DATA DIGITS 
* 
*     *****DSI ERROR MESSAGES*****
* 
*          ERROR 1: PARAMETER ERROR 
* 
*********************************************************** 
      SKP 
* 
* PROGRAM MAINFLOW
* 
UNIT  NOP 
NDIG  NOP 
VALU  NOP 
FUNC  NOP 
* 
DSI   NOP           ***ENTRY*** 
      JSB .ENTR     FETCH PARAM ADDRESSES 
      DEF UNIT
      CLA 
      STA ERRCD     CLEAR ERROR CODE
      STA ERCNT     CLEAR ERROR COUNT 
      STA FLG7      CLEAR 7 DIGIT FLAG
      STA ENCFG     CLEAR ENCODE FLAG 
      LDB UNIT,I
      SSB 
      JSB NENC      NEG UNIT# - CH SIGN & SET ENCFG=-1
      SZB,RSS 
      JMP ERR1      ZERO UNIT NUMBER, ERROR 
      JSB GETLU     GET LOGICAL UNIT #
      CMA,INA 
      SSA,RSS       LOG UNIT =< 0 ? 
      JMP ERR1      YES. PARM ERROR!
      JSB EXEC      NO. READ FROM DEVICE
      DEF *+5 
      DEF .1
      DEF LUN 
      DEF LSD 
      DEF .3
* 
BCD0  LDA NDIG,I    FETCH NUM OF DIGITS TO CONVERT
      SZA           =0: BCD OUTPUT? 
      JMP DIGT6     NO. NEXT CHECK
      LDA MSD       YES. SAVE 2ND BCD WORD
      JSB FLOAT 
      JSB .DST
      DEF VALU,I
      LDA LSD       SAVE 1ST BCD WORD 
      JSB FLOAT 
      JSB .DST
      DEF FUNC,I
      JMP DSI,I     ****BCD OUTPUT EXIT**** 
* 
DIGT6 CMA,INA       SET UP CTR FOR NO. OF DIGITS
      ADA .5
      STA NDIGI 
      LDA MSD 
      LDB LSD 
      ISZ NDIGI     6 DIGITS? 
      JMP DIGT7     NO. NEXT CHECK
      ALF,ALF       YES. FUNC TO BITS 0-3 
      AND B17       MASK AND STORE FUNC 
      STA FTEMP 
      JMP FINIS 
* 
DIGT7 ISZ NDIGI     7 DIGITS? 
      JMP DIGT8     NO. NEXT CHECK
      RRR 4         YES. SET UP 6 DATA DIGITS 
      ISZ FLG7      SET FLG7 TO 1 
      JMP CONT
DIGT8 ISZ NDIGI     8 DIGITS? 
      JMP ERR1      NO. PARM ERR! 
      RRR 8         YES. SET UP 6 DATA DIGITS 
CONT  STB LSD       STORE 4 LS DATA DIGITS
      CLB 
      CPB FLG7      8 DIGITS? 
      RRL 4         SHIFT 2 OVF DIGITS INTO B 
      RRL 4         SHIFT 1 OVF DIGIT  INTO B 
      STB FTEMP     STORE OVF DIGIT(S)
      ALF,ALF       GET 2 MS DATA DIG IN BITS 0-7 
      CLB,INB 
      CPB FLG7      7 DIGITS? 
      ALF           YES.
      AND B377      MASK OFF 2 MS DATA DIGITS 
      ADA B400      SET FUNC CODE TO 1 FOR CONV 
      STA MSD       STORE 2 MS DIGITS & FUNC
* 
FINIS JSB CONV      CONV DIGITS TO REAL 
      DEF *+2 
      DEF LSD 
      JSB .DST
      DEF VALU,I    STORE CONVERTED VALUE IN 'V'
      LDB B400
      LDA FTEMP     LOAD FUNC/1 OR 2 OVF DIGITS 
      JSB .DST
      DEF LSD 
      JSB CONV      CONV TO REAL
      DEF *+2 
      DEF LSD 
      JSB .DST      STORE IN 'F'
      DEF FUNC,I
      JMP DSI,I     ****CONVERSION EXIT**** 
      SKP 
* 
*     GET LOGICAL UNIT NUMBER FROM TABLE
* 
GETLU NOP          ENTER WITH UNIT # IN B REG 
      LDA CTABL 
      SSA,RSS      I BIT SET? 
      JMP *+4      NO 
      AND M7777    YES - MASK ADDRESS 
      LDA 0,I      GET CONTENTS 
      JMP *-4      CHECK AGAIN
      ADA 1        ADD UNIT NUMBER
      CMA,INA 
      CMA          SUBTRACT 1 
      LDA 0,I      GET UNIT # 
      STA LUN      STORE IT.
      JMP GETLU,I  RETURN 
NENC  NOP          NO ENCODE
      CMB,INB      MAKE UNIT # POSITIVE 
      CLA 
      CMA 
      STA ENCFG    ENCODE FLAG = -1 
      JMP NENC,I
* 
* ERROR REPORTING 
* 
ERR1  ISZ ERCNT 
      JSB ERROR 
      DEF *+5 
      DEF ERCNT 
      DEF ERMNC 
      DEF #ERRU 
      DEF DSI 
      JMP DSI,I 
      SKP 
* 
* CONSTANTS 
* 
.1    DEC 1 
.3    DEC 3 
.5    DEC 5 
B17   OCT 17
B377  OCT 377 
B400  OCT 400 
M7777 OCT 77777 
ERMNC DEC 3 
      ASC 2,DSI 
CTABL DEF #DSIT 
* 
* STORAGE 
* 
ERCNT NOP           ERROR COUNT 
LUN   NOP           LOGICAL UNIT NO.
*      OUTPUT BUFFER      **
LSD   NOP           DATA BUFFER 
MSD   NOP 
ENCFG NOP           ENCODE FLAG 
*      END OUTPUT BUFFER  **
FLG7  NOP           7 DIGIT FLAG
NDIGI NOP           NO. OF RTN DIGITS 
FTEMP NOP           TEMP FUNC 
* 
      END 
                                                                                                                                                                                  