Add original unix v6

This commit is contained in:
memnoth
2018-01-27 22:35:41 +09:00
commit 2c7099ee50
664 changed files with 106254 additions and 0 deletions
+15
View File
@@ -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
+64
View File
@@ -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
+20
View File
@@ -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
+51
View File
@@ -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)
+147
View File
@@ -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
+43
View File
@@ -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
+58
View File
@@ -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
+35
View File
@@ -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
+194
View File
@@ -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