195 lines
2.2 KiB
ArmAsm
195 lines
2.2 KiB
ArmAsm
/ fortran to UNIX IO
|
|
/
|
|
.globl read.
|
|
.globl write.
|
|
.globl seek.
|
|
.globl seek0.
|
|
.globl open.
|
|
.globl creat.
|
|
.globl close.
|
|
.globl errno.
|
|
|
|
indir = 0
|
|
|
|
/ integer function read(f, a, n)
|
|
/ integer f, n
|
|
/ logical*1 a(n)
|
|
/ same as C
|
|
|
|
read.:
|
|
temp
|
|
rval4p; 2 / f
|
|
i4i2
|
|
lvalp; 4 / a
|
|
rval4p; 6 / n
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,9f+4
|
|
mov (sp)+,9f+2
|
|
mov (sp)+,r0
|
|
sys indir; 9f
|
|
br ret
|
|
|
|
.data
|
|
9: sys read; ..; ..
|
|
.text
|
|
|
|
/ integer function read(f, a, n)
|
|
/ integer f, n
|
|
/ logical*1 a(n)
|
|
/ same as C
|
|
|
|
write.:
|
|
temp
|
|
rval4p; 2 / f
|
|
i4i2
|
|
lvalp; 4 / a
|
|
rval4p; 6 / n
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,9f+4
|
|
mov (sp)+,9f+2
|
|
mov (sp)+,r0
|
|
sys indir; 9f
|
|
br ret
|
|
|
|
.data
|
|
9: sys write; ..; ..
|
|
.text
|
|
|
|
/ integer function seek(f, o, b)
|
|
/ integer f, o, b
|
|
/ same as C
|
|
|
|
seek.:
|
|
temp
|
|
rval4p; 2 / f
|
|
i4i2
|
|
rval4p; 4 / o
|
|
i4i2
|
|
rval4p; 6 / b
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,9f+4
|
|
mov (sp)+,9f+2
|
|
mov (sp)+,r0
|
|
sys indir; 9f
|
|
br ret
|
|
|
|
/ integer function seek0(f, n)
|
|
/ integer f, n
|
|
/ same as seek(f, n, 0)
|
|
/ but with 24 bit `n'
|
|
|
|
seek0.:
|
|
temp
|
|
rval4p; 2 / f
|
|
i4i2
|
|
rval4p; 4 / n
|
|
.+2
|
|
mov (sp)+,r0
|
|
mov (sp),r1
|
|
bic $!777,(sp)
|
|
ashc $-9.,r0
|
|
mov r1,9f+2
|
|
mov $3,9f+4
|
|
mov 2(sp),r0
|
|
sys indir; 9f / to block
|
|
mov (sp)+,9f+2
|
|
mov $1,9f+4
|
|
mov (sp)+,r0
|
|
sys indir; 9f / to byte within block
|
|
br ret
|
|
|
|
.data
|
|
9: sys seek; ..; ..
|
|
.text
|
|
|
|
/ integer function open(a, m)
|
|
/ logical*1 a(n)
|
|
/ integer m
|
|
/ same as C, name is ` ' terminated
|
|
|
|
open.:
|
|
temp
|
|
lvalp; 2 / a
|
|
rval4p; 4 / m
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,9f+4
|
|
mov (sp)+,r0
|
|
mov r0,9f+2
|
|
1:
|
|
cmpb (r0)+,$' /
|
|
bne 1b
|
|
clrb -(r0)
|
|
sys indir; 9f
|
|
br ret
|
|
|
|
.data
|
|
9: sys open; ..; ..
|
|
.text
|
|
|
|
/ integer function creat(a, m)
|
|
/ logical*1 a(n)
|
|
/ integer m
|
|
/ same as C, name is ` ' terminated
|
|
|
|
creat.:
|
|
temp
|
|
lvalp; 2 / a
|
|
rval4p; 4 / m
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,9f+4
|
|
mov (sp)+,r0
|
|
mov r0,9f+2
|
|
1:
|
|
cmpb (r0)+,$' /
|
|
bne 1b
|
|
clrb -(r0)
|
|
sys indir; 9f
|
|
br ret
|
|
|
|
.data
|
|
9: sys creat; ..; ..
|
|
.text
|
|
|
|
/ integer function close(f)
|
|
/ integer f
|
|
/ same as C
|
|
|
|
close.:
|
|
temp
|
|
rval4p; 2 / f
|
|
i4i2
|
|
.+2
|
|
mov (sp)+,r0
|
|
sys close
|
|
|
|
ret:
|
|
bec 1f
|
|
mov r0,error
|
|
mov $-1,r0
|
|
1:
|
|
mov r0,temp+2
|
|
sxt temp
|
|
jmp retrn
|
|
|
|
/ error = errno
|
|
/ returns last error number
|
|
|
|
errno.:
|
|
temp
|
|
.+2
|
|
mov error,r0
|
|
br ret
|
|
|
|
.globl temp
|
|
.globl retrn
|
|
.globl rval4p
|
|
.globl lvalp
|
|
.globl i4i2
|
|
.bss
|
|
error: .=.+2
|