Add original unix v6
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
.globl ctime., retrn, temp
|
||||
ctime.: temp
|
||||
.+2
|
||||
sys time
|
||||
clr temp
|
||||
mov r0,temp+2
|
||||
setd
|
||||
setl
|
||||
movif temp,fr0
|
||||
mulf $44200,fr0
|
||||
mov r1,temp+2
|
||||
movif temp,fr1
|
||||
addf fr1,fr0
|
||||
movf fr0,temp
|
||||
jmp retrn
|
||||
@@ -0,0 +1,64 @@
|
||||
/ call getarg(n, array [, nword] )
|
||||
/
|
||||
/ fill in the array with the n-th argument to the routine.
|
||||
/ array is integer.
|
||||
/ n counts from 1 for the file name (first) arg
|
||||
/ if nword is specifies it gives the max number
|
||||
/ of words to fill in
|
||||
/ If no nword is given the array ends with at least one blank.
|
||||
/ if nword is given the array is blank-padded to that length.
|
||||
|
||||
/ iargc(dummy) returns the number of arguments
|
||||
/ (1-origin)
|
||||
|
||||
.globl getarg., iargc.
|
||||
.globl retrn, temp
|
||||
.comm argp,2
|
||||
|
||||
getarg.:
|
||||
temp
|
||||
.+2
|
||||
mov $512.,r2
|
||||
cmp *2(sp),$3
|
||||
blt 1f
|
||||
mov 6(r3),r2
|
||||
mov 2(r2),r2
|
||||
asl r2
|
||||
asl r2
|
||||
1:
|
||||
mov 4(r3),r4
|
||||
mov 2(r3),r1
|
||||
mov 2(r1),r1
|
||||
mov argp,r0
|
||||
cmp r1,(r0)
|
||||
bgt 1f
|
||||
asl r1
|
||||
add r0,r1
|
||||
mov (r1),r1
|
||||
2:
|
||||
tst r2
|
||||
ble 1f
|
||||
movb (r1)+,(r4)+
|
||||
beq 2f
|
||||
dec r2
|
||||
br 2b
|
||||
2:
|
||||
dec r4
|
||||
1:
|
||||
movb $' ,(r4)+
|
||||
dec r2
|
||||
bit $3,r2
|
||||
bne 1b
|
||||
cmp r2,$256.
|
||||
bge 1f
|
||||
tst r2
|
||||
bgt 1b
|
||||
1:
|
||||
jmp retrn
|
||||
|
||||
iargc.:
|
||||
temp
|
||||
.+2
|
||||
clr temp
|
||||
mov *argp,temp+2
|
||||
jmp retrn
|
||||
@@ -0,0 +1,20 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ fortran nice subroutine
|
||||
|
||||
.globl nice.
|
||||
.globl retrn, temp
|
||||
|
||||
nice.:
|
||||
temp
|
||||
.+2
|
||||
mov $16.,r0
|
||||
tst *2(sp)
|
||||
beq 1f
|
||||
mov 2(r3),r0
|
||||
mov 2(r0),r0
|
||||
1:
|
||||
sys nice
|
||||
jmp retrn
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ openr, openw--
|
||||
/
|
||||
/ call open(r|w) (string, iunit)
|
||||
/ or,
|
||||
/ call open(r|w) (argno, iunit)
|
||||
/ where argno is an argument number (0 is command name)
|
||||
|
||||
.globl openr.
|
||||
.globl openw.
|
||||
|
||||
.globl utable
|
||||
.globl btable
|
||||
.globl ftable
|
||||
.globl getbuf
|
||||
.globl fopen
|
||||
.globl fcreat
|
||||
|
||||
openr.: temp
|
||||
.+2
|
||||
mov pc,-(sp)
|
||||
br 1f
|
||||
|
||||
openw.: temp
|
||||
.+2
|
||||
clr -(sp)
|
||||
1:
|
||||
mov 4(r3),r1
|
||||
mov 2(r1),r1
|
||||
jsr r5,chkunit
|
||||
tstb utable(r1)
|
||||
beq 1f
|
||||
jsr r5,rerr; 101.
|
||||
sys exit
|
||||
1:
|
||||
jsr r5,getbuf
|
||||
mov 2(r3),r0
|
||||
mov 2(r0),r0
|
||||
cmp r0,$32.
|
||||
bhi 1f
|
||||
cmp r0,*argp
|
||||
bhi err
|
||||
asl r0
|
||||
add argp,r0
|
||||
br 2f
|
||||
1:
|
||||
tst (sp)+
|
||||
beq 1f
|
||||
movb $1,utable(r1)
|
||||
@@ -0,0 +1,147 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ move, line
|
||||
|
||||
sct = 2
|
||||
/ fortran vt0 interfaces
|
||||
|
||||
/ erase screen
|
||||
|
||||
erase.: temp
|
||||
.+2
|
||||
jsr pc,setfil
|
||||
mov f,r0
|
||||
sys write; erase; 2
|
||||
jmp retrn
|
||||
|
||||
/ move(x, y)
|
||||
/
|
||||
/ sets current x,y to arguments
|
||||
/
|
||||
|
||||
.globl move.
|
||||
.globl line.
|
||||
.globl erase.
|
||||
.globl frame.
|
||||
.globl arc.
|
||||
.globl circle.
|
||||
|
||||
.globl temp
|
||||
.globl retrn
|
||||
|
||||
frame.: temp
|
||||
.+2
|
||||
jsr pc,setfil
|
||||
mov 2(r3),r0
|
||||
movb 2(r0),frame+1
|
||||
mov f,r0
|
||||
sys write; frame; 2
|
||||
jmp retrn
|
||||
|
||||
move.: temp
|
||||
.+2
|
||||
jsr pc,garg
|
||||
mov r0,x
|
||||
mov r1,y
|
||||
jmp retrn
|
||||
|
||||
/ line(x, y)
|
||||
/
|
||||
/ plot vector from current x,y
|
||||
/ to arguments, setting current
|
||||
/ x,y when done to arguments
|
||||
/
|
||||
|
||||
line.: temp
|
||||
.+2
|
||||
jsr pc,garg
|
||||
mov r0,x1
|
||||
mov r1,y1
|
||||
movb $3,command
|
||||
mov f,r0
|
||||
sys write; command; 9
|
||||
mov x1,x
|
||||
mov y1,y
|
||||
jmp retrn
|
||||
|
||||
/ call circle(x, y, radius)
|
||||
/ circle's center at x, y
|
||||
|
||||
circle.:temp
|
||||
.+2
|
||||
jsr pc,garg
|
||||
mov r0,x
|
||||
mov r1,y
|
||||
mov 6(r3),r0
|
||||
mov 2(r0),r0
|
||||
ash $2,r0
|
||||
mov r0,x1
|
||||
movb $5,command
|
||||
mov f,r0
|
||||
sys write; command; 7
|
||||
jmp retrn
|
||||
|
||||
/ call arc(xo, yo, x1, y1, x2, y2)
|
||||
/ plot circle arc: origin xo,yo;
|
||||
/ counterclockwise from x1,y1 to x2,y2
|
||||
|
||||
arc.: temp
|
||||
.+2
|
||||
jsr pc,garg
|
||||
mov r0,x
|
||||
mov r1,y
|
||||
cmp (r3)+,(r3)+
|
||||
jsr pc,garg
|
||||
mov r0,x1
|
||||
mov r1,y1
|
||||
cmp (r3)+,(r3)+
|
||||
jsr pc,garg
|
||||
mov r0,x2
|
||||
mov r1,y2
|
||||
movb $6,command
|
||||
mov f,r0
|
||||
sys write; command; 13.
|
||||
sub $8.,r3
|
||||
jmp retrn
|
||||
|
||||
setfil:
|
||||
tst f
|
||||
bne 1f
|
||||
sys creat; vt; 17
|
||||
bes 9f
|
||||
mov r0,f
|
||||
1:
|
||||
rts pc
|
||||
|
||||
garg:
|
||||
jsr pc,setfil
|
||||
mov 2(r3),r0
|
||||
mov 2(r0),r0
|
||||
mov 4(r3),r1
|
||||
mov 2(r1),r1
|
||||
ash $2,r0
|
||||
ash $2,r1
|
||||
sub $2048.,r0
|
||||
sub $2048.,r1
|
||||
rts pc
|
||||
9:
|
||||
mov $1,r0
|
||||
sys write; bmes; emes-bmes
|
||||
sys exit
|
||||
|
||||
frame: .byte 4,0
|
||||
erase: .byte 1,1
|
||||
.byte 0
|
||||
vt: </dev/vt0\0>
|
||||
bmes: <VT unwritable.\n>; emes:
|
||||
.bss
|
||||
.=.+1
|
||||
command:.=.+1
|
||||
x: .=.+2
|
||||
y: .=.+2
|
||||
x1: .=.+2
|
||||
y1: .=.+2
|
||||
x2: .=.+2
|
||||
y2: .=.+2
|
||||
f: .=.+2
|
||||
@@ -0,0 +1,43 @@
|
||||
/ fortran random number generator.
|
||||
/ either single or double prec.
|
||||
|
||||
.globl rand., srand.
|
||||
.globl retrn
|
||||
|
||||
srand.:
|
||||
value
|
||||
.+2
|
||||
mov *2(r3),seed1
|
||||
inc first
|
||||
jmp retrn
|
||||
|
||||
rand.:
|
||||
value
|
||||
.+2
|
||||
tst first
|
||||
bne 1f
|
||||
sys time
|
||||
mov r1,seed1
|
||||
inc first
|
||||
1:
|
||||
mov seed1,r1
|
||||
jsr pc,ran
|
||||
mov r1,seed1
|
||||
seti
|
||||
setd
|
||||
movif r0,fr0
|
||||
divf $44000,fr0
|
||||
movf fr0,value
|
||||
jmp retrn
|
||||
|
||||
ran:
|
||||
mpy $13077.,r1
|
||||
add $6925.,r1
|
||||
mov r1,r0
|
||||
bic $100000,r0
|
||||
rts pc
|
||||
|
||||
.bss
|
||||
first: .=.+2
|
||||
seed1: .=.+2
|
||||
value: .=.+8
|
||||
@@ -0,0 +1,58 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ fortran random I/O
|
||||
|
||||
.globl rread.
|
||||
.globl rwrite.
|
||||
|
||||
.globl temp
|
||||
.globl retrn
|
||||
.globl rerr
|
||||
|
||||
rread.: temp
|
||||
.+2
|
||||
mov 2(r3),r0
|
||||
mov 2(r0),0f
|
||||
mov rfin,r0
|
||||
bne 1f
|
||||
sys open; rf; 0
|
||||
bes 9f
|
||||
mov r0,rfin
|
||||
1:
|
||||
sys seek; 0:..; 0
|
||||
mov 4(r3),0f
|
||||
mov 6(r3),r0
|
||||
mov 2(r0),0f+2
|
||||
mov rfin,r0
|
||||
sys read; 0:..; 0
|
||||
jmp retrn
|
||||
|
||||
rwrite.:temp
|
||||
.+2
|
||||
mov 2(r3),r0
|
||||
mov 2(r0),0f
|
||||
mov rfout,r0
|
||||
bne 1f
|
||||
sys creat; rf; 17
|
||||
bes 9f
|
||||
mov r0,rfout
|
||||
1:
|
||||
sys seek; 0:..; 0
|
||||
mov 4(r3),0f
|
||||
mov 6(r3),r0
|
||||
mov 2(r0),0f+2
|
||||
mov rfout,r0
|
||||
sys write; 0:..; ..
|
||||
jmp retrn
|
||||
|
||||
9:
|
||||
jsr r5,rerr; 456.
|
||||
sys exit
|
||||
|
||||
rf:
|
||||
<fortrf\0>
|
||||
.even
|
||||
rfin: .=.+2
|
||||
rfout: .=.+2
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/ Fortran library-- setfil
|
||||
|
||||
/ call setfil(unit, 5hname )
|
||||
|
||||
.globl setfil.
|
||||
|
||||
.globl getbuf
|
||||
.globl chkunit
|
||||
.globl retrn
|
||||
.globl utable
|
||||
.globl temp
|
||||
.globl rerr
|
||||
|
||||
setfil.:
|
||||
temp
|
||||
.+2
|
||||
mov 2(r3),r1
|
||||
mov 2(r1),r1
|
||||
jsr r5,chkunit
|
||||
tstb utable(r1)
|
||||
beq 1f
|
||||
jsr r5,rerr; 112.
|
||||
1:
|
||||
jsr r5,getbuf
|
||||
movb $-1,utable(r1)
|
||||
mov 4(r3),r0
|
||||
mov r2,r1
|
||||
1:
|
||||
movb (r0)+,(r1)
|
||||
beq 1f
|
||||
cmpb $' ,(r1)+
|
||||
bne 1b
|
||||
clrb -(r1)
|
||||
1:
|
||||
jmp retrn
|
||||
@@ -0,0 +1,194 @@
|
||||
/ 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
|
||||
Reference in New Issue
Block a user