Added .align 2. Prevents end of bss to be odd.

Especially important for malloc, it distinguishes between
odd and even word pointers.
This commit is contained in:
em
1985-02-17 01:12:36 +00:00
1706 changed files with 178558 additions and 0 deletions

26
mach/pdp/Action Normal file
View File

@@ -0,0 +1,26 @@
name "PDP 11 assembler"
dir as
end
name "PDP 11 backend"
dir cg
end
name "PDP 11 interpreter"
system pdp*
dir int
end
name "PDP 11 C libraries"
system pdp*
dir libcc
end
name "PDP 11 EM library"
system pdp*
dir libem
end
name "PDP 11 Pascal library"
system pdp*
dir libpc
end
name "PDP 11 Basic library"
system pdp*
dir libbc
end

185
mach/pdp/cg/Makefile Normal file
View File

@@ -0,0 +1,185 @@
# $Header$
PREFLAGS=-I../../../h -I. -DNDEBUG
PFLAGS=
CFLAGS=$(PREFLAGS) $(PFLAGS) -O
LDFLAGS=-i $(PFLAGS)
LINTOPTS=-hbxac
LIBS=../../../lib/em_data.a
CDIR=../../proto/cg
CFILES=$(CDIR)/codegen.c $(CDIR)/compute.c $(CDIR)/equiv.c $(CDIR)/fillem.c \
$(CDIR)/gencode.c $(CDIR)/glosym.c $(CDIR)/main.c $(CDIR)/move.c \
$(CDIR)/nextem.c $(CDIR)/reg.c $(CDIR)/regvar.c $(CDIR)/salloc.c \
$(CDIR)/state.c $(CDIR)/subr.c $(CDIR)/var.c
OFILES=codegen.o compute.o equiv.o fillem.o gencode.o glosym.o main.o\
move.o nextem.o reg.o regvar.o salloc.o state.o subr.o var.o
all:
make tables.c
make cg
cg: tables.o $(OFILES)
cc $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg
tables.o: tables.c
cc -c $(PREFLAGS) -I$(CDIR) tables.c
codegen.o: $(CDIR)/codegen.c
cc -c $(CFLAGS) $(CDIR)/codegen.c
compute.o: $(CDIR)/compute.c
cc -c $(CFLAGS) $(CDIR)/compute.c
equiv.o: $(CDIR)/equiv.c
cc -c $(CFLAGS) $(CDIR)/equiv.c
fillem.o: $(CDIR)/fillem.c
cc -c $(CFLAGS) $(CDIR)/fillem.c
gencode.o: $(CDIR)/gencode.c
cc -c $(CFLAGS) $(CDIR)/gencode.c
glosym.o: $(CDIR)/glosym.c
cc -c $(CFLAGS) $(CDIR)/glosym.c
main.o: $(CDIR)/main.c
cc -c $(CFLAGS) $(CDIR)/main.c
move.o: $(CDIR)/move.c
cc -c $(CFLAGS) $(CDIR)/move.c
nextem.o: $(CDIR)/nextem.c
cc -c $(CFLAGS) $(CDIR)/nextem.c
reg.o: $(CDIR)/reg.c
cc -c $(CFLAGS) $(CDIR)/reg.c
regvar.o: $(CDIR)/regvar.c
cc -c $(CFLAGS) $(CDIR)/regvar.c
salloc.o: $(CDIR)/salloc.c
cc -c $(CFLAGS) $(CDIR)/salloc.c
state.o: $(CDIR)/state.c
cc -c $(CFLAGS) $(CDIR)/state.c
subr.o: $(CDIR)/subr.c
cc -c $(CFLAGS) $(CDIR)/subr.c
var.o: $(CDIR)/var.c
cc -c $(CFLAGS) $(CDIR)/var.c
install: all
../../install cg
cmp: all
-../../compare cg
distr:
make tables.c
rm -f tables1.[ch]
cp tables.c tables1.c
cp tables.h tables1.h
chmod -w tables1.[ch]
tables.c: table
-mv tables.h tables.h.save
/lib/cpp -P table | ../../../lib/cgg > debug.out
-if cmp -s tables.h.save tables.h; then mv tables.h.save tables.h; else exit 0; fi
-if cmp -s /dev/null tables.h; then mv tables.h.save tables.h; else exit 0; fi
lint: $(CFILES)
lint $(LINTOPTS) $(PREFLAGS) $(CFILES)
clean:
rm -f *.o tables.c tables.h debug.out cg tables.h.save
codegen.o: $(CDIR)/assert.h
codegen.o: $(CDIR)/data.h
codegen.o: $(CDIR)/equiv.h
codegen.o: $(CDIR)/extern.h
codegen.o: $(CDIR)/param.h
codegen.o: $(CDIR)/result.h
codegen.o: $(CDIR)/state.h
codegen.o: tables.h
codegen.o: $(CDIR)/types.h
compute.o: $(CDIR)/assert.h
compute.o: $(CDIR)/data.h
compute.o: $(CDIR)/extern.h
compute.o: $(CDIR)/glosym.h
compute.o: $(CDIR)/param.h
compute.o: $(CDIR)/result.h
compute.o: tables.h
compute.o: $(CDIR)/types.h
equiv.o: $(CDIR)/assert.h
equiv.o: $(CDIR)/data.h
equiv.o: $(CDIR)/equiv.h
equiv.o: $(CDIR)/extern.h
equiv.o: $(CDIR)/param.h
equiv.o: $(CDIR)/result.h
equiv.o: tables.h
equiv.o: $(CDIR)/types.h
fillem.o: $(CDIR)/assert.h
fillem.o: $(CDIR)/data.h
fillem.o: $(CDIR)/extern.h
fillem.o: mach.c
fillem.o: mach.h
fillem.o: $(CDIR)/param.h
fillem.o: $(CDIR)/regvar.h
fillem.o: $(CDIR)/result.h
fillem.o: tables.h
fillem.o: $(CDIR)/types.h
gencode.o: $(CDIR)/assert.h
gencode.o: $(CDIR)/data.h
gencode.o: $(CDIR)/extern.h
gencode.o: $(CDIR)/param.h
gencode.o: $(CDIR)/result.h
gencode.o: tables.h
gencode.o: $(CDIR)/types.h
glosym.o: $(CDIR)/glosym.h
glosym.o: $(CDIR)/param.h
glosym.o: tables.h
glosym.o: $(CDIR)/types.h
main.o: $(CDIR)/param.h
move.o: $(CDIR)/assert.h
move.o: $(CDIR)/data.h
move.o: $(CDIR)/extern.h
move.o: $(CDIR)/param.h
move.o: $(CDIR)/result.h
move.o: tables.h
move.o: $(CDIR)/types.h
nextem.o: $(CDIR)/assert.h
nextem.o: $(CDIR)/data.h
nextem.o: $(CDIR)/extern.h
nextem.o: $(CDIR)/param.h
nextem.o: $(CDIR)/result.h
nextem.o: tables.h
nextem.o: $(CDIR)/types.h
reg.o: $(CDIR)/assert.h
reg.o: $(CDIR)/data.h
reg.o: $(CDIR)/extern.h
reg.o: $(CDIR)/param.h
reg.o: $(CDIR)/result.h
reg.o: tables.h
reg.o: $(CDIR)/types.h
regvar.o: $(CDIR)/assert.h
regvar.o: $(CDIR)/data.h
regvar.o: $(CDIR)/extern.h
regvar.o: $(CDIR)/param.h
regvar.o: $(CDIR)/regvar.h
regvar.o: $(CDIR)/result.h
regvar.o: tables.h
regvar.o: $(CDIR)/types.h
salloc.o: $(CDIR)/assert.h
salloc.o: $(CDIR)/data.h
salloc.o: $(CDIR)/extern.h
salloc.o: $(CDIR)/param.h
salloc.o: $(CDIR)/result.h
salloc.o: tables.h
salloc.o: $(CDIR)/types.h
state.o: $(CDIR)/assert.h
state.o: $(CDIR)/data.h
state.o: $(CDIR)/extern.h
state.o: $(CDIR)/param.h
state.o: $(CDIR)/result.h
state.o: $(CDIR)/state.h
state.o: tables.h
state.o: $(CDIR)/types.h
subr.o: $(CDIR)/assert.h
subr.o: $(CDIR)/data.h
subr.o: $(CDIR)/extern.h
subr.o: $(CDIR)/param.h
subr.o: $(CDIR)/result.h
subr.o: tables.h
subr.o: $(CDIR)/types.h
var.o: $(CDIR)/data.h
var.o: $(CDIR)/param.h
var.o: $(CDIR)/result.h
var.o: tables.h
var.o: $(CDIR)/types.h

243
mach/pdp/cg/mach.c Normal file
View File

