1: / C library -- ascii to floating 2: 3: / f = atof(p) 4: / char *p; 5: 6: ldfps = 170100^tst 7: stfps = 170200^tst 8: 9: .globl _atof 10: 11: .globl csv, cret 12: 13: _atof: 14: jsr r5,csv 15: stfps -(sp) 16: ldfps $200 17: movf fr1,-(sp) 18: clr -(sp) 19: clrf fr0 20: clr r2 21: mov 4(r5),r3 22: 1: 23: movb (r3)+,r0 24: cmp $' ,r0 25: beq 1b 26: cmpb r0,$'- 27: bne 2f 28: inc (sp) 29: 1: 30: movb (r3)+,r0 31: 2: 32: sub $'0,r0 33: cmp r0,$9. 34: bhi 2f 35: jsr pc,digit 36: br 1b 37: inc r2 38: br 1b 39: 2: 40: cmpb r0,$'.-'0 41: bne 2f 42: 1: 43: movb (r3)+,r0 44: sub $'0,r0 45: cmp r0,$9. 46: bhi 2f 47: jsr pc,digit 48: dec r2 49: br 1b 50: 2: 51: cmpb r0,$'E-'0 52: beq 3f 53: cmpb r0,$'e-'0 54: bne 1f 55: 3: 56: clr r4 57: clr r1 58: cmpb (r3),$'- 59: bne 3f 60: inc r4 61: inc r3 62: 3: 63: movb (r3)+,r0 64: sub $'0,r0 65: cmp r0,$9. 66: bhi 3f 67: mul $10.,r1 68: add r0,r1 69: br 3b 70: 3: 71: tst r4 72: bne 3f 73: neg r1 74: 3: 75: sub r1,r2 76: 1: 77: movf $one,fr1 78: mov r2,-(sp) 79: beq 2f 80: bgt 1f 81: neg r2 82: 1: 83: cmp r2,$38. 84: blos 1f 85: clrf fr0 86: tst (sp)+ 87: bmi out 88: movf $huge,fr0 89: br out 90: 1: 91: mulf $ten,fr1 92: sob r2,1b 93: 2: 94: tst (sp)+ 95: bge 1f 96: divf fr1,fr0 97: br 2f 98: 1: 99: mulf fr1,fr0 100: cfcc 101: bvc 2f 102: movf $huge,fr0 103: 2: 104: out: 105: tst (sp)+ 106: beq 1f 107: negf fr0 108: 1: 109: movf (sp)+,fr1 110: ldfps (sp)+ 111: jmp cret 112: / 113: / 114: digit: 115: cmpf $big,fr0 116: cfcc 117: blt 1f 118: mulf $ten,fr0 119: movif r0,fr1 120: addf fr1,fr0 121: rts pc 122: 1: 123: add $2,(sp) 124: rts pc 125: / 126: / 127: one = 40200 128: ten = 41040 129: big = 56200 130: huge = 77777