/ C library -- ascii to floating / f = atof(p) / char *p; ldfps = 170100^tst stfps = 170200^tst .globl _atof .globl csv, cret _atof: jsr r5,csv stfps -(sp) ldfps $200 movf fr1,-(sp) clr -(sp) clrf fr0 clr r2 mov 4(r5),r3 1: movb (r3)+,r0 cmp $' ,r0 beq 1b cmpb r0,$'- bne 2f inc (sp) 1: movb (r3)+,r0 2: sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,digit br 1b inc r2 br 1b 2: cmpb r0,$'.-'0 bne 2f 1: movb (r3)+,r0 sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,digit dec r2 br 1b 2: cmpb r0,$'E-'0 beq 3f cmpb r0,$'e-'0 bne 1f 3: clr r4 clr r1 cmpb (r3),$'- bne 3f inc r4 inc r3 3: movb (r3)+,r0 sub $'0,r0 cmp r0,$9. bhi 3f mul $10.,r1 add r0,r1 br 3b 3: tst r4 bne 3f neg r1 3: sub r1,r2 1: movf $one,fr1 mov r2,-(sp) beq 2f bgt 1f neg r2 1: cmp r2,$38. blos 1f clrf fr0 tst (sp)+ bmi out movf $huge,fr0 br out 1: mulf $ten,fr1 sob r2,1b 2: tst (sp)+ bge 1f divf fr1,fr0 br 2f 1: mulf fr1,fr0 cfcc bvc 2f movf $huge,fr0 2: out: tst (sp)+ beq 1f negf fr0 1: movf (sp)+,fr1 ldfps (sp)+ jmp cret / / digit: cmpf $big,fr0 cfcc blt 1f mulf $ten,fr0 movif r0,fr1 addf fr1,fr0 rts pc 1: add $2,(sp) rts pc / / one = 40200 ten = 41040 big = 56200 huge = 77777