@@ -0,0 +1,243 @@
#ifndef NORCSID
static char rcsid[] = "$Header$";
#endif
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
* Author: Hans van Staveren
*/
/*
* machine dependent back end routines for the PDP-11
*/
/* #define REGPATCH /* save all registers in markblock */
con_part(sz,w) register sz; word w; {
while (part_size % sz)
part_size++;
if (part_size == TEM_WSIZE)
part_flush();
if (sz == 1) {
w &= 0xFF;
if (part_size)
w <<= 8;
part_word |= w;
} else {
assert(sz == 2);
part_word = w;
}
part_size += sz;
}
con_mult(sz) word sz; {
long l;
if (sz != 4)
fatal("bad icon/ucon size");
#ifdef ACK_ASS
fprintf(codefile,".long %s\n",str);
#else
l = atol(str);
fprintf(codefile,"\t%o;%o\n",(int)(l>>16),(int)l);
#endif
}
/*
* The next function is difficult to do when not running on a PDP 11 or VAX
* The strategy followed is to assume the code generator is running on a PDP 11
* unless the ACK_ASS define is on.
* In the last case floating point constants are simply not handled
*/
con_float() {
#ifdef ACK_ASS
static int been_here;
if (argval != 4 && argval != 8)
fatal("bad fcon size");
fprintf(codefile,".long\t");
if (argval == 8)
fprintf(codefile,"F_DUM,");
fprintf(codefile,"F_DUM\n");
if ( !been_here++)
fprintf(stderr,"Warning : dummy float-constant(s)\n");
#else
double f;
register short *p,i;
if (argval != 4 && argval != 8)
fatal("bad fcon size");
f = atof(str);
p = (short *) &f;
i = *p++;
if (argval == 8) {
fprintf(codefile,"\t%o;%o;",i,*p++);
i = *p++;
}
fprintf(codefile,"\t%o;%o\n",i,*p++);
#endif
}
#ifdef REGVARS
char Rstring[10];
full lbytes;
struct regadm {
char *ra_str;
long ra_off;
} regadm[2];
int n_regvars;
regscore(off,size,typ,score,totyp) long off; {
if (size != 2)
return(-1);
score -= 1; /* allow for save/restore */
if (off>=0)
score -= 2;
if (typ==reg_pointer)
score *= 17;
else if (typ==reg_loop)
score = 10*score+50; /* Guestimate */
else
score *= 10;
return(score); /* estimated # of words of profit */
}
i_regsave() {
Rstring[0] = 0;
n_regvars=0;
}
f_regsave() {
register i;
if (n_regvars==0 || lbytes==0) {
#ifdef REGPATCH
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
#endif
fprintf(codefile,"mov r5,-(sp)\nmov sp,r5\n");
if (lbytes == 2)
fprintf(codefile,"tst -(sp)\n");
else if (lbytes!=0)
fprintf(codefile,"sub $0%o,sp\n",lbytes);
for (i=0;i<n_regvars;i++)
fprintf(codefile,"mov %s,-(sp)\n",regadm[i].ra_str);
} else {
if (lbytes>6) {
fprintf(codefile,"mov $0%o,r0\n",lbytes);
fprintf(codefile,"jsr r5,PR%s\n",Rstring);
} else {
fprintf(codefile,"jsr r5,PR%d%s\n",lbytes,Rstring);
}
}
for (i=0;i<n_regvars;i++)
if (regadm[i].ra_off>=0)
fprintf(codefile,"mov 0%lo(r5),%s\n",regadm[i].ra_off,
regadm[i].ra_str);
}
regsave(regstr,off,size) char *regstr; long off; {
fprintf(codefile,"%c Local %ld into %s\n",COMMENTCHAR,off,regstr);
/* commented away
#ifndef REGPATCH
fprintf(codefile,"mov %s,-(sp)\n",regstr);
#endif
strcat(Rstring,regstr);
if (off>=0)
fprintf(codefile,"mov 0%lo(r5),%s\n",off,regstr);
end of commented away */
strcat(Rstring,regstr);
regadm[n_regvars].ra_str = regstr;
regadm[n_regvars].ra_off = off;
n_regvars++;
}
regreturn() {
#ifdef REGPATCH
fprintf(codefile,"jmp eret\n");
#else
fprintf(codefile,"jmp RT%s\n",Rstring);
#endif
}
#endif
prolog(nlocals) full nlocals; {
#ifndef REGVARS
#ifdef REGPATCH
fprintf(codefile,"mov r2,-(sp)\nmov r4,-(sp)\n");
#endif
fprintf(codefile,"mov r5,-(sp)\nmov sp,r5\n");
if (nlocals == 0)
return;
if (nlocals == 2)
fprintf(codefile,"tst -(sp)\n");
else
fprintf(codefile,"sub $0%o,sp\n",nlocals);
#else
lbytes = nlocals;
#endif
}
dlbdlb(as,ls) string as,ls; {
if (strlen(as)+strlen(ls)+2<sizeof(labstr)) {
strcat(ls,":");
strcat(ls,as);
} else
fatal("too many consecutive labels");
}
mes(type) word type; {
int argt ;
switch ( (int)type ) {
case ms_ext :
for (;;) {
switch ( argt=getarg(
ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) {
case sp_cend :
return ;
default:
strarg(argt) ;
#ifdef ACK_ASS
fprintf(codefile,".define %s\n",argstr) ;
#else
fprintf(codefile,".globl %s\n",argstr) ;
#endif
break ;
}
}
default :
while ( getarg(any_ptyp) != sp_cend ) ;
break ;
}
}
char *segname[] = {
".text", /* SEGTXT */
".data", /* SEGCON */
".data", /* SEGROM */
".bss" /* SEGBSS */
};

46
mach/pdp/cg/mach.h Normal file
View File

@@ -0,0 +1,46 @@
/* $Header$ */
/* The next define switches between codegeneration for an ACK assembler
* or for the standard UNIX V7 assembler.
* If on code is generated for the ACK assembler.
*/
/* #define ACK_ASS /* code for ACK assembler */
#ifdef ACK_ASS
#define COMMENTCHAR '!'
#define ex_ap(y) fprintf(codefile,".extern %s\n",y)
#else
#define COMMENTCHAR '/'
#define ex_ap(y) fprintf(codefile,".globl %s\n",y)
#endif
#define in_ap(y) /* nothing */
#define newplb(x) fprintf(codefile,"%s:\n",x)
#define newilb(x) fprintf(codefile,"%s:\n",x)
#define newdlb(x) fprintf(codefile,"%s:\n",x)
#ifdef ACK_ASS
#define newlbss(l,x) fprintf(codefile,"%s:.space 0%o\n",l,x);
#else
#define newlbss(l,x) fprintf(codefile,"%s:.=.+0%o\n",l,x);
#endif
#define cst_fmt "$0%o"
#define off_fmt "0%o"
#define ilb_fmt "I%03x%x"
#define dlb_fmt "_%d"
#define hol_fmt "hol%d"
#define hol_off "0%o+hol%d"
#ifdef ACK_ASS
#define con_cst(x) fprintf(codefile,".short 0%o\n",x)
#define con_ilb(x) fprintf(codefile,".short %s\n",x)
#define con_dlb(x) fprintf(codefile,".short %s\n",x)
#else
#define con_cst(x) fprintf(codefile,"0%o\n",x)
#define con_ilb(x) fprintf(codefile,"%s\n",x)
#define con_dlb(x) fprintf(codefile,"%s\n",x)
#endif
#define id_first '_'
#define BSS_INIT 0

135
mach/pdp/cg/peep.c Normal file
View File

@@ -0,0 +1,135 @@
#ifndef NORCSID
static char rcsid[] = "$Header$";
#endif
#include <stdio.h>
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
* Author: Hans van Staveren
*/
char buf[512];
char *index();
main() {
register n,sa;
register char *p;
sa=0;
for (;;) {
getline(buf);
if (n=stackadjust()) {
sa += n;
continue;
}
if (nullinstruction())
continue;
if (sa) {
if (buf[0]=='t' && buf[1]=='s' && buf[2]=='t' && buf[3]==' ') {
sa -= 2;
buf[0]='m';
buf[1]='o';
buf[2]='v';
strcat(buf,",(sp)+");
} else if (buf[0]=='m' && buf[1]=='o' && buf[2]=='v' &&
buf[3]==' ' && (p=index(&buf[5],','))!=0 &&
p[1]=='-' && p[2]=='(' && p[3]=='s') {
sa -= 2;
p[1]=' ';
}
}
switch(sa) {
case 0:break;
case 2:puts("tst (sp)+");sa=0;break;
case 4:puts("cmp (sp)+,(sp)+");sa=0;break;
case 6:puts("add $06,sp");sa=0;break;
}
puts(buf);
}
}
getline(buf) register char *buf; {
register c;
while ((c=getchar())==' ' || c=='\t')
;
if (c==EOF)
exit(0);
do *buf++=c;
while ((c=getchar())!='\n');
*buf=0;
}
stackadjust() {
if (buf[0]=='t' &&
buf[1]=='s' &&
buf[2]=='t' &&
buf[3]==' ' &&
buf[4]=='(' &&
buf[5]=='s' &&
buf[6]=='p' &&
buf[7]==')' &&
buf[8]=='+') return(2);
if (buf[0]=='c' &&
buf[1]=='m' &&
buf[2]=='p' &&
buf[3]==' ' &&
buf[4]=='(' &&
buf[5]=='s' &&
buf[6]=='p' &&
buf[7]==')' &&
buf[8]=='+' &&
buf[9]==',' &&
buf[10]=='(' &&
buf[11]=='s' &&
buf[12]=='p' &&
buf[13]==')' &&
buf[14]=='+') return(4);
if (buf[0]=='a' &&
buf[1]=='d' &&
buf[2]=='d' &&
buf[3]==' ' &&
buf[4]=='$' &&
buf[5]=='0' &&
buf[6]=='6' &&
buf[7]==',' &&
buf[8]=='s' &&
buf[9]=='p' &&
buf[10]==0) return(6);
return(0);
}
nullinstruction() {
register char *p;
if (buf[4]=='$' && buf[5]=='0' && buf[6]=='0' && buf[7]==',') {
p=index(buf,'-');
if (p!=0 && p[1]=='(')
return(0);
p=index(buf,'+');
if (p!=0 && p[-1]==')')
return(0);
if (buf[0]=='b' && buf[1]=='i' && (buf[2]=='s' || buf[2]=='c'))
return(1);
if (buf[0]=='a' && buf[1]=='d' && buf[2]=='d')
return(1);
if (buf[0]=='s' && buf[1]=='u' && buf[2]=='b')
return(1);
}
return(0);
}

2849
mach/pdp/cg/table Normal file

File diff suppressed because it is too large Load Diff

48
mach/pdp/int/Makefile Normal file
View File

@@ -0,0 +1,48 @@
INTS=em_t--- em_---- em_tf-- em_t-c- em_t--p
b=../../../lib/int22
all: $(INTS) eminform em
em: em.c
cc -o em -I../../../h em.c
eminform: eminform.s
as eminform.s;ld -i -o eminform a.out -lc
em_t---: t+ f- c- p- em_int.s
as t+ f- c- p- em_int.s;ld -i -o em_t--- a.out -lc
em_----: t- f- c- p- em_int.s
as t- f- c- p- em_int.s;ld -i -o em_---- a.out -lc
em_tf--: t+ f+ c- p- em_int.s
as t+ f+ c- p- em_int.s;ld -i -o em_tf-- a.out -lc
em_t-c-: t+ f- c+ p- em_int.s
as t+ f- c+ p- em_int.s;ld -i -o em_t-c- a.out -lc
em_t--p: t+ f- c- p+ em_int.s
as t+ f- c- p+ em_int.s;ld -i -o em_t--p a.out -lc
install: all
-mkdir $b
cp em_???? $b
cp em eminform ../../../bin
cmp: all
cmp em_t--- $b/em_t---
cmp em_---- $b/em_----
cmp em_tf-- $b/em_tf--
cmp em_t-c- $b/em_t-c-
cmp em_t--p $b/em_t--p
cmp em ../../../bin/em
cmp eminform ../../../bin/eminform
clean:
-rm -f *.o *.old a.out em eminform $(INTS)
opr:
make pr | opr
pr:
@pr em.c em_int.s eminform.s

19
mach/pdp/int/README Normal file
View File

@@ -0,0 +1,19 @@
In this directory is a complete interpreter for EM-code on a
PDP 11, written in Unix assembly language.
The interpreter is split up in 7 files, em.v1 up to em.v7.
There exist assembler options .test .opfreq .flow .count .prof
and .last.
.test tests undefined integers, bad arrays etcetera
.opfreq makes a table of the usage of othe em-opcodes
.flow makes a table of the used lines
.count makes a count table of the used lines
.prof estimates the amount of time spent on each source line
.last gives a table of the last executed lines and files
The interpreter writes its runtime information on a file
em_runinf, which is converted to human readable files
em_last, em_opfreq, em_profile, em_flow and em_count by
the program eminform, for which we also have an assembler
source in this directory.
Because the size of the interpreter just exceeds 8k, it is
advisible to have either .prof or .test turned off on a machine
without separate I and D when a large user program is running.

1
mach/pdp/int/c+ Normal file
View File

@@ -0,0 +1 @@
.count = 1

1
mach/pdp/int/c- Normal file
View File

@@ -0,0 +1 @@
.count = 0

132
mach/pdp/int/em.c Normal file
View File

@@ -0,0 +1,132 @@
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
*/
#include <stdio.h>
#include <em_path.h>
#include <local.h>
char rcs_id[] = "$Header$" ;
#define MAGIC 07255
struct header {
short h_magic; /* Magic number */
short h_flags; /* See below for defines */
short h_unresolved; /* Cannot run if nonzero */
short h_version; /* Check for VERSION */
short h_wsize;
short h_psize;
short h_unused[2]; /* left over */
} header;
#define TEST 001
#define PROFILE 002
#define FLOW 004
#define COUNT 010
char *defargv[] = {
"em",
"e.out",
0
};
char interpret[BUFSIZ];
char flags[5];
char tflg,fflg,cflg,pflg;
main(argc,argv) char **argv; {
char *file;
int fildes;
while (argc>1 && (argv[1][0]=='-' || argv[1][0]=='+')) {
switch(argv[1][1]) {
case 't': tflg=argv[1][0]; break;
case 'c': cflg=argv[1][0]; break;
case 'f': fflg=argv[1][0]; break;
case 'p': pflg=argv[1][0]; break;
default:
fprintf(stderr,"Bad flag %c\n",argv[1][1]);
exit(-1);
}
argv[1] = argv[0];
argc--;argv++;
}
if (argc==1)
argv= defargv;
file=argv[1];
if ((fildes=open(file,0))<0) {
perror(file);
exit(8) ;
}
header.h_magic= r2b(fildes,file) ;
header.h_flags= r2b(fildes,file) ;
header.h_unresolved= r2b(fildes,file) ;
header.h_version= r2b(fildes,file) ;
header.h_wsize= r2b(fildes,file) ;
header.h_psize= r2b(fildes,file) ;
header.h_unused[0]= r2b(fildes,file) ;
header.h_unused[1]= r2b(fildes,file) ;
if (header.h_magic != MAGIC) {
fprintf(stderr,"%s not in correct format\n",file);
exit(-1);
}
if (header.h_version != VERSION) {
fprintf(stderr,"%s obsolete, recompile\n",file);
exit(-1);
}
if (header.h_unresolved != 0) {
fprintf(stderr,
"%s has unresolved references, cannot run it\n",file);
exit(-1);
}
/*
if ( header.h_psize!=EM_PSIZE) {
fprintf(stderr,
"%s cannot be interpreted on this machine\n",file);
exit(-1);
}
*/
if (tflg)
flags[0] = tflg=='+' ? 't' : '-';
else
flags[0]= header.h_flags&TEST ? 't' : '-';
if (fflg)
flags[1] = fflg=='+' ? 'f' : '-';
else
flags[1]= header.h_flags&FLOW ? 'f' : '-';
if (cflg)
flags[2] = cflg=='+' ? 'c' : '-';
else
flags[2]= header.h_flags&COUNT ? 'c' : '-';
if (pflg)
flags[3] = pflg=='+' ? 'p' : '-';
else
flags[3]= header.h_flags&PROFILE ? 'p' : '-';
sprintf(interpret,"%s/lib/int%d%d/em_%s",
EM_DIR,header.h_wsize,header.h_psize,flags);
execv(interpret,argv);
fprintf(stderr,"Interpreter %s not available\n",interpret);
}
r2b(fildes,file) char *file ; {
char rd2[2] ;
if ( read(fildes,rd2,sizeof rd2)!=sizeof rd2) {
fprintf(stderr,"%s too short\n",file);
exit(-1);
}
return (rd2[0]&0xFF) | ( (rd2[1]&0xFF)<<8 ) ;
}

3793
mach/pdp/int/em_int.s Normal file

File diff suppressed because it is too large Load Diff

634
mach/pdp/int/eminform.s Normal file
View File

@@ -0,0 +1,634 @@
/
/ (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
/
/ This product is part of the Amsterdam Compiler Kit.
/
/ Permission to use, sell, duplicate or disclose this software must be
/ obtained in writing. Requests for such permissions may be sent to
/
/ Dr. Andrew S. Tanenbaum
/ Wiskundig Seminarium
/ Vrije Universiteit
/ Postbox 7161
/ 1007 MC Amsterdam
/ The Netherlands
/
/
/------------------------------------------------------------------------------
/
indir = 0
exit = 1
fork = 2
read = 3
write = 4
open = 5
close = 6
creat = 8.
unlink = 10.
break = 17.
alarm = 27.
pause = 29.
sleep = 35.
signal = 48.
iot = 4
/------------------------------------------------------------------------------
/ External references
/------------------------------------------------------------------------------
.globl _end
/
/------------------------------------------------------------------------------
/ Now the real program starts
/------------------------------------------------------------------------------
startoff:
mov sp,memlim
mov $ldfail,r5
mov $emfile,forward+2
sys indir;forward
jes badruninf;
mov r0,saver0;
mov $rhfail,r5;
sys read;header;34.
jes badruninf;
cmp $34.,r0
jne badruninf
mov $rtfail,r5
mov $_end,loadstart
mov option,r1
bit $17774,r1
bne 1f
mov tblmax,globmax
1:
bit $1,r1
beq 1f
mov saver0,r0
sys read;lasttab;98.
jes badruninf;
1: bit $2,r1
beq 1f
mov saver0,r0
sys read;opfrb;512.
jes badruninf
mov saver0,r0
sys read;opfra;512.
jes badruninf
mov saver0,r0
sys read;opfrc;640.
jes badruninf
1: bit $4,r1
beq 1f
mov saver0,r0
sys read;lcount;4
jes badruninf
1: bit $8.,r1
beq 1f
mov saver0,r0
sys read;lflow;4
jes badruninf
1: bit $16.,r1
beq 1f
mov saver0,r0
sys read;ltime;4
jes badruninf
1:
mov tblmax,r3
sub pd,r3
sub ml,r3
mov $_end,sybreak+2
add r3,sybreak+2;
sys indir;sybreak
mov r3,lblread+4
mov $_end,lblread+2;
mov saver0,r0
sys indir;lblread;
jes badruninf
mov saver0,r0
sys close
sys unlink;emfile
lbladj:
add $header,linused
sub header,linused
mov pd,filext
sub loadstart,filext
mov filext,filarg
add ml,filarg
sub tblmax,filarg
lbllast:
bit $1,option /test for last
beq 2f / no last table jump
sys creat;emlast;666
bcs 2f
cmp linused,$lasttab
bhis 3f
mov $yetmsg,lblwri+2
mov $40.,lblwri+4
sys indir;lblwri
br 2f
3: mov r0,saver0
cmp linused-2,$-1
bne 6f
mov $linused-2,linused
clr linused-2
6: jsr pc,slilast
inc r2
jsr pc,nexttab
tst (r5)
beq 3f
sub $2,linused
cmp eb,(r5)
blo 3f
7: cmp r2,$lnend
blt 1f
jsr pc,slnlast
1: jsr pc,lnrnxt
bne 7b
3: jsr pc,sfllast
bne 6b
mov saver0,r0
sys close
2:
lblopfreq:
bit $2,option
beq 9f
sys creat;emopf;666
bcs 9f
mov r0,saver0
mov $opcode,r3
mov $104.,r4
mov $counttab,r5
0: mov $lnlast,r2
mov $8.,r0
2: movb (r3)+,(r2)+
sob r0,2b
add $8,r2
mov r2,-(sp)
jsr pc,ltoa
mov (sp)+,r2
add $5,r2
mov $8.,r0
2: movb (r3)+,(r2)+
sob r0,2b
add $8,r2
mov r2,-(sp)
jsr pc,ltoa
mov (sp)+,r2
add $5,r2
mov $8.,r0
2: movb (r3)+,(r2)+
sob r0,2b
add $8,r2
mov r2,-(sp)
jsr pc,ltoa
mov (sp)+,r2
add $5,r2
mov $8.,r0
2: movb (r3)+,(r2)+
sob r0,2b
add $8,r2
mov r2,-(sp)
jsr pc,ltoa
mov (sp)+,r2
mov r3,-(sp)
jsr pc,slnlast
mov (sp)+,r3
sob r4,0b
mov saver0,r0
sys close
9:
lblcount:
clr filb
bit $4,option
beq 9f
sys creat;emcount;666
bcs 9f
mov r0,saver0
mov lcount,r5
add $4,r5
sub filext,r5
jsr pc,procrun
mov saver0,r0
sys close
9:
lblprof:
bit $16.,option
beq 9f
sys creat;emprof;666
bcs 9f
mov r0,saver0
mov ltime,r5
sub filext,r5
mov $profmsg,lblwri+2
mov $29,lblwri+4
mov $profmsg+27,r2
jsr pc,ltoa
mov saver0,r0
sys indir;lblwri
jsr pc,procrun
mov saver0,r0
sys close
9:
lblflow:
mov $1,filb
bit $8.,option
beq 9f
sys creat;emflow;666
bcs 9f
mov lflow,r5
mov $-1,flowsiz
sub filext,r5
jsr pc,procrun
mov saver0,r0
sys close
9:
clr r0
sys exit
badruninf:
mov $0f,lblwri+2
mov $21.,lblwri+4
mov $2,r0
sys indir;lblwri
mov r5,lblwri+2
mov $23.,lblwri+4
mov $2,r0
sys indir;lblwri
iot /force core dump
.data
lblwri:
sys write;0;0
forward:
sys open;0;0
sybreak:
sys break;0;
lblread:
sys read;0;0
0: <em_runinf load error,\0>
ldfail: < open runinf failed \n\0>
rhfail: < read header failed \n\0>
rtfail: < read tables failed \n\0>
msgto: <to>
emlast: <em_last\0>
emcount:<em_count\0>
emfile: <em_runinf\0>
emopf: <em_opfreq\0>
emprof: <em_profile\0>
emflow: <em_flow\0>
yetmsg: <no line or file message processed yet \n\n\0>
unknown:<with unknown filename\0>
lilast: <\nlines \0>
lnlast: < >
< >
lnend: < \0>
fllast: < of file >
< \0>
profmsg:<\ninitialization \n\0>
sep: <\n\0>
/----------------------------------------------------------------------------
opcode:
<loc.0 loc.1 loc.2 loc.3 loc.4 loc.5 loc.6 loc.7 >
<loc.8 loc.9 loc.10 loc.11 loc.12 loc.13 loc.14 loc.15 >
<loc.16 loc.17 loc.18 loc.19 loc.20 loc.21 loc.22 loc.23 >
<loc.24 loc.25 loc.26 loc.27 loc.28 loc.29 loc.30 loc.31 >
<loc.32 loc.33 aar.1W adf.s0 adi.1W adi.2W adp.l adp.1 >
<adp.2 adp.s0 adp.s_1 ads.1W and.1W asp.1W asp.2W asp.3W >
<asp.4W asp.5W asp.w0 beq.l beq.s0 bge.s0 bgt.s0 ble.s0 >
<blm.s0 blt.s0 bne.s0 bra.l bra.s_1 bra.s_2 bra.s0 bra.s1 >
<cal.1 cal.2 cal.3 cal.4 cal.5 cal.6 cal.7 cal.8 >
<cal.9 cal.10 cal.11 cal.12 cal.13 cal.14 cal.15 cal.16 >
<cal.17 cal.18 cal.19 cal.20 cal.21 cal.22 cal.23 cal.24 >
<cal.25 cal.26 cal.27 cal.28 cal.s0 cff.z cif.z cii.z >
<cmf.s0 cmi.1W cmi.2W cmp.z cms.s0 csa.1W csb.1W dec.z >
<dee.w0 del.w_1 dup.1W dvf.s0 dvi.1W fil.l inc.z ine.lw >
<ine.w0 inl._1W inl._2W inl._3W inl.w_1 inn.s0 ior.1W ior.s0 >
<lae.l lae.w0 lae.w1 lae.w2 lae.w3 lae.w4 lae.w5 lae.w6 >
<lal.p lal.n lal.0 lal._1 lal.w0 lal.w_1 lal.w_2 lar.1W >
<ldc.0 lde.lw lde.w0 ldl.0 ldl.w_1 lfr.1W lfr.2W lfr.s0 >
<lil.w_1 lil.w0 lil.0 lil.1W lin.l lin.s0 lni.z loc.l >
<loc._1 loc.s0 loc.s_1 loe.lw loe.w0 loe.w1 loe.w2 loe.w3 >
<loe.w4 lof.l lof.1W lof.2W lof.3W lof.4W lof.s0 loi.l >
<loi.1 loi.1W loi.2W loi.3W loi.4W loi.s0 lol.pw lol.nw >
<lol.0 lol.1W lol.2W lol.3W lol._1W lol._2W lol._3W lol._4W >
<lol._5W lol._6W lol._7W lol._8W lol.w0 lol.w_1 lxa.1 lxl.1 >
<lxl.2 mlf.s0 mli.1W mli.2W rck.1W ret.0 ret.1W ret.s0 >
<rmi.1W sar.1W sbf.s0 sbi.1W sbi.2W sdl.w_1 set.s0 sil.w_1 >
<sil.w0 sli.1W ste.lw ste.w0 ste.w1 ste.w2 stf.l stf.1W >
<stf.2W stf.s0 sti.1 sti.1W sti.2W sti.3W sti.4W sti.s0 >
<stl.pw stl.nw stl.0 stl.1W stl._1W stl._2W stl._3W stl._4W >
<stl._5W stl.w_1 teq.z tgt.z tlt.z tne.z zeq.l zeq.s0 >
<zeq.s1 zer.s0 zge.s0 zgt.s0 zle.s0 zlt.s0 zne.s0 zne.s_1 >
<zre.lw zre.w0 zrl._1W zrl._2W zrl.w_1 zrl.nw escape1 escape2 >
<aar.l aar.z adf.l adf.z adi.l adi.z ads.l ads.z >
<adu.l adu.z and.l and.z asp.lw ass.l ass.z bge.l >
<bgt.l ble.l blm.l bls.l bls.z blt.l bne.l cai.z >
<cal.l cfi.z cfu.z ciu.z cmf.l cmf.z cmi.l cmi.z >
<cms.l cms.z cmu.l cmu.z com.l com.z csa.l csa.z >
<csb.l csb.z cuf.z cui.z cuu.z dee.lw del.pw del.nw >
<dup.l dus.l dus.z dvf.l dvf.z dvi.l dvi.z dvu.l >
<dvu.z fef.l fef.z fif.l fif.z inl.pw inl.nw inn.l >
<inn.z ior.l ior.z lar.l lar.z ldc.l ldf.l ldl.pw >
<ldl.nw lfr.l lil.pw lil.nw lim.z los.l los.z lor.s0 >
<lpi.l lxa.l lxl.l mlf.l mlf.z mli.l mli.z mlu.l >
<mlu.z mon.z ngf.l ngf.z ngi.l ngi.z nop.z rck.l >
<rck.z ret.l rmi.l rmi.z rmu.l rmu.z rol.l rol.z >
<ror.l ror.z rtt.z sar.l sar.z sbf.l sbf.z sbi.l >
<sbi.z sbs.l sbs.z sbu.l sbu.z sde.l sdf.l sdl.pw >
<sdl.nw set.l set.z sig.z sil.pw sil.nw sim.z sli.l >
<sli.z slu.l slu.z sri.l sri.z sru.l sru.z sti.l >
<sts.l sts.z str.s0 tge.z tle.z trp.z xor.l xor.z >
<zer.l zer.z zge.l zgt.l zle.l zlt.l zne.l zrf.l >
<zrf.z zrl.pw dch.z exg.s0 exg.l exg.z lpb.z gto.l \0\0>
.even
.text
/------------------------------------------------------------------------------
/ General subroutines
/------------------------------------------------------------------------------
wrdoff: movb (r3)+,r0 /get first byte
swab r0 /put it in high byte
clrb r0 /clear low byte of r0
bisb (r3)+,r0 /"or" second byte in
rts pc /done
/------------------------------------------------------------------------------
nexttab: mov linused,r5;
add $2,r5 / increment lasttab
cmp r5,$linused / top of table reached?
blo 1f
sub $96.,r5
1: mov r5,linused
rts pc
slilast: mov $lnlast,r2
mov $6,r0
mov $lilast,r3
2: movb (r3)+,(r2)+
sob r0,2b
rts pc
slnlast: mov $lnlast,lblwri+2
mov r2,r3
sub $lnlast,r3
beq 3f
inc r3
movb sep,(r2)
1: mov r3,lblwri+4
mov saver0,r0
sys indir; lblwri
mov $lnlast,r2
2: movb $' ,(r2)+
sob r3,2b
3: mov $lnlast,r2
rts pc
lnrnxt: jsr pc,nexttab
tst (r5)
ble 0f
mov (r5),r1
clr (r5)
add $6,r2
mov r2,r0
jsr pc,itoa
0: rts pc
sfllast:jsr pc,nexttab
tst (r5)
bne 0f
clr linused
mov eb,-(sp)
sub filext,(sp)
add $4,(sp)
mov *(sp),(sp)
mov (sp)+,(r5)
0: jsr pc,slnlast
jsr pc,filadj
mov $14.,r3
mov $fllast+14.,r2
mov (r5),r0
3: inc r3
movb (r0)+,(r2)+
bne 3b
movb sep,-(r2)
mov $fllast,lblwri+2
mov r3,lblwri+4
mov saver0,r0
sys indir;lblwri
mov $fllast+14.,r2
sub $10.,r3
2: movb $' ,(r2)+
sob r3,2b
clr (r5)
tst linused
beq 2f
jsr pc,slilast
2: rts pc
filadj:
cmp ml,(r5)
bhi 8f
sub filarg,(r5)
br 7f
8: cmp eb,(r5)
bhi 7f
sub filext,(r5)
7: rts pc
procrun:
mov firstp,r4
sub filext,r4
0:
tst 4(r4)
beq 8f
jsr pc,msgfile
mov r4,-(sp)
mov countsiz,r4
7: cmp r2,$lnend+10
blo 6f
jsr pc,slnlast
mov $lnlast,r2
6: tst filb
bne 3f
add $11.,r2
mov r2,-(sp)
jsr pc,ltoa
mov (sp)+,r2
br 4f
3:
jsr pc,bittoa
add $4,r2
4: sob r4,7b
jsr pc,slnlast
mov (sp)+,r4
8: mov 8.(r4),r4
beq 8f
sub filext,r4
br 0b
mov r0,saver0
sys write;sep;1
8: rts pc
msgfile:
jsr pc,slilast
add $6,r2
mov 6(r4),r1
mov r2,r0
jsr pc,itoa
add $4,r2
movb msgto,(r2)+
movb msgto+1,(r2)+
add $6,r2
mov 8.(r4),r1
3: bne 1f
mov maxcount,r1
br 2f
1: sub filext,r1
tst 4(r1)
beq 1f
mov 4(r1),r1
br 2f
1: mov 8.(r1),r1
br 3b
2: sub 4(r4),r1
mov r1,countsiz
dec r1 / is this a bug?
add 6(r4),r1
mov r2,r0
jsr pc,itoa
mov $fllast,r3
mov $14,r1
2: movb (r3)+,(r2)+
sob r1,2b
mov 10.(r4),r3
bne 6f
mov $unknown,r3
br 5f
6: cmp ml,r3
bhi 4f
sub filarg,r3
br 5f
4: cmp eb,r3
bhi 5f
sub filext,r3
5:
lblmsgf:
2: movb (r3)+,(r2)+
bne 2b
jsr pc,slnlast
rts pc
itoa:
mov r5,-(sp)
mov r0,r5
1: clr r0
div $10.,r0
add $'0,r1
movb r1,-(r5)
mov r0,r1
bne 1b
mov r5,r0
mov (sp)+,r5
rts pc
rts pc
ltoa:
0: mov (r5),r1
clr r0
div $10.,r0
mov r0,(r5)
swab r1
clr r0
bisb 3(r5),r1
div $10.,r0
movb r0,3(r5)
clr r0
swab r1
bisb 2(r5),r1
div $10.,r0
add $'0,r1
movb r1,-(r2)
movb r0,2(r5)
bne 0b
tst (r5)
bne 0b
add $4,r5
rts pc
bittoa:
mov (r5),r1
mov flowsiz,r0
ash r0,r1
bit $1,r1
beq 0f
movb $'1,(r2)
br 1f
0: movb $'0,(r2)
1: dec r0
cmp $-16.,r0
beq 2f
mov r0,flowsiz
br 3f
2: clr flowsiz
add $2,r5
3: rts pc
/------------------------------------------------------------------------------
/ Leftover data
/------------------------------------------------------------------------------
.bss
filb: .=.+2
loadstart: .=.+2
saver0: .=.+2
filarg: .=.+2
filext: .=.+2
memlim: .=.+2
header:
bstrt: txtsiz: .=.+2
bend: ndatad: .=.+2
nprocs: .=.+2
option: entry.: .=.+2
nlines: .=.+2
szdata: .=.+2
firstp: .=.+2
maxcount: .=.+2
argc: .=.+2
argv: .=.+2
environ:
.=.+2
pb: .=.+2
pd: .=.+2
eb: .=.+2
globmax: .=.+2
tblmax: .=.+2
ml: .=.+2
lasttab:.=.+96. / 16 descriptors of integers + index at the end
linused:.=.+2
counttab:
opfra: .=.+512.
opfrb: .=.+512.
opfrc: .=.+640.
lcount: .=.+2
countsiz:.=.+2
lflow: .=.+2
flowsiz:.=.+2
ltime: .=.+2
profsiz:.=.+2

1
mach/pdp/int/f+ Normal file
View File

@@ -0,0 +1 @@
.flow = 1

1
mach/pdp/int/f- Normal file
View File

@@ -0,0 +1 @@
.flow = 0

1
mach/pdp/int/p+ Normal file
View File

@@ -0,0 +1 @@
.prof = 1

1
mach/pdp/int/p- Normal file
View File

@@ -0,0 +1 @@
.prof = 0

1
mach/pdp/int/t+ Normal file
View File

@@ -0,0 +1 @@
.test = 1

1
mach/pdp/int/t- Normal file
View File

@@ -0,0 +1 @@
.test = 0

21
mach/pdp/libbc/Makefile Normal file
View File

@@ -0,0 +1,21 @@
MAKEFILE=../../proto/libg/Makefile
MACHDEF="MACH=pdp" "SUF=o" "ASAR=ar"
BCDEF="PREF=bc" "SUB=" "SRC=lang/basic/lib"
install:
RANLIB=ranlib ; export RANLIB ;\
make -f $(MAKEFILE) $(BCDEF) $(MACHDEF) tailcp
cmp:
make -f $(MAKEFILE) $(BCDEF) $(MACHDEF) tail
-../../compare head_bc
-../../compare tail_bc
clean:
-rm -f *.old *.[ce$(SUF)] tail* head*
opr:
make pr | opr
pr:
@pr Makefile

2
mach/pdp/libbc/compmodule Executable file
View File

@@ -0,0 +1,2 @@
${MACH?} -I../../../h ${MACHFL?} $1 1>&2
echo `basename $1 $2`.o

49
mach/pdp/libcc/Makefile Normal file
View File

@@ -0,0 +1,49 @@
MAKEFILE=../../proto/libg/Makefile
MACHDEF="MACH=pdp" "SUF=o" "ASAR=ar"
STDIO="PREF=cc" "SUB=.1s" "SRC=lang/cem/libcc/stdio"
GEN="PREF=cc" "SUB=.2g" "SRC=lang/cem/libcc/gen"
MON="PREF=mon" "SRC=lang/cem/libcc/mon"
LIBM="PREF=m" "SRC=lang/cem/libcc/libm"
LIBLN="PREF=ln" "SRC=lang/cem/libcc/libln"
install: cpstdio cpgen cplibm cplibln
cpstdio:
make -f $(MAKEFILE) $(STDIO) $(MACHDEF) tailcp
cpgen:
make -f $(MAKEFILE) $(GEN) $(MACHDEF) cp
cpmon:
make -f $(MAKEFILE) $(MON) $(MACHDEF) tailcp
cplibm:
make -f $(MAKEFILE) $(LIBM) $(MACHDEF) tailcp
cplibln:
make -f $(MAKEFILE) $(LIBLN) $(MACHDEF) tailcp
cmp: cmpstdio cmpgen cmplibm cmplibln
cmpstdio:
make -f $(MAKEFILE) $(STDIO) $(MACHDEF) tail
-../../compare tail_cc.1s
cmpgen:
make -f $(MAKEFILE) $(GEN) $(MACHDEF) head
-../../compare head_cc
make -f $(MAKEFILE) $(GEN) $(MACHDEF) tail
-../../compare tail_cc.2g
cmpmon:
make -f $(MAKEFILE) $(MON) $(MACHDEF) tail
-../../compare tail_mon
cmplibm:
make -f $(MAKEFILE) $(LIBM) $(MACHDEF) tail
-../../compare tail_m
cmplibln:
make -f $(MAKEFILE) $(LIBLN) $(MACHDEF) tail
-../../compare tail_ln
clean:
-rm -f *.old *.[ce$(SUF)] tail* head*
opr:
make pr | opr
pr:
@pr Makefile

2
mach/pdp/libcc/compmodule Executable file
View File

@@ -0,0 +1,2 @@
${MACH?} -I../../../h ${MACHFL?} $1 1>&2
echo `basename $1 $2`.o

74
mach/pdp/libem/LIST Normal file
View File

@@ -0,0 +1,74 @@
tail_em.s.a
RT.s
adf.s
adi.s
and.s
cff.s
cfi.s
cif.s
cii.s
ciu.s
cmf.s
cmi.s
cmi4.s
cms.s
cmu.s
cmu4.s
csa.s
csb.s
dup.s
dvf.s
dvi.s
dvi4.s
dvu.s
dvu2.s
dvu4.s
eret.s
exg.s
fef.s
fif.s
gto.s
hlt.s
iaar.s
aar.s
ilar.s
inn.s
isar.s
lar.s
los2.s
mlf.s
mli.s
mli4.s
mlu.s
mlu4.s
mon.s
ngf.s
ngi.s
nop.s
prf.s
printf.s
rck.s
ret.s
rmi.s
rmi4.s
rmu.s
rmu2.s
rmu4.s
rol.s
ror.s
sar.s
sbf.s
sbi.s
set.s
setfl.s
sigtrp.s
sim.s
sli.s
sri.s
sru.s
sto2.s
strhp.s
unknown.s
trp.s
xor.s
save.s

28
mach/pdp/libem/Makefile Normal file
View File

@@ -0,0 +1,28 @@
install: cp
cp: all
../../install head_em
../../install tail_em
rm -f head_em tail_em
cmp: all
-../../compare head_em
-../../compare tail_em
rm -f head_em tail_em
all: head_em tail_em
head_em: head_em.s
pdp -c head_em.s ; mv head_em.o head_em
tail_em:
march . tail_em
clean:
rm -f *.o
opr:
make pr | opr
pr:
@pr `pwd`/Makefile `pwd`/head_em.s
pr -l33 `tail +1 LIST|sort`

32
mach/pdp/libem/RT.s Normal file
View File

@@ -0,0 +1,32 @@
/ $Header$
.globl PRr2,PR2r2,PR4r2,PR6r2
.globl PRr2r4,PR2r2r4,PR4r2r4,PR6r2r4
.globl RT,RTr2,RTr2r4
PR6r2: mov $6,r0;br PRr2
PR4r2: mov $4,r0;br PRr2
PR2r2: mov $2,r0
PRr2: mov r5,r1
mov sp,r5
sub r0,sp
mov r2,-(sp)
mov r1,pc
PR2r2r4:mov $2,r0;br PRr2r4
PR4r2r4:mov $4,r0;br PRr2r4
PR6r2r4:mov $6,r0
PRr2r4: mov r5,r1
mov sp,r5
sub r0,sp
mov r2,-(sp)
mov r4,-(sp)
mov r1,pc
RTr2r4:
mov (sp)+,r4
RTr2:
mov (sp)+,r2
RT:
mov r5,sp
mov (sp)+,r5
rts pc

12
mach/pdp/libem/aar.s Normal file
View File

@@ -0,0 +1,12 @@
/ $Header$
.text
.globl aar~
/r0 : descriptor address
/r1 : element number
/base address is on stack
aar~:
sub (r0),r1
mul 04(r0),r1
add r1,02(sp)
rts pc

14
mach/pdp/libem/adf.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl adf~
.globl setfloat~
/size in r0
adf~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp)+,r0
addf (sp)+,r0
movf r0,-(sp)
setd
jmp (r1)

20
mach/pdp/libem/adi.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl adi~
.globl unknown~
/size in r0
adi~:
mov (sp)+,r1
cmp r0,$04
bgt 1f
cmp r0,$02
bgt 2f
add (sp)+,(sp)
jmp (r1)
2: add (sp)+,02(sp)
add (sp)+,02(sp)
adc (sp)
jmp (r1)
1:
jmp unknown~

14
mach/pdp/libem/and.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl and~
/ size in r0
and~:
mov (sp)+,r3
mov sp,r1
add r0,r1
asr r0
1: com (sp)
bic (sp)+,(r1)+
sob r0,1b
jmp (r3)

29
mach/pdp/libem/blm.s Normal file
View File

@@ -0,0 +1,29 @@
/ $Header$
.globl blm~
.globl save~,retu~
/ Size in r0
blm~:
jsr pc,save~
mov (sp)+,r2
mov (sp)+,r3
mov r0,r1
asr r0
beq 2f
/ Now avoid wrong copy.
/ The pieces may overlap !
cmp r3,r2
beq 2f
blt 3f
1:
mov (r3)+,(r2)+
sob r0,1b
2:
jmp retu~
3:
add r1,r3
add r1,r2
4:
mov -(r3),-(r2)
sob r0,4b
br 2b

15
mach/pdp/libem/cff.s Normal file
View File

@@ -0,0 +1,15 @@
/ $Header$
.text
.globl cff~
.globl setfloat~
cff~:
mov (sp)+,r1
mov (sp)+,r0
cmp (sp)+,r0
beq 1f
jsr pc,setfloat~
movof (sp)+,r0
movf r0,-(sp)
setd
1: jmp (r1)

15
mach/pdp/libem/cfi.s Normal file
View File

@@ -0,0 +1,15 @@
/ $Header$
.text
.globl cfi~
.globl setfloat~,setint~
cfi~:
mov (sp)+,r1
mov (sp)+,r0
jsr pc,setint~
mov (sp)+,r0
jsr pc,setfloat~
movf (sp)+,r0
movfi r0,-(sp)
setd;seti
jmp (r1)

25
mach/pdp/libem/cif.s Normal file
View File

@@ -0,0 +1,25 @@
/ $Header$
.text
.globl cif~,cuf~
.globl setint~,setfloat~
cif~:
mov (sp)+,r1
mov (sp)+,r0
jsr pc,setfloat~
mov (sp)+,r0
1: jsr pc,setint~
movif (sp)+,r0
movf r0,-(sp)
setd;seti
jmp (r1)
cuf~:
mov (sp)+,r1
mov (sp)+,r0
jsr pc,setfloat~
mov (sp)+,r0
cmp r0,$02
bne 1b
clr -(sp)
mov $04,r0
br 1b

22
mach/pdp/libem/cii.s Normal file
View File

@@ -0,0 +1,22 @@
/ $Header$
.text
.globl cii~
/convert int to int
/ 1 byte -> ? : sign extension
cii~:
mov (sp)+,r3
mov (sp)+,r0
sub (sp)+,r0
ble 1f
asr r0
bcc 2f
movb (sp),r1
mov r1,(sp)
2: tst r0
beq 3f
tst (sp)
4: sxt -(sp)
sob r0,4b
1: sub r0,sp / if out of sob loop r0==0
3: jmp (r3)

13
mach/pdp/libem/ciu.s Normal file
View File

@@ -0,0 +1,13 @@
/ $Header$
.text
.globl cuu~
cuu~:
mov (sp)+,r1
mov (sp)+,r0
sub (sp)+,r0
ble 1f
asr r0
2: clr -(sp)
sob r0,2b
1: sub r0,sp / if out of sob loop r0==0
jmp (r1)

20
mach/pdp/libem/cmf.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl cmf~
.globl setfloat~
cmf~:
jsr pc,setfloat~
mov (sp)+,r1
movf (sp)+,r0
movf (sp)+,r1
clr r0
cmpf r0,r1
setd
cfcc
beq 1f
blt 2f
dec r0
jmp (r1)
2: inc r0
1: jmp (r1)

18
mach/pdp/libem/cmi.s Normal file
View File

@@ -0,0 +1,18 @@
/ $Header$
.text
.globl cmi~
.globl cmi4~,unknown~
/ Size in r0
cmi~:
cmp r0,$02
bne 1f
mov (sp)+,r1
mov (sp)+,r0
sub (sp)+,r0
neg r0
jmp (r1)
1: cmp r0,$04
bne 2f
jmp cmi4~
2: jmp unknown~

21
mach/pdp/libem/cmi4.s Normal file
View File

@@ -0,0 +1,21 @@
/ $Header$
.text
.globl cmi4~
cmi4~:
mov (sp)+,r1
clr r0
cmp (sp),4(sp)
bgt 1f
blt 2f
cmp 2(sp),6(sp)
bhi 1f
beq 3f
2:
inc r0
br 3f
1:
dec r0
3:
add $10,sp
jmp (r1)

17
mach/pdp/libem/cms.s Normal file
View File

@@ -0,0 +1,17 @@
/ $Header$
.text
.globl cms~
.globl save~,retu~
cms~:
jsr pc,save~
mov r0,r2
add sp,r2
mov r2,r4
add r0,r4
asr r0
2: cmp (sp)+,(r2)+
bne 1f
sob r0,2b
1: mov r4,sp
jmp retu~

23
mach/pdp/libem/cmu.s Normal file
View File

@@ -0,0 +1,23 @@
/ $Header$
.text
.globl cmu~
.globl unknown~,cmu4~
cmu~:
cmp r0,$02
bne 3f
mov (sp)+,r1
clr r0
cmp (sp)+,(sp)+
beq 2f
bhi 1f
inc r0
br 2f
1:
dec r0
2:
jmp (r1)
3: cmp r0,$04
bne 2f
jmp cmu4~
2: jmp unknown~

20
mach/pdp/libem/cmu4.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl cmu4~
cmu4~:
mov (sp)+,r1
clr r0
cmp (sp),4(sp)
bhi 1f
blo 2f
cmp 2(sp),6(sp)
bhi 1f
beq 3f
2:
inc r0
br 3f
1:
dec r0
3:
add $10,sp
jmp (r1)

4
mach/pdp/libem/compmodule Executable file
View File

@@ -0,0 +1,4 @@
if pdp -c $1 1>&2
then echo `basename $1 $2`.o
else exit 1
fi

22
mach/pdp/libem/csa.s Normal file
View File

@@ -0,0 +1,22 @@
/ $Header$
.text
.globl csa~
.globl fat~
ECASE = 20.
csa~:
sub 02(r0),r1
blt 1f
cmp 04(r0),r1
blo 1f
asl r1
add r1,r0
mov 06(r0),r1
beq 2f
jmp (r1)
1: mov (r0),r0
beq 2f
jmp (r0)
2: mov $ECASE,-(sp)
jmp fat~

23
mach/pdp/libem/csb.s Normal file
View File

@@ -0,0 +1,23 @@
/ $Header$
.text
.globl csb~
.globl fat~
ECASE = 20.
csb~:
mov (r0)+,-(sp)
mov (r0)+,r3
beq 1f
3: cmp (r0)+,r1
beq 2f
tst (r0)+
sob r3,3b
1: mov (sp)+,r1
br 4f
2: tst (sp)+
mov (r0),r1
4: beq 5f
jmp (r1)
5: mov $ECASE,-(sp)
jmp fat~

12
mach/pdp/libem/dup.s Normal file
View File

@@ -0,0 +1,12 @@
/ $Header$
.text
.globl dup~
dup~:
mov (sp)+,r3
mov sp,r1
add r0,r1
asr r0
1: mov -(r1),-(sp)
sob r0,1b
jmp (r3)

14
mach/pdp/libem/dvf.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl dvf~
.globl setfloat~
dvf~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp)+,r0
movf (sp)+,r1
divf r0,r1
movf r1,-(sp)
setd
jmp (r1)

