Made the cgg and the cg code generator work; use this to beat the PDP/11
backend into shape. It now generates binaries --- no idea whether they work or not.
This commit is contained in:
parent
6d91bdbbbd
commit
4b5a7fee14
|
@ -14,6 +14,7 @@ vars.plats = {
|
||||||
--"qemuppc",
|
--"qemuppc",
|
||||||
"pc86",
|
"pc86",
|
||||||
"rpi",
|
"rpi",
|
||||||
|
"pdpv7",
|
||||||
}
|
}
|
||||||
vars.plats_with_tests = {
|
vars.plats_with_tests = {
|
||||||
"linux386",
|
"linux386",
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
# $Revision$
|
|
||||||
var w=2
|
|
||||||
var p=2
|
|
||||||
var s=2
|
|
||||||
var l=4
|
|
||||||
var f=4
|
|
||||||
var d=8
|
|
||||||
var M=pdp
|
|
||||||
var NAME=pdp
|
|
||||||
var LIB=lib/{M}/tail_
|
|
||||||
var RT=lib/{M}/head_
|
|
||||||
var CPP_F=-D__unix
|
|
||||||
var C_LIB={EM}/{LIB}cc.1s {EM}/{LIB}cc.2g
|
|
||||||
var OLD_C_LIB={C_LIB}
|
|
||||||
var ALIGN=-a0:1 -a1:1 -a2:1 -a3:1
|
|
||||||
name be
|
|
||||||
from .m.g
|
|
||||||
to .s
|
|
||||||
program {EM}/lib.bin/{M}/cg
|
|
||||||
args <
|
|
||||||
stdout
|
|
||||||
need .e
|
|
||||||
end
|
|
||||||
name asopt
|
|
||||||
from .s
|
|
||||||
to .so
|
|
||||||
program {EM}/lib.bin/{M}/top
|
|
||||||
args
|
|
||||||
optimizer
|
|
||||||
stdin
|
|
||||||
stdout
|
|
||||||
end
|
|
||||||
name as
|
|
||||||
from .s.so
|
|
||||||
to .o
|
|
||||||
program {EM}/lib.bin/{M}/as
|
|
||||||
args - -o > <
|
|
||||||
prep cond
|
|
||||||
end
|
|
||||||
name led
|
|
||||||
from .o.a
|
|
||||||
to .out
|
|
||||||
program {EM}/lib.bin/em_led
|
|
||||||
mapflag -l* LNAME={EM}/{LIB}*
|
|
||||||
mapflag -i SEPID=-b1:0
|
|
||||||
mapflag -n ALIGN=-a0:1 -a1:0x2000 -a2:1 -a3:1
|
|
||||||
mapflag -nr ALIGN=-a0:1 -a1:1 -a2:0x2000 -a3:1
|
|
||||||
mapflag -ansi C_LIB={EM}/{LIB}ac
|
|
||||||
args {ALIGN} {SEPID?} (.e:{HEAD}={EM}/{RT}em) \
|
|
||||||
({RTS}:.ocm.bas={EM}/{RT}cc) \
|
|
||||||
({RTS}{ANSI?}:.c={EM}/{RT}cc) \
|
|
||||||
({RTS}{ANSI?}:.cansi={EM}/{RT}ac) \
|
|
||||||
({RTS}:.mod={EM}/{RT}m2) \
|
|
||||||
({RTS}:.p={EM}/{RT}pc) \
|
|
||||||
-o > < \
|
|
||||||
(.p:{TAIL}={EM}/{LIB}pc) \
|
|
||||||
(.bas:{TAIL}={EM}/{LIB}bc) \
|
|
||||||
(.ocm:{TAIL}={EM}/{LIB}ocm) \
|
|
||||||
(.mod:{TAIL}={EM}/{LIB}m2) \
|
|
||||||
(.ocm.bas:{TAIL}={OLD_C_LIB}) \
|
|
||||||
(.c:{TAIL}={C_LIB}) \
|
|
||||||
(.e:{TAIL}={EM}/{LIB}em {EM}/{LIB}mon {EM}/lib/{M}/end_em)
|
|
||||||
linker
|
|
||||||
end
|
|
||||||
name cv
|
|
||||||
from .out
|
|
||||||
to .cv
|
|
||||||
program {EM}/lib.bin/{M}/cv
|
|
||||||
args < >
|
|
||||||
outfile a.out
|
|
||||||
end
|
|
|
@ -1,25 +0,0 @@
|
||||||
name "PDP 11 assembler"
|
|
||||||
dir as
|
|
||||||
end
|
|
||||||
name "PDP 11 backend"
|
|
||||||
dir cg
|
|
||||||
end
|
|
||||||
name "PDP 11 target optimizer"
|
|
||||||
dir top
|
|
||||||
end
|
|
||||||
name "PDP 11 conversion program"
|
|
||||||
dir cv
|
|
||||||
end
|
|
||||||
name "PDP 11 interpreter"
|
|
||||||
system pdp*
|
|
||||||
dir int
|
|
||||||
end
|
|
||||||
name "PDP 11 EM library"
|
|
||||||
dir libem
|
|
||||||
end
|
|
||||||
name "PDP 11 etext,edata,end library"
|
|
||||||
dir libend
|
|
||||||
end
|
|
||||||
name "PDP 11 systemcall library"
|
|
||||||
dir libsys
|
|
||||||
end
|
|
|
@ -25,23 +25,23 @@
|
||||||
#ifdef ACK_ASS
|
#ifdef ACK_ASS
|
||||||
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
|
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
|
||||||
#else
|
#else
|
||||||
#define newlbss(l,x) fprintf(codefile,"%s:.=.+0%o\n",l,x);
|
#define newlbss(l,x) fprintf(codefile,"%s:.=.+%d\n",l,x);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define cst_fmt "$0%o"
|
#define cst_fmt "$%d"
|
||||||
#define off_fmt "0%o"
|
#define off_fmt "%d"
|
||||||
#define ilb_fmt "I%x_%x"
|
#define ilb_fmt "I%x_%x"
|
||||||
#define dlb_fmt "_%d"
|
#define dlb_fmt "_%d"
|
||||||
#define hol_fmt "hol%d"
|
#define hol_fmt "hol%d"
|
||||||
|
|
||||||
#define hol_off "0%lo+hol%d"
|
#define hol_off "%d+hol%d"
|
||||||
|
|
||||||
#ifdef ACK_ASS
|
#ifdef ACK_ASS
|
||||||
#define con_cst(x) fprintf(codefile,".data2 0%lo\n",x)
|
#define con_cst(x) fprintf(codefile,".data2 %d\n",x)
|
||||||
#define con_ilb(x) fprintf(codefile,".data2 %s\n",x)
|
#define con_ilb(x) fprintf(codefile,".data2 %s\n",x)
|
||||||
#define con_dlb(x) fprintf(codefile,".data2 %s\n",x)
|
#define con_dlb(x) fprintf(codefile,".data2 %s\n",x)
|
||||||
#else
|
#else
|
||||||
#define con_cst(x) fprintf(codefile,"0%lo\n",x)
|
#define con_cst(x) fprintf(codefile,"%d\n",x)
|
||||||
#define con_ilb(x) fprintf(codefile,"%s\n",x)
|
#define con_ilb(x) fprintf(codefile,"%s\n",x)
|
||||||
#define con_dlb(x) fprintf(codefile,"%s\n",x)
|
#define con_dlb(x) fprintf(codefile,"%s\n",x)
|
||||||
#endif
|
#endif
|
||||||
|
|
8
mach/pdp/cv/build.lua
Normal file
8
mach/pdp/cv/build.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
cprogram {
|
||||||
|
name = "cv",
|
||||||
|
srcs = { "./*.c" },
|
||||||
|
deps = {
|
||||||
|
"h+emheaders",
|
||||||
|
"modules/src/object+lib",
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,7 +25,8 @@ clean:
|
||||||
rm -f *.$(SUF) Out cv
|
rm -f *.$(SUF) Out cv
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
$(LINT) $(LINTOPTIONS) -I$(TARGET_HOME)/h $(SRC_DIR)/cv.c $(UTIL_HOME)/modules/lib/$(LINTPREF)object.$(LINTSUF)
|
$(LINT) $(LINTOPTIONS) -I$(TARGET_HOME)/h $(SRC_DIR)/cv.c
|
||||||
|
$(UTIL_HOME)/modules/lib/$(LINTPREF)object.$(LINTSUF)
|
||||||
|
|
||||||
pr:
|
pr:
|
||||||
@pr $(SRC_DIR)/proto.make $(SRC_DIR)/cv.c
|
@pr $(SRC_DIR)/proto.make $(SRC_DIR)/cv.c
|
||||||
|
|
|
@ -1,72 +0,0 @@
|
||||||
libem_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
|
|
||||||
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
|
|
||||||
sim.s
|
|
||||||
sli.s
|
|
||||||
sri.s
|
|
||||||
sru.s
|
|
||||||
sto2.s
|
|
||||||
strhp.s
|
|
||||||
unknown.s
|
|
||||||
trp.s
|
|
||||||
xor.s
|
|
||||||
save.s
|
|
8
mach/pdp/libem/build.lua
Normal file
8
mach/pdp/libem/build.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
for _, plat in ipairs(vars.plats) do
|
||||||
|
acklibrary {
|
||||||
|
name = "lib_"..plat,
|
||||||
|
srcs = { "./*.s" },
|
||||||
|
vars = { plat = plat },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
end_s.a
|
|
||||||
edata.s
|
|
||||||
em_end.s
|
|
||||||
end.s
|
|
||||||
etext.s
|
|
8
mach/pdp/libend/build.lua
Normal file
8
mach/pdp/libend/build.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
for _, plat in ipairs(vars.plats) do
|
||||||
|
acklibrary {
|
||||||
|
name = "lib_"..plat,
|
||||||
|
srcs = { "./*.s" },
|
||||||
|
vars = { plat = plat },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
libmon_s.a
|
|
||||||
exit.c
|
|
||||||
cleanup.c
|
|
||||||
stty.c
|
|
||||||
gtty.c
|
|
||||||
access.s
|
|
||||||
acct.s
|
|
||||||
alarm.s
|
|
||||||
chdir.s
|
|
||||||
chmod.s
|
|
||||||
chown.s
|
|
||||||
chroot.s
|
|
||||||
close.s
|
|
||||||
creat.s
|
|
||||||
dup.s
|
|
||||||
execl.s
|
|
||||||
execle.s
|
|
||||||
execv.s
|
|
||||||
execve.s
|
|
||||||
fetchi.s
|
|
||||||
fork.s
|
|
||||||
fperr.s
|
|
||||||
fstat.s
|
|
||||||
ftime.s
|
|
||||||
getgid.s
|
|
||||||
getgrp.s
|
|
||||||
getpid.s
|
|
||||||
getppid.s
|
|
||||||
getuid.s
|
|
||||||
gldav.s
|
|
||||||
ioctl.s
|
|
||||||
kill.s
|
|
||||||
killbkg.s
|
|
||||||
killpg.s
|
|
||||||
link.s
|
|
||||||
lock.s
|
|
||||||
login.s
|
|
||||||
lseek.s
|
|
||||||
lstat.s
|
|
||||||
mknod.s
|
|
||||||
mount.s
|
|
||||||
mpxcall.s
|
|
||||||
nice.s
|
|
||||||
nostk.s
|
|
||||||
open.s
|
|
||||||
pause.s
|
|
||||||
phys.s
|
|
||||||
pipe.s
|
|
||||||
profil.s
|
|
||||||
ptrace.s
|
|
||||||
qfstat.s
|
|
||||||
qstat.s
|
|
||||||
quota.s
|
|
||||||
read.s
|
|
||||||
readlink.s
|
|
||||||
reboot.s
|
|
||||||
renice.s
|
|
||||||
rtp.s
|
|
||||||
sbrk.s
|
|
||||||
setgid.s
|
|
||||||
setgrp.s
|
|
||||||
setuid.s
|
|
||||||
signal.s
|
|
||||||
stat.s
|
|
||||||
stime.s
|
|
||||||
submit.s
|
|
||||||
symlink.s
|
|
||||||
sync.s
|
|
||||||
time.s
|
|
||||||
times.s
|
|
||||||
ucall.s
|
|
||||||
umask.s
|
|
||||||
umount.s
|
|
||||||
unlink.s
|
|
||||||
utime.s
|
|
||||||
vfork.s
|
|
||||||
vhangup.s
|
|
||||||
wait.s
|
|
||||||
write.s
|
|
||||||
errno.s
|
|
||||||
_alarm.s
|
|
||||||
_close.s
|
|
||||||
_creat.s
|
|
||||||
_dup.s
|
|
||||||
_execl.s
|
|
||||||
_exit.s
|
|
||||||
_fork.s
|
|
||||||
_fstat.s
|
|
||||||
_ftime.s
|
|
||||||
_getpid.s
|
|
||||||
_gtty.c
|
|
||||||
_ioctl.s
|
|
||||||
_kill.s
|
|
||||||
_link.s
|
|
||||||
_lseek.s
|
|
||||||
_open.s
|
|
||||||
_pause.s
|
|
||||||
_pipe.s
|
|
||||||
_read.s
|
|
||||||
_sbrk.s
|
|
||||||
_unlink.s
|
|
||||||
_wait.s
|
|
||||||
_write.s
|
|
|
@ -1,5 +0,0 @@
|
||||||
MACH=pdp
|
|
||||||
SUF=o
|
|
||||||
ASAR=aal
|
|
||||||
RANLIB=:
|
|
||||||
MACHFL=-O -DUFS
|
|
|
@ -40,9 +40,9 @@ con_mult(sz) word sz; {
|
||||||
fatal("bad icon/ucon size");
|
fatal("bad icon/ucon size");
|
||||||
l = atol(str);
|
l = atol(str);
|
||||||
#ifdef ACK_ASS
|
#ifdef ACK_ASS
|
||||||
fprintf(codefile,".data2 0%o, 0%o !%s\n",(int)(l>>16),(int)l, str);
|
fprintf(codefile,".data2 %d, %d !%s\n",(int)(l>>16),(int)l, str);
|
||||||
#else
|
#else
|
||||||
fprintf(codefile,"\t%o;%o\n",(int)(l>>16),(int)l);
|
fprintf(codefile,"\t%d;%d\n",(int)(l>>16),(int)l);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,12 +96,12 @@ f_regsave() {
|
||||||
if (lbytes == 2)
|
if (lbytes == 2)
|
||||||
fprintf(codefile,"tst -(sp)\n");
|
fprintf(codefile,"tst -(sp)\n");
|
||||||
else if (lbytes!=0)
|
else if (lbytes!=0)
|
||||||
fprintf(codefile,"sub $0%o,sp\n",lbytes);
|
fprintf(codefile,"sub $%d,sp\n",lbytes);
|
||||||
for (i=0;i<n_regvars;i++)
|
for (i=0;i<n_regvars;i++)
|
||||||
fprintf(codefile,"mov %s,-(sp)\n",regadm[i].ra_str);
|
fprintf(codefile,"mov %s,-(sp)\n",regadm[i].ra_str);
|
||||||
} else {
|
} else {
|
||||||
if (lbytes>6) {
|
if (lbytes>6) {
|
||||||
fprintf(codefile,"mov $0%o,r0\n",lbytes);
|
fprintf(codefile,"mov $%d,r0\n",lbytes);
|
||||||
fprintf(codefile,"jsr r5,PR%s\n",Rstring);
|
fprintf(codefile,"jsr r5,PR%s\n",Rstring);
|
||||||
} else {
|
} else {
|
||||||
fprintf(codefile,"jsr r5,PR%d%s\n",lbytes,Rstring);
|
fprintf(codefile,"jsr r5,PR%d%s\n",lbytes,Rstring);
|
||||||
|
@ -109,7 +109,7 @@ f_regsave() {
|
||||||
}
|
}
|
||||||
for (i=0;i<n_regvars;i++)
|
for (i=0;i<n_regvars;i++)
|
||||||
if (regadm[i].ra_off>=0)
|
if (regadm[i].ra_off>=0)
|
||||||
fprintf(codefile,"mov 0%lo(r5),%s\n",regadm[i].ra_off,
|
fprintf(codefile,"mov %d(r5),%s\n",regadm[i].ra_off,
|
||||||
regadm[i].ra_str);
|
regadm[i].ra_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ regsave(regstr,off,size) char *regstr; long off; {
|
||||||
#endif
|
#endif
|
||||||
strcat(Rstring,regstr);
|
strcat(Rstring,regstr);
|
||||||
if (off>=0)
|
if (off>=0)
|
||||||
fprintf(codefile,"mov 0%lo(r5),%s\n",off,regstr);
|
fprintf(codefile,"mov %d(r5),%s\n",off,regstr);
|
||||||
end of commented away */
|
end of commented away */
|
||||||
|
|
||||||
strcat(Rstring,regstr);
|
strcat(Rstring,regstr);
|
||||||
|
@ -154,7 +154,7 @@ prolog(nlocals) full nlocals; {
|
||||||
if (nlocals == 2)
|
if (nlocals == 2)
|
||||||
fprintf(codefile,"tst -(sp)\n");
|
fprintf(codefile,"tst -(sp)\n");
|
||||||
else
|
else
|
||||||
fprintf(codefile,"sub $0%o,sp\n",nlocals);
|
fprintf(codefile,"sub $%d,sp\n",nlocals);
|
||||||
#else
|
#else
|
||||||
lbytes = nlocals;
|
lbytes = nlocals;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,23 +25,23 @@
|
||||||
#ifdef ACK_ASS
|
#ifdef ACK_ASS
|
||||||
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
|
#define newlbss(l,x) fprintf(codefile,".comm %s,%u\n",l,x);
|
||||||
#else
|
#else
|
||||||
#define newlbss(l,x) fprintf(codefile,"%s:.=.+0%o\n",l,x);
|
#define newlbss(l,x) fprintf(codefile,"%s:.=.+%d\n",l,x);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define cst_fmt "$0%o"
|
#define cst_fmt "$%d"
|
||||||
#define off_fmt "0%o"
|
#define off_fmt "%d"
|
||||||
#define ilb_fmt "I%x_%x"
|
#define ilb_fmt "I%x_%x"
|
||||||
#define dlb_fmt "_%d"
|
#define dlb_fmt "_%d"
|
||||||
#define hol_fmt "hol%d"
|
#define hol_fmt "hol%d"
|
||||||
|
|
||||||
#define hol_off "0%lo+hol%d"
|
#define hol_off "%d+hol%d"
|
||||||
|
|
||||||
#ifdef ACK_ASS
|
#ifdef ACK_ASS
|
||||||
#define con_cst(x) fprintf(codefile,".data2 0%lo\n",x)
|
#define con_cst(x) fprintf(codefile,".data2 %d\n",x)
|
||||||
#define con_ilb(x) fprintf(codefile,".data2 %s\n",x)
|
#define con_ilb(x) fprintf(codefile,".data2 %s\n",x)
|
||||||
#define con_dlb(x) fprintf(codefile,".data2 %s\n",x)
|
#define con_dlb(x) fprintf(codefile,".data2 %s\n",x)
|
||||||
#else
|
#else
|
||||||
#define con_cst(x) fprintf(codefile,"0%lo\n",x)
|
#define con_cst(x) fprintf(codefile,"%d\n",x)
|
||||||
#define con_ilb(x) fprintf(codefile,"%s\n",x)
|
#define con_ilb(x) fprintf(codefile,"%s\n",x)
|
||||||
#define con_dlb(x) fprintf(codefile,"%s\n",x)
|
#define con_dlb(x) fprintf(codefile,"%s\n",x)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,7 +8,7 @@ EM_BSIZE=4
|
||||||
|
|
||||||
SL=4
|
SL=4
|
||||||
|
|
||||||
FORMAT = "0%lo"
|
FORMAT = "%d"
|
||||||
TIMEFACTOR = 1/300
|
TIMEFACTOR = 1/300
|
||||||
|
|
||||||
illins = "Illegal"
|
illins = "Illegal"
|
||||||
|
|
42
mach/proto/cg/build.lua
Normal file
42
mach/proto/cg/build.lua
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
include("util/cgg/build.lua")
|
||||||
|
|
||||||
|
definerule("build_cg",
|
||||||
|
{
|
||||||
|
arch = { type="string" }
|
||||||
|
},
|
||||||
|
function(e)
|
||||||
|
-- Remember this is executed from the caller's directory; local
|
||||||
|
-- target names will resolve there
|
||||||
|
local headers = clibrary {
|
||||||
|
name = e.name.."/headers",
|
||||||
|
srcs = {},
|
||||||
|
hdrs = {
|
||||||
|
"mach/proto/cg/*.h",
|
||||||
|
"mach/"..e.arch.."/cg/mach.c",
|
||||||
|
"mach/"..e.arch.."/cg/*.h",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local tables = cgg {
|
||||||
|
name = e.name.."/tables",
|
||||||
|
srcs = { "mach/"..e.arch.."/cg/table" }
|
||||||
|
}
|
||||||
|
|
||||||
|
return cprogram {
|
||||||
|
name = e.name,
|
||||||
|
srcs = {
|
||||||
|
"mach/proto/cg/*.c",
|
||||||
|
matching(filenamesof(tables), "%.c$")
|
||||||
|
},
|
||||||
|
deps = {
|
||||||
|
"h+emheaders",
|
||||||
|
"modules+headers",
|
||||||
|
"modules/src/em_data+lib",
|
||||||
|
"modules/src/flt_arith+lib",
|
||||||
|
headers,
|
||||||
|
tables, -- for .h file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
|
@ -1,190 +0,0 @@
|
||||||
# $Id$
|
|
||||||
|
|
||||||
#PARAMS do not remove this line!
|
|
||||||
|
|
||||||
#MACH_DEFINE do not remove this or the next line!
|
|
||||||
MACH =
|
|
||||||
|
|
||||||
SRC_DIR = $(SRC_HOME)/mach/$(MACH)/cg
|
|
||||||
CDIR=$(SRC_HOME)/mach/proto/cg
|
|
||||||
LIBEM = $(TARGET_HOME)/lib.bin/em_data.$(LIBSUF)
|
|
||||||
LIBFLT = $(TARGET_HOME)/modules/lib/libflt.$(LIBSUF)
|
|
||||||
CPP = $(UTIL_HOME)/lib.bin/cpp
|
|
||||||
CGG = $(UTIL_HOME)/lib.bin/cgg
|
|
||||||
|
|
||||||
PREFLAGS=-I$(TARGET_HOME)/h -I$(SRC_HOME)/mach -I$(TARGET_HOME)/modules/h -I$(SRC_DIR) -I. -I$(CDIR) -DNDEBUG
|
|
||||||
PFLAGS=
|
|
||||||
CFLAGS=$(PREFLAGS) $(PFLAGS) $(COPTIONS)
|
|
||||||
LDFLAGS=$(PFLAGS) $(LDOPTIONS)
|
|
||||||
LINTFLAGS=$(PREFLAGS) $(LINTOPTIONS)
|
|
||||||
LIBS=$(LIBEM) $(LIBFLT)
|
|
||||||
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.$(SUF) compute.$(SUF) equiv.$(SUF) fillem.$(SUF) \
|
|
||||||
gencode.$(SUF) glosym.$(SUF) main.$(SUF) move.$(SUF) nextem.$(SUF) \
|
|
||||||
reg.$(SUF) regvar.$(SUF) salloc.$(SUF) state.$(SUF) subr.$(SUF) \
|
|
||||||
var.$(SUF)
|
|
||||||
|
|
||||||
all: tables.c
|
|
||||||
make cg
|
|
||||||
|
|
||||||
cg: tables.o $(OFILES)
|
|
||||||
$(CC) $(LDFLAGS) $(OFILES) tables.o $(LIBS) -o cg
|
|
||||||
|
|
||||||
tables.$(SUF): tables.c
|
|
||||||
$(CC) -c $(PREFLAGS) tables.c
|
|
||||||
|
|
||||||
codegen.$(SUF): $(CDIR)/codegen.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/codegen.c
|
|
||||||
compute.$(SUF): $(CDIR)/compute.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/compute.c
|
|
||||||
equiv.$(SUF): $(CDIR)/equiv.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/equiv.c
|
|
||||||
fillem.$(SUF): $(CDIR)/fillem.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/fillem.c
|
|
||||||
gencode.$(SUF): $(CDIR)/gencode.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/gencode.c
|
|
||||||
glosym.$(SUF): $(CDIR)/glosym.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/glosym.c
|
|
||||||
main.$(SUF): $(CDIR)/main.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/main.c
|
|
||||||
move.$(SUF): $(CDIR)/move.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/move.c
|
|
||||||
nextem.$(SUF): $(CDIR)/nextem.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/nextem.c
|
|
||||||
reg.$(SUF): $(CDIR)/reg.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/reg.c
|
|
||||||
regvar.$(SUF): $(CDIR)/regvar.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/regvar.c
|
|
||||||
salloc.$(SUF): $(CDIR)/salloc.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/salloc.c
|
|
||||||
state.$(SUF): $(CDIR)/state.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/state.c
|
|
||||||
subr.$(SUF): $(CDIR)/subr.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/subr.c
|
|
||||||
var.$(SUF): $(CDIR)/var.c
|
|
||||||
$(CC) -c $(CFLAGS) $(CDIR)/var.c
|
|
||||||
|
|
||||||
install: all
|
|
||||||
-mkdir $(TARGET_HOME)/lib.bin/$(MACH)
|
|
||||||
cp cg $(TARGET_HOME)/lib.bin/$(MACH)/cg
|
|
||||||
|
|
||||||
cmp: all
|
|
||||||
-cmp cg $(TARGET_HOME)/lib.bin/$(MACH)/cg
|
|
||||||
|
|
||||||
tables.c: $(SRC_DIR)/table $(CGG)
|
|
||||||
-mv tables.h tables.h.save
|
|
||||||
$(CPP) -P -I$(SRC_DIR) $(SRC_DIR)/table | $(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: tables.c
|
|
||||||
$(LINT) $(LINTFLAGS) $(CFILES) tables.c
|
|
||||||
clean:
|
|
||||||
rm -f *.$(SUF) tables.c tables.h debug.out cg tables.h.save
|
|
||||||
|
|
||||||
codegen.$(SUF): $(CDIR)/assert.h
|
|
||||||
codegen.$(SUF): $(CDIR)/data.h
|
|
||||||
codegen.$(SUF): $(CDIR)/equiv.h
|
|
||||||
codegen.$(SUF): $(CDIR)/extern.h
|
|
||||||
codegen.$(SUF): $(CDIR)/param.h
|
|
||||||
codegen.$(SUF): $(CDIR)/result.h
|
|
||||||
codegen.$(SUF): $(CDIR)/state.h
|
|
||||||
codegen.$(SUF): tables.h
|
|
||||||
codegen.$(SUF): $(CDIR)/types.h
|
|
||||||
compute.$(SUF): $(CDIR)/assert.h
|
|
||||||
compute.$(SUF): $(CDIR)/data.h
|
|
||||||
compute.$(SUF): $(CDIR)/extern.h
|
|
||||||
compute.$(SUF): $(CDIR)/glosym.h
|
|
||||||
compute.$(SUF): $(CDIR)/param.h
|
|
||||||
compute.$(SUF): $(CDIR)/result.h
|
|
||||||
compute.$(SUF): tables.h
|
|
||||||
compute.$(SUF): $(CDIR)/types.h
|
|
||||||
equiv.$(SUF): $(CDIR)/assert.h
|
|
||||||
equiv.$(SUF): $(CDIR)/data.h
|
|
||||||
equiv.$(SUF): $(CDIR)/equiv.h
|
|
||||||
equiv.$(SUF): $(CDIR)/extern.h
|
|
||||||
equiv.$(SUF): $(CDIR)/param.h
|
|
||||||
equiv.$(SUF): $(CDIR)/result.h
|
|
||||||
equiv.$(SUF): tables.h
|
|
||||||
equiv.$(SUF): $(CDIR)/types.h
|
|
||||||
fillem.$(SUF): $(CDIR)/assert.h
|
|
||||||
fillem.$(SUF): $(CDIR)/data.h
|
|
||||||
fillem.$(SUF): $(CDIR)/extern.h
|
|
||||||
fillem.$(SUF): $(SRC_DIR)/mach.c
|
|
||||||
fillem.$(SUF): $(SRC_DIR)/mach.h
|
|
||||||
fillem.$(SUF): $(CDIR)/param.h
|
|
||||||
fillem.$(SUF): $(CDIR)/regvar.h
|
|
||||||
fillem.$(SUF): $(CDIR)/result.h
|
|
||||||
fillem.$(SUF): tables.h
|
|
||||||
fillem.$(SUF): $(CDIR)/types.h
|
|
||||||
gencode.$(SUF): $(CDIR)/assert.h
|
|
||||||
gencode.$(SUF): $(CDIR)/data.h
|
|
||||||
gencode.$(SUF): $(CDIR)/extern.h
|
|
||||||
gencode.$(SUF): $(CDIR)/param.h
|
|
||||||
gencode.$(SUF): $(CDIR)/result.h
|
|
||||||
gencode.$(SUF): tables.h
|
|
||||||
gencode.$(SUF): $(CDIR)/types.h
|
|
||||||
glosym.$(SUF): $(CDIR)/glosym.h
|
|
||||||
glosym.$(SUF): $(CDIR)/param.h
|
|
||||||
glosym.$(SUF): tables.h
|
|
||||||
glosym.$(SUF): $(CDIR)/types.h
|
|
||||||
main.$(SUF): $(CDIR)/param.h
|
|
||||||
move.$(SUF): $(CDIR)/assert.h
|
|
||||||
move.$(SUF): $(CDIR)/data.h
|
|
||||||
move.$(SUF): $(CDIR)/extern.h
|
|
||||||
move.$(SUF): $(CDIR)/param.h
|
|
||||||
move.$(SUF): $(CDIR)/result.h
|
|
||||||
move.$(SUF): tables.h
|
|
||||||
move.$(SUF): $(CDIR)/types.h
|
|
||||||
nextem.$(SUF): $(CDIR)/assert.h
|
|
||||||
nextem.$(SUF): $(CDIR)/data.h
|
|
||||||
nextem.$(SUF): $(CDIR)/extern.h
|
|
||||||
nextem.$(SUF): $(CDIR)/param.h
|
|
||||||
nextem.$(SUF): $(CDIR)/result.h
|
|
||||||
nextem.$(SUF): tables.h
|
|
||||||
nextem.$(SUF): $(CDIR)/types.h
|
|
||||||
reg.$(SUF): $(CDIR)/assert.h
|
|
||||||
reg.$(SUF): $(CDIR)/data.h
|
|
||||||
reg.$(SUF): $(CDIR)/extern.h
|
|
||||||
reg.$(SUF): $(CDIR)/param.h
|
|
||||||
reg.$(SUF): $(CDIR)/result.h
|
|
||||||
reg.$(SUF): tables.h
|
|
||||||
reg.$(SUF): $(CDIR)/types.h
|
|
||||||
regvar.$(SUF): $(CDIR)/assert.h
|
|
||||||
regvar.$(SUF): $(CDIR)/data.h
|
|
||||||
regvar.$(SUF): $(CDIR)/extern.h
|
|
||||||
regvar.$(SUF): $(CDIR)/param.h
|
|
||||||
regvar.$(SUF): $(CDIR)/regvar.h
|
|
||||||
regvar.$(SUF): $(CDIR)/result.h
|
|
||||||
regvar.$(SUF): tables.h
|
|
||||||
regvar.$(SUF): $(CDIR)/types.h
|
|
||||||
salloc.$(SUF): $(CDIR)/assert.h
|
|
||||||
salloc.$(SUF): $(CDIR)/data.h
|
|
||||||
salloc.$(SUF): $(CDIR)/extern.h
|
|
||||||
salloc.$(SUF): $(CDIR)/param.h
|
|
||||||
salloc.$(SUF): $(CDIR)/result.h
|
|
||||||
salloc.$(SUF): tables.h
|
|
||||||
salloc.$(SUF): $(CDIR)/types.h
|
|
||||||
state.$(SUF): $(CDIR)/assert.h
|
|
||||||
state.$(SUF): $(CDIR)/data.h
|
|
||||||
state.$(SUF): $(CDIR)/extern.h
|
|
||||||
state.$(SUF): $(CDIR)/param.h
|
|
||||||
state.$(SUF): $(CDIR)/result.h
|
|
||||||
state.$(SUF): $(CDIR)/state.h
|
|
||||||
state.$(SUF): tables.h
|
|
||||||
state.$(SUF): $(CDIR)/types.h
|
|
||||||
subr.$(SUF): $(CDIR)/assert.h
|
|
||||||
subr.$(SUF): $(CDIR)/data.h
|
|
||||||
subr.$(SUF): $(CDIR)/extern.h
|
|
||||||
subr.$(SUF): $(CDIR)/param.h
|
|
||||||
subr.$(SUF): $(CDIR)/result.h
|
|
||||||
subr.$(SUF): tables.h
|
|
||||||
subr.$(SUF): $(CDIR)/types.h
|
|
||||||
var.$(SUF): $(CDIR)/data.h
|
|
||||||
var.$(SUF): $(CDIR)/param.h
|
|
||||||
var.$(SUF): $(CDIR)/result.h
|
|
||||||
var.$(SUF): tables.h
|
|
||||||
var.$(SUF): $(CDIR)/types.h
|
|
|
@ -1,4 +1,5 @@
|
||||||
include("mach/proto/as/build.lua")
|
include("mach/proto/as/build.lua")
|
||||||
|
include("mach/proto/cg/build.lua")
|
||||||
include("mach/proto/ncg/build.lua")
|
include("mach/proto/ncg/build.lua")
|
||||||
include("mach/proto/mcg/build.lua")
|
include("mach/proto/mcg/build.lua")
|
||||||
include("mach/proto/top/build.lua")
|
include("mach/proto/top/build.lua")
|
||||||
|
|
25
plat/pdpv7/build-pkg.lua
Normal file
25
plat/pdpv7/build-pkg.lua
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
include("plat/build.lua")
|
||||||
|
|
||||||
|
ackfile {
|
||||||
|
name = "boot",
|
||||||
|
srcs = { "./boot.s" },
|
||||||
|
vars = { plat = "pdpv7" }
|
||||||
|
}
|
||||||
|
|
||||||
|
build_plat_libs {
|
||||||
|
name = "libs",
|
||||||
|
arch = "pdp",
|
||||||
|
plat = "pdpv7",
|
||||||
|
}
|
||||||
|
|
||||||
|
installable {
|
||||||
|
name = "pkg",
|
||||||
|
map = {
|
||||||
|
"+tools",
|
||||||
|
"+libs",
|
||||||
|
"./include+pkg",
|
||||||
|
["$(PLATIND)/pdpv7/boot.o"] = "+boot",
|
||||||
|
["$(PLATIND)/pdpv7/libsys.a"] = "./libsys+lib",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
28
plat/pdpv7/build-tools.lua
Normal file
28
plat/pdpv7/build-tools.lua
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
include("plat/build.lua")
|
||||||
|
|
||||||
|
build_as {
|
||||||
|
name = "as",
|
||||||
|
arch = "pdp",
|
||||||
|
}
|
||||||
|
|
||||||
|
build_cg {
|
||||||
|
name = "cg",
|
||||||
|
arch = "pdp",
|
||||||
|
}
|
||||||
|
|
||||||
|
build_top {
|
||||||
|
name = "top",
|
||||||
|
arch = "pdp"
|
||||||
|
}
|
||||||
|
|
||||||
|
return installable {
|
||||||
|
name = "tools",
|
||||||
|
map = {
|
||||||
|
["$(PLATDEP)/pdpv7/as"] = "+as",
|
||||||
|
["$(PLATDEP)/pdpv7/cg"] = "+cg",
|
||||||
|
["$(PLATDEP)/pdpv7/cv"] = "mach/pdp/cv+cv",
|
||||||
|
["$(PLATDEP)/pdpv7/top"] = "+top",
|
||||||
|
["$(PLATIND)/descr/pdpv7"] = "./descr",
|
||||||
|
"util/opt+pkg",
|
||||||
|
}
|
||||||
|
}
|
87
plat/pdpv7/descr
Normal file
87
plat/pdpv7/descr
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
# $Revision$
|
||||||
|
var w=2
|
||||||
|
var wa=1
|
||||||
|
var p=2
|
||||||
|
var pa=1
|
||||||
|
var s=2
|
||||||
|
var sa=1
|
||||||
|
var l=4
|
||||||
|
var la=1
|
||||||
|
var f=4
|
||||||
|
var fa=1
|
||||||
|
var d=8
|
||||||
|
var da=1
|
||||||
|
var x=8
|
||||||
|
var xa=1
|
||||||
|
|
||||||
|
var ARCH=pdp
|
||||||
|
var PLATFORM=pdpv7
|
||||||
|
var PLATFORMDIR={EM}/share/ack/{PLATFORM}
|
||||||
|
var CPP_F=-D__unix
|
||||||
|
var ALIGN=-a0:1 -a1:1 -a2:1 -a3:1
|
||||||
|
|
||||||
|
var C_INCLUDES=-I{PLATFORMDIR}/include -I{EM}/share/ack/include/ansi
|
||||||
|
|
||||||
|
name be
|
||||||
|
from .m.g
|
||||||
|
to .s
|
||||||
|
program {EM}/lib/ack/{PLATFORM}/cg
|
||||||
|
args <
|
||||||
|
stdout
|
||||||
|
need .e
|
||||||
|
end
|
||||||
|
|
||||||
|
# There's an ack driver bug where if the .s file needs preprocessing, the path
|
||||||
|
# isn't set correctly in stages other than the first; this affects the PDP/11
|
||||||
|
# libsys assembler files. Work around this for now by disabling asopt.
|
||||||
|
#name asopt
|
||||||
|
# from .s
|
||||||
|
# to .so
|
||||||
|
# program {EM}/lib/ack/{PLATFORM}/top
|
||||||
|
# args
|
||||||
|
# optimizer
|
||||||
|
# stdin
|
||||||
|
# stdout
|
||||||
|
#end
|
||||||
|
|
||||||
|
name as
|
||||||
|
from .s.so
|
||||||
|
to .o
|
||||||
|
program {EM}/lib/ack/{PLATFORM}/as
|
||||||
|
args - -o > <
|
||||||
|
prep cond
|
||||||
|
end
|
||||||
|
name led
|
||||||
|
from .o.a
|
||||||
|
to .out
|
||||||
|
program {EM}/lib/ack/em_led
|
||||||
|
mapflag -l* LNAME={PLATFORMDIR}/lib*
|
||||||
|
mapflag -i SEPID=-b1:0
|
||||||
|
mapflag -n ALIGN=-a0:1 -a1:0x2000 -a2:1 -a3:1
|
||||||
|
mapflag -nr ALIGN=-a0:1 -a1:1 -a2:0x2000 -a3:1
|
||||||
|
args {ALIGN} {SEPID?} \
|
||||||
|
({RTS}:.b=-u _i_main) \
|
||||||
|
(.e:{HEAD}={PLATFORMDIR}/boot.o) \
|
||||||
|
({RTS}:.ocm.bas.b={PLATFORMDIR}/c-ansi.o) \
|
||||||
|
({RTS}:.c={PLATFORMDIR}/c-ansi.o) \
|
||||||
|
({RTS}:.mod={PLATFORMDIR}/modula2.o) \
|
||||||
|
({RTS}:.p={PLATFORMDIR}/pascal.o) \
|
||||||
|
-o > < \
|
||||||
|
(.p:{TAIL}={PLATFORMDIR}/libpascal.a) \
|
||||||
|
(.b:{TAIL}={PLATFORMDIR}/libb.a) \
|
||||||
|
(.bas:{TAIL}={PLATFORMDIR}/libbasic.a) \
|
||||||
|
(.mod:{TAIL}={PLATFORMDIR}/libmodula2.a) \
|
||||||
|
(.ocm:{TAIL}={PLATFORMDIR}/liboccam.a) \
|
||||||
|
(.ocm.bas.mod.b.c.p:{TAIL}={PLATFORMDIR}/libc.a) \
|
||||||
|
(.e:{TAIL}={PLATFORMDIR}/libem.a \
|
||||||
|
{PLATFORMDIR}/libsys.a \
|
||||||
|
{PLATFORMDIR}/libend.a)
|
||||||
|
linker
|
||||||
|
end
|
||||||
|
name cv
|
||||||
|
from .out
|
||||||
|
to .cv
|
||||||
|
program {EM}/lib/ack/{PLATFORM}/cv
|
||||||
|
args < >
|
||||||
|
outfile a.out
|
||||||
|
end
|
16
plat/pdpv7/include/ack/config.h
Normal file
16
plat/pdpv7/include/ack/config.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Raspberry Pi support library for the PDP/11
|
||||||
|
* © 2013 David Given
|
||||||
|
* This file is redistributable under the terms of the 3-clause BSD license.
|
||||||
|
* See the file 'Copying' in the root of the distribution for the full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ACK_CONFIG_H
|
||||||
|
#define _ACK_CONFIG_H
|
||||||
|
|
||||||
|
/* We're providing a time() system call rather than wanting a wrapper around
|
||||||
|
* gettimeofday() in the libc. */
|
||||||
|
|
||||||
|
#define ACKCONF_TIME_IS_A_SYSCALL
|
||||||
|
|
||||||
|
#endif
|
26
plat/pdpv7/include/build.lua
Normal file
26
plat/pdpv7/include/build.lua
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
include("plat/build.lua")
|
||||||
|
|
||||||
|
headermap = {}
|
||||||
|
packagemap = {}
|
||||||
|
|
||||||
|
local function addheader(h)
|
||||||
|
headermap[h] = "./"..h
|
||||||
|
packagemap["$(PLATIND)/pdpv7/include/"..h] = "./"..h
|
||||||
|
end
|
||||||
|
|
||||||
|
addheader("ack/config.h")
|
||||||
|
addheader("sys/select.h")
|
||||||
|
addheader("termios.h")
|
||||||
|
addheader("unistd.h")
|
||||||
|
|
||||||
|
acklibrary {
|
||||||
|
name = "headers",
|
||||||
|
hdrs = headermap
|
||||||
|
}
|
||||||
|
|
||||||
|
installable {
|
||||||
|
name = "pkg",
|
||||||
|
map = packagemap
|
||||||
|
}
|
||||||
|
|
||||||
|
|
13
plat/pdpv7/include/sys/select.h
Normal file
13
plat/pdpv7/include/sys/select.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/*
|
||||||
|
* Raspberry Pi support library for the PDP/11
|
||||||
|
* © 2013 David Given
|
||||||
|
* This file is redistributable under the terms of the 3-clause BSD license.
|
||||||
|
* See the file 'Copying' in the root of the distribution for the full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_SELECT_H
|
||||||
|
#define _SYS_SELECT_H
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#endif
|
47
plat/pdpv7/include/termios.h
Normal file
47
plat/pdpv7/include/termios.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Raspberry Pi support library for the PDP/11
|
||||||
|
* © 2013 David Given
|
||||||
|
* This file is redistributable under the terms of the 3-clause BSD license.
|
||||||
|
* See the file 'Copying' in the root of the distribution for the full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TERMIOS_H
|
||||||
|
#define _TERMIOS_H
|
||||||
|
|
||||||
|
typedef unsigned char tcflag_t;
|
||||||
|
|
||||||
|
struct termios
|
||||||
|
{
|
||||||
|
tcflag_t c_iflag;
|
||||||
|
tcflag_t c_oflag;
|
||||||
|
tcflag_t c_lflag;
|
||||||
|
tcflag_t c_cflag;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ONLCR 1
|
||||||
|
#define ECHO 2
|
||||||
|
#define INLCR 4
|
||||||
|
|
||||||
|
/* Dummied parameters for compatibility --- only the ones above are
|
||||||
|
* honoured. */
|
||||||
|
|
||||||
|
#define BRKINT 0
|
||||||
|
#define ICRNL 0
|
||||||
|
#define INPCK 0
|
||||||
|
#define ISTRIP 0
|
||||||
|
#define IXON 0
|
||||||
|
#define CS8 0
|
||||||
|
#define ICANON 0
|
||||||
|
#define IEXTEN 0
|
||||||
|
#define ISIG 0
|
||||||
|
|
||||||
|
#define OPOST ONLCR
|
||||||
|
|
||||||
|
#define TCSANOW 0
|
||||||
|
#define TCSADRAIN 1
|
||||||
|
#define TCSAFLUSH 2
|
||||||
|
|
||||||
|
extern int tcgetattr(int fd, struct termios* t);
|
||||||
|
extern int tcsetattr(int fd, int actions, struct termios* t);
|
||||||
|
|
||||||
|
#endif
|
105
plat/pdpv7/include/unistd.h
Normal file
105
plat/pdpv7/include/unistd.h
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
/*
|
||||||
|
* Raspberry Pi support library for the PDP/11
|
||||||
|
* © 2013 David Given
|
||||||
|
* This file is redistributable under the terms of the 3-clause BSD license.
|
||||||
|
* See the file 'Copying' in the root of the distribution for the full text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _UNISTD_H
|
||||||
|
#define _UNISTD_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
/* Types */
|
||||||
|
|
||||||
|
typedef int pid_t;
|
||||||
|
typedef int mode_t;
|
||||||
|
|
||||||
|
typedef long suseconds_t;
|
||||||
|
|
||||||
|
/* Time handling. */
|
||||||
|
|
||||||
|
struct timeval
|
||||||
|
{
|
||||||
|
time_t tv_sec;
|
||||||
|
suseconds_t tv_usec;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct timezone
|
||||||
|
{
|
||||||
|
int tz_minuteswest;
|
||||||
|
int tz_dsttime;
|
||||||
|
}; /* obsolete, unused */
|
||||||
|
|
||||||
|
extern int gettimeofday(struct timeval* tv, struct timezone* tz);
|
||||||
|
extern int settimeofday(const struct timeval* tv, const struct timezone* tz);
|
||||||
|
|
||||||
|
/* Constants for file access (open and friends) */
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
O_ACCMODE = 0x3,
|
||||||
|
|
||||||
|
O_RDONLY = 0,
|
||||||
|
O_WRONLY = 1,
|
||||||
|
O_RDWR = 2,
|
||||||
|
|
||||||
|
O_CREAT = 0100,
|
||||||
|
O_TRUNC = 01000,
|
||||||
|
O_APPEND = 02000,
|
||||||
|
O_NONBLOCK = 04000
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Special variables */
|
||||||
|
|
||||||
|
extern char** environ;
|
||||||
|
|
||||||
|
/* Implemented system calls */
|
||||||
|
|
||||||
|
extern void _exit(int);
|
||||||
|
extern pid_t getpid(void);
|
||||||
|
extern void* sbrk(int increment);
|
||||||
|
extern int isatty(int d);
|
||||||
|
extern off_t lseek(int fildes, off_t offset, int whence);
|
||||||
|
extern int close(int d);
|
||||||
|
extern int open(const char* path, int access, ...);
|
||||||
|
extern int creat(const char* path, mode_t mode);
|
||||||
|
extern int read(int fd, void* buffer, size_t count);
|
||||||
|
extern int write(int fd, void* buffer, size_t count);
|
||||||
|
|
||||||
|
/* Unimplemented system calls (these are just prototypes to let the library
|
||||||
|
* compile). */
|
||||||
|
|
||||||
|
extern int fcntl(int fd, int op, ...);
|
||||||
|
|
||||||
|
/* Signal handling */
|
||||||
|
|
||||||
|
typedef int sig_atomic_t;
|
||||||
|
|
||||||
|
#define SIG_ERR ((sighandler_t) -1) /* Error return. */
|
||||||
|
#define SIG_DFL ((sighandler_t) 0) /* Default action. */
|
||||||
|
#define SIG_IGN ((sighandler_t) 1) /* Ignore signal. */
|
||||||
|
|
||||||
|
#define SIGABRT 6 /* Abort (ANSI) */
|
||||||
|
#define SIGILL 11 /* Illegal instruction */
|
||||||
|
|
||||||
|
#define _NSIG 32 /* Biggest signal number + 1
|
||||||
|
(not including real-time signals). */
|
||||||
|
typedef void (*sighandler_t)(int);
|
||||||
|
extern sighandler_t signal(int signum, sighandler_t handler);
|
||||||
|
extern int raise(int signum);
|
||||||
|
|
||||||
|
/* Select */
|
||||||
|
|
||||||
|
typedef uint32_t fd_set;
|
||||||
|
|
||||||
|
extern int select(int nfds, fd_set *readfds, fd_set *writefds,
|
||||||
|
fd_set *exceptfds, struct timeval *timeout);
|
||||||
|
|
||||||
|
#define FD_ZERO(set) do { *set = 0; } while (0)
|
||||||
|
#define FD_SET(fd, set) do { *set |= (1<<fd); } while (0);
|
||||||
|
#define FD_CLR(fd, set) do { *set &= ~(1<<fd); } while (0);
|
||||||
|
#define FD_ISSET(fd, set) (*set | (1<<fd))
|
||||||
|
|
||||||
|
#endif
|
16
plat/pdpv7/libsys/build.lua
Normal file
16
plat/pdpv7/libsys/build.lua
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
acklibrary {
|
||||||
|
name = "lib",
|
||||||
|
srcs = {
|
||||||
|
"./*.c",
|
||||||
|
"./*.s",
|
||||||
|
},
|
||||||
|
deps = {
|
||||||
|
"lang/cem/libcc.ansi/headers+headers",
|
||||||
|
"plat/pdpv7/include+headers",
|
||||||
|
},
|
||||||
|
vars = {
|
||||||
|
plat = "pdpv7"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- /tmp/ack-build/staging/lib/ack/cpp.ansi -D__unix -I/tmp/ack-build/obj/lang/cem/libcc.ansi/headers/headers -I/tmp/ack-build/obj/plat/rpi/include/headers -D__vc4 -D__rpi -D__ACK -I/tmp/ack-build/staging/share/ack/rpi/include -I/tmp/ack-build/staging/share/ack/include/ansi -Dvc4 -DEM_WSIZE=4 -DEM_PSIZE=4 -DEM_SSIZE=2 -DEM_LSIZE=4 -DEM_FSIZE=4 -DEM_DSIZE=4 -D_EM_WSIZE=4 -D_EM_PSIZE=4 -D_EM_SSIZE=2 -D_EM_LSIZE=4 -D_EM_FSIZE=4 -D_EM_DSIZE=4 plat/rpi/libsys/pi_user_to_phys.s
|
8
plat/pdpv7/libsys/isatty.c
Normal file
8
plat/pdpv7/libsys/isatty.c
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
int isatty(int fd)
|
||||||
|
{
|
||||||
|
char* p;
|
||||||
|
|
||||||
|
if (gtty(fd, &p) < 0)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue