*DECK RN2BIN
          IDENT  RN2BIN 
          TITLE  RN2BIN -  CONVERT REGISTER NUMERIC TO BINARY 
          MACHINE  ANY,I
          COMMENT  "SUBSYS" 
          COMMENT  CONVERT REGISTER NUMERIC TO BINARY 
          SPACE  4
**        RN2BIN -  CONVERT REGISTER NUMERIC TO BINARY
* 
*         MS = MOST SIGNIFICANT PART OF REGISTER NUMERIC VALUE. 
*                (NINE-S COMPLEMENT IF NEGATIVE)
*         LS = LEAST SIGNIFICANT PART OF REGISTER NUMERIC VALUE 
*                (NINE-S COMPLEMENT IF NEGATIVE)
*         SCALE:  RESULT WILL BE DIVIDED BY 10'SCALE. 
*                  (TYPICALLY (POINTOF,SOURCE) - (POINTOF,DEST.) )
* 
*         RN2BIN(MS, LS, SCALE, MSCOMP2, LSCOMP2, COMP1); 
* 
*         SETS MSCOMP2 = MOST SIGNIFICANT PART OF D.P. COMP-2 VALUE 
*         SETS LSCOMP2 = LEAST SIGNIFICANT PART OF D.P. COMP-2 VALUE
*         SETS COMP1 = COMP-1 VALUE OF SOURCE.
* 
*       IF MS = 0,
*         SETS MSCOMP2 = LS 
*         SETS LSCOMP2 = 0
*         SETS COMP1 = COMP-1 VALUE OF SOURCE 
  
  
          ENTRY  RN2BIN 
 RN2BIN   CON    *
          SA0    A1          SAVE ADDRESS OF PARAMETER LIST 
  
*      IF LITERAL IS AN ALREADY-CONVERTED *EXTFLOAT*, GO PICK UP
  
          SA2    X1          VALUE OF MS
          ZR     X2,RN2BIN2 
  
*      CALL COPY OF OBJECT ROUTINE TO CONVERT 
  
          SA3    A1+2        ADDRESS OF SCALING FACTOR
          SA3    X3          SCALING FACTOR 
          SB5    X3 
          SA2    A1+1        ADDRESS OF LEAST SIGNIFICANT 10 DIGITS 
          SA2    X2          LEAST SIGNIFICANT 10 DIGITS
          SA1    X1          MOST SIGNIFICANT 8 DIGITS
          MX0    12          DO NOT CONVERT BITS 59-48 OF X1
          SB1    1
          RJ     S18R4
*         SETS X1 = MOST SIGNIFICANT PART OF D.P. COMP-2 VALUE
*         SETS X2 = LEAST SIGNIFICANT PART OF D.P. COMP-2 VALUE 
  
*      PASS BACK THE RESULTS
  
 RN2BIN1  BSS    0           (JUMP HERE FROM *EXTFLOAT* INPUT)
          SA3    A0+3        ADDRESS FOR MOST SIG. COMP-2 RESULT
          SA4    A0+4        ADDRESS FOR LEAST SIG. COMP-2 RESULT 
          BX6    X1 
          LX7    X2 
          SA6    X3 
          SA7    X4 
          SA5    A0+5        ADDRESS FOR COMP-1 RESULT
          UX1    X1,B7       CONVERT COMP-2 TO COMP-1 
          LX6    X1,B7
          SA6    X5 
          EQ     RN2BIN      EXIT 
  
  
*      LITERAL IS AN ALREADY-CONVERTED *EXTFLOAT* 
  
 RN2BIN2  SA3    A1+2        X3 = ADDRESS OF SCALING FACTOR 
          SA3    X3          X3 = SCALING FACTOR
          SA1    A1+B1       X1 = ADDRESS OF LS 
          SA1    X1          X1 = LS
                             X2 = 0 
          ZR     X3,RN2BIN1  IF NO SCALING
          LX3    1           (EACH TABLE ENTRY IS 2 WORDS)
          SA3    DTENSTBL+X3
          SA4    A3+B1
*      THE ONLY TIME A FLOATING POINT LITERAL WILL BE SCALED IS 
*      WHEN IT IS USED IN CONJUNCTION WITH A NON-COMP-2 ITEM. 
*      IN THIS CASE A LITERAL VALUE THAT CAUSES A RESULT LARGER THAN CAN
*      FIT IN THE NON-COMP-2 ITEM (AS DEFINED BY ITS PICTURE) SHOULD
*      CAUSE AN UNDEFINED RESULT,  SO THE LITERAL NEED NOT BE CORRECT.
*      THIS CASE WILL ALWAYS OCCUR IF THE LITERAL IS
*      AT LEAST EQUAL TO 2.0E+18. 
*      THE BELOW CHECK IS NEEDED TO AVOID A MODE 2 ERROR WHEN ATTEMPTING
*      TO SCALE SUCH A LITERAL. 
          UX5    X3,B5       EXPONENT OF SCALING VALUE
          UX5    X1,B7       EXPONENT OF LITERAL VALUE
          SB5    B5+B7       EXPONENT OF RESULT 
          SB7    1776B-48    LARGEST LEGAL EXPONENT 
          GT     B5,B7,RN2BIN1  IF RESULT TOO LARGE, LITERAL UNDEFINED
  
          RX0    X1*X4
          RX5    X2*X3
          RX2    X0+X5
          FX4    X1*X3
          DX0    X1*X3
          RX5    X2+X0
          FX1    X5+X4
          DX2    X5+X4
          EQ     RN2BIN1     GO STORE RESULTS 
          TITLE  S18R4 -  CONVERT X1,X2 TO D.P. COMP-2
 S18R4    MICRO  1,,*S18R4* 
 CNVRT    MICRO  1,,*CNVRTTBL*
 DTENS    MICRO  1,,*DTENSTBL*
 ZEROS    MICRO  1,,*=10H0000000000*
*CALL S18R4 
          SPACE  4
 CNVRTTBL MICRO  1,,*CNVRTTBL*
*CALL CNVRTTBL
  
 DTENSTBL MICRO  1,,*DTENSTBL*
*CALL DTENSTBL
          SPACE  4
          END 