20
mach/pdp/libem/dvi.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl dvi~
.globl unknown~,dvi4~
dvi~:
mov (sp)+,r3
cmp r0,$04
bgt 1f
beq 2f
mov 02(sp),r1
sxt r0
div (sp)+,r0
mov r0,(sp)
br 3f
2: jsr pc,dvi4~
mov r1,-(sp)
mov r0,-(sp)
3: jmp (r3)
1: jmp unknown~

82
mach/pdp/libem/dvi4.s Normal file
View File

@@ -0,0 +1,82 @@
/ $Header$
.text
.globl dvi4~
.globl save~,retu~
dvi4~:
jsr pc,save~
mov 02(sp),r3
sxt r4
bpl 1f
neg r3
1: cmp r4,(sp)
bne hardldiv
mov 06(sp),r2
mov 04(sp),r1
bge 2f
neg r1
neg r2
sbc r1
com r4
2: mov r4,-(sp)
clr r0
div r3,r0
mov r0,-(sp)
mov r1,r0
mov r1,r4
mov r2,r1
div r3,r0
bvc 3f
mov r2,r1
mov r4,r0
sub r3,r0
div r3,r0
tst r1
sxt r1
add r1,r0
3: mov r0,r1
mov (sp)+,r0
br 4f
hardldiv:
clr -(sp)
mov 010(sp),r2
mov 06(sp),r1
bpl 5f
com (sp)
neg r1
neg r2
sbc r1
5: clr r0
mov 02(sp),r3
bge 6f
neg r3
neg 04(sp)
sbc r3
com (sp)
6: mov $16.,r4
9: clc
rol r2
rol r1
rol r0
cmp r3,r0
bhi 7f
bcs 8f
cmp 04(sp),r1
blos 8f
7: sob r4,9b
br 1f
8: sub 04(sp),r1
sbc r0
sub r3,r0
inc r2
sob r4,9b
1:
mov r2,r1
clr r0
4: tst (sp)+
beq 1f
neg r0
neg r1
sbc r0
1: add $010,sp
jmp retu~

