1: / assure fake printf (no floating) 2: 3: .globl fltused; fltused = 0 4: 5: / convert stream to number; result is type. 6: / value in cval or fcval 7: 8: fpp = 1 9: 10: .globl _getnum 11: 12: .globl _peekc 13: .globl _getchar 14: .globl _cval 15: .globl _fcval 16: .globl _error 17: 18: _getnum: 19: .if fpp 20: movif $10.,fr3 21: clrf fr0 22: .endif 23: clr nfract 24: clr totdig 25: clr decpt 26: clr _cval 27: mov 2(sp),base 28: mov r2,-(sp) 29: 1: 30: jsr r5,getdig 31: br 2f 32: .if fpp 33: mulf fr3,fr0 34: movif r0,fr1 35: addf fr1,fr0 36: .endif 37: inc nfract 38: br 1b 39: 2: 40: tst decpt 41: bne 1f 42: clr nfract 43: cmp r0,$'. 44: bne 1f 45: mov pc,decpt 46: br 1b 47: 1: 48: tst totdig 49: beq 1f 50: cmp r0,$'e 51: bne 1f 52: clr -(sp) 53: clr _cval 54: mov pc,decpt 55: clr _cval 56: mov $10.,base 57: jsr pc,_getchar 58: cmp r0,$'+ 59: beq 2f 60: cmp r0,$'- 61: bne 3f 62: inc (sp) 63: br 2f 64: 3: 65: mov r0,_peekc 66: 2: 67: jsr r5,getdig 68: br 2f 69: br 2b 70: 2: 71: tst (sp)+ 72: beq 2f 73: neg _cval 74: 2: 75: sub _cval,nfract 76: 1: 77: mov r0,_peekc 78: tst totdig 79: bne 1f 80: mov $39.,r0 / "." operator 81: 9: 82: mov (sp)+,r2 83: rts pc 84: 1: 85: tst decpt 86: bne 1f 87: mov $21.,r0 / fixed constant 88: br 9b 89: 1: 90: .if fpp 91: movif $1,fr2 92: mov nfract,r2 93: mov r2,-(sp) 94: beq 2f 95: bgt 1f 96: neg r2 97: 1: 98: mulf fr3,fr2 99: sob r2,1b 100: 2: 101: tst (sp)+ 102: ble 1f 103: divf fr2,fr0 104: br 2f 105: 1: 106: mulf fr2,fr0 107: 2: 108: mov $_fcval,r0 109: movf fr0,(r0) 110: tst (r0)+ 111: tst (r0)+ 112: bne 1f 113: tst (r0)+ 114: bne 1f 115: tst (r0)+ 116: bne 1f 117: mov $24.,r0 118: mov _fcval,_cval 119: br 9b 120: 1: 121: mov $23.,r0 122: br 9b 123: .endif 124: .if 1-fpp 125: mov $fperr,-(sp) 126: jsr pc,_error 127: tst (sp)+ 128: mov $21.,r0 129: br 9b 130: fperr: <No floating point!\0>; .even 131: .endif 132: 133: getdig: 134: mov _peekc,r0 135: beq 1f 136: clr _peekc 137: br 2f 138: 1: 139: jsr pc,_getchar 140: 2: 141: sub $'0,r0 142: cmp r0,$9. 143: bhi 1f 144: inc totdig 145: mov _cval,r1 146: mul base,r1 147: add r0,r1 148: mov r1,_cval 149: tst (r5)+ 150: rts r5 151: 1: 152: add $'0,r0 153: rts r5 154: 155: .bss 156: base: .=.+2 157: nfract: .=.+2 158: decpt: .=.+2 159: totdig: .=.+2