*DECK C$R4S18 
          IDENT  C$R4S18
          TITLE  C.R4S18 -  D. P. COMP-2 TO 18 DIGIT SIGNED NUMERIC DISP
  
          MACHINE  ANY,I
,LAY
          COMMENT  D. P. COMP-2 TO 18-DIGIT SIGNED DISPLAY
          SPACE  4
**        C.R4S18 -  D. P. COMP-1 TO 18 DIGIT SIGNED NUMERIC DISPLAY
* 
*         X1 = MOST SIGNIFICANT (14) DIGITS,
*                NORMALIZED.
*         X2 = LEAST SIGNIFICANT (4) DIGITS 
*                EXPONENT OF X2 IS EXACTLY 48 LESS THAN 
*                THE EXPONENT OF X1.
*         B3 = SCALING FACTOR;  INPUT IS MULTIPLIED BY 10'B3. 
*         RJ     C.R4S18
* 
*         SETS X1 = MOST SIGNIFICANT 8 DIGITS 
*           (NINES COMPLEMENT IF NEGATIVE)
*           (LEFT 2 DIGITS ARE ZERO OR NINE)
*         SETS X2 = LEAST SIGNIFICANT 10 DIGITS 
*           (NINES COMPLEMENT IF NEGATIVE)
* 
*         METHOD BY R. E. JAMES.
* 
*         CODING PRIORITIES-
*                1)  BE SMALL IN SIZE.
*                2)  BE FAST. 
*                3)  USE FEW X-REGISTERS. 
* 
*         USES-  X  0 1 2 3 4 5 6 - 
*                A  - 1 2 3 - 5 - - 
*                B    * - 3 - - - 7    *B1=1
  
  
          ENTRY  C.R4S18
 C.R4S18  DATA   0
*      PULL OFF THE SIGN INTO X0
          BX0    X1 
          AX0    59          000...000B IF +,  777...777B IF -
          BX1    X1-X0       ABSOLUTE VALUE OF MOST SIGNIFICANT PART
          BX2    X2-X0       ABSOLUTE VALUE OF LEAST SIGNIFICANT PART 
*      MULTIPLY INPUT BY 10'B3
          ZR     B3,L1       IF NO SCALING
          SB3    B3+B3       C.DTENS ENTRY IS TWO WORDS 
          SA3    =XC.DTENS+B3 
          SA4    A3+B1
          FX5    X2*X3
          FX6    X1*X4
          FX2    X5+X6
          FX4    X1*X3
          DX6    X1*X3
          FX5    X2+X6
          FX1    X5+X4
          DX2    X5+X4
 L1       BSS    0
*      INCREMENT TO OFFSET MACHINE ERROR
          SA3    =.0001 
          FX4    X1+X3
          DX5    X1+X3
          NX6    B0,X4
          FX3    X5+X2
          FX5    X6+X3
          NX5    X5 
          DX4    X6+X3
          NX2    X4 
          FX1    X5+X2
          DX2    X5+X2
*      DIVIDE INPUT INTO TWO USABLE PARTS 
          SA4    TENTOM10    1.0E-10
          FX3    X1*X4       X1 / 10'10 
          BX6    X6-X6
          SA5    TENTOP10    1.0E+10
          PX6    X6 
          FX3    X3+X6       INTEGERIZE UPPER 8 DIGITS
          FX4    X3*X5       ([X1/10'10])*10'10   (MOST SIGNIFICANT)
          DX6    X3*X5       ([X1/10'10])*10'10   (LEAST SIGNIFICANT) 
          NX4    X4 
          FX4    X1-X4       MOST SIGNIFICANT PART OF LOWER 10 DIGITS 
          FX6    X2-X6       LEAST SIGNIFICANT PART OF LOWER 10 DIGITS
          NX4    X4 
          FX4    X4+X6       LOWER 10 DIGITS, BUT 
                               PERHAPS WITH AN EXTRA 10'10
          FX5    X4-X5       (LOWER 10 DIGITS) - 10'10
          NG     X5,L2       IF LOWER IS OK 
          SX6    B1          ADD 1 TO UPPER 8 DIGITS
          BX4    X5          USE LOWER - 10'10
          IX3    X3+X6
 L2       BSS    0
*         X3 = UPPER 8 DIGITS,  PACKED INTEGER FORMAT 
*         X4 = LOWER 10 DIGITS,  UNNORMALIZED FLOATING POINT
  
*      EXTRACT PAIRS OF DIGITS FROM UPPER 8 DIGITS
          SA1    FRACT8      (10.0'-8)*(2'28)+ROUNDER 
          NX3 
          RX3    X1*X3       EFFECTIVELY 0.MMMMMMMMMM*2'28
          SX1    11753B 
          LX1    48          1753000...001B 
          FX6    X3+X1       ADD ROUNDING FACTOR AND SHIFT RESULT LFT 20
          UX3    X6          0.MMMMMMMM*2'48
          BX1    X0-X0       CLEAR RESULT REGISTER
          SB3    4           4 PAIRS OF DIGITS
 L3       BSS    0
          IX6    X3+X3       (0.MMMMMMMM*2'48) * 2
          IX3    X6+X3       (0.MMMMMMMM*2'48) * 3
          LX6    1           (0.MMMMMMMM*2'48) * 4
          LX3    5           (0.MMMMMMMM*2'48) * 96 
          IX3    X3+X6       MM.MMMMMM*2'48 
          UX3    X3,B7       0.MMMMMM*2'48
          PX1    X1,B7       INSERT UPPER TOW DIGITS INTO RESULT
          LX1    12          MAKE ROOM FOR NEXT TWO DIGITS
          SB3    B3-B1       DECREMENT COUNT OF PAIRS OF DIGITS 
          NZ     B3,L3       IF MORE PAIRS TO EXTRACT,  LOOP
*      CONVERT EACH PAIR OF DIGITS INTO TWO SEPARATE DIGITS 
          SA3    M7601       76017601760176017601B
          BX6    -X3*X1       1.
          IX5    X6+X6       10.
          IX5    X5+X6       11.
          LX6    -2            .01
          IX6    X6+X5       11.01
          LX6    -4            .001101 BINARY = .203125 DECIMAL 
          BX6    -X3*X6 
          IX5    X1-X6       (10*M+N) - 2*M 
          LX6    2           8*M
          IX5    X5-X6       N
          LX6    3
          BX1    X6+X5
*      EXTRACT PAIRS OF DIGITS FROM LOWER 10 DIGITS 
          NX4 
          SA2    FRACT10     (10.0'-10)*(2'33)+ROUNDER
          RX4    X2*X4       EFFECTIVELY 0.NNNNNNNNNN*2'33
          SX2    11760B 
          LX2    48          176000...001B
          FX6    X4+X2       ADD ROUNDING FACTOR AND SHIFT RESULT LFT 15
          UX4    X6          0.NNNNNNNNNN*2'48
          BX2    X0-X0       CLEAR RESULT REGISTER
          SB3    5           5 PAIRS OF DIGITS
 L4       BSS    0
          IX6    X4+X4       (0.NNNNNNNNNN*2'48) * 2
          IX4    X6+X4       (0.NNNNNNNNNN*2'48) * 3
          LX6    1           (0.NNNNNNNNNN*2'48) * 4
          LX4    5           (0.NNNNNNNNNN*2'48) * 96 
          IX4    X4+X6       NN.NNNNNNNN*2'48 
          UX4    X4,B7       0.NNNNNNNN*2'48
          PX2    X2,B7       INSERT DIGITS INTO RESULT REGISTER 
          LX2    12          MAKE ROOM FOR NEXT TWO DIGITS
          SB3    B3-B1       DECREMENT COUNT OF PAIRS OF DIGITS 
          NZ     B3,L4       IF MORE PAIRS OF DIGITS TO EXTRACT,  LOOP
*      CONVERT EACH PAIR OF DIGITS INTO TWO SEPARATE DIGITS 
          SA3    M7601       76017601760176017601B
          BX4    -X3*X2       1.
          IX5    X4+X4       10.
          IX5    X4+X5       11.
          LX4    -2            .01
          IX4    X4+X5       11.01
          LX4    -4            .001101 BINARY = .203125 DECIMAL 
          BX4    -X3*X4 
          IX5    X2-X4       (10*M+N) - 2*M 
          LX4    2           8*M
          IX5    X5-X4       N
          LX4    3
          BX2    X4+X5
*      BIAS THE RESULTS BY DISPLAY ZERO AND APPLY THE SIGN
          SA3    =XC.ZEROS
          NZ     X1,R4S18.1 
          NZ     X2,R4S18.1 
*    DONT COMPLEMENT ZERO 
          IX2    X2+X3
          IX1    X1+X3
          EQ     C.R4S18
 R4S18.1  BSS    0
          IX2    X2+X3       BIAS LEAST SIGNIFICANT 10 DIGITS BY ZERO 
          IX1    X1+X3       BIAS MOST SIGNIFICANT 8 DIGITS BY ZERO 
          BX2    X2-X0       APPLY THE SIGN TO LEAST SIGNIFICANT DIGITS 
          BX1    X1-X0       APPLY THE SIGN TO MOST SIGNIFICANT 8 DIGITS
          EQ     C.R4S18     EXIT 
  
 TENTOM10 CON    1.0E-10
 TENTOP10 CON    1.0E+10
 FRACT8   CON    1.0E-8S28+1
 FRACT10  CON    1.0E-10S33+1 
 M7601    CON    76017601760176017601B
  
  
          END 