18
mach/pdp/libem/dvu.s Normal file
View File

@@ -0,0 +1,18 @@
/ $Header$
.text
.globl dvu~
.globl unknown~,dvu4~,dvu2~
dvu~:
mov (sp)+,r3
cmp r0,$04
bgt 1f
beq 2f
jsr pc,dvu2~
mov r0,-(sp)
br 3f
2: jsr pc,dvu4~
mov r1,-(sp)
mov r0,-(sp)
3: jmp (r3)
1: jmp unknown~

16
mach/pdp/libem/dvu2.s Normal file
View File

@@ -0,0 +1,16 @@
/ $Header$
.text
.globl dvu2~
dvu2~:
clr r0
mov 04(sp),r1
tst 02(sp)
blt 1f
div 02(sp),r0
2: mov (sp)+,r1
add $04,sp
jmp (r1)
1: cmp 02(sp),r1
bhi 2b
inc r0
br 2b

62
mach/pdp/libem/dvu4.s Normal file
View File

@@ -0,0 +1,62 @@
/ $Header$
.text
.globl dvu4~
.globl save~,retu~
dvu4~:
jsr pc,save~
clr r0
tst (sp)
bne harddvu4
tst 02(sp)
blt harddvu4
mov 06(sp),r2
mov 04(sp),r1
mov 02(sp),r3
div r3,r0
mov r0,-(sp)
mov r1,r0
mov r1,r4
mov r2,r1
div r3,r0
bvc 1f
mov r2,r1
mov r4,r0
sub r3,r0
div r3,r0
tst r1
sxt r1
add r1,r0
1: mov r0,r1
mov (sp)+,r0
br 2f
harddvu4:
mov 06(sp),r2
mov 04(sp),r1
mov (sp),r3
mov $17.,r4
br 3f
6: rol r2
rol r1
rol r0
3: cmp r3,r0
bhi 4f
blo 5f
cmp 02(sp),r1
blos 5f
4: clc
sob r4,6b
br 7f
5: sub 02(sp),r1
sbc r0
sub r3,r0
sec
sob r4,6b
7: rol r2
bcc 8f
mov $01,r0
br 9f
8: clr r0
9: mov r2,r1
2: add $010,sp
jmp retu~

