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
+20
View File
@@ -0,0 +1,20 @@
/ C library -- makdir
/ error = makdir(string);
.globl _makdir, cerror
_makdir:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys makdir; 0:..
+20
View File
@@ -0,0 +1,20 @@
/ count subroutine calls during profiling
.globl mcount
.comm countbase,2
mcount:
mov (r0),r1
bne 1f
mov countbase,r1
beq 2f
add $6,countbase
mov (sp),(r1)+
mov r1,(r0)
1:
inc 2(r1)
bne 2f
inc (r1)
2:
rts pc
+60
View File
@@ -0,0 +1,60 @@
/ C runtime startoff including monitoring
cbufs = 150.
.globl _monitor
.globl _sbrk
.globl _main
.globl _exit
.globl _etext
.comm countbase,2
.comm savr5,2
start:
setd
mov sp,r0
mov (r0),-(sp)
tst (r0)+
mov r0,2(sp)
mov $_etext,r1
sub $eprol,r1
add $7,r1
ash $-3,r1
bic $!17777,r1
mov $cbufs,-(sp)
add $3*[cbufs+1],r1
mov r1,-(sp)
asl r1
mov r1,-(sp)
jsr pc,_sbrk
tst (sp)+
cmp r0,$-1
beq 9f
mov r0,-(sp)
add $6,r0
mov r0,countbase
mov $_etext,-(sp)
mov $eprol,-(sp)
jsr pc,_monitor
add $10.,sp
jsr pc,_main
cmp (sp)+,(sp)+
jsr pc,_exit
9:
mov $2,r0
sys write; 8f; 9f-8f
.data; 8: <No space for monitor buffer\n>; 9:.even; .text
_exit:
mov r5,-(sp)
mov sp,r5
clr -(sp)
jsr pc,_monitor
tst (sp)+
mov 4(r5),r0
sys exit
eprol:
+21
View File
@@ -0,0 +1,21 @@
/ C library-- mdate
.globl _mdate, cerror
_mdate:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),r1
mov (r1)+,r0
mov (r1),r1
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys mdate; 0:..
+23
View File
@@ -0,0 +1,23 @@
/ C library -- mknod
/ error = mknod(string, mode, major.minor);
.globl _mknod, cerror
mknod = 14.
_mknod:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),0f+2
mov 8(r5),0f+4
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys mknod; 0:..; ..; ..
+31
View File
@@ -0,0 +1,31 @@
monitor(lowpc, highpc, buf, bufsiz, cntsiz)
char *lowpc, *highpc;
int *buf, bufsiz;
{
register char *o;
static *sbuf, ssiz;
if (lowpc == 0) {
profil(0, 0, 0, 0);
o = creat("mon.out", 0666);
write(o, sbuf, ssiz<<1);
close(o);
return;
}
if (nargs() <= 4)
cntsiz = 0;
ssiz = bufsiz;
buf[0] = lowpc;
buf[1] = highpc;
buf[2] = cntsiz;
sbuf = buf;
buf =+ 3*(cntsiz+1);
bufsiz =- 3*(cntsiz+1);
if (bufsiz<=0)
return;
o = ((highpc - lowpc)>>1) & 077777;
if(bufsiz < o)
o = ldiv(bufsiz, 0, o<<1); else
o = 077777;
profil(buf, bufsiz<<1, lowpc, o<<1);
}
+22
View File
@@ -0,0 +1,22 @@
/ C library -- mount
/ error = mount(dev, file, flag)
.globl _mount, cerror
_mount:
mov r5,-(sp)
mov sp,r5
mov 4(sp),0f
mov 6(sp),0f+2
mov 8(sp),0f+4
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys mount; 0:..; ..; ..
+62
View File
@@ -0,0 +1,62 @@
/ C library -- nargs
/ WARNING: this routine does not work
/ with user I&D space separate.
/ Moreover, due to a design botch in
/ the 11/45, it cannot be made to work
/ by adding mfpi instructions.
.globl _nargs
_nargs:
mov r5,-(sp)
mov 2(r5),r1 / pc of caller of caller
mov sp,r5
clr r0
cmp -4(r1),jsrsd
bne 8f
mov $2,r0
8:
cmp (r1),tsti
bne 1f
add $2,r0
br 2f
1:
cmp (r1),cmpi
bne 1f
add $4,r0
br 2f
1:
cmp (r1),addi
bne 1f
add 2(r1),r0
br 2f
1:
cmp (r1),jmpi
bne 1f
add 2(r1),r1
add $4,r1
br 8b
1:
cmpb 1(r1),bri+1
bne 2f
mov r0,-(sp)
mov (r1),r0
swab r0
ash $-7,r0
add r0,r1
add $2,r1
mov (sp)+,r0
br 8b
2:
asr r0
mov (sp)+,r5
rts pc
.data
jsrsd: jsr pc,*$0
tsti: tst (sp)+
cmpi: cmp (sp)+,(sp)+
addi: add $0,sp
jmpi: jmp 0
bri: br .
+17
View File
@@ -0,0 +1,17 @@
/ C library-- nice
/ error = nice(hownice)
.globl _nice, cerror
_nice:
mov r5,-(sp)
mov sp,r5
mov 4(sp),r0
sys nice
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
+98
View File
@@ -0,0 +1,98 @@
/ nlist -- extract values from name list
/
/ nlist(file, list);
/
.globl _nlist
_nlist:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),r1
mov r2,-(sp)
mov r1,r0
1:
tst (r0)
beq 1f
add $8.,r0
clr (r0)+
clr (r0)+ / initialize to undefined
br 1b
1:
sys 0; 9f
.data
9:
sys open; 0:..; 0
.text
bes done
mov r0,r2
sys read; buf; 20
cmp r0,$20
bne cdone
mov buf+4,count / assume older a.out
mov buf+2,0f
cmp buf,$405
beq 1f
mov buf+8.,count / now assume newer
mov buf+2,r0 / txt
add buf+4,r0 / data
cmp buf+16,$1 / relocation?
beq 4f
asl r0 / txt+data reloc
4:
add $20,r0 / header
mov r0,0f
cmp buf,$411
beq 1f
cmp buf,$410
beq 1f
cmp buf,$407
bne cdone
1:
mov r2,r0
sys 0; 9f
.data
9:
sys seek; 0:..; 0
.text
1:
sub $12.,count
blt cdone
mov r2,r0
sys read; buf; 12.
cmp r0,$12.
bne cdone
mov r1,r0
2:
tst (r0)
beq 1b
cmp (r0),buf
bne 1f
cmp 2(r0),buf+2
bne 1f
cmp 4(r0),buf+4
bne 1f
cmp 6(r0),buf+6
bne 1f
mov buf+8.,8.(r0)
mov buf+10.,10.(r0)
1:
add $12.,r0
br 2b
cdone:
mov r2,r0
sys close
done:
mov (sp)+,r2
mov (sp)+,r5
rts pc
.bss
buf: .=.+20
count: .=.+2
+22
View File
@@ -0,0 +1,22 @@
/ C library -- open
/ file = open(string, mode)
/
/ file == -1 means error
.globl _open, cerror
_open:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),0f+2
sys 0; 9f
bec 1f
jmp cerror
1:
mov (sp)+,r5
rts pc
.data
9:
sys open; 0:..; ..
+40
View File
@@ -0,0 +1,40 @@
/*
* Print the error indicated
* in the cerror cell.
*/
int errno;
int sys_nerr;
char *sys_errlist[];
perror(s)
char *s;
{
register char *c;
register n;
c = "Unknown error";
if(errno < sys_nerr)
c = sys_errlist[errno];
n = strlen(s);
if(n) {
write(2, s, n);
write(2, ": ", 2);
}
write(2, c, strlen(c));
write(2, "\n", 1);
}
/*
* Return the number of bytes in a string
*/
strlen(str)
char *str;
{
register char *s;
s = str;
while(*s++)
;
return(s-str-1);
}
+22
View File
@@ -0,0 +1,22 @@
/ pipe -- C library
/ pipe(f)
/ int f[2];
.globl _pipe, cerror
pipe = 42.
_pipe:
mov r5,-(sp)
mov sp,r5
sys pipe
bec 1f
jmp cerror
1:
mov 4(r5),r2
mov r0,(r2)+
mov r1,(r2)
clr r0
mov (sp)+,r5
rts pc
+238
View File
@@ -0,0 +1,238 @@
/ C library -- printf
.globl _printf
.globl pfloat
.globl pscien
.globl _putchar
.globl csv
.globl cret
_printf:
jsr r5,csv
sub $126.,sp
mov 4(r5),formp / format
mov r5,r4
add $6,r4 / arglist
loop:
movb *formp,r0
beq 1f
inc formp
cmp r0,$'%
beq 2f
3:
mov r0,(sp)
jsr pc,*$_putchar
br loop
1:
jmp cret
2:
clr rjust
clr ndigit
cmpb *formp,$'-
bne 2f
inc formp
inc rjust
2:
jsr r3,gnum
mov r1,width
clr ndfnd
cmp r0,$'.
bne 1f
jsr r3,gnum
mov r1,ndigit
1:
mov sp,r3
add $4,r3
mov $swtab,r1
1:
mov (r1)+,r2
beq 3b
cmp r0,(r1)+
bne 1b
jmp (r2)
.data
swtab:
decimal; 'd
octal; 'o
hex; 'x
float; 'f
scien; 'e
charac; 'c
string; 's
logical; 'l
remote; 'r
0; 0
.text
decimal:
mov (r4)+,r1
bge 1f
neg r1
movb $'-,(r3)+
br 1f
logical:
mov (r4)+,r1
1:
jsr pc,1f
br prbuf
1:
clr r0
div $10.,r0
mov r1,-(sp)
mov r0,r1
beq 1f
jsr pc,1b
1:
mov (sp)+,r0
add $'0,r0
movb r0,(r3)+
rts pc
charac:
movb (r4)+,(r3)+
bne 1f
dec r3
1:
movb (r4)+,(r3)+
bne prbuf
dec r3
br prbuf
string:
mov ndigit,r1
clr r3
mov (r4),r2
1:
tstb (r2)+
beq 1f
inc r3
sob r1,1b
1:
mov (r4)+,r2
br prstr
hex:
mov $1f,r2
.data
1:
-4; !17
.text
br 2f
octal:
mov $1f,r2
.data
1:
-3; !7
.text
2:
mov (r4)+,r1
beq 2f
tst ndigit
beq 2f
movb $'0,(r3)+
2:
clr r0
jsr pc,1f
br prbuf
1:
mov r1,-(sp)
ashc (r2),r0
beq 1f
jsr pc,1b
1:
mov (sp)+,r0
bic 2(r2),r0
add $'0,r0
cmp r0,$'9
ble 1f
add $'A-'0-10.,r0
1:
movb r0,(r3)+
rts pc
float:
mov ndigit,r0
mov ndfnd,r2
jsr pc,pfloat
br prbuf
scien:
mov ndigit,r0
mov ndfnd,r2
jsr pc,pscien
br prbuf
remote:
mov (r4)+,r4
mov (r4)+,formp
jmp loop
prbuf:
mov sp,r2
add $4,r2
sub r2,r3
prstr:
mov r4,-(sp)
mov $' ,-(sp)
mov r3,r4
neg r3
add width,r3
ble 1f
tst rjust
bne 1f
2:
jsr pc,*$_putchar
sob r3,2b
1:
tst r4
beq 2f
1:
movb (r2)+,(sp)
jsr pc,*$_putchar
sob r4,1b
2:
tst r3
ble 1f
mov $' ,(sp)
2:
jsr pc,*$_putchar
sob r3,2b
1:
tst (sp)+
mov (sp)+,r4
jmp loop
gnum:
clr ndfnd
clr r1
1:
movb *formp,r0
inc formp
sub $'0,r0
cmp r0,$'*-'0
bne 2f
mov (r4)+,r0
br 3f
2:
cmp r0,$9.
bhi 1f
3:
inc ndfnd
mul $10.,r1
add r0,r1
br 1b
1:
add $'0,r0
rts r3
.bss
width: .=.+2
formp: .=.+2
rjust: .=.+2
ndfnd: .=.+2
ndigit: .=.+2
+16
View File
@@ -0,0 +1,16 @@
/ profil
.globl _profil
_profil:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),0f+2
mov 10(r5),0f+4
mov 12(r5),0f+6
sys 0; 9f
mov (sp)+,r5
rts pc
.data
9:
sys 44.; 0:..; ..; ..; ..
+28
View File
@@ -0,0 +1,28 @@
/ ptrace -- C library
/ result = ptrace(req, pid, addr, data);
ptrace = 26.
indir = 0
.globl _ptrace
.globl cerror, _errno
_ptrace:
mov r5,-(sp)
mov sp,r5
mov 4.(r5),0f+4
mov 6.(r5),0f+0
mov 8.(r5),0f+2
mov 10.(r5),r0
clr _errno
sys indir; 9f
bec 1f
jmp cerror
1:
mov (sp)+,r5
rts pc
.data
9:
sys ptrace; 0: .=.+6
+89
View File
@@ -0,0 +1,89 @@
/ putw/putc -- write words/characters on output file
.globl _putc, _putw, _fflush, _fcreat
.globl cerror
.comm _errno,2
_fcreat:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),r1
mov pc,(r1) / a putatively illegal file desc.
sys 0; 9f
.data
9: sys creat; 0:..; 666
.text
bes badret
mov r0,(r1)+
clr (r1)+
clr (r1)+
br goodret
_putw:
mov r5,-(sp)
mov sp,r5
mov 6(r5),r1
dec 2(r1)
bge 1f
jsr pc,fl
dec 2(r1)
1:
movb 4(r5),*4(r1)
inc 4(r1)
dec 2(r1)
bge 1f
jsr pc,fl
dec 2(r1)
1:
movb 5(r5),*4(r1)
inc 4(r1)
mov 4(r5),r0
br goodret
_putc:
mov r5,-(sp)
mov sp,r5
mov 6(r5),r1
dec 2(r1)
bge 1f
jsr pc,fl
dec 2(r1)
1:
mov 4(r5),r0
movb r0,*4(r1)
inc 4(r1)
br goodret
_fflush:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r1
jsr pc,fl
br goodret
fl:
mov r1,r0
add $6,r0
mov r0,-(sp)
mov r0,0f
mov 4(r1),0f+2
beq 1f
sub r0,0f+2
mov (r1),r0
sys 0; 9f
.data
9: sys write; 0:..; ..
.text
1:
mov (sp)+,4(r1)
mov $512.,2(r1)
rts pc
badret:
jmp cerror
goodret:
clr _errno
mov (sp)+,r5
rts pc
+55
View File
@@ -0,0 +1,55 @@
/ C library -- putchar
.globl _putchar,_flush
.globl _fout
_putchar:
mov r5,-(sp)
mov sp,r5
mov _fout+4,r0
bne 1f
jsr pc,fl
mov _fout+4,r0
1:
movb 4(r5),(r0)+
beq 1f
inc _fout+4
dec _fout+2
bgt 1f
jsr pc,fl
1:
mov 4(r5),r0
mov (sp)+,r5
rts pc
_flush:
mov r5,-(sp)
mov sp,r5
jsr pc,fl
mov (sp)+,r5
rts pc
fl:
mov _fout+4,r0
beq 1f
sub $_fout+6,r0
mov r0,0f
mov _fout,r0
bne 2f
inc r0
2:
sys 0; 9f
.data
9: sys write; _fout+6; 0:..
.text
1:
mov $_fout+6,_fout+4
mov $512.,_fout+2
cmp _fout,$2
bhi 1f
mov $1,_fout+2
1:
rts pc
.bss
_fout: .=.+518.
+120
View File
@@ -0,0 +1,120 @@
int (*qscmp)();
int qses;
qsort(a, n, es, fc)
char *a;
int n, es;
int (*fc)();
{
qscmp = fc;
qses = es;
qs1(a, a+n*es);
}
qs1(a, l)
char *a, *l;
{
register char *i, *j, *es;
char *lp, *hp;
int n, c;
es = qses;
start:
if((n=l-a) <= es)
return;
n = ((n/(2*es))*es) & 077777;
hp = lp = a+n;
i = a;
j = l-es;
for(;;) {
if(i < lp) {
if((c = (*qscmp)(i, lp)) == 0) {
qsexc(i, lp =- es);
continue;
}
if(c < 0) {
i =+ es;
continue;
}
}
loop:
if(j > hp) {
if((c = (*qscmp)(hp, j)) == 0) {
qsexc(hp =+ es, j);
goto loop;
}
if(c > 0) {
if(i == lp) {
qstexc(i, hp =+ es, j);
i = lp =+ es;
goto loop;
}
qsexc(i, j);
j =- es;
i =+ es;
continue;
}
j =- es;
goto loop;
}
if(i == lp) {
if(lp-a >= l-hp) {
qs1(hp+es, l);
l = lp;
} else {
qs1(a, lp);
a = hp+es;
}
goto start;
}
qstexc(j, lp =- es, i);
j = hp =- es;
}
}
qsexc(i, j)
char *i, *j;
{
register char *ri, *rj, c;
int n;
n = qses;
ri = i;
rj = j;
do {
c = *ri;
*ri++ = *rj;
*rj++ = c;
} while(--n);
}
qstexc(i, j, k)
char *i, *j, *k;
{
register char *ri, *rj, *rk;
char c;
int n;
n = qses;
ri = i;
rj = j;
rk = k;
do {
c = *ri;
*ri++ = *rk;
*rk++ = *rj;
*rj++ = c;
} while(--n);
}
+23
View File
@@ -0,0 +1,23 @@
/ C library -- read
/ nread = read(file, buffer, count);
/
/ nread ==0 means eof; nread == -1 means error
.globl _read, cerror
_read:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
mov 6(r5),0f
mov 8(r5),0f+2
sys 0; 9f
bec 1f
jmp cerror
1:
mov (sp)+,r5
rts pc
.data
9:
sys read; 0:..; ..
+31
View File
@@ -0,0 +1,31 @@
/ C library -- reset, setexit
/ reset()
/ will generate a "return" from
/ the last call to
/ setexit()
/ by restoring sp, r5
/ and doing a return.
/
/ useful for going back to the main loop
/ after a horrible error in a lowlevel
/ routine.
.globl _setexit
.globl _reset
.globl csv, cret
_setexit:
jsr r5,csv
mov r5,sr5
mov 2(r5),spc
jmp cret
_reset:
mov sr5,r5
mov spc,2(r5)
jmp cret
.bss
sr5: .=.+2
spc: .=.+2
+33
View File
@@ -0,0 +1,33 @@
rin()
{
double d;
register n, c, f;
d = 0.;
f = 0;
n = 0;
loop:
c = getchar();
if(c == '\0')
exit();
if(c == '-') {
f++;
goto loop;
}
if(c == '.') {
n++;
goto loop;
}
if(c>='0' && c<='9') {
if(n)
n++;
d = d*10.+c-'0';
goto loop;
}
if(f)
d = -d;
for(f=1; f<n; f++)
d =/ 10.;
n = d;
return(n);
}
+40
View File
@@ -0,0 +1,40 @@
as mcrt0.s
cmp a.out /lib/mcrt0.o
cp a.out /lib/mcrt0.o
as makdir.s; mv a.out makdir.o
as mcount.s; mv a.out mcount.o
as mdate.s; mv a.out mdate.o
as mknod.s; mv a.out mknod.o
as mount.s; mv a.out mount.o
as nargs.s; mv a.out nargs.o
as nice.s; mv a.out nice.o
as nlist.s; mv a.out nlist.o
as open.s; mv a.out open.o
as pipe.s; mv a.out pipe.o
as printf.s; mv a.out printf.o
as prof.s; mv a.out prof.o
as ptrace.s; mv a.out ptrace.o
as putc.s; mv a.out putc.o
as putchr.s; mv a.out putchr.o
as read.s; mv a.out read.o
as reset.s; mv a.out reset.o
as sbrk.s; mv a.out sbrk.o
as seek.s; mv a.out seek.o
as setgid.s; mv a.out setgid.o
as setuid.s; mv a.out setuid.o
as signal.s; mv a.out signal.o
as sleep.s; mv a.out sleep.o
as stat.s; mv a.out stat.o
as stime.s; mv a.out stime.o
as stty.s; mv a.out stty.o
as sync.s; mv a.out sync.o
as time.s; mv a.out time.o
as times.s; mv a.out times.o
as umount.s; mv a.out umount.o
as unlink.s; mv a.out unlink.o
as wait.s; mv a.out wait.o
as write.s; mv a.out write.o
cc -c -O mon.c perror.c qsort.c
cc -c -f -O rin.c
ar r /lib/libc.a
rm *.o
+43
View File
@@ -0,0 +1,43 @@
/old = sbrk(increment);
/
/sbrk gets increment more core, and returns a pointer
/ to the beginning of the new core area
/
.globl _sbrk,_end, cerror
_sbrk:
mov r5,-(sp)
mov sp,r5
mov nd,0f
add 4(r5),0f
sys 0; 9f
bec 1f
jmp cerror
1:
mov nd,r0
add 4(r5),nd
mov (sp)+,r5
rts pc
.globl _brk
/ brk(value)
/ as described in man2.
/ returns 0 for ok, -1 for error.
_brk:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
sys 0; 9f
bec 1f
jmp cerror
1:
mov 4(r5),nd
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys break; 0:..
nd: _end
+22
View File
@@ -0,0 +1,22 @@
/ C library -- seek
/ error = seek(file, offset, ptr);
.globl _seek, cerror
_seek:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
mov 6(r5),0f
mov 8(r5),0f+2
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys seek; 0:..; ..
+18
View File
@@ -0,0 +1,18 @@
/ C library -- setgid
/ error = setgid(uid);
setgid = 46.
.globl _setgid, cerror
_setgid:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
sys setgid
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
+17
View File
@@ -0,0 +1,17 @@
/ C library -- setuid
/ error = setuid(uid);
.globl _setuid, cerror
_setuid:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
sys setuid
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
+86
View File
@@ -0,0 +1,86 @@
/ C library -- signal
/ signal(n, 0); /* default action on signal(n) */
/ signal(n, odd); /* ignore signal(n) */
/ signal(n, label); /* goto label on signal(n) */
/ returns old label, only one level.
rtt = 6
signal = 48.
.globl _signal, cerror
_signal:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r1
cmp r1,$NSIG
bhis 2f
mov 6(r5),r0
mov r1,0f
asl r1
mov dvect(r1),-(sp)
mov r0,dvect(r1)
mov r0,0f+2
beq 1f
bit $1,r0
bne 1f
asl r1
asl r1
add $tvect,r1
mov r1,0f+2
1:
sys 0; 9f
bes 3f
bit $1,r0
beq 1f
mov r0,(sp)
1:
mov (sp)+,r0
mov (sp)+,r5
rts pc
2:
mov $22.,r0 / EINVAL
clr -(sp)
3:
tst (sp)+
jmp cerror
NSIG = 0
tvect:
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
1:
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
jsr pc,(r0)
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
mov (sp)+,r0
rtt
.data
9:
sys signal; 0:..; ..
.bss
dvect: .=.+[NSIG*2]
+10
View File
@@ -0,0 +1,10 @@
.globl _sleep
sleep = 35.
_sleep:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
sys sleep
mov (sp)+,r5
rts pc
+25
View File
@@ -0,0 +1,25 @@
/ C library -- stat
/ error = stat(string, statbuf);
/ int statbuf[18] or
/ char statbuf[36]
/ as appropriate
.globl _stat, cerror
_stat:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
mov 6(r5),0f+2
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys stat; 0:..; ..
+15
View File
@@ -0,0 +1,15 @@
.globl _stime, cerror
_stime:
mov r5,-(sp)
mov sp,r5
mov 4(sp),r1
mov (r1)+,r0
mov (r1),r1
sys stime
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
+24
View File
@@ -0,0 +1,24 @@
/ C library -- stty
/ error = stty(filep, ttyvec);
/ filep is descriptor of open tty
/ ttyvec[0, 1, 2] correspond to args of stty
.globl _stty, cerror
_stty:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
mov 6(r5),0f
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys stty; 0:..
+9
View File
@@ -0,0 +1,9 @@
.globl _sync
sync = 36.
_sync:
mov r5,-(sp)
mov sp,r5
sys sync
mov (sp)+,r5
rts pc
+19
View File
@@ -0,0 +1,19 @@
/ C library -- time
/ tvec = time(tvec);
/
/ tvec[0], tvec[1] contain the time
.globl _time
_time:
mov r5,-(sp)
mov sp,r5
sys time
mov r2,-(sp)
mov 4(r5),r2
mov r0,(r2)+
mov r1,(r2)+
mov (sp)+,r2
mov (sp)+,r5
rts pc
+15
View File
@@ -0,0 +1,15 @@
/ C library -- times
.globl _times
times = 43.
_times:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
sys 0; 9f
mov (sp)+,r5
rts pc
.data
9:
sys times; 0:..
+22
View File
@@ -0,0 +1,22 @@
/ C library -- umount/
.globl _umount
.globl cerror
indir = 0
.comm _errno,2
_umount:
mov r5,-(sp)
mov sp,r5
mov 4(sp),0f
sys indir; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys umount; 0:..
+21
View File
@@ -0,0 +1,21 @@
/ C library -- unlink
/ error = unlink(string);
/
.globl _unlink, cerror
_unlink:
mov r5,-(sp)
mov sp,r5
mov 4(r5),0f
sys 0; 9f
bec 1f
jmp cerror
1:
clr r0
mov (sp)+,r5
rts pc
.data
9:
sys unlink; 0:..
+27
View File
@@ -0,0 +1,27 @@
/ C library -- wait
/ pid = wait();
/ or,
/ pid = wait(&status);
/
/ pid == -1 if error
/ status indicates fate of process, if given
.globl _wait, _nargs, cerror
_wait:
mov r5,-(sp)
mov sp,r5
jsr pc,_nargs
mov r0,-(sp)
sys wait
bec 1f
tst (sp)+
jmp cerror
1:
tst (sp)+
beq 2f
mov r1,*4(r5) / status return
2:
mov (sp)+,r5
rts pc
+23
View File
@@ -0,0 +1,23 @@
/ C library -- write
/ nwritten = write(file, buffer, count);
/
/ nwritten == -1 means error
.globl _write, cerror
_write:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r0
mov 6(r5),0f
mov 8(r5),0f+2
sys 0; 9f
bec 1f
jmp cerror
1:
mov (sp)+,r5
rts pc
.data
9:
sys write; 0:..; ..