home *** CD-ROM | disk | FTP | other *** search
- / 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
-