9
mach/pdp/libem/eret.s Normal file
View File

@@ -0,0 +1,9 @@
/ $Header$
.globl eret
eret:
mov r5,sp
mov (sp)+,r5
mov (sp)+,r4
mov (sp)+,r2
rts pc

19
mach/pdp/libem/exg.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl exg~
exg~: jsr pc,save~
mov sp,r4
sub r0,sp
mov sp,r3
mov r0,r1
1:
mov (r4)+,(r3)+
sob r0,1b
asr r1
mov sp,r4
1:
mov (r4)+,(r3)+
sob r1,1b
mov r4,sp
jmp retu~

14
mach/pdp/libem/fef.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl fef~
.globl setfloat~
fef~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp),r0
movei r0,-(sp)
movie $0,r0
movf r0,02(sp)
setd
jmp (r1)

14
mach/pdp/libem/fif.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl fif~
.globl setfloat~
fif~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp)+,r0
modf (sp)+,r0
movf r0,-(sp)
movf r1,-(sp)
setd
jmp (r1)

19
mach/pdp/libem/gto.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl gto~
gto~:
mov (sp)+,r4
mov 4(r4),r5
mov 2(r4),sp
mov (r4),pc
/
/ mov (sp)+,r3
/1: cmp 4(r3),r5
/ jeq 2f
/ mov 2(r5),r4
/ mov 4(r5),r2
/ mov (r5),r5
/ br 1b
/2: mov 2(r3),sp
/ jmp *(r3)

