V5/usr/source/s1/bas5.s
/ bas4 -- old library routines
atoi:
clr r1
jsr r5,*(r5)
clr -(sp)
cmp r0,$'-
bne 2f
inc (sp)
1:
jsr r5,*(r5)
2:
sub $'0,r0
cmp r0,$9
bhi 1f
mpy $10.,r1
add r0,r1
br 1b
1:
add $'0,r0
tst (sp)+
beq 1f
neg r1
1:
tst (r5)+
rts r5
ldfps = 170100^tst
stfps = 170200^tst
atof:
stfps -(sp)
ldfps $200
movf fr1,-(sp)
mov r1,-(sp)
mov r2,-(sp)
clr -(sp)
clrf fr0
clr r2
jsr r5,*(r5)
cmpb r0,$'-
bne 2f
inc (sp)
1:
jsr r5,*(r5)
2:
sub $'0,r0
cmp r0,$9.
bhi 2f
jsr pc,dig
br 1b
inc r2
br 1b
2:
cmpb r0,$'.-'0
bne 2f
1:
jsr r5,*(r5)
sub $'0,r0
cmp r0,$9.
bhi 2f
jsr pc,dig
dec r2
br 1b
2:
cmpb r0,$'e-'0
bne 1f
mov (r5),0f
jsr pc,9f
.data
9:
jsr r5,atoi; 0:..
rts pc
.text
sub $'0,r0
add 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:
add $'0,r0
mov (sp)+,r2
mov (sp)+,r1
movf (sp)+,fr1
ldfps (sp)+
tst (r5)+
rts r5
dig:
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
.globl _ndigit
.globl ecvt
.globl fcvt
ftoa:
jsr pc,ecvt
mov r0,bufptr
tstb r1
beq 1f
mov $'-,r0
jsr r5,*(r5)
1:
cmp r2,$-2
blt econ
cmp r2,$5
bgt econ
jsr pc,cout
tst (r5)+
rts r5
econ:
mov r2,-(sp)
mov $1,r2
jsr pc,cout
mov $'e,r0
jsr r5,*(r5)
mov (sp)+,r0
dec r0
jmp itoa
cout:
mov bufptr,r1
add _ndigit,r1
mov r2,-(sp)
add bufptr,r2
1:
cmp r1,r2
blos 1f
cmpb -(r1),$'0
beq 1b
inc r1
1:
mov (sp)+,r2
bge 2f
mov $'.,r0
jsr r5,*(r5)
1:
mov $'0,r0
jsr r5,*(r5)
inc r2
blt 1b
dec r2
2:
mov r2,-(sp)
mov bufptr,r2
1:
cmp r2,r1
bhis 1f
tst (sp)
bne 2f
mov $'.,r0
jsr r5,*(r5)
2:
dec (sp)
movb (r2)+,r0
jsr r5,*(r5)
br 1b
1:
tst (sp)+
rts pc
.bss
bufptr: .=.+2
.text
ftoo:
stfps -(sp)
ldfps $200
mov r1,-(sp)
mov r2,-(sp)
mov $buf,r1
movf fr0,(r1)+
mov $buf,r2
br 2f
1:
cmp r2,r1
bhis 1f
mov $';,r0
jsr r5,*(r5)
2:
mov (r2)+,r0
jsr pc,oct
br 1b
1:
mov $'\n,r0
jsr pc,*(r5)+
ldfps (sp)+
rts r5
oct:
mov r0,x+2
setl
movif x,fr0
mulf $small,fr0
seti
mov $6.,-(sp)
1:
modf $eight,fr0
movfi fr1,r0
add $'0,r0
jsr r5,*(r5)
dec (sp)
bne 1b
tst (sp)+
rts pc
eight = 41000
small = 33600
.bss
buf: .=.+8
x: .=.+4
.text
itoa:
mov r1,-(sp)
mov r0,r1
bge 1f
neg r1
mov $'-,r0
jsr r5,*(r5)
1:
jsr pc,1f
mov (sp)+,r1
tst (r5)+
rts r5
1:
clr r0
dvd $10.,r0
mov r1,-(sp)
mov r0,r1
beq 1f
jsr pc,1b
1:
mov (sp)+,r0
add $'0,r0
jsr r5,*(r5)
rts pc