Split up files.
[pdp10-muddle.git] / sumex / pfloat.mcr003
1 TITLE FLOATB--CONVERT FLOATING NUMBER TO ASCII STRING\r
2 \r
3 RELOCA\r
4 \r
5 .GLOBAL FLOATB\r
6 \r
7 ACNUM==1\r
8 \r
9 IRP A,,[A,B,C,D,E,F,G,H,I,J]\r
10 A==ACNUM\r
11 ACNUM==ACNUM+1\r
12 TERMIN\r
13 \r
14 P==17\r
15 \r
16 TEM1==I\r
17 \r
18 EXPUNGE ACNUM\r
19 \r
20 FLOATB: PUSH    P,B\r
21         PUSH    P,C\r
22         PUSH    P,D\r
23         PUSH    P,F\r
24         PUSH    P,G\r
25         PUSH    P,H\r
26         PUSH    P,I\r
27         PUSH    P,0\r
28         PUSH    P,J\r
29         MOVSI   0,440700        ; BUILD BYTEPNTR\r
30         HLRZ    J,A             ; POINT TO BUFFER\r
31         HRRI    0,1(J)\r
32         MOVE    A,(A)           ; GET NUMBER\r
33         MOVE    D,A\r
34         SETZM   (J)             ; Clear counter\r
35         PUSHJ   P,NFLOT\r
36         POP     P,J\r
37         POP     P,0\r
38         POP     P,I\r
39         POP     P,H\r
40         POP     P,G\r
41         POP     P,F\r
42         POP     P,D\r
43         POP     P,C\r
44         POP     P,B\r
45         POPJ    P,\r
46 \r
47 ; at this point we enter code abstracted from DDT.\r
48 NFLOT:  JUMPG   A,TFL1\r
49         JUMPE   A,FP1A\r
50         MOVNS   A\r
51         PUSH    P,A\r
52         MOVEI   A,"-\r
53         PUSHJ   P,CHRO\r
54         POP     P,A\r
55         TLZE    A,400000\r
56         JRST    FP1A\r
57 \r
58 TFL1:   MOVEI   B,0\r
59 TFLX:   CAMGE   A,FT01\r
60         JRST    FP4\r
61         CAML    A,FT8\r
62         AOJA    B,FP4\r
63 FP1A:\r
64 FP3:    SETZB   C,TEM1          ; CLEAR DIGIT CNTR, C TO RECEIVE FRACTION\r
65         MULI    A,400\r
66         ASHC    B,-243(A)\r
67         MOVE    A,B\r
68         PUSHJ   P,FP7\r
69         PUSH    P,A\r
70         MOVEI   A,".\r
71         PUSHJ   P,CHRO\r
72         POP     P,A\r
73         MOVNI   A,10\r
74         ADD     A,TEM1\r
75         MOVE    E,C\r
76 FP3A:   MOVE    D,E\r
77         MULI    D,12\r
78         PUSHJ   P,FP7B\r
79         SKIPE   E\r
80         AOJL    A,FP3A\r
81         POPJ    P,              ; ONE return from OFLT here\r
82 \r
83 FP4:    MOVNI   C,6\r
84         MOVEI   F,0\r
85 FP4A:   ADDI    F,1(F)\r
86         XCT     FCP(B)\r
87         SOSA    F\r
88         FMPR    A,@FCP+1(B)\r
89         AOJN    C,FP4A\r
90         PUSH    P,EXPSGN(B)\r
91         PUSHJ   P,FP3\r
92         PUSH    P,A\r
93         MOVEI   A,"E\r
94         PUSHJ   P,CHRO\r
95         POP     P,A\r
96         POP     P,D\r
97         PUSHJ   P,FDIGIT\r
98         MOVE    A,F\r
99 \r
100 FP7:    SKIPE   A       ; AVOID AOSING TEM1, NOT SIGNIFICANT DIGIT\r
101         AOS     TEM1\r
102         IDIVI   A,12\r
103         HRLM    B,(P)\r
104         JUMPE   A,FP7A1\r
105         PUSHJ   P,FP7\r
106 \r
107 FP7A1:  HLRZ    D,(P)\r
108 FP7B:   ADDI    D,"0\r
109 \r
110 ; type digit\r
111 FDIGIT: PUSH    P,A\r
112         MOVE    A,D\r
113         PUSHJ   P,CHRO\r
114         POP     P,A\r
115         POPJ    P,\r
116 \r
117 CHRO:   AOS     (J)     ; COUNT CHAR\r
118         IDPB    A,0     ; STUFF CHAR\r
119         POPJ    P,\r
120 \r
121 ; constants\r
122         1.0^32.\r
123         1.0^16.\r
124 FT8:    1.0^8\r
125         1.0^4\r
126         1.0^2\r
127         1.0^1\r
128 FT:     1.0^0\r
129         1.0^-32.\r
130         1.0^-16.\r
131         1.0^-8\r
132         1.0^-4\r
133         1.0^-2\r
134 FT01:   1.0^-1\r
135 FT0=FT01+1\r
136 \r
137 ; instructions\r
138 FCP:    CAMLE   A, FT0(C)\r
139         CAMGE   A, FT(C)\r
140         0, FT0(C)\r
141 \r
142 EXPSGN: "-\r
143         "+\r
144 \r
145 \r
146 EXPUNGE A,B,C,D,E,F,G,H,I,J,TEM1,P\r
147 \r
148 END\r
149 \f