76
mach/pdp/libem/head_em.s Normal file
View File

@@ -0,0 +1,76 @@
/ $Header$
.globl LINO_AD,FILN_AD
.globl ERANGE,ESET,EHEAP,EILLINS,ECASE
.globl hol0,trppc~,trpim~,reghp~
rti = 2
stst = 170300 ^ tst
.float = 1 / this should be parameterized somehow
.hardfp = 1 / only relevant if .float on
LINO_AD = 0.
FILN_AD = 4.
ERANGE = 1.
ESET = 2.
EFOVFL = 4.
EFUNFL = 5.
EFDIVZ = 7.
EFUND = 9.
ECONV = 10.
EHEAP = 17.
EILLINS = 18.
ECASE = 20.
.if .float
/ .globl fltused; fltused:
.if 1 - .hardfp
/ sys 48.;4.;fptrap / if not commented it will appear as undefined
.endif
sys 48.;8.;sig8
ldfps $7600
.endif
mov 2(sp),r0
clr -2(r0)
mov sp,r0
sub $4,sp
mov 4(sp),(sp)
tst (r0)+
mov r0,2(sp)
1:
tst (r0)+
bne 1b
cmp r0,*2(sp)
blo 1f
tst -(r0)
1:
mov r0,4(sp)
jsr pc,_m_a_i_n
/ next two lines for as long as tail needs printf
/ mov r0,-(sp)
/ jsr pc,*$_exit
sys 1.
.data
hol0: 0;0 / line no
0;0 / file
trppc~: 0
trpim~: 0
reghp~: _end
.text
sig8:
.if .float
mov r0,-(sp)
stst r0
mov 1f(r0),-(sp)
jsr pc,trp~
sys 48.;8.;sig8
mov (sp)+,r0
rti
.data
1: EILLINS; EILLINS; EFDIVZ; ECONV; EFOVFL; EFUNFL; EFUND; EILLINS
.text
.endif

11
mach/pdp/libem/hlt.s Normal file
View File

@@ -0,0 +1,11 @@
/ $Header$
.text
.globl hlt~
exit = 1
hlt~:
mov (sp)+,r0
bne 1f
sys exit
1: 4

19
mach/pdp/libem/iaar.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl iaar~
.globl aar~,trp~
EILLINS = 18.
iaar~:
mov (sp)+,r0
cmp (sp)+,$02
bne 1f
mov 02(sp),r1
mov r0,02(sp)
mov (sp)+,r0
jmp aar~
1: mov $EILLINS,-(sp)
jsr pc,trp~
add $06,sp
jmp (r0)

19
mach/pdp/libem/ilar.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl ilar~
.globl lar~,trp~
EILLINS = 18.
ilar~:
mov (sp)+,r0
cmp (sp)+,$02
bne 1f
mov 02(sp),r1
mov r0,02(sp)
mov (sp)+,r0
jmp lar~
1: mov $EILLINS,-(sp)
jsr pc,trp~
add $06,sp
jmp (r0)

22
mach/pdp/libem/inn.s Normal file
View File

@@ -0,0 +1,22 @@
/ $Header$
.text
.globl inn~
inn~:
mov r0,-(sp)
clr r0
div $010,r0
cmp r0,(sp)
bcc 1f
add sp,r0
bitb bits(r1),4(r0)
beq 1f
mov $01,r0
br 2f
1: clr r0
2: mov 02(sp),r1
add (sp)+,sp
tst (sp)+
jmp (r1)
.data
bits: .byte 1,2,4,10,20,40,100,200

19
mach/pdp/libem/isar.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl isar~
.globl sar~,trp~
EILLINS = 18.
isar~:
mov (sp)+,r0
cmp (sp)+,$02
bne 1f
mov 02(sp),r1
mov r0,02(sp)
mov (sp)+,r0
jmp sar~
1: mov $EILLINS,-(sp)
jsr pc,trp~
add $06,sp
jmp (r0)

20
mach/pdp/libem/lar.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl lar~
lar~:
mov (sp)+,r3
sub (r0),r1
mov 04(r0),r0
mul r0,r1
add (sp)+,r1
add r0,r1
asr r0
beq 1f
2: mov -(r1),-(sp)
sob r0,2b
jmp (r3)
1: clr r0
bisb -(r1),r0
mov r0,-(sp)
jmp (r3)

16
mach/pdp/libem/los2.s Normal file
View File

@@ -0,0 +1,16 @@
/ $Header$
.text
.globl los2~
los2~:
mov (sp)+,r3
cmp r0,$01
bne 1f
clr -(sp)
bisb (r1),(sp)
jmp (r3)
1: add r0,r1
asr r0
2: mov -(r1),-(sp)
sob r0,2b
jmp (r3)

13
mach/pdp/libem/mlf.s Normal file
View File

@@ -0,0 +1,13 @@
/ $Header$
.text
.globl mlf~
.globl setfloat~
mlf~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp)+,r0
mulf (sp)+,r0
movf r0,-(sp)
setd
jmp (r1)

20
mach/pdp/libem/mli.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl mli~
.globl unknown~,mli4~
mli~:
cmp r0,$04
bgt 1f
beq 2f
mov (sp)+,r0
mov (sp)+,r1
mul (sp)+,r1
mov r1,-(sp)
jmp (r0)
2: mov (sp)+,r3
jsr pc,mli4~
mov r1,-(sp)
mov r0,-(sp)
jmp (r3)
1: jmp unknown~

20
mach/pdp/libem/mli4.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl mli4~
.globl save~,retu~
mli4~:
jsr pc,save~
mov 02(sp),r2
sxt r1
sub (sp),r1
mov 06(sp),r0
sxt r3
sub 04(sp),r3
mul r0,r1
mul r2,r3
add r1,r3
mul r2,r0
sub r3,r0
add $010,sp
jmp retu~

20
mach/pdp/libem/mlu.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl mlu~
.globl unknown~,mlu4~
mlu~:
cmp r0,$04
bgt 1f
beq 2f
mov (sp)+,r0
mov (sp)+,r1
mul (sp)+,r1
mov r1,-(sp)
jmp (r0)
2: mov (sp)+,r3
jsr pc,mlu4~
mov r1,-(sp)
mov r0,-(sp)
jmp (r3)
1: jmp unknown~

24
mach/pdp/libem/mlu4.s Normal file
View File

@@ -0,0 +1,24 @@
/ $Header$
.text
.globl mlu4~
.globl save~,retu~
mlu4~:
jsr pc,save~
clr r0
mov 02(sp),r1
mov 06(sp),r3
mul r3,r0
tst r3
bge 1f
ashc $15.,r0
1: mov 02(sp),r3
clr r2
mul 04(sp),r2
add r3,r0
mov 06(sp),r3
clr r2
mul (sp),r2
add r3,r0
add $010,sp
jmp retu~

146
mach/pdp/libem/mon.s Normal file
View File

