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:
26
mach/pdp/Action
Normal file
26
mach/pdp/Action
Normal 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
185
mach/pdp/cg/Makefile
Normal 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
243
mach/pdp/cg/mach.c
Normal 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
46
mach/pdp/cg/mach.h
Normal 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
135
mach/pdp/cg/peep.c
Normal 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
2849
mach/pdp/cg/table
Normal file
File diff suppressed because it is too large
Load Diff
48
mach/pdp/int/Makefile
Normal file
48
mach/pdp/int/Makefile
Normal 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
19
mach/pdp/int/README
Normal 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
1
mach/pdp/int/c+
Normal file
@@ -0,0 +1 @@
|
||||
.count = 1
|
||||
1
mach/pdp/int/c-
Normal file
1
mach/pdp/int/c-
Normal file
@@ -0,0 +1 @@
|
||||
.count = 0
|
||||
132
mach/pdp/int/em.c
Normal file
132
mach/pdp/int/em.c
Normal 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
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
634
mach/pdp/int/eminform.s
Normal 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
1
mach/pdp/int/f+
Normal file
@@ -0,0 +1 @@
|
||||
.flow = 1
|
||||
1
mach/pdp/int/f-
Normal file
1
mach/pdp/int/f-
Normal file
@@ -0,0 +1 @@
|
||||
.flow = 0
|
||||
1
mach/pdp/int/p+
Normal file
1
mach/pdp/int/p+
Normal file
@@ -0,0 +1 @@
|
||||
.prof = 1
|
||||
1
mach/pdp/int/p-
Normal file
1
mach/pdp/int/p-
Normal file
@@ -0,0 +1 @@
|
||||
.prof = 0
|
||||
1
mach/pdp/int/t+
Normal file
1
mach/pdp/int/t+
Normal file
@@ -0,0 +1 @@
|
||||
.test = 1
|
||||
1
mach/pdp/int/t-
Normal file
1
mach/pdp/int/t-
Normal file
@@ -0,0 +1 @@
|
||||
.test = 0
|
||||
21
mach/pdp/libbc/Makefile
Normal file
21
mach/pdp/libbc/Makefile
Normal 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
2
mach/pdp/libbc/compmodule
Executable file
@@ -0,0 +1,2 @@
|
||||
${MACH?} -I../../../h ${MACHFL?} $1 1>&2
|
||||
echo `basename $1 $2`.o
|
||||
49
mach/pdp/libcc/Makefile
Normal file
49
mach/pdp/libcc/Makefile
Normal 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
2
mach/pdp/libcc/compmodule
Executable file
@@ -0,0 +1,2 @@
|
||||
${MACH?} -I../../../h ${MACHFL?} $1 1>&2
|
||||
echo `basename $1 $2`.o
|
||||
74
mach/pdp/libem/LIST
Normal file
74
mach/pdp/libem/LIST
Normal 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
28
mach/pdp/libem/Makefile
Normal 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
32
mach/pdp/libem/RT.s
Normal 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
12
mach/pdp/libem/aar.s
Normal 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
14
mach/pdp/libem/adf.s
Normal 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
20
mach/pdp/libem/adi.s
Normal 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
14
mach/pdp/libem/and.s
Normal 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
29
mach/pdp/libem/blm.s
Normal 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
15
mach/pdp/libem/cff.s
Normal 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
15
mach/pdp/libem/cfi.s
Normal 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
25
mach/pdp/libem/cif.s
Normal 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
22
mach/pdp/libem/cii.s
Normal 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
13
mach/pdp/libem/ciu.s
Normal 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
20
mach/pdp/libem/cmf.s
Normal 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
18
mach/pdp/libem/cmi.s
Normal 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
21
mach/pdp/libem/cmi4.s
Normal 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
17
mach/pdp/libem/cms.s
Normal 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
23
mach/pdp/libem/cmu.s
Normal 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
20
mach/pdp/libem/cmu4.s
Normal 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
4
mach/pdp/libem/compmodule
Executable 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
22
mach/pdp/libem/csa.s
Normal 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
23
mach/pdp/libem/csb.s
Normal 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
12
mach/pdp/libem/dup.s
Normal 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
14
mach/pdp/libem/dvf.s
Normal 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
20
mach/pdp/libem/dvi.s
Normal 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
82
mach/pdp/libem/dvi4.s
Normal 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
18
mach/pdp/libem/dvu.s
Normal 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
16
mach/pdp/libem/dvu2.s
Normal 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
62
mach/pdp/libem/dvu4.s
Normal 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
9
mach/pdp/libem/eret.s
Normal 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
19
mach/pdp/libem/exg.s
Normal 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
14
mach/pdp/libem/fef.s
Normal 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
14
mach/pdp/libem/fif.s
Normal 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
19
mach/pdp/libem/gto.s
Normal 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
76
mach/pdp/libem/head_em.s
Normal 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
11
mach/pdp/libem/hlt.s
Normal 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
19
mach/pdp/libem/iaar.s
Normal 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
19
mach/pdp/libem/ilar.s
Normal 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
22
mach/pdp/libem/inn.s
Normal 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
19
mach/pdp/libem/isar.s
Normal 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
20
mach/pdp/libem/lar.s
Normal 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
16
mach/pdp/libem/los2.s
Normal 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
13
mach/pdp/libem/mlf.s
Normal 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
20
mach/pdp/libem/mli.s
Normal 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
20
mach/pdp/libem/mli4.s
Normal 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
20
mach/pdp/libem/mlu.s
Normal 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
24
mach/pdp/libem/mlu4.s
Normal 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
146
mach/pdp/libem/mon.s
Normal 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
10
mach/pdp/libem/ngf.s
Normal 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
18
mach/pdp/libem/ngi.s
Normal 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
13
mach/pdp/libem/nop.s
Normal 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
34
mach/pdp/libem/prf.s
Normal 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
63
mach/pdp/libem/printf.s
Normal 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
16
mach/pdp/libem/rck.s
Normal 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
31
mach/pdp/libem/ret.s
Normal 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
20
mach/pdp/libem/rmi.s
Normal 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
76
mach/pdp/libem/rmi4.s
Normal 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
20
mach/pdp/libem/rmu.s
Normal 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
17
mach/pdp/libem/rmu2.s
Normal 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
53
mach/pdp/libem/rmu4.s
Normal 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
20
mach/pdp/libem/rol.s
Normal 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
19
mach/pdp/libem/ror.s
Normal 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
17
mach/pdp/libem/sar.s
Normal 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
25
mach/pdp/libem/save.s
Normal 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
14
mach/pdp/libem/sbf.s
Normal 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
19
mach/pdp/libem/sbi.s
Normal 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
25
mach/pdp/libem/set.s
Normal 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
22
mach/pdp/libem/setfl.s
Normal 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
93
mach/pdp/libem/sigtrp.s
Normal 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
29
mach/pdp/libem/sim.s
Normal 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
23
mach/pdp/libem/sli.s
Normal 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
26
mach/pdp/libem/sri.s
Normal 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
29
mach/pdp/libem/sru.s
Normal 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
15
mach/pdp/libem/sto2.s
Normal 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
25
mach/pdp/libem/strhp.s
Normal 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
93
mach/pdp/libem/trp.s
Normal 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
10
mach/pdp/libem/unknown.s
Normal 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
Reference in New Issue
Block a user