Split up files.
[pdp10-muddle.git] / sumex / pfloat.mcr003
diff --git a/sumex/pfloat.mcr003 b/sumex/pfloat.mcr003
new file mode 100644 (file)
index 0000000..e5f8f47
--- /dev/null
@@ -0,0 +1,149 @@
+TITLE FLOATB--CONVERT FLOATING NUMBER TO ASCII STRING\r
+\r
+RELOCA\r
+\r
+.GLOBAL        FLOATB\r
+\r
+ACNUM==1\r
+\r
+IRP A,,[A,B,C,D,E,F,G,H,I,J]\r
+A==ACNUM\r
+ACNUM==ACNUM+1\r
+TERMIN\r
+\r
+P==17\r
+\r
+TEM1==I\r
+\r
+EXPUNGE ACNUM\r
+\r
+FLOATB:        PUSH    P,B\r
+       PUSH    P,C\r
+       PUSH    P,D\r
+       PUSH    P,F\r
+       PUSH    P,G\r
+       PUSH    P,H\r
+       PUSH    P,I\r
+       PUSH    P,0\r
+       PUSH    P,J\r
+       MOVSI   0,440700        ; BUILD BYTEPNTR\r
+       HLRZ    J,A             ; POINT TO BUFFER\r
+       HRRI    0,1(J)\r
+       MOVE    A,(A)           ; GET NUMBER\r
+       MOVE    D,A\r
+       SETZM   (J)             ; Clear counter\r
+       PUSHJ   P,NFLOT\r
+       POP     P,J\r
+       POP     P,0\r
+       POP     P,I\r
+       POP     P,H\r
+       POP     P,G\r
+       POP     P,F\r
+       POP     P,D\r
+       POP     P,C\r
+       POP     P,B\r
+       POPJ    P,\r
+\r
+; at this point we enter code abstracted from DDT.\r
+NFLOT: JUMPG   A,TFL1\r
+       JUMPE   A,FP1A\r
+       MOVNS   A\r
+       PUSH    P,A\r
+       MOVEI   A,"-\r
+       PUSHJ   P,CHRO\r
+       POP     P,A\r
+       TLZE    A,400000\r
+       JRST    FP1A\r
+\r
+TFL1:  MOVEI   B,0\r
+TFLX:  CAMGE   A,FT01\r
+       JRST    FP4\r
+       CAML    A,FT8\r
+       AOJA    B,FP4\r
+FP1A:\r
+FP3:   SETZB   C,TEM1          ; CLEAR DIGIT CNTR, C TO RECEIVE FRACTION\r
+       MULI    A,400\r
+       ASHC    B,-243(A)\r
+       MOVE    A,B\r
+       PUSHJ   P,FP7\r
+       PUSH    P,A\r
+       MOVEI   A,".\r
+       PUSHJ   P,CHRO\r
+       POP     P,A\r
+       MOVNI   A,10\r
+       ADD     A,TEM1\r
+       MOVE    E,C\r
+FP3A:  MOVE    D,E\r
+       MULI    D,12\r
+       PUSHJ   P,FP7B\r
+       SKIPE   E\r
+       AOJL    A,FP3A\r
+       POPJ    P,              ; ONE return from OFLT here\r
+\r
+FP4:   MOVNI   C,6\r
+       MOVEI   F,0\r
+FP4A:  ADDI    F,1(F)\r
+       XCT     FCP(B)\r
+       SOSA    F\r
+       FMPR    A,@FCP+1(B)\r
+       AOJN    C,FP4A\r
+       PUSH    P,EXPSGN(B)\r
+       PUSHJ   P,FP3\r
+       PUSH    P,A\r
+       MOVEI   A,"E\r
+       PUSHJ   P,CHRO\r
+       POP     P,A\r
+       POP     P,D\r
+       PUSHJ   P,FDIGIT\r
+       MOVE    A,F\r
+\r
+FP7:   SKIPE   A       ; AVOID AOSING TEM1, NOT SIGNIFICANT DIGIT\r
+       AOS     TEM1\r
+       IDIVI   A,12\r
+       HRLM    B,(P)\r
+       JUMPE   A,FP7A1\r
+       PUSHJ   P,FP7\r
+\r
+FP7A1: HLRZ    D,(P)\r
+FP7B:  ADDI    D,"0\r
+\r
+; type digit\r
+FDIGIT:        PUSH    P,A\r
+       MOVE    A,D\r
+       PUSHJ   P,CHRO\r
+       POP     P,A\r
+       POPJ    P,\r
+\r
+CHRO:  AOS     (J)     ; COUNT CHAR\r
+       IDPB    A,0     ; STUFF CHAR\r
+       POPJ    P,\r
+\r
+; constants\r
+       1.0^32.\r
+       1.0^16.\r
+FT8:   1.0^8\r
+       1.0^4\r
+       1.0^2\r
+       1.0^1\r
+FT:    1.0^0\r
+       1.0^-32.\r
+       1.0^-16.\r
+       1.0^-8\r
+       1.0^-4\r
+       1.0^-2\r
+FT01:  1.0^-1\r
+FT0=FT01+1\r
+\r
+; instructions\r
+FCP:   CAMLE   A, FT0(C)\r
+       CAMGE   A, FT(C)\r
+       0, FT0(C)\r
+\r
+EXPSGN:        "-\r
+       "+\r
+\r
+\r
+EXPUNGE A,B,C,D,E,F,G,H,I,J,TEM1,P\r
+\r
+END\r
+\f
\ No newline at end of file