@@ -0,0 +1,146 @@
/ $Header$
.text
.globl mon~
.globl sigtrp~,save~,retu~,save1~
indir = 0
fork = 2
getpid = 20.
sigtrp = 48.
EBADMON = 25.
HBMASK = 0177400
REG01M = 030
REG1M = 020
ERRMASK = 040
/ Associated with every monitor call is a descriptor.
/ The low order three bits describe how values are returned,
/ the next two bits specify if arguments are expected in
/ r0 and/or r1, the next bit is not used, and the next
/ three bits specify the number of arguments disregarding
/ arguments in registers.
mon~:
cmp 02(sp),$sigtrp
bne 1f
jmp sigtrp~
1: jsr pc,save~
mov (sp)+,r4
mov r4,r2
asl r4
mov args(r4),r3
mov r3,r4
bit $ERRMASK,r4
bne err
cmp r2,$fork
bne 2f
jbr fork~
2: bic $HBMASK,r2
bis $sys,r2
mov r2,9f
bit $REG01M,r3
beq 1f
mov (sp)+,r0
bit $REG1M,r3
beq 1f
mov (sp)+,r1
1: ash $-6,r3
beq 2f
mov $[9f+2],r2
1: mov (sp)+,(r2)+
sob r3,1b
2: sys indir ; 9f
bcs 2f
clr r3
4: asr r4
bcc 1f
mov r0,-(sp)
1: asr r4
bcc 1f
mov r1,-(sp)
1: asr r4
bcc 1f
clr -(sp)
1: jmp retu~
2: mov r0,-(sp)
mov r0,-(sp)
jmp retu~
fork~:
sys fork
br 1f
bcs 2b
clr r1
br 4b
1: mov $1,r1
br 4b
err:
mov $EBADMON,-(sp)
jsr pc,trp~
tst (sp)+
jmp retu~
.data
.even
9: .=.+12.
args: ERRMASK / 0 : error
010 / 1 : exit(st); ---
07 / 2 : fork(); e10
0215 / 3 : read(addr,nb,fild); e-0
0215 / 4 : write(addr,nb,fild); e-0
0205 / 5 : open(str,flag); e-0
014 / 6 : close(fild); e--
07 / 7 : wait(); e10
0205 / 8 : creat(str,mode); e-0
0204 / 9 : link(str1,str2); e--
0104 /10 : unlink(str); e--
ERRMASK /11 : error
0104 /12 : chdir(str); e--
03 /13 : time(); -10
0304 /14 : mknod(str,mode,addr); e--
0204 /15 : chmod(str,mode); e--
0304 /16 : chown(str,owner,grp); e--
ERRMASK /17 : error
0204 /18 : stat(str,buf); e--
0217 /19 : lseek(high,low,fild); e10
01 /20 : getpid(); --0
0304 /21 : mount(str1,str2,fl); e--
0104 /22 : umount(str); e--
014 /23 : setuid(uid); e--
03 /24 : getuid(); -01
024 /25 : stime(high,low); e--
0315 /26 : ptrace(pid,addr,req,d); e-0
011 /27 : alarm(sec); --0
0114 /28 : fstat(buf,fild); e--
0 /29 : pause(); ---
0204 /30 : utime(str,timep); e--
ERRMASK /31 : error
ERRMASK /32 : error
0204 /33 : access(str,mode): e--
010 /34 : nice(incr); ---
0100 /35 : ftime(bufp); ---
0 /36 : sync(); ---
0114 /37 : kill(sig,pid); e--
ERRMASK /38 : error
ERRMASK /39 : error
ERRMASK /40 : error
025 /41 : dup(fild,newfild); e-0
07 /42 : pipe(); e10
0100 /43 : times(buf); ---
0400 /44 : profil(buff,siz,off,sc); ---
ERRMASK /45 : error
014 /46 : setgid(gid); e--
03 /47 : getgid(); -01
0 /48 : sigtrp(trap,sig); e-0; SPECIAL TREATMENT
ERRMASK /49 : error
ERRMASK /50 : error
0104 /51 : acct(file); e--
0304 /52 : phys(seg,siz,phaddr); e--
0104 /53 : lock(flag); e--
0304 /54 : ioctl(fild,req,argp); e--
ERRMASK /55 : error
0204 /56 : mpxcall(cmd,vec); e--
ERRMASK /57 : error
ERRMASK /58 : error
0304 /59 : exece(name,argv,envp); e--
0104 /60 : umask(complmode); e--
0104 /61 : chroot(str); e--

10
mach/pdp/libem/ngf.s Normal file
View File

@@ -0,0 +1,10 @@
/ $Header$
.text
.globl ngf~
.globl setfloat~
ngf~:
jsr pc,setfloat~
negf 2(sp)
setd
rts pc

18
mach/pdp/libem/ngi.s Normal file
View File

@@ -0,0 +1,18 @@
/ $Header$
.text
.globl ngi~
.globl unknown~
ngi~:
mov (sp)+,r1
cmp r0,$02
bgt 1f
neg (sp)
jmp (r1)
1: cmp r0,$04
bgt 2f
neg (sp)
neg 02(sp)
sbc (sp)
jmp (r1)
2: jmp unknown~

13
mach/pdp/libem/nop.s Normal file
View File

@@ -0,0 +1,13 @@
/ $Header$
.text
.globl nop~
.globl hol0,prf~
nop~:
mov hol0,-(sp)
mov $fmt,-(sp)
jsr pc,prf~
add $04,sp
rts pc
.data
fmt: <test %d\n\0>

34
mach/pdp/libem/prf.s Normal file
View File

@@ -0,0 +1,34 @@
/ $Header$
.text
.globl prf~
.globl save~,retu~,hol0,_printf
prf~:
jsr pc,save~
mov hol0,-(sp)
mov hol0+4,r0
beq 1f
mov r0,r2
mov $40.,r1
3: movb (r2)+,r3
beq 2f
cmpb r3,$0177
bge 1f
cmpb r3,$040
blt 1f
sob r1,3b
clrb (r2)
2: mov sp,r1
mov r1,-(sp)
mov r0,-(sp)
mov $fmt,-(sp)
jsr pc,_printf
add $010,sp
jsr pc,_printf
jmp retu~
1: mov $name,r0
br 2b
.data
fmt: <"%s", sp = %d, line %d: \0>
name: <_unknown file_\0>

63
mach/pdp/libem/printf.s Normal file
View File

@@ -0,0 +1,63 @@
/ $Header$
.text
.globl _printf
write = 4
_printf:
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
mov sp,r3
mov $buff,r4
add $010,r3
mov (r3)+,r2
prloop:
movb (r2)+,r0
beq ready
cmpb r0,$045
bne 1f
movb (r2)+,r0
cmpb r0,$0144
beq 2f
cmpb r0,$0163
beq 3f
1: movb r0,(r4)+
br prloop
2: mov (r3)+,r1
bge 4f
movb $055,(r4)+
neg r1
4: jsr pc,printn
br prloop
printn:
clr r0
div $010,r0
beq 5f
mov r1,-(sp)
mov r0,r1
jsr pc,printn
mov (sp)+,r1
5: add $060,r1
movb r1,(r4)+
rts pc
3: mov (r3)+,r1
7: movb (r1)+,r0
bne 6f
br prloop
6: movb r0,(r4)+
br 7b
ready:
movb r0,(r4)+
sub $buff,r4
mov $01,r0
mov $buff,9f
mov r4,9f+2
sys write
9: 0; 0
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
rts pc
.data
buff: .=.+256.

16
mach/pdp/libem/rck.s Normal file
View File

@@ -0,0 +1,16 @@
/ $Header$
.text
.globl rck~
.globl trp~
ERANGE = 1
rck~:
mov (sp)+,r1
cmp (sp),(r0)
blt 1f
cmp (sp),02(r0)
ble 2f
1: mov $ERANGE,-(sp)
jsr pc,trp~
2: jmp (r1)

31
mach/pdp/libem/ret.s Normal file
View File

@@ -0,0 +1,31 @@
/ $Header$
.text
.globl ret~,lfr~,retar
.globl unknown~
/ Size in r0
ret~:
mov r0,r1
beq 1f
asr r1
add $retar,r0
cmp r0,$retend
bhi 9f
3: mov (sp)+,-(r0)
sob r1,3b
1: mov r5,sp
mov (sp)+,r5
rts pc
9: jmp unknown~
lfr~:
mov (sp)+,r3
asr r0
beq 4f
mov $retar,r1
5: mov (r1)+,-(sp)
sob r0,5b
4: jmp (r3)
.data
retar: .=.+16.
retend:

20
mach/pdp/libem/rmi.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl rmi~
.globl unknown~,rmi4~
rmi~:
mov (sp)+,r3
cmp r0,$04
bgt 1f
beq 2f
mov 02(sp),r1
sxt r0
div (sp)+,r0
mov r1,(sp)
br 3f
2: jsr pc,rmi4~
mov r1,-(sp)
mov r0,-(sp)
3: jmp (r3)
1: jmp unknown~

76
mach/pdp/libem/rmi4.s Normal file
View File

@@ -0,0 +1,76 @@
/ $Header$
.text
.globl rmi4~
.globl save~,retu~
rmi4~:
jsr pc,save~
mov 02(sp),r3
sxt r4
bpl 1f
neg r3
1: cmp r4,(sp)
bne hardrmi4
mov 06(sp),r2
mov 04(sp),r1
mov r1,r4
bge 2f
neg r1
neg r2
sbc r1
2: mov r4,-(sp)
clr r0
div r3,r0
mov r1,r0
mov r1,r4
mov r2,r1
div r3,r0
bvc 3f
mov r2,r1
mov r4,r0
sub r3,r0
div r3,r0
tst r1
beq 3f
add r3,r1
3: tst (sp)+
bpl 4f
neg r1
4: sxt r0
br 9f
hardrmi4:
mov 06(sp),r2
mov 04(sp),r1
bpl 5f
neg r1
neg r2
sbc r1
5: clr r0
mov (sp),r3
bge 6f
neg r3
neg 02(sp)
sbc r3
6: mov $16.,r4
1: clc
rol r2
rol r1
rol r0
cmp r3,r0
bhi 7f
bcs 8f
cmp 02(sp),r1
blos 8f
7: sob r4,1b
br 2f
8: sub 02(sp),r1
sbc r0
sub r3,r0
sob r4,1b
2: tst 04(sp)
bge 9f
neg r0
neg r1
sbc r0
9: add $010,sp
jmp retu~

20
mach/pdp/libem/rmu.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl rmu~
.globl rmu2~,rmu4~,unknown~
rmu~:
mov (sp)+,r3
cmp r0,$04
bgt 1f
beq 2f
cmp r0,$02
bne 1f
jsr pc,rmu2~
mov r1,-(sp)
jmp (r3)
2: jsr pc,rmu4~
mov r1,-(sp)
mov r0,-(sp)
jmp (r3)
1: jmp unknown~

17
mach/pdp/libem/rmu2.s Normal file
View File

@@ -0,0 +1,17 @@
/ $Header$
.text
.globl rmu2~
rmu2~:
mov 04(sp),r1
tst 02(sp)
blt 1f
clr r0
div 02(sp),r0
2: mov (sp)+,r0
add $04,sp
jmp (r0)
1: cmp 02(sp),r1
bhi 2b
sub 02(sp),r1
br 2b

53
mach/pdp/libem/rmu4.s Normal file
View File

@@ -0,0 +1,53 @@
/ $Header$
.text
.globl rmu4~
.globl save~,retu~
rmu4~:
jsr pc,save~
clr r0
tst (sp)
bne hardrmu4
tst 02(sp)
blt hardrmu4
mov 06(sp),r2
mov 04(sp),r1
mov 02(sp),r3
div r3,r0
mov r1,r0
mov r1,r4
mov r2,r1
div r3,r0
bvc 1f
mov r2,r1
mov r4,r0
sub r3,r0
div r3,r0
tst r1
beq 1f
add r3,r1
1: clr r0
br 2f
hardrmu4:
mov 06(sp),r2
mov 04(sp),r1
mov (sp),r3
mov $17.,r4
br 3f
6: clc
rol r2
rol r1
rol r0
3: cmp r3,r0
bhi 4f
bcs 5f
cmp 02(sp),r1
blos 5f
4: sob r4,6b
br 2f
5: sub 02(sp),r1
sbc r0
sub r3,r0
sob r4,6b
2: add $010,sp
jmp retu~

20
mach/pdp/libem/rol.s Normal file
View File

@@ -0,0 +1,20 @@
/ $Header$
.text
.globl rol~
.globl save~,retu~
rol~:
jsr pc,save~
mov (sp)+,r3
3: add r0,sp
mov r0,r1
asr r1
clc
1: rol -(sp)
sob r1,1b
bcc 2f
mov sp,r1
add r0,r1
bis $01,-(r1)
2: sob r3,3b
jmp retu~

19
mach/pdp/libem/ror.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl ror~
.globl save~,retu~
ror~:
asr r0
jsr pc,save~
mov (sp)+,r3
3: mov sp,r1
mov r0,-(sp)
clc
1: ror (r1)+
sob r0,1b
bcc 2f
bis $0100000,02(sp)
2: mov (sp)+,r0
sob r3,3b
jmp retu~

17
mach/pdp/libem/sar.s Normal file
View File

@@ -0,0 +1,17 @@
/ $Header$
.text
.globl sar~
sar~:
mov (sp)+,r3
sub (r0),r1
mov 04(r0),r0
mul r0,r1
add (sp)+,r1
asr r0
beq 1f
2: mov (sp)+,(r1)+
sob r0,2b
jmp (r3)
1: movb (sp)+,(r1)
jmp (r3)

25
mach/pdp/libem/save.s Normal file
View File

@@ -0,0 +1,25 @@
/ $Header$
.text
.globl save~,retu~,savearea
save~:
mov r5,savearea
mov $[savearea+2],r5
mov r4,(r5)+
mov r3,(r5)+
mov r2,(r5)+
mov (sp)+,r2
mov (sp)+,(r5)+
jmp (r2)
retu~:
mov -(r5),-(sp)
mov -(r5),r2
mov -(r5),r3
mov -(r5),r4
mov -(r5),r5
rts pc
.data
.even
savearea:
.=.+12.

14
mach/pdp/libem/sbf.s Normal file
View File

@@ -0,0 +1,14 @@
/ $Header$
.text
.globl sbf~
.globl setfloat~
sbf~:
mov (sp)+,r1
jsr pc,setfloat~
movf (sp)+,r0
subf (sp)+,r0
negf r0
movf r0,-(sp)
setd
jmp (r1)

19
mach/pdp/libem/sbi.s Normal file
View File

@@ -0,0 +1,19 @@
/ $Header$
.text
.globl sbi~
.globl unknown~
sbi~:
mov (sp)+,r1
cmp r0,$04
bgt 1f
cmp r0,$02
bgt 2f
sub (sp)+,(sp)
jmp (r1)
2: sub (sp)+,02(sp)
sub (sp)+,02(sp)
sbc (sp)
jmp (r1)
1:
jmp unknown~

25
mach/pdp/libem/set.s Normal file
View File

@@ -0,0 +1,25 @@
/ $Header$
.text
.globl set~
.globl save~,retu~,trp~
ESET = 2
set~:
jsr pc,save~
mov r0,r2
asr r0
1: clr -(sp)
sob r0,1b
div $8.,r0
cmp r0,r2
blo 2f
mov $ESET,-(sp)
jsr pc,trp~
jmp retu~
2: add sp,r0
bisb bits(r1),(r0)
jmp retu~
.data
bits: .byte 1,2,4,10,20,40,100,200

22
mach/pdp/libem/setfl.s Normal file
View File

@@ -0,0 +1,22 @@
/ $Header$
.text
.globl setfloat~,setint~
.globl unknown~
setfloat~:
cmp r0,$8.
bne 1f
rts pc
1: cmp r0,$04
bne 3f
setf
2: rts pc
3: jmp unknown~
setint~:
cmp r0,$04
bne 4f
setl
rts pc
4: cmp r0,$02
bne 3b
5: rts pc

93
mach/pdp/libem/sigtrp.s Normal file
View File

@@ -0,0 +1,93 @@
/ $Header$
.text
.globl sigtrp~
.globl trp~,save~,retu~
indir = 0
signal = 48.
rti = 2
sig1: mov sig.trp+0.,-(sp)
br 1f
sig2: mov sig.trp+2.,-(sp)
br 1f
sig3: mov sig.trp+4.,-(sp)
br 1f
sig4: mov sig.trp+6.,-(sp)
br 1f
sig5: mov sig.trp+8.,-(sp)
br 1f
sig6: mov sig.trp+10.,-(sp)
br 1f
sig7: mov sig.trp+12.,-(sp)
br 1f
sig10: mov sig.trp+18.,-(sp)
br 1f
sig11: mov sig.trp+20.,-(sp)
br 1f
sig12: mov sig.trp+22.,-(sp)
br 1f
sig13: mov sig.trp+24.,-(sp)
br 1f
sig14: mov sig.trp+026.,-(sp)
br 1f
sig15: mov sig.trp+028.,-(sp)
br 1f
sig16: mov sig.trp+030.,-(sp)
br 1f
1:
jsr pc,trp~
rti
sigtrp~:
jsr pc,save~
tst (sp)+
mov (sp)+,r1
mov (sp)+,r0
ble sig.bad
cmp r0,$16.
bhi sig.bad
mov r0,call+02
asl r0
mov sig.trp-2(r0),r3
cmp r1,$256.
bhis 1f
mov sig.adr-2(r0),r2
bne 2f
sig.bad:
mov $-1,r0
sigbad:
mov r0,-(sp)
mov r0,-(sp)
jmp retu~
1: cmp r1,$-3
blo sig.bad
mov r1,r2
inc r2
inc r2
2: mov r1,sig.trp-2(r0)
mov r2,call+04
sys indir ; call
bcs sigbad
asr r0
bcc 1f
mov $-3,-(sp)
clr -(sp)
jmp retu~
1: mov r3,-(sp)
clr -(sp)
jmp retu~
.data
call: sys signal; 0; 0
sig.trp:
-2; -2; -2; -2
-2; -2; -2; -2
-2; -2; -2; -2
-2; -2; -2; -2
sig.adr:
sig1; sig2; sig3; sig4
sig5; sig6; sig7; 0
0; sig10; sig11; sig12
sig13; sig14; sig15; sig16

29
mach/pdp/libem/sim.s Normal file
View File

@@ -0,0 +1,29 @@
/ $Header$
.text
.globl sim~
.globl trpim~
.float = 1
sim~:
mov (sp)+,r3
mov (sp)+,r0
mov r0,trpim~
.if .float
stfps r1
bis $07400,r1
bit $020,r0
beq 0f
bic $01000,r1
0: bit $040,r0
beq 0f
bic $02000,r1
0: bit $01000,r0
beq 0f
bic $04000,r1
0: bit $02000,r0
beq 0f
bic $0400,r1
0: ldfps r1
.endif
jmp (r3)

23
mach/pdp/libem/sli.s Normal file
View File

@@ -0,0 +1,23 @@
/ $Header$
.text
.globl sli~
.globl unknown~
sli~:
mov (sp)+,r3
cmp r0,$02
bgt 1f
mov (sp)+,r1
mov (sp)+,r0
ash r1,r0
mov r0,-(sp)
jmp (r3)
1: cmp r0,$04
bgt 2f
mov 02(sp),r0
mov 04(sp),r1
ashc (sp)+,r0
mov r0,(sp)
mov r1,02(sp)
jmp (r3)
2: jmp unknown~

26
mach/pdp/libem/sri.s Normal file
View File

@@ -0,0 +1,26 @@
/ $Header$
.text
.globl sri~
.globl unknown~
/ Size in r0
sri~:
mov (sp)+,r3~
cmp r0,$02
bgt 1f
mov (sp)+,r1
mov (sp)+,r0
neg r1
ash r1,r0
mov r0,-(sp)
jmp (r3)
1: cmp r0,$04
bgt 2f
mov 02(sp),r0
mov 04(sp),r1
neg (sp)
ashc (sp)+,r0
mov r0,(sp)
mov r1,02(sp)
jmp (r3)
2: jmp unknown~

29
mach/pdp/libem/sru.s Normal file
View File

@@ -0,0 +1,29 @@
/ $Header$
.text
.globl sru~
.globl unknown~
sru~:
neg 2(sp)
mov (sp)+,r3
cmp r0,$02
bgt 1f
mov 2(sp),r1
clr r0
ashc (sp)+,r0
mov r1,(sp)
jmp (r3)
1: cmp r0,$04
bgt 3f
mov 02(sp),r0
mov 04(sp),r1
tst (sp)
beq 4f
ashc $-1,r0
bic $0100000,r0
inc (sp)
4: ashc (sp)+,r0
mov r0,(sp)
mov r1,02(sp)
jmp (r3)
3: jmp unknown~

15
mach/pdp/libem/sto2.s Normal file
View File

@@ -0,0 +1,15 @@
/ $Header$
.text
.globl sto2~
sto2~:
mov (sp)+,r3
cmp r0,$01
bne 1f
movb (sp),(r1)
tst (sp)+
jmp (r3)
1: asr r0
2: mov (sp)+,(r1)+
sob r0,2b
jmp (r3)

25
mach/pdp/libem/strhp.s Normal file
View File

@@ -0,0 +1,25 @@
/ $Header$
.text
.globl strhp~
.globl fat~,reghp~,_end
indir = 0
break = 17.
EHEAP = 17.
strhp~:
mov (sp)+,r0
mov (sp)+,r1
mov r1,reghp~
cmp r1,2f+2
blos 1f
add $01777,r1
bic $01777,r1
mov r1,2f+2
sys indir ; 2f
bcs 3f
1: jmp (r0)
3: mov $EHEAP,-(sp)
jmp fat~
.data
2: sys break; _end

93
mach/pdp/libem/trp.s Normal file
View File

@@ -0,0 +1,93 @@
/ $Header$
.text
.globl trp~,fat~
.globl trppc~,trpim~,savearea,retar
write=4.
fat~:
jsr pc,trp~
4
trp~:
mov r0,-(sp)
mov 04(sp),r0
mov 02(sp),04(sp)
mov (sp),02(sp)
mov r1,(sp)
cmp r0,$16.
jhis 0f
mov $01,r1
ashc r0,r1
bit r1,trpim~
bne 8f
0: mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
movf r0,-(sp)
movf r1,-(sp)
movf r2,-(sp)
movf r3,-(sp)
stfps -(sp)
mov $savearea,r2
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov $retar,r2
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov (r2)+,-(sp)
mov r0,-(sp)
mov trppc~,r0
beq 9f
clr trppc~
jsr pc,(r0)
tst (sp)+
mov $retar+16.,r2
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov $savearea+12.,r2
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
mov (sp)+,-(r2)
ldfps (sp)+
movf (sp)+,r3
movf (sp)+,r2
movf (sp)+,r1
movf (sp)+,r0
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
8: mov (sp)+,r1
mov (sp)+,r0
rts pc
9: mov (sp)+,r0
mov $buf+11,r1
mov $4,r2
1: mov r0,r3
bic $177770,r3
bisb r3,-(r1)
ash $-3,r0
sob r2,1b
mov $2,r0
sys write;buf;11.
4
.data
buf: <err 00000\n>

10
mach/pdp/libem/unknown.s Normal file
View File

@@ -0,0 +1,10 @@
/ $Header$
.text
.globl unknown~
.globl fat~
EILLSIZ = 19.
unknown~:
mov $EILLSIZ,-(sp)
jmp fat~

Some files were not shown because too many files have changed in this diff Show More