Add original unix v6
This commit is contained in:
@@ -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:..
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
@@ -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:..
|
||||
@@ -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:..; ..; ..
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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:..; ..; ..
|
||||
@@ -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 .
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:..; ..
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:..; ..; ..; ..
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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:..; ..
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:..; ..
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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]
|
||||
@@ -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
|
||||
@@ -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:..; ..
|
||||
@@ -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
|
||||
@@ -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:..
|
||||
@@ -0,0 +1,9 @@
|
||||
.globl _sync
|
||||
sync = 36.
|
||||
|
||||
_sync:
|
||||
mov r5,-(sp)
|
||||
mov sp,r5
|
||||
sys sync
|
||||
mov (sp)+,r5
|
||||
rts pc
|
||||
@@ -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
|
||||
@@ -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:..
|
||||
@@ -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:..
|
||||
@@ -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:..
|
||||
@@ -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
|
||||
@@ -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:..; ..
|
||||
Reference in New Issue
Block a user