*DECK C$R1S09 
          IDENT  C$R1S09
          TITLE  C.R1S09 -  COMP-1 TO 9 DIGIT SIGNED NUMERIC DISPLAY
  
          MACHINE  ANY,I
          COMMENT  COMP-1 TO 9-DIGIT SIGNED NUMERIC DISPLAY 
          SPACE  4
**        C.R1S09 -  COMP-1 TO 9 DIGIT SIGNED NUMERIC DISPLAY 
* 
*         X1 = SIGNED COMP-1 VALUE
*           0 @ ABSOLUTE VALUE OF X1 < 10'9 
*         RJ     C.R1S09
* 
*         SETS X1 = 10 DIGIT NUMERIC DISPLAY VALUE. 
*           (NINES COMPLEMENT IF NEGATIVE.) 
*           (MOST SIGNIFICANT DIGIT IS ZERO OR NINE.) 
* 
*         METHOD BY R. E. JAMES 
* 
*         CODING PRIORITIES-
*                1)  BE FAST. 
*                2)  USE FEW X-REGISTERS. 
*                3)  BE SMALL IN SIZE.
* 
*         USES-  X  0 1 2 3 - - - - 
*                A  - 1 2 - - - - - 
*                B    * - - - - - 7    *B1=1
  
  
          ENTRY  C.R1S09
 C.R1S09  DATA   0
          BX3    X1          COPY REGISTER WITH SIGN
          AX3    59          000...000B IF +,  777...777B IF -
          SA2    DIVISOR     (10.0'-10)*(2'33) + ROUNDER
          LX1    10          N*2'10 
          BX1    X1-X3       ABSOLUTE VALUE OF INPUT
          PX1    X1          N*2'10, PACKED 
          NX1 
          RX2    X2*X1       EFFECTIVELY 0.NNNNNNNNNN*2'43, ROUNDED UP
          SX1    11772B 
          LX1    48          177200...001B
          FX1    X2+X1       ADD ROUNDING FACTOR AND SHIFT RESULT LEFT 5
          UX2    X1          (0.NNNNNNNNNN*2'48)*1
          IX0    X2+X2       (0.NNNNNNNNNN*2'48) * 2
          BX1    X1-X1       CLEAR RESULT REGISTER
          IX2    X2+X0       (0.NNNNNNNNNN*2'48) * 3
          LX0    1           (0.NNNNNNNNNN*2'48) * 4
          LX2    5           (0.NNNNNNNNNN*2'48) * 96 
          IX0    X2+X0       NN.NNNNNNNN*2'48 
          UX2    X0,B7       EXTRACT UPPER TWO DIGITS FROM EXPONENT 
          PX1    X1,B7       PUT UPPER TWO DIGITS INTO RESULT 
          IX0    X2+X2       (0.NNNNNNNN*2'48) * 2
          LX1    12          MAKE ROOM FOR NEXT TWO DIGITS
          IX2    X2+X0       (0.NNNNNNNN*2'48) * 3
          LX0    1           (0.NNNNNNNN*2'48) * 4
          LX2    5           (0.NNNNNNNN*2'48) * 96 
          IX0    X2+X0       NN.NNNNNN*2'48 
          UX2    X0,B7       EXTRACT UPPER TWO DIGITS FROM EXPONENT 
          PX1    X1,B7       PUT UPPER TWO DIGITS INTO RESULT 
          IX0    X2+X2       (0.NNNNNN*2'48) * 2
          LX1    12          MAKE ROOM FOR NEXT TWO DIGITS
          IX2    X2+X0       (0.NNNNNN*2'48) * 3
          LX0    1           (0.NNNNNN*2'48) * 4
          LX2    5           (0.NNNNNN*2'48) * 96 
          IX0    X2+X0       NN.NNNN*2'48 
          UX2    X0,B7       EXTRACT UPPER TWO DIGITS FROM EXPONENT 
          PX1    X1,B7       PUT UPPER TWO DIGITS INTO RESULT 
          IX0    X2+X2       (0.NNNN*2'48) * 2
          LX1    12          MAKE ROOM FOR NEXT TWO DIGITS
          IX2    X2+X0       (0.NNNN*2'48) * 3
          LX0    1           (0.NNNN*2'48) * 4
          LX2    5           (0.NNNN*2'48) * 96 
          IX0    X2+X0       NN.NN*2'48 
          UX2    X0,B7       EXTRACT UPPER TWO DIGITS FROM EXPONENT 
          PX1    X1,B7       PUT UPPER TWO DIGITS INTO RESULT 
          IX0    X2+X2       (0.NN*2'48) * 2
          LX1    12          MAKE ROOM FOR LAST TWO DIGITS
          IX2    X2+X0       (0.NN*2'48) * 3
          LX0    1           (0.NN*2'48) * 4
          LX2    5           (0.NN*2'48) * 96 
          IX0    X2+X0       NN.0*2'48
          UX2    X0,B7       EXTRACT UPPER TWO DIGITS FROM EXPONENT 
          SA2    A2+B1       76017601760176017601B
          PX1    X1,B7       PUT LAST TWO DIGITS INTO RESULT
          LX1    12 
          BX0    -X2*X1       1.
          IX2    X0+X0       10.
          IX2    X0+X2       11.
          LX0    -2            .01
          IX0    X0+X2       11.01
          SA2    A2          76017601760176017601B
          LX0    -4            .001101 BINARY = .203125 DECIMAL 
          BX2    -X2*X0 
          IX0    X1-X2       (10*M+N) - 2*M 
          LX2    2           8*M
          IX0    X0-X2       N
          SA1    =XC.ZEROS   10H0000000000
          LX2    3
          BX0    X2+X0
          IX2    X1+X0       BIAS BY DISPLAY ZERO 
          ZR     X0,C.R1S09  DON"T APPLY SIGN TO ZERO (IN CASE IT IS -) 
          BX1    X2-X3       APPLY SIGN 
          EQ     C.R1S09     EXIT 
  
 DIVISOR  CON    1.0E-10S33+1 
          CON    76017601760176017601B                            WORD 2
  
          END 
