ref: 7ec9f2612f4ac5e4e15922369c7536753e68fc26
parent: cfff87f071241a6a65401fd66125569ccc8e6a38
parent: 7180aa94fe54c91579070dcf0518c46d17060f29
author: Roberto E. Vargas Caballero <[email protected]>
date: Mon Sep 10 04:59:40 EDT 2018
Merge branch 'master' of ssh://simple-cc.org/var/gitrepos/scc
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,23 @@
*.o
*.a
-bin/
-cc1/cc1-*
+rootdir/libexec/scc/cc1-*
+rootdir/libexec/scc/cc2-*
+rootdir/libexec/scc/as-*
+rootdir/bin/ld
+rootdir/bin/scc
+rootdir/bin/scpp
+rootdir/bin/ar
+rootdir/bin/nm
+rootdir/bin/objdump
test.log
-cc2/cc2-*
cc2/error.h
-as/as-*
-driver/posix/scc
-makefile
instbl.c
config.mk
inc/ldflags.h
inc/sysincludes.h
inc/syslibs.h
+inc/syscrts.h
driver/posix/config.h
-driver/posix/cpp
-rootdir/
-ar/ar-*
-nm/nm
-objdump/objdump
as/target/*/*tbl.c
*.out
+config
--- a/Makefile
+++ b/Makefile
@@ -7,25 +7,28 @@
DIRS = inc cc1 cc2 driver lib as ar nm objdump ld
-all:
- $(FORALL)
+all: $(DIRS)
-clean:
- $(FORALL)
- rm -rf rootdir
+$(DIRS): config FORCE
+ +@cd $@ && $(MAKE) all
-distclean:
- touch config.mk # we need config.mk for makes in $DIRS
- find . -name makefile | xargs rm -f
+clean dep:
$(FORALL)
- rm -rf rootdir
- rm -f config.mk
-dep: config.mk
+distclean: unconfig
$(FORALL)
+ rm -f config
tests: all
- +cd tests && $(MAKE) -e all
+ +@cd tests && $(MAKE) -e all
+
+unconfig:
+ (echo '/^### Systems/,$$ v/^#/ s/^/#/' ; echo w) | ed -s config.mk
+ rm -f config
+
+config:
+ ./config.sh
+ touch $@
install: all
mkdir -p $(DESTDIR)$(PREFIX)/
--- a/README
+++ b/README
@@ -1,13 +1,14 @@
-Derivations from standard C
+Deviations from standard C
===========================
-This compiler is aimed to be being fully compatible with the C99 standard, but
+This compiler aims to be fully compatible with the C99 standard, but
it will have some differences:
- Type qualifiers are accepted but ignored.
-----------------------------------------
-Type qualifers make the type system ugly, and their uselessness add
+Type qualifiers make the type system ugly, and their uselessness adds
unnecessary complexity to the compiler (and increased compilation time):
+
- const: The definition of const is not clear in the standard.
If a const value is modified the behaviour is undefined
behaviour. It seems it was defined in order to be able to
@@ -22,15 +23,17 @@
or variables whose values are modified asynchronously. This can
be achieved with special pragma values though.
In the first case, it generates a lot of problems with modern
- processors and multithreading, where not holding the value in a
+ processors and multithreading, when not holding the value in a
register is not good enough (an explicit memory barrier is needed).
In the second case, this is non-portable code by definition
(depending on the register mapped), so it is better to deal with
it using another solution (compiler extensions or direct
- assembler).
+ assembly). Since it is needed for the correct behaviour
+ of portable programs that use longjmp, this specifier eventually
+ will be implemented.
- - restrict: This qualifer can only be applied to pointers to
- mark that the pointed object has no other alias. This qualifer
+ - restrict: This qualifier can only be applied to pointers to
+ mark that the pointed object has no other alias. This qualifier
was introduced to be able to fix some performance problems in
numerical algorithms, where FORTRAN could achieve a better
performance (and in fact even with this specifier FORTRAN has a
@@ -46,7 +49,7 @@
int f(int (int));
-Accepting function types in typenames (or abstract declarators) makes the
+Accepting function types in type names (or abstract declarators) makes the
grammar ambiguous because it is impossible to differentiate between:
(int (f)) -> function returning int with one parameter of type f
@@ -76,7 +79,7 @@
C89 allows the definition of variables with incomplete type that
have external linkage and file scope. The type of the variable
is the composition of all the definitions find in the file. The exact
-rules are a bit complex (3.7.2), and SCC ignores them at this moment
+rules are a bit complex (3.7.2) so SCC ignores them at this moment
and it does not allow any definition of variables with incomplete type.
If you don't believe me try this code:
@@ -86,3 +89,15 @@
struct foo {
int i;
};
+
+- Variadic function alike macros
+ ------------------------------
+
+The standard (C99 6.10.3 c 4) forces to pass more parameters than
+the number of parameters present in the variadic argument list
+(excluding ...). Scc accepts a parameter list with the same number
+of arguments.
+
+#define P(a, ...) a
+
+P(1)
--- a/ar/Makefile
+++ b/ar/Makefile
@@ -2,25 +2,21 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
-OBJ = main.o $(DRIVER)/driver.o
-MOREFLAGS = -I$(DRIVER)
+OBJ = main.o $(DRIVER)/driver.o
+MORECFLAGS = -I$(DRIVER)
+STDCFLAGS =
-all: ar-$(DRIVER)
- cp ar-$(DRIVER) $(PROJECTDIR)/rootdir/bin/ar
+all: $(BINDIR)/ar
-ar-$(DRIVER): $(OBJ) $(LIBDIR)/libscc.a
+$(BINDIR)/ar: $(OBJ) $(LIBDIR)/libscc.a
$(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
-main.o: $(PROJECTDIR)/inc/scc.h $(PROJECTDIR)/inc/ar.h
-
-$(DRIVER)/driver.o: $(DRIVER)/driver.h
-
-main.o: $(DRIVER)/driver.h
-
dep:
+ $(PROJECTDIR)/mkdep.sh
+
clean:
- rm -f ar-* *.o $(DRIVER)/*.o
+ rm -f *.o $(DRIVER)/*.o $(BINDIR)/ar
-distclean: clean
+include deps.mk
--- /dev/null
+++ b/ar/deps.mk
@@ -1,0 +1,7 @@
+main.o: $(DRIVER)/driver.h
+
+#deps
+main.o: ../inc/ar.h
+main.o: ../inc/arg.h
+main.o: ../inc/scc.h
+posix/driver.o: posix/driver.h
--- a/ar/main.c
+++ b/ar/main.c
@@ -50,10 +50,17 @@
}
}
+/*
+ * I do know that you cannot call remove from a signal handler
+ * but we only can use stdio function to deal with files
+ * because we are C99 compliant, and it is very likely that
+ * remove is going to work in this case
+ */
static void
sigfun(int signum)
{
- exit(1);
+ cleanup();
+ _Exit(1);
}
static FILE *
@@ -609,6 +616,8 @@
lflag = 1;
break;
case 'u':
+ /* TODO */
+ abort();
uflag = 1;
break;
default:
--- a/as/Makefile
+++ b/as/Makefile
@@ -2,30 +2,28 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
OBJ = main.o symbol.o ins.o parser.o expr.o myro.o
-HDR = $(PROJECTDIR)/inc/scc.h as.h
-MOREFLAGS = -I$(PROJECTDIR)/inc/$(STD) $(AS_CFLAGS)
+MORECFLAGS = -I$(INCLUDE)/$(STD)
+TARGETS = $(LIBEXEC)/as-amd64 $(LIBEXEC)/as-i386 \
+ $(LIBEXEC)/as-i286 $(LIBEXEC)/as-z80
-all:
+all: $(TARGETS)
-$(OBJ): $(HDR)
+$(TARGETS): $(LIBDIR)/libscc.a
-as: $(OBJ)
- $(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
-
-myro.o: $(PROJECTDIR)/inc/myro.h
-
dep:
- ./gendep.sh $(TARGETS)
+ $(PROJECTDIR)/mkdep.sh
clean:
rm -f *.o target/*/*.o
rm -f target/*/*tbl.c
rm -f as-*
- rm -f *.log
+ rm -f $(TARGETS)
-distclean: clean
- rm -f makefile
-
+include target/amd64.mk
+include target/i386.mk
+include target/i286.mk
+include target/z80.mk
+include deps.mk
--- a/as/as.h
+++ b/as/as.h
@@ -41,9 +41,9 @@
ADIRECT,
AREG_OFF,
ASYM,
+ AOPT,
+ AREP,
AMAX,
- AOPT = 64,
- AREP = 128,
};
enum tokens {
--- /dev/null
+++ b/as/deps.mk
@@ -1,0 +1,46 @@
+parser.o: $(PROJECTDIR)/inc/$(STD)/cstd.h
+
+#deps
+expr.o: ../inc/scc.h
+expr.o: as.h
+ins.o: ../inc/scc.h
+ins.o: as.h
+main.o: ../inc/arg.h
+main.o: ../inc/scc.h
+main.o: as.h
+myro.o: ../inc/myro.h
+myro.o: ../inc/scc.h
+myro.o: as.h
+parser.o: ../inc/scc.h
+parser.o: as.h
+symbol.o: ../inc/scc.h
+symbol.o: as.h
+target/x80/ins.o: target/x80/../../../inc/scc.h
+target/x80/ins.o: target/x80/../../as.h
+target/x80/ins.o: target/x80/proc.h
+target/x80/z80.o: target/x80/../../../inc/scc.h
+target/x80/z80.o: target/x80/../../as.h
+target/x80/z80.o: target/x80/../x80/proc.h
+target/x80/z80tbl.o: target/x80/../../../inc/scc.h
+target/x80/z80tbl.o: target/x80/../../as.h
+target/x80/z80tbl.o: target/x80/../x80/proc.h
+target/x86/amd64.o: target/x86/../../../inc/scc.h
+target/x86/amd64.o: target/x86/../../as.h
+target/x86/amd64tbl.o: target/x86/../../../inc/scc.h
+target/x86/amd64tbl.o: target/x86/../../as.h
+target/x86/amd64tbl.o: target/x86/../x86/proc.h
+target/x86/i286.o: target/x86/../../../inc/scc.h
+target/x86/i286.o: target/x86/../../as.h
+target/x86/i286.o: target/x86/../x86/proc.h
+target/x86/i286tbl.o: target/x86/../../../inc/scc.h
+target/x86/i286tbl.o: target/x86/../../as.h
+target/x86/i286tbl.o: target/x86/../x86/proc.h
+target/x86/i386.o: target/x86/../../../inc/scc.h
+target/x86/i386.o: target/x86/../../as.h
+target/x86/i386.o: target/x86/../x86/proc.h
+target/x86/i386tbl.o: target/x86/../../../inc/scc.h
+target/x86/i386tbl.o: target/x86/../../as.h
+target/x86/i386tbl.o: target/x86/../x86/proc.h
+target/x86/ins.o: target/x86/../../../inc/scc.h
+target/x86/ins.o: target/x86/../../as.h
+target/x86/ins.o: target/x86/proc.h
--- a/as/gendep.sh
+++ /dev/null
@@ -1,27 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-re='\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)'
-
-echo $@ |
-tr ' ' '\n' |
-sed "s/$re/\1/" |
-sort -u |
-(cat Makefile
-while read i
-do
- cat <<EOF
-include target/$i.mk
-
-\$(OBJ-$i): \$(HDR)
-all: as-$i
-OBJ-$i: \$(HDR)
-as-$i: \$(OBJ-$i) \$(LIBDIR)/libscc.a
- \$(CC) \$(SCC_LDFLAGS) \$(OBJ-$i) -lscc -o \$@
-
-EOF
-done) > $$.mk && mv $$.mk makefile
--- a/as/gentbl.awk
+++ b/as/gentbl.awk
@@ -3,7 +3,6 @@
printf "#include \"../../../inc/scc.h\"\n"\
"#include \"../../as.h\"\n"\
"#include \"../" family "/proc.h\"\n"
- nop = 0; nvar = 0
rules = "target/" family "/rules.dat"
while (getline < rules > 0) {
@@ -10,7 +9,7 @@
regex[++nregs] = $1
value[nregs] = $2
}
- close("target/rules.awk")
+ close(rules)
}
{sub(/#.*/,"")}
@@ -77,6 +76,12 @@
for (i = 1; i <= n; i++) {
a = args[i]
found = 0
+
+ if (a ~ /\?$/)
+ out = out "AOPT ,"
+ else if (a ~ /\+$/)
+ out = out "AREP ,"
+
for (j = 1; j <= nregs; j++) {
if (match(a, "^" regex[j])) {
out = out value[j]
@@ -92,11 +97,9 @@
}
a = substr(a, RLENGTH+1)
- if (a ~ /^\+$/) {
- return out "|AREP"
- } else if (a ~ /^\?$/) {
- return out "|AOPT"
- } else if (a != "") {
+ sub(/\?$/, "", a)
+ sub(/\+$/, "", a)
+ if (a != "") {
print FILENAME ":" NR ":" \
$0 ": trailing chars: ", a > "/dev/stderr"
exit 1
--- a/as/gentbl.sh
+++ b/as/gentbl.sh
@@ -28,6 +28,6 @@
trap "rm -f $$.c" 0 2 3
awk '!/^$/ {print $1,NR,$2,$3,$4,$5,$6}' target/$family/$family.dat |
-sort -k1 -k2n |
+LC_COLLATE=C sort -k1 -k2n |
awk -v cpu=`echo $cpu | tr a-z A-Z` -v family=$family -f gentbl.awk > $$.c &&
mv $$.c target/$family/${cpu}tbl.c
--- a/as/ins.c
+++ b/as/ins.c
@@ -247,14 +247,3 @@
{
addinput(args[0]->sym->name.buf);
}
-
-void
-att(Op *op, Node **args)
-{
- Symbol *sym = args[0]->sym;
- extern int left2right;
-
- if ((sym->flags & FABS) == 0)
- error("align expression is not an absolute expression");
- left2right = sym->value;
-}
--- a/as/main.c
+++ b/as/main.c
@@ -105,7 +105,6 @@
main(int argc, char *argv[])
{
char **p;
- extern int left2right;
outfile = "a.out";
@@ -112,12 +111,6 @@
ARGBEGIN {
case 'o':
outfile = EARGF(usage());
- break;
- case 'l':
- left2right = 1;
- break;
- case 'r':
- left2right = 0;
break;
default:
usage();
--- a/as/parser.c
+++ b/as/parser.c
@@ -300,24 +300,14 @@
getargs(char *s)
{
Node **ap;
- extern int left2right;
- static Node *args[NARGS+1];
+ static Node *args[NARGS];
if (!s)
return NULL;
- if (!left2right) {
- ap = args;
- do {
- if ((*ap = operand(&s)) == NULL)
- return args;
- } while (++ap < &args[NARGS]);
- } else {
- ap = &args[NARGS];
- do {
- if ((*--ap = operand(&s)) == NULL)
- return ap+1;
- } while (ap > args+1);
+ for (ap = args; ap < &args[NARGS-1]; ++ap) {
+ if ((*ap = operand(&s)) == NULL)
+ return args;
}
error("too many arguments in one instruction");
}
--- a/as/target/amd64.mk
+++ b/as/target/amd64.mk
@@ -1,9 +1,8 @@
-amd64_LST = target/x86/amd64tbl.o target/x86/amd64.o target/x86/ins.o
+AMD64_OBJ = $(OBJ) target/x86/amd64tbl.o target/x86/amd64.o target/x86/ins.o
-$(amd64_LST): target/x86/proc.h
-
target/x86/amd64tbl.c: gentbl.awk target/x86/x86.dat target/x86/rules.dat
./gentbl.sh -f x86 -c amd64
-OBJ-amd64 = $(OBJ) $(amd64_LST)
+$(LIBEXEC)/as-amd64: $(AMD64_OBJ)
+ $(CC) $(SCC_LDFLAGS) $(AMD64_OBJ) -lscc -o $@
--- /dev/null
+++ b/as/target/i286.mk
@@ -1,0 +1,8 @@
+
+I286_OBJ = $(OBJ) target/x86/i286tbl.o target/x86/i286.o target/x86/ins.o
+
+target/x86/i286tbl.c: gentbl.awk target/x86/x86.dat target/x86/rules.dat
+ ./gentbl.sh -f x86 -c i286
+
+$(LIBEXEC)/as-i286: $(I286_OBJ)
+ $(CC) $(SCC_LDFLAGS) $(I286_OBJ) -lscc -o $@
--- a/as/target/i386.mk
+++ b/as/target/i386.mk
@@ -1,9 +1,8 @@
-i386_LST = target/x86/i386tbl.o target/x86/i386.o target/x86/ins.o
+I386_OBJ = $(OBJ) target/x86/i386tbl.o target/x86/i386.o target/x86/ins.o
-$(i386_LST): target/x86/proc.h
-
target/x86/i386tbl.c: gentbl.awk target/x86/x86.dat target/x86/rules.dat
./gentbl.sh -f x86 -c i386
-OBJ-i386 = $(OBJ) $(i386_LST)
+$(LIBEXEC)/as-i386: $(I386_OBJ)
+ $(CC) $(SCC_LDFLAGS) $(I386_OBJ) -lscc -o $@
--- a/as/target/x80/ins.c
+++ b/as/target/x80/ins.c
@@ -68,20 +68,26 @@
match(Op *op, Node **args)
{
unsigned char *p;
- int arg, class;
+ int arg, class, rep, opt;
Node *np;
if (!op->args)
return args == NULL;
+ opt = rep = 0;
for (p = op->args; arg = *p; ++p) {
- if (arg & AREP)
+ if (rep)
--p;
if ((np = *args++) == NULL)
- return (arg & (AREP|AOPT)) != 0;
+ return (rep|opt) != 0;
- arg &= ~(AREP|AOPT);
switch (arg) {
+ case AOPT:
+ opt = 1;
+ break;
+ case AREP:
+ rep = 1;
+ break;
case AINDER_C:
arg = AREG_C;
goto indirect;
--- a/as/target/x80/proc.h
+++ b/as/target/x80/proc.h
@@ -63,7 +63,7 @@
ARST, /* 0h, 08h, 10h, 18h, 20h, 28h, 30h, 38h */
};
-enum {
+enum class {
RCLASS = 1 << 0,
PCLASS = 1 << 1,
QCLASS = 1 << 2,
--- a/as/target/x80/x80.dat
+++ b/as/target/x80/x80.dat
@@ -33,7 +33,6 @@
.STRING string+ 0 none string Z80,R800,GB80
.ASCII string+ 0 none ascii Z80,R800,GB80
.ALIGN imm16+ 0 none align Z80,R800,GB80
-.ATT imm8 0 none att Z80,R800,GB80
.END none 0 none end Z80,R800,GB80
.INCLUDE string 0 none include Z80,R800,GB80
@@ -72,12 +71,24 @@
LD A,(BC) 1 0x0a noargs Z80,R800,GB80
LD A,(DE) 1 0x1a noargs Z80,R800,GB80
-LD A,(n) 3 0x3a dir Z80,R800,GB80
+LD A,(n) 3 0x3a dir Z80,R800
LD (BC),A 1 0x2 noargs Z80,R800,GB80
LD (DE),A 1 0x12 noargs Z80,R800,GB80
-LD (n),A 3 0x32 dir Z80,R800,GB80
+LD (n),A 3 0x32 dir Z80,R800
+LD A,(n) 3 0xfa dir GB80
+LD A,(HL+) 1 0x2a ld8 GB80 #TODO
+LD A,(HL-) 1 0x3a ld8 GB80 #TODO
+LD A,($FF00+n) 2 0xf0 dir GB80 #TODO
+LD A,($FF00+C) 2 0xf2 dir GB80 #TODO
+
+LD (n),A 3 0xea dir GB80
+LD (HL+),A 1 0x22 ld8 GB80 #TODO
+LD (HL-),A 1 0x32 ld8 GB80 #TODO
+LD ($FF00+n),A 2 0xe0 dir GB80 #TODO
+LD ($FF00+C),A 2 0xe2 dir GB80 #TODO
+
LD A,I 2 0xed,0x57 noargs Z80,R800
LD A,R 2 0xed,0x5f noargs Z80,R800
LD I,A 2 0xed,0x47 noargs Z80,R800
@@ -188,6 +199,9 @@
DEC (IX+n) 3 0xdd,0x35 alu8 Z80,R800
DEC (IY+n) 3 0xfd,0x35 alu8 Z80,R800
+ADD SP,dd 2 0xE8 alu8 GB80
+LD HL,SP+imm8 2 0xF8 alu8 GB80
+
# 16 bit ALU group
ADD HL,dd 1 0x09 alu16 Z80,R800,GB80
ADC HL,dd 2 0xed,0x4a alu16 Z80,R800
@@ -211,6 +225,7 @@
SCF none 1 0x37 noargs Z80,R800,GB80
NOP none 1 0x00 noargs Z80,R800,GB80
HALT none 1 0x76 noargs Z80,R800,GB80
+STOP none 2 0x10,0x00 noargs GB80
DI none 1 0xf3 noargs Z80,R800,GB80
EI none 1 0xfb noargs Z80,R800,GB80
IM imm8 2 0xed,0x46 im Z80,R800
@@ -242,41 +257,44 @@
RLD none 2 0xed,0x6f noargs Z80,R800
RRD none 2 0xed,0x67 noargs Z80,R800
-RLC r 2 0xcb,0x00 rot_bit Z80,R800
-RLC (HL) 2 0xcb,0x06 rot_bit Z80,R800
+RLC r 2 0xcb,0x00 rot_bit Z80,R800,GB80
+RLC (HL) 2 0xcb,0x06 rot_bit Z80,R800,GB80
RLC (IX+n) 4 0xdd,0xcb,0,0x06 rot_bit Z80,R800
RLC (IY+n) 4 0xfd,0xcb,0,0x06 rot_bit Z80,R800
RLC (IX+n),r 4 0xdd,0xcb,0,0x00 rot_bit Z80,R800
RLC (IY+n),r 4 0xfd,0xcb,0,0x00 rot_bit Z80,R800
-RL r 2 0xcb,0x10 rot_bit Z80,R800
-RL (HL) 2 0xcb,0x16 rot_bit Z80,R800
+RL r 2 0xcb,0x10 rot_bit Z80,R800,GB80
+RL (HL) 2 0xcb,0x16 rot_bit Z80,R800,GB80
RL (IX+n) 4 0xdd,0xcb,0,0x16 rot_bit Z80,R800
RL (IY+n) 4 0xfd,0xcb,0,0x16 rot_bit Z80,R800
RL (IX+n),r 4 0xdd,0xcb,0,0x10 rot_bit Z80,R800
RL (IY+n),r 4 0xfd,0xcb,0,0x10 rot_bit Z80,R800
-RRC r 2 0xcb,0x08 rot_bit Z80,R800
-RRC (HL) 2 0xcb,0x0e rot_bit Z80,R800
+RRC r 2 0xcb,0x08 rot_bit Z80,R800,GB80
+RRC (HL) 2 0xcb,0x0e rot_bit Z80,R800,GB80
RRC (IX+n) 4 0xdd,0xcb,0,0x0e rot_bit Z80,R800
RRC (IY+n) 4 0xfd,0xcb,0,0x0e rot_bit Z80,R800
RRC (IX+n),r 4 0xdd,0xcb,0,0x08 rot_bit Z80,R800
RRC (IY+n),r 4 0xfd,0xcb,0,0x08 rot_bit Z80,R800
-RR r 2 0xcb,0x18 rot_bit Z80,R800
-RR (HL) 2 0xcb,0x1e rot_bit Z80,R800
+RR r 2 0xcb,0x18 rot_bit Z80,R800,GB80
+RR (HL) 2 0xcb,0x1e rot_bit Z80,R800,GB80
RR (IX+n) 4 0xdd,0xcb,0,0x1e rot_bit Z80,R800
RR (IY+n) 4 0xfd,0xcb,0,0x1e rot_bit Z80,R800
RR (IX+n),r 4 0xdd,0xcb,0,0x18 rot_bit Z80,R800
RR (IY+n),r 4 0xfd,0xcb,0,0x18 rot_bit Z80,R800
-SLA r 2 0xcb,0x20 rot_bit Z80,R800
-SLA (HL) 2 0xcb,0x26 rot_bit Z80,R800
+SLA r 2 0xcb,0x20 rot_bit Z80,R800,GB80
+SLA (HL) 2 0xcb,0x26 rot_bit Z80,R800,GB80
SLA (IX+n) 4 0xdd,0xcb,0,0x26 rot_bit Z80,R800
SLA (IY+n) 4 0xfd,0xcb,0,0x26 rot_bit Z80,R800
SLA (IX+n),r 4 0xdd,0xcb,0,0x20 rot_bit Z80,R800
SLA (IY+n),r 4 0xfd,0xcb,0,0x20 rot_bit Z80,R800
+SWAP r 2 0xcb,0x30 rot_bit GB80
+SWAP (HL) 2 0xcb,0x36 rot_bit GB80
+
SLL r 2 0xcb,0x30 rot_bit Z80
SLL (HL) 2 0xcb,0x36 rot_bit Z80
SLL (IX+n) 4 0xdd,0xcb,0,0x36 rot_bit Z80
@@ -284,15 +302,15 @@
SLL (IX+n),r 4 0xdd,0xcb,0,0x30 rot_bit Z80
SLL (IY+n),r 4 0xfd,0xcb,0,0x30 rot_bit Z80
-SRA r 2 0xcb,0x28 rot_bit Z80,R800
-SRA (HL) 2 0xcb,0x2e rot_bit Z80,R800
+SRA r 2 0xcb,0x28 rot_bit Z80,R800,GB80
+SRA (HL) 2 0xcb,0x2e rot_bit Z80,R800,GB80
SRA (IX+n) 4 0xdd,0xcb,0,0x2e rot_bit Z80,R800
SRA (IY+n) 4 0xfd,0xcb,0,0x2e rot_bit Z80,R800
SRA (IX+n),r 4 0xdd,0xcb,0,0x28 rot_bit Z80,R800
SRA (IY+n),r 4 0xfd,0xcb,0,0x28 rot_bit Z80,R800
-SRL r 2 0xcb,0x38 rot_bit Z80,R800
-SRL (HL) 2 0xcb,0x3e rot_bit Z80,R800
+SRL r 2 0xcb,0x38 rot_bit Z80,R800,GB80
+SRL (HL) 2 0xcb,0x3e rot_bit Z80,R800,GB80
SRL (IX+n) 4 0xdd,0xcb,0,0x3e rot_bit Z80,R800
SRL (IY+n) 4 0xfd,0xcb,0,0x3e rot_bit Z80,R800
SRL (IX+n),r 4 0xdd,0xcb,0,0x38 rot_bit Z80,R800
@@ -299,20 +317,20 @@
SRL (IY+n),r 4 0xfd,0xcb,0,0x38 rot_bit Z80,R800
# Bit manipulation group
-BIT imm3,r 2 0xcb,0x40 rot_bit Z80,R800
+BIT imm3,r 2 0xcb,0x40 rot_bit Z80,R800,GB80
BIT imm3,(HL) 2 0xcb,0x46 rot_bit Z80,R800
BIT imm3,(IX+n) 4 0xdd,0xcb,0,0x46 rot_bit Z80,R800
BIT imm3,(IY+n) 4 0xfd,0xcb,0,0x46 rot_bit Z80,R800
-SET imm3,r 2 0xcb,0xc0 rot_bit Z80,R800
-SET imm3,(HL) 2 0xcb,0xc6 rot_bit Z80,R800
+SET imm3,r 2 0xcb,0xc0 rot_bit Z80,R800,GB80
+SET imm3,(HL) 2 0xcb,0xc6 rot_bit Z80,R800,GB80
SET imm3,(IX+n) 4 0xdd,0xcb,0,0xc6 rot_bit Z80,R800
SET imm3,(IY+n) 4 0xfd,0xcb,0,0xc6 rot_bit Z80,R800
SET imm3,(IX+n),r 4 0xdd,0xcb,0,0xc0 rot_bit Z80,R800
SET imm3,(IY+n),r 4 0xfd,0xcb,0,0xc0 rot_bit Z80,R800
-RES imm3,r 2 0xcb,0x80 rot_bit Z80,R800
-RES imm3,(HL) 2 0xcb,0x86 rot_bit Z80,R800
+RES imm3,r 2 0xcb,0x80 rot_bit Z80,R800,GB80
+RES imm3,(HL) 2 0xcb,0x86 rot_bit Z80,R800,GB80
RES imm3,(IX+n) 4 0xdd,0xcb,0,0x86 rot_bit Z80,R800
RES imm3,(IY+n) 4 0xfd,0xcb,0,0x86 rot_bit Z80,R800
RES imm3,(IX+n),r 4 0xdd,0xcb,0,0x80 rot_bit Z80,R800
@@ -340,16 +358,17 @@
JP cc,imm16 3 0xc2 jp Z80,R800,GB80
JR imm16 2 0x18 jr Z80,R800,GB80
JR ss,imm16 2 0x00 jr Z80,R800,GB80
-JP (HL) 1 0xe9 jp Z80,R800,GB80
-JP (IX) 2 0xdd,0xe9 jp Z80,R800
-JP (IY) 2 0xfd,0xe9 jp Z80,R800
-DJNZ imm16 2 0x10 jr Z80,R800,GB80
+JP HL 1 0xe9 noargs Z80,R800,GB80
+JP IX 2 0xdd,0xe9 noargs Z80,R800
+JP IY 2 0xfd,0xe9 noargs Z80,R800
+DJNZ imm16 2 0x10 jr Z80,R800
# Call and return group
CALL imm16 3 0xcd jp Z80,R800,GB80
-CALL cc,imm16 3 0xc4 jp Z80,R800
+CALL cc,imm16 3 0xc4 jp Z80,R800,GB80
RET none 1 0xc9 noargs Z80,R800,GB80
-RET cc 1 0xc0 jp Z80,R800
+RET cc 1 0xc0 jp Z80,R800,GB80
RETI none 2 0xed,0x4d noargs Z80,R800
+RETI none 1 0xd9 noargs GB80
RETN none 2 0xed,0x45 noargs Z80,R800
RST rst 1 0xc7 rst Z80,R800,GB80
--- a/as/target/x80/z80-test.s
+++ /dev/null
@@ -1,1588 +1,0 @@
- NOP / 00
- LD BC,$64 / 01 40 00
- LD (BC),A / 02
- INC BC / 03
- INC B / 04
- DEC B / 05
- LD B,$32 / 06 20
- RLCA / 07
- EX AF,AF' / 08
- ADD HL,BC / 09
- LD A,(BC) / 0A
- DEC BC / 0B
- INC C / 0C
- DEC C / 0D
- LD C,$64 / 0E 40
- RRCA / 0F
-L1: DJNZ $L1 / 10 02
- LD DE,$32 / 11 20 00
- LD (DE),A / 12
- INC DE / 13
- INC D / 14
- DEC D / 15
- LD D,$64 / 16 40
- RLA / 17
-L2: JR $L2 / 18 02
- ADD HL,DE / 19
- LD A,(DE) / 1A
- DEC DE / 1B
- INC E / 1C
- DEC E / 1D
- LD E,$64 / 1E 40
- RRA / 1F
-L3: JR NZ,$L3 / 20 02
- LD HL,$32 / 21 20 00
- LD (32768),HL / 22 00 80
- INC HL / 23
- INC H / 24
- DEC H / 25
- LD H,$64 / 26 40
- DAA / 27
-L4: JR Z,$L4 / 28 02
- ADD HL,HL / 29
- LD HL,(16384) / 2A 00 40
- DEC HL / 2B
- INC L / 2C
- DEC L / 2D
- LD L,$32 / 2E 20
- CPL / 2F
-L5: JR NC,$L5 / 30 02
- LD SP,$64 / 31 40 00
- LD (32768),A / 32 00 80
- INC SP / 33
- INC (HL) / 34
- DEC (HL) / 35
- LD (HL),$32 / 36 20
- SCF / 37
-L6: JR C,$L6 / 38 02
- ADD HL,SP / 39
- LD A,(16384) / 3A 00 40
- DEC SP / 3B
- INC A / 3C
- DEC A / 3D
- LD A,$32 / 3E 20
- CCF / 3F
- LD B,B / 40
- LD B,C / 41
- LD B,D / 42
- LD B,E / 43
- LD B,H / 44
- LD B,L / 45
- LD B,(HL) / 46
- LD B,A / 47
- LD C,B / 48
- LD C,C / 49
- LD C,D / 4A
- LD C,E / 4B
- LD C,H / 4C
- LD C,L / 4D
- LD C,(HL) / 4E
- LD C,A / 4F
- LD D,B / 50
- LD D,C / 51
- LD D,D / 52
- LD D,E / 53
- LD D,H / 54
- LD D,L / 55
- LD D,(HL) / 56
- LD D,A / 57
- LD E,B / 58
- LD E,C / 59
- LD E,D / 5A
- LD E,E / 5B
- LD E,H / 5C
- LD E,L / 5D
- LD E,(HL) / 5E
- LD E,A / 5F
- LD H,B / 60
- LD H,C / 61
- LD H,D / 62
- LD H,E / 63
- LD H,H / 64
- LD H,L / 65
- LD H,(HL) / 66
- LD H,A / 67
- LD L,B / 68
- LD L,C / 69
- LD L,D / 6A
- LD L,E / 6B
- LD L,H / 6C
- LD L,L / 6D
- LD L,(HL) / 6E
- LD L,A / 6F
- LD (HL),B / 70
- LD (HL),C / 71
- LD (HL),D / 72
- LD (HL),E / 73
- LD (HL),H / 74
- LD (HL),L / 75
- HALT / 76
- LD (HL),A / 77
- LD A,B / 78
- LD A,C / 79
- LD A,D / 7A
- LD A,E / 7B
- LD A,H / 7C
- LD A,L / 7D
- LD A,(HL) / 7E
- LD A,A / 7F
- ADD A,B / 80
- ADD A,C / 81
- ADD A,D / 82
- ADD A,E / 83
- ADD A,H / 84
- ADD A,L / 85
- ADD A,(HL) / 86
- ADD A,A / 87
- ADC A,B / 88
- ADC A,C / 89
- ADC A,D / 8A
- ADC A,E / 8B
- ADC A,H / 8C
- ADC A,L / 8D
- ADC A,(HL) / 8E
- ADC A,A / 8F
- SUB A,B / 90
- SUB A,C / 91
- SUB A,D / 92
- SUB A,E / 93
- SUB A,H / 94
- SUB A,L / 95
- SUB A,(HL) / 96
- SUB A,A / 97
- SBC A,B / 98
- SBC A,C / 99
- SBC A,D / 9A
- SBC A,E / 9B
- SBC A,H / 9C
- SBC A,L / 9D
- SBC A,(HL) / 9E
- SBC A,A / 9F
- AND A,B / A0
- AND A,C / A1
- AND A,D / A2
- AND A,E / A3
- AND A,H / A4
- AND A,L / A5
- AND A,(HL) / A6
- AND A,A / A7
- XOR A,B / A8
- XOR A,C / A9
- XOR A,D / AA
- XOR A,E / AB
- XOR A,H / AC
- XOR A,L / AD
- XOR A,(HL) / AE
- XOR A,A / AF
- OR A,B / B0
- OR A,C / B1
- OR A,D / B2
- OR A,E / B3
- OR A,H / B4
- OR A,L / B5
- OR A,(HL) / B6
- OR A,A / B7
- CP A,B / B8
- CP A,C / B9
- CP A,D / BA
- CP A,E / BB
- CP A,H / BC
- CP A,L / BD
- CP A,(HL) / BE
- CP A,A / BF
- RET NZ / C0
- POP BC / C1
- JP NZ,$16384 / C2 00 40
- JP $32768 / C3 00 80
- CALL NZ,$32768 / C4 00 80
- PUSH BC / C5
- ADD A,$32 / C6 20
- RST $0 / C7
- RET Z / C8
- RET / C9
- JP Z,$32768 / CA 00 80
- RLC B / CB 00
- RLC C / CB 01
- RLC D / CB 02
- RLC E / CB 03
- RLC H / CB 04
- RLC L / CB 05
- RLC (HL) / CB 06
- RLC A / CB 07
- RRC B / CB 08
- RRC C / CB 09
- RRC D / CB 0A
- RRC E / CB 0B
- RRC H / CB 0C
- RRC L / CB 0D
- RRC (HL) / CB 0E
- RRC A / CB 0F
- RL B / CB 10
- RL C / CB 11
- RL D / CB 12
- RL E / CB 13
- RL H / CB 14
- RL L / CB 15
- RL (HL) / CB 16
- RL A / CB 17
- RR B / CB 18
- RR C / CB 19
- RR D / CB 1A
- RR E / CB 1B
- RR H / CB 1C
- RR L / CB 1D
- RR (HL) / CB 1E
- RR A / CB 1F
- SLA B / CB 20
- SLA C / CB 21
- SLA D / CB 22
- SLA E / CB 23
- SLA H / CB 24
- SLA L / CB 25
- SLA (HL) / CB 26
- SLA A / CB 27
- SRA B / CB 28
- SRA C / CB 29
- SRA D / CB 2A
- SRA E / CB 2B
- SRA H / CB 2C
- SRA L / CB 2D
- SRA (HL) / CB 2E
- SRA A / CB 2F
- SLL B / CB 30
- SLL C / CB 31
- SLL D / CB 32
- SLL E / CB 33
- SLL H / CB 34
- SLL L / CB 35
- SLL (HL) / CB 36
- SLL A / CB 37
- SRL B / CB 38
- SRL C / CB 39
- SRL D / CB 3A
- SRL E / CB 3B
- SRL H / CB 3C
- SRL L / CB 3D
- SRL (HL) / CB 3E
- SRL A / CB 3F
- BIT $0,B / CB 40
- BIT $0,C / CB 41
- BIT $0,D / CB 42
- BIT $0,E / CB 43
- BIT $0,H / CB 44
- BIT $0,L / CB 45
- BIT $0,(HL) / CB 46
- BIT $0,A / CB 47
- BIT $1,B / CB 48
- BIT $1,C / CB 49
- BIT $1,D / CB 4A
- BIT $1,E / CB 4B
- BIT $1,H / CB 4C
- BIT $1,L / CB 4D
- BIT $1,(HL) / CB 4E
- BIT $1,A / CB 4F
- BIT $2,B / CB 50
- BIT $2,C / CB 51
- BIT $2,D / CB 52
- BIT $2,E / CB 53
- BIT $2,H / CB 54
- BIT $2,L / CB 55
- BIT $2,(HL) / CB 56
- BIT $2,A / CB 57
- BIT $3,B / CB 58
- BIT $3,C / CB 59
- BIT $3,D / CB 5A
- BIT $3,E / CB 5B
- BIT $3,H / CB 5C
- BIT $3,L / CB 5D
- BIT $3,(HL) / CB 5E
- BIT $3,A / CB 5F
- BIT $4,B / CB 60
- BIT $4,C / CB 61
- BIT $4,D / CB 62
- BIT $4,E / CB 63
- BIT $4,H / CB 64
- BIT $4,L / CB 65
- BIT $4,(HL) / CB 66
- BIT $4,A / CB 67
- BIT $5,B / CB 68
- BIT $5,C / CB 69
- BIT $5,D / CB 6A
- BIT $5,E / CB 6B
- BIT $5,H / CB 6C
- BIT $5,L / CB 6D
- BIT $5,(HL) / CB 6E
- BIT $5,A / CB 6F
- BIT $6,B / CB 70
- BIT $6,C / CB 71
- BIT $6,D / CB 72
- BIT $6,E / CB 73
- BIT $6,H / CB 74
- BIT $6,L / CB 75
- BIT $6,(HL) / CB 76
- BIT $6,A / CB 77
- BIT $7,B / CB 78
- BIT $7,C / CB 79
- BIT $7,D / CB 7A
- BIT $7,E / CB 7B
- BIT $7,H / CB 7C
- BIT $7,L / CB 7D
- BIT $7,(HL) / CB 7E
- BIT $7,A / CB 7F
- RES $0,B / CB 80
- RES $0,C / CB 81
- RES $0,D / CB 82
- RES $0,E / CB 83
- RES $0,H / CB 84
- RES $0,L / CB 85
- RES $0,(HL) / CB 86
- RES $0,A / CB 87
- RES $1,B / CB 88
- RES $1,C / CB 89
- RES $1,D / CB 8A
- RES $1,E / CB 8B
- RES $1,H / CB 8C
- RES $1,L / CB 8D
- RES $1,(HL) / CB 8E
- RES $1,A / CB 8F
- RES $2,B / CB 90
- RES $2,C / CB 91
- RES $2,D / CB 92
- RES $2,E / CB 93
- RES $2,H / CB 94
- RES $2,L / CB 95
- RES $2,(HL) / CB 96
- RES $2,A / CB 97
- RES $3,B / CB 98
- RES $3,C / CB 99
- RES $3,D / CB 9A
- RES $3,E / CB 9B
- RES $3,H / CB 9C
- RES $3,L / CB 9D
- RES $3,(HL) / CB 9E
- RES $3,A / CB 9F
- RES $4,B / CB A0
- RES $4,C / CB A1
- RES $4,D / CB A2
- RES $4,E / CB A3
- RES $4,H / CB A4
- RES $4,L / CB A5
- RES $4,(HL) / CB A6
- RES $4,A / CB A7
- RES $5,B / CB A8
- RES $5,C / CB A9
- RES $5,D / CB AA
- RES $5,E / CB AB
- RES $5,H / CB AC
- RES $5,L / CB AD
- RES $5,(HL) / CB AE
- RES $5,A / CB AF
- RES $6,B / CB B0
- RES $6,C / CB B1
- RES $6,D / CB B2
- RES $6,E / CB B3
- RES $6,H / CB B4
- RES $6,L / CB B5
- RES $6,(HL) / CB B6
- RES $6,A / CB B7
- RES $7,B / CB B8
- RES $7,C / CB B9
- RES $7,D / CB BA
- RES $7,E / CB BB
- RES $7,H / CB BC
- RES $7,L / CB BD
- RES $7,(HL) / CB BE
- RES $7,A / CB BF
- SET $0,B / CB C0
- SET $0,C / CB C1
- SET $0,D / CB C2
- SET $0,E / CB C3
- SET $0,H / CB C4
- SET $0,L / CB C5
- SET $0,(HL) / CB C6
- SET $0,A / CB C7
- SET $1,B / CB C8
- SET $1,C / CB C9
- SET $1,D / CB CA
- SET $1,E / CB CB
- SET $1,H / CB CC
- SET $1,L / CB CD
- SET $1,(HL) / CB CE
- SET $1,A / CB CF
- SET $2,B / CB D0
- SET $2,C / CB D1
- SET $2,D / CB D2
- SET $2,E / CB D3
- SET $2,H / CB D4
- SET $2,L / CB D5
- SET $2,(HL) / CB D6
- SET $2,A / CB D7
- SET $3,B / CB D8
- SET $3,C / CB D9
- SET $3,D / CB DA
- SET $3,E / CB DB
- SET $3,H / CB DC
- SET $3,L / CB DD
- SET $3,(HL) / CB DE
- SET $3,A / CB DF
- SET $4,B / CB E0
- SET $4,C / CB E1
- SET $4,D / CB E2
- SET $4,E / CB E3
- SET $4,H / CB E4
- SET $4,L / CB E5
- SET $4,(HL) / CB E6
- SET $4,A / CB E7
- SET $5,B / CB E8
- SET $5,C / CB E9
- SET $5,D / CB EA
- SET $5,E / CB EB
- SET $5,H / CB EC
- SET $5,L / CB ED
- SET $5,(HL) / CB EE
- SET $5,A / CB EF
- SET $6,B / CB F0
- SET $6,C / CB F1
- SET $6,D / CB F2
- SET $6,E / CB F3
- SET $6,H / CB F4
- SET $6,L / CB F5
- SET $6,(HL) / CB F6
- SET $6,A / CB F7
- SET $7,B / CB F8
- SET $7,C / CB F9
- SET $7,D / CB FA
- SET $7,E / CB FB
- SET $7,H / CB FC
- SET $7,L / CB FD
- SET $7,(HL) / CB FE
- SET $7,A / CB FF
- CALL Z,$16384 / CC 00 40
- CALL $16384 / CD 00 40
- ADC A,$64 / CE 40
- RST $8 / CF
- RET NC / D0
- POP DE / D1
- JP NC,$16384 / D2 00 40
- OUT (153),A / D3 99
- CALL NC,$32768 / D4 00 80
- PUSH DE / D5
- SUB A,$32 / D6 20
- RST $16 / D7
- RET C / D8
- EXX / D9
- JP C,$16384 / DA 00 40
- IN A,(153) / DB 99
- CALL C,$32768 / DC 00 80
- ADD IX,BC / DD 09
- ADD IX,DE / DD 19
- LD IX,$64 / DD 21 40 00
- LD (32768),IX / DD 22 00 80
- INC IX / DD 23
- INC IXH / DD 24
- DEC IXH / DD 25
- LD IXH,$32 / DD 26 20
- ADD IX,IX / DD 29
- LD IX,(16384) / DD 2A 00 40
- DEC IX / DD 2B
- INC IXL / DD 2C
- DEC IXL / DD 2D
- LD IXL,$64 / DD 2E 40
- INC (IX + 32) / DD 34 20
- DEC (IX + 16) / DD 35 10
- LD (IX + 64),$128 / DD 36 40 80
- ADD IX,SP / DD 39
- LD B,IXH / DD 44
- LD B,IXL / DD 45
- LD B,(IX + 32) / DD 46 20
- LD C,IXH / DD 4C
- LD C,IXL / DD 4D
- LD C,(IX + 48) / DD 4E 30
- LD D,IXH / DD 54
- LD D,IXL / DD 55
- LD D,(IX + 32) / DD 56 20
- LD E,IXH / DD 5C
- LD E,IXL / DD 5D
- LD E,(IX + 64) / DD 5E 40
- LD IXH,B / DD 60
- LD IXH,C / DD 61
- LD IXH,D / DD 62
- LD IXH,E / DD 63
- LD IXH,IXH / DD 64
- LD IXH,IXL / DD 65
- LD H,(IX + 16) / DD 66 10
- LD IXH,A / DD 67
- LD IXL,B / DD 68
- LD IXL,C / DD 69
- LD IXL,D / DD 6A
- LD IXL,E / DD 6B
- LD IXL,IXH / DD 6C
- LD IXL,IXL / DD 6D
- LD L,(IX + 48) / DD 6E 30
- LD IXL,A / DD 6F
- LD (IX + 64),B / DD 70 40
- LD (IX + 16),C / DD 71 10
- LD (IX + 32),D / DD 72 20
- LD (IX + 48),E / DD 73 30
- LD (IX + 16),H / DD 74 10
- LD (IX + 32),L / DD 75 20
- LD (IX + 48),A / DD 77 30
- LD A,IXH / DD 7C
- LD A,IXL / DD 7D
- LD A,(IX + 16) / DD 7E 10
- ADD A,IXH / DD 84
- ADD A,IXL / DD 85
- ADD A,(IX + 32) / DD 86 20
- ADC A,IXH / DD 8C
- ADC A,IXL / DD 8D
- ADC A,(IX + 48) / DD 8E 30
- SUB A,IXH / DD 94
- SUB A,IXL / DD 95
- SUB A,(IX + 16) / DD 96 10
- SBC A,IXH / DD 9C
- SBC A,IXL / DD 9D
- SBC A,(IX + 32) / DD 9E 20
- AND A,IXH / DD A4
- AND A,IXL / DD A5
- AND A,(IX + 48) / DD A6 30
- XOR A,IXH / DD AC
- XOR A,IXL / DD AD
- XOR A,(IX + 16) / DD AE 10
- OR A,IXH / DD B4
- OR A,IXL / DD B5
- OR A,(IX + 32) / DD B6 20
- CP A,IXH / DD BC
- CP A,IXL / DD BD
- CP A,(IX + 48) / DD BE 30
- RLC (IX + 16),B / DD CB 10 00
- RLC (IX + 32),C / DD CB 20 01
- RLC (IX + 48),D / DD CB 30 02
- RLC (IX + 64),E / DD CB 40 03
- RLC (IX + 16),H / DD CB 10 04
- RLC (IX + 32),L / DD CB 20 05
- RLC (IX + 64) / DD CB 40 06
- RLC (IX + 16),A / DD CB 10 07
- RRC (IX + 32),B / DD CB 20 08
- RRC (IX + 48),C / DD CB 30 09
- RRC (IX + 64),D / DD CB 40 0A
- RRC (IX + 16),E / DD CB 10 0B
- RRC (IX + 32),H / DD CB 20 0C
- RRC (IX + 48),L / DD CB 30 0D
- RRC (IX + 16) / DD CB 10 0E
- RRC (IX + 16),A / DD CB 10 0F
- RL (IX + 32),B / DD CB 20 10
- RL (IX + 48),C / DD CB 30 11
- RL (IX + 64),D / DD CB 40 12
- RL (IX + 16),E / DD CB 10 13
- RL (IX + 32),H / DD CB 20 14
- RL (IX + 48),L / DD CB 30 15
- RL (IX + 32) / DD CB 20 16
- RL (IX + 16),A / DD CB 10 17
- RR (IX + 32),B / DD CB 20 18
- RR (IX + 48),C / DD CB 30 19
- RR (IX + 64),D / DD CB 40 1A
- RR (IX + 16),E / DD CB 10 1B
- RR (IX + 32),H / DD CB 20 1C
- RR (IX + 48),L / DD CB 30 1D
- RR (IX + 48) / DD CB 30 1E
- RR (IX + 16),A / DD CB 10 1F
- SLA (IX + 32),B / DD CB 20 20
- SLA (IX + 48),C / DD CB 30 21
- SLA (IX + 64),D / DD CB 40 22
- SLA (IX + 16),E / DD CB 10 23
- SLA (IX + 32),H / DD CB 20 24
- SLA (IX + 48),L / DD CB 30 25
- SLA (IX + 64) / DD CB 40 26
- SLA (IX + 16),A / DD CB 10 27
- SRA (IX + 32),B / DD CB 20 28
- SRA (IX + 48),C / DD CB 30 29
- SRA (IX + 64),D / DD CB 40 2A
- SRA (IX + 16),E / DD CB 10 2B
- SRA (IX + 32),H / DD CB 20 2C
- SRA (IX + 48),L / DD CB 30 2D
- SRA (IX + 16) / DD CB 10 2E
- SRA (IX + 16),A / DD CB 10 2F
- SLL (IX + 32),B / DD CB 20 30
- SLL (IX + 48),C / DD CB 30 31
- SLL (IX + 64),D / DD CB 40 32
- SLL (IX + 16),E / DD CB 10 33
- SLL (IX + 32),H / DD CB 20 34
- SLL (IX + 48),L / DD CB 30 35
- SLL (IX + 32) / DD CB 20 36
- SLL (IX + 16),A / DD CB 10 37
- SRL (IX + 32),B / DD CB 20 38
- SRL (IX + 48),C / DD CB 30 39
- SRL (IX + 64),D / DD CB 40 3A
- SRL (IX + 16),E / DD CB 10 3B
- SRL (IX + 32),H / DD CB 20 3C
- SRL (IX + 48),L / DD CB 30 3D
- SRL (IX + 48) / DD CB 30 3E
- SRL (IX + 64),A / DD CB 40 3F
- BIT $0,(IX + 16) / DD CB 10 46
- BIT $1,(IX + 32) / DD CB 20 4E
- BIT $2,(IX + 48) / DD CB 30 56
- BIT $3,(IX + 64) / DD CB 40 5E
- BIT $4,(IX + 16) / DD CB 10 66
- BIT $5,(IX + 32) / DD CB 20 6E
- BIT $6,(IX + 48) / DD CB 30 76
- BIT $7,(IX + 64) / DD CB 40 7E
- RES $0,(IX + 16),B / DD CB 10 80
- RES $0,(IX + 32),C / DD CB 20 81
- RES $0,(IX + 48),D / DD CB 30 82
- RES $0,(IX + 64),E / DD CB 40 83
- RES $0,(IX + 16),H / DD CB 10 84
- RES $0,(IX + 32),L / DD CB 20 85
- RES $0,(IX + 48) / DD CB 30 86
- RES $0,(IX + 64),A / DD CB 40 87
- RES $1,(IX + 16),B / DD CB 10 88
- RES $1,(IX + 32),C / DD CB 20 89
- RES $1,(IX + 48),D / DD CB 30 8A
- RES $1,(IX + 64),E / DD CB 40 8B
- RES $1,(IX + 16),H / DD CB 10 8C
- RES $1,(IX + 32),L / DD CB 20 8D
- RES $1,(IX + 48) / DD CB 30 8E
- RES $1,(IX + 64),A / DD CB 40 8F
- RES $2,(IX + 16),B / DD CB 10 90
- RES $2,(IX + 32),C / DD CB 20 91
- RES $2,(IX + 48),D / DD CB 30 92
- RES $2,(IX + 64),E / DD CB 40 93
- RES $2,(IX + 16),H / DD CB 10 94
- RES $2,(IX + 32),L / DD CB 20 95
- RES $2,(IX + 48) / DD CB 30 96
- RES $2,(IX + 64),A / DD CB 40 97
- RES $3,(IX + 16),B / DD CB 10 98
- RES $3,(IX + 32),C / DD CB 20 99
- RES $3,(IX + 48),D / DD CB 30 9A
- RES $3,(IX + 64),E / DD CB 40 9B
- RES $3,(IX + 16),H / DD CB 10 9C
- RES $3,(IX + 32),L / DD CB 20 9D
- RES $3,(IX + 48) / DD CB 30 9E
- RES $3,(IX + 64),A / DD CB 40 9F
- RES $4,(IX + 16),B / DD CB 10 A0
- RES $4,(IX + 32),C / DD CB 20 A1
- RES $4,(IX + 48),D / DD CB 30 A2
- RES $4,(IX + 64),E / DD CB 40 A3
- RES $4,(IX + 16),H / DD CB 10 A4
- RES $4,(IX + 32),L / DD CB 20 A5
- RES $4,(IX + 48) / DD CB 30 A6
- RES $4,(IX + 64),A / DD CB 40 A7
- RES $5,(IX + 16),B / DD CB 10 A8
- RES $5,(IX + 32),C / DD CB 20 A9
- RES $5,(IX + 48),D / DD CB 30 AA
- RES $5,(IX + 64),E / DD CB 40 AB
- RES $5,(IX + 16),H / DD CB 10 AC
- RES $5,(IX + 32),L / DD CB 20 AD
- RES $5,(IX + 48) / DD CB 30 AE
- RES $5,(IX + 64),A / DD CB 40 AF
- RES $6,(IX + 16),B / DD CB 10 B0
- RES $6,(IX + 32),C / DD CB 20 B1
- RES $6,(IX + 48),D / DD CB 30 B2
- RES $6,(IX + 64),E / DD CB 40 B3
- RES $6,(IX + 16),H / DD CB 10 B4
- RES $6,(IX + 32),L / DD CB 20 B5
- RES $6,(IX + 48) / DD CB 30 B6
- RES $6,(IX + 64),A / DD CB 40 B7
- RES $7,(IX + 16),B / DD CB 10 B8
- RES $7,(IX + 32),C / DD CB 20 B9
- RES $7,(IX + 48),D / DD CB 30 BA
- RES $7,(IX + 64),E / DD CB 40 BB
- RES $7,(IX + 16),H / DD CB 10 BC
- RES $7,(IX + 32),L / DD CB 20 BD
- RES $7,(IX + 48) / DD CB 30 BE
- RES $7,(IX + 64),A / DD CB 40 BF
- SET $0,(IX + 16),B / DD CB 10 C0
- SET $0,(IX + 32),C / DD CB 20 C1
- SET $0,(IX + 48),D / DD CB 30 C2
- SET $0,(IX + 64),E / DD CB 40 C3
- SET $0,(IX + 16),H / DD CB 10 C4
- SET $0,(IX + 32),L / DD CB 20 C5
- SET $0,(IX + 48) / DD CB 30 C6
- SET $0,(IX + 64),A / DD CB 40 C7
- SET $1,(IX + 16),B / DD CB 10 C8
- SET $1,(IX + 32),C / DD CB 20 C9
- SET $1,(IX + 48),D / DD CB 30 CA
- SET $1,(IX + 64),E / DD CB 40 CB
- SET $1,(IX + 16),H / DD CB 10 CC
- SET $1,(IX + 32),L / DD CB 20 CD
- SET $1,(IX + 48) / DD CB 30 CE
- SET $1,(IX + 64),A / DD CB 40 CF
- SET $2,(IX + 16),B / DD CB 10 D0
- SET $2,(IX + 32),C / DD CB 20 D1
- SET $2,(IX + 48),D / DD CB 30 D2
- SET $2,(IX + 64),E / DD CB 40 D3
- SET $2,(IX + 16),H / DD CB 10 D4
- SET $2,(IX + 32),L / DD CB 20 D5
- SET $2,(IX + 48) / DD CB 30 D6
- SET $2,(IX + 64),A / DD CB 40 D7
- SET $3,(IX + 16),B / DD CB 10 D8
- SET $3,(IX + 32),C / DD CB 20 D9
- SET $3,(IX + 48),D / DD CB 30 DA
- SET $3,(IX + 64),E / DD CB 40 DB
- SET $3,(IX + 16),H / DD CB 10 DC
- SET $3,(IX + 32),L / DD CB 20 DD
- SET $3,(IX + 48) / DD CB 30 DE
- SET $3,(IX + 64),A / DD CB 40 DF
- SET $4,(IX + 16),B / DD CB 10 E0
- SET $4,(IX + 32),C / DD CB 20 E1
- SET $4,(IX + 48),D / DD CB 30 E2
- SET $4,(IX + 64),E / DD CB 40 E3
- SET $4,(IX + 16),H / DD CB 10 E4
- SET $4,(IX + 32),L / DD CB 20 E5
- SET $4,(IX + 48) / DD CB 30 E6
- SET $4,(IX + 64),A / DD CB 40 E7
- SET $5,(IX + 16),B / DD CB 10 E8
- SET $5,(IX + 32),C / DD CB 20 E9
- SET $5,(IX + 48),D / DD CB 30 EA
- SET $5,(IX + 64),E / DD CB 40 EB
- SET $5,(IX + 16),H / DD CB 10 EC
- SET $5,(IX + 32),L / DD CB 20 ED
- SET $5,(IX + 48) / DD CB 30 EE
- SET $5,(IX + 64),A / DD CB 40 EF
- SET $6,(IX + 16),B / DD CB 10 F0
- SET $6,(IX + 32),C / DD CB 20 F1
- SET $6,(IX + 48),D / DD CB 30 F2
- SET $6,(IX + 64),E / DD CB 40 F3
- SET $6,(IX + 16),H / DD CB 10 F4
- SET $6,(IX + 32),L / DD CB 20 F5
- SET $6,(IX + 48) / DD CB 30 F6
- SET $6,(IX + 64),A / DD CB 40 F7
- SET $7,(IX + 16),B / DD CB 10 F8
- SET $7,(IX + 32),C / DD CB 20 F9
- SET $7,(IX + 48),D / DD CB 30 FA
- SET $7,(IX + 64),E / DD CB 40 FB
- SET $7,(IX + 16),H / DD CB 10 FC
- SET $7,(IX + 32),L / DD CB 20 FD
- SET $7,(IX + 48) / DD CB 30 FE
- SET $7,(IX + 64),A / DD CB 40 FF
- POP IX / DD E1
- EX (SP),IX / DD E3
- PUSH IX / DD E5
- JP (IX) / DD E9
- LD SP,IX / DD F9
- SBC A,$64 / DE 40
- RST $24 / DF
- RET PO / E0
- POP HL / E1
- JP PO,$32768 / E2 00 80
- EX (SP),HL / E3
- CALL PO,$16384 / E4 00 40
- PUSH HL / E5
- AND A,$16 / E6 10
- RST $32 / E7
- RET PE / E8
- JP (HL) / E9
- JP PE,$16384 / EA 00 40
- EX DE,HL / EB
- CALL PE,$16384 / EC 00 40
- IN B,(C) / ED 40
- OUT (C),B / ED 41
- SBC HL,BC / ED 42
- LD (32768),BC / ED 43 00 80
- NEG / ED 44
- RETN / ED 45
- IM $0 / ED 46
- LD I,A / ED 47
- IN C,(C) / ED 48
- OUT (C),C / ED 49
- ADC HL,BC / ED 4A
- LD BC,(16384) / ED 4B 00 40
- RETI / ED 4D
- LD R,A / ED 4F
- IN D,(C) / ED 50
- OUT (C),D / ED 51
- SBC HL,DE / ED 52
- LD (32768),DE / ED 53 00 80
- IM $1 / ED 56
- LD A,I / ED 57
- IN E,(C) / ED 58
- OUT (C),E / ED 59
- ADC HL,DE / ED 5A
- LD DE,(16384) / ED 5B 00 40
- IM $2 / ED 5E
- LD A,R / ED 5F
- IN H,(C) / ED 60
- OUT (C),H / ED 61
- SBC HL,HL / ED 62
- RRD / ED 67
- IN L,(C) / ED 68
- OUT (C),L / ED 69
- ADC HL,HL / ED 6A
- RLD / ED 6F
- IN F,(C) / ED 70
- OUT (C),$0 / ED 71
- SBC HL,SP / ED 72
- LD (16384),SP / ED 73 00 40
- IN A,(C) / ED 78
- OUT (C),A / ED 79
- ADC HL,SP / ED 7A
- LD SP,(32768) / ED 7B 00 80
- LDI / ED A0
- CPI / ED A1
- INI / ED A2
- OUTI / ED A3
- LDD / ED A8
- CPD / ED A9
- IND / ED AA
- OUTD / ED AB
- LDIR / ED B0
- CPIR / ED B1
- INIR / ED B2
- OTIR / ED B3
- LDDR / ED B8
- CPDR / ED B9
- INDR / ED BA
- OTDR / ED BB
- XOR A,$32 / EE 20
- RST $40 / EF
- RET P / F0
- POP AF / F1
- JP P,$32768 / F2 00 80
- DI / F3
- CALL P,$16384 / F4 00 40
- PUSH AF / F5
- OR A,$32 / F6 20
- RST $48 / F7
- RET M / F8
- LD SP,HL / F9
- JP M,$32768 / FA 00 80
- EI / FB
- CALL M,$16384 / FC 00 40
- ADD IY,BC / FD 09
- ADD IY,DE / FD 19
- LD IY,$32768 / FD 21 00 80
- LD (16384),IY / FD 22 00 40
- INC IY / FD 23
- INC IYH / FD 24
- DEC IYH / FD 25
- LD IYH,$32 / FD 26 20
- ADD IY,IY / FD 29
- LD IY,(32768) / FD 2A 00 80
- DEC IY / FD 2B
- INC IYL / FD 2C
- DEC IYL / FD 2D
- LD IYL,$16 / FD 2E 10
- INC (IY + 32) / FD 34 20
- DEC (IY + 48) / FD 35 30
- LD (IY + 64),$16 / FD 36 40 10
- ADD IY,SP / FD 39
- LD B,IYH / FD 44
- LD B,IYL / FD 45
- LD B,(IY + 32) / FD 46 20
- LD C,IYH / FD 4C
- LD C,IYL / FD 4D
- LD C,(IY + 48) / FD 4E 30
- LD D,IYH / FD 54
- LD D,IYL / FD 55
- LD D,(IY + 64) / FD 56 40
- LD E,IYH / FD 5C
- LD E,IYL / FD 5D
- LD E,(IY + 16) / FD 5E 10
- LD IYH,B / FD 60
- LD IYH,C / FD 61
- LD IYH,D / FD 62
- LD IYH,E / FD 63
- LD IYH,IYH / FD 64
- LD IYH,IYL / FD 65
- LD H,(IY + 32) / FD 66 20
- LD IYH,A / FD 67
- LD IYL,B / FD 68
- LD IYL,C / FD 69
- LD IYL,D / FD 6A
- LD IYL,E / FD 6B
- LD IYL,IYH / FD 6C
- LD IYL,IYL / FD 6D
- LD L,(IY + 48) / FD 6E 30
- LD IYL,A / FD 6F
- LD (IY + 64),B / FD 70 40
- LD (IY + 16),C / FD 71 10
- LD (IY + 32),D / FD 72 20
- LD (IY + 48),E / FD 73 30
- LD (IY + 64),H / FD 74 40
- LD (IY + 16),L / FD 75 10
- LD (IY + 32),A / FD 77 20
- LD A,IYH / FD 7C
- LD A,IYL / FD 7D
- LD A,(IY + 48) / FD 7E 30
- ADD A,IYH / FD 84
- ADD A,IYL / FD 85
- ADD A,(IY + 64) / FD 86 40
- ADC A,IYH / FD 8C
- ADC A,IYL / FD 8D
- ADC A,(IY + 16) / FD 8E 10
- SUB A,IYH / FD 94
- SUB A,IYL / FD 95
- SUB A,(IY + 32) / FD 96 20
- SBC A,IYH / FD 9C
- SBC A,IYL / FD 9D
- SBC A,(IY + 48) / FD 9E 30
- AND A,IYH / FD A4
- AND A,IYL / FD A5
- AND A,(IY + 64) / FD A6 40
- XOR A,IYH / FD AC
- XOR A,IYL / FD AD
- XOR A,(IY + 16) / FD AE 10
- OR A,IYH / FD B4
- OR A,IYL / FD B5
- OR A,(IY + 32) / FD B6 20
- CP A,IYH / FD BC
- CP A,IYL / FD BD
- CP A,(IY + 48) / FD BE 30
- RLC (IY + 16),B / FD CB 10 00
- RLC (IY + 32),C / FD CB 20 01
- RLC (IY + 48),D / FD CB 30 02
- RLC (IY + 64),E / FD CB 40 03
- RLC (IY + 16),H / FD CB 10 04
- RLC (IY + 32),L / FD CB 20 05
- RLC (IY + 16) / FD CB 10 06
- RLC (IY + 32),A / FD CB 20 07
- RRC (IY + 48),B / FD CB 30 08
- RRC (IY + 64),C / FD CB 40 09
- RRC (IY + 16),D / FD CB 10 0A
- RRC (IY + 32),E / FD CB 20 0B
- RRC (IY + 48),H / FD CB 30 0C
- RRC (IY + 64),L / FD CB 40 0D
- RRC (IY + 32) / FD CB 20 0E
- RRC (IY + 16),A / FD CB 10 0F
- RL (IY + 32),B / FD CB 20 10
- RL (IY + 48),C / FD CB 30 11
- RL (IY + 64),D / FD CB 40 12
- RL (IY + 16),E / FD CB 10 13
- RL (IY + 32),H / FD CB 20 14
- RL (IY + 48),L / FD CB 30 15
- RL (IY + 48) / FD CB 30 16
- RL (IY + 16),A / FD CB 10 17
- RR (IY + 32),B / FD CB 20 18
- RR (IY + 48),C / FD CB 30 19
- RR (IY + 64),D / FD CB 40 1A
- RR (IY + 16),E / FD CB 10 1B
- RR (IY + 32),H / FD CB 20 1C
- RR (IY + 48),L / FD CB 30 1D
- RR (IY + 64) / FD CB 40 1E
- RR (IY + 16),A / FD CB 10 1F
- SLA (IY + 32),B / FD CB 20 20
- SLA (IY + 48),C / FD CB 30 21
- SLA (IY + 64),D / FD CB 40 22
- SLA (IY + 16),E / FD CB 10 23
- SLA (IY + 32),H / FD CB 20 24
- SLA (IY + 48),L / FD CB 30 25
- SLA (IY + 16) / FD CB 10 26
- SLA (IY + 16),A / FD CB 10 27
- SRA (IY + 32),B / FD CB 20 28
- SRA (IY + 48),C / FD CB 30 29
- SRA (IY + 64),D / FD CB 40 2A
- SRA (IY + 16),E / FD CB 10 2B
- SRA (IY + 32),H / FD CB 20 2C
- SRA (IY + 48),L / FD CB 30 2D
- SRA (IY + 32) / FD CB 20 2E
- SRA (IY + 48),A / FD CB 30 2F
- SLL (IY + 16),B / FD CB 10 30
- SLL (IY + 32),C / FD CB 20 31
- SLL (IY + 48),D / FD CB 30 32
- SLL (IY + 64),E / FD CB 40 33
- SLL (IY + 16),H / FD CB 10 34
- SLL (IY + 32),L / FD CB 20 35
- SLL (IY + 48) / FD CB 30 36
- SLL (IY + 16),A / FD CB 10 37
- SRL (IY + 32),B / FD CB 20 38
- SRL (IY + 48),C / FD CB 30 39
- SRL (IY + 64),D / FD CB 40 3A
- SRL (IY + 16),E / FD CB 10 3B
- SRL (IY + 32),H / FD CB 20 3C
- SRL (IY + 48),L / FD CB 30 3D
- SRL (IY + 64) / FD CB 40 3E
- SRL (IY + 16),A / FD CB 10 3F
- BIT $0,(IY + 16) / FD CB 10 46
- BIT $1,(IY + 32) / FD CB 20 4E
- BIT $2,(IY + 48) / FD CB 30 56
- BIT $3,(IY + 64) / FD CB 40 5E
- BIT $4,(IY + 16) / FD CB 10 66
- BIT $5,(IY + 32) / FD CB 20 6E
- BIT $6,(IY + 48) / FD CB 30 76
- BIT $7,(IY + 64) / FD CB 40 7E
- RES $0,(IY + 16),B / FD CB 10 80
- RES $0,(IY + 32),C / FD CB 20 81
- RES $0,(IY + 48),D / FD CB 30 82
- RES $0,(IY + 64),E / FD CB 40 83
- RES $0,(IY + 16),H / FD CB 10 84
- RES $0,(IY + 32),L / FD CB 20 85
- RES $0,(IY + 48) / FD CB 30 86
- RES $0,(IY + 64),A / FD CB 40 87
- RES $1,(IY + 16),B / FD CB 10 88
- RES $1,(IY + 32),C / FD CB 20 89
- RES $1,(IY + 48),D / FD CB 30 8A
- RES $1,(IY + 64),E / FD CB 40 8B
- RES $1,(IY + 16),H / FD CB 10 8C
- RES $1,(IY + 32),L / FD CB 20 8D
- RES $1,(IY + 48) / FD CB 30 8E
- RES $1,(IY + 64),A / FD CB 40 8F
- RES $2,(IY + 16),B / FD CB 10 90
- RES $2,(IY + 32),C / FD CB 20 91
- RES $2,(IY + 48),D / FD CB 30 92
- RES $2,(IY + 64),E / FD CB 40 93
- RES $2,(IY + 16),H / FD CB 10 94
- RES $2,(IY + 32),L / FD CB 20 95
- RES $2,(IY + 48) / FD CB 30 96
- RES $2,(IY + 64),A / FD CB 40 97
- RES $3,(IY + 16),B / FD CB 10 98
- RES $3,(IY + 32),C / FD CB 20 99
- RES $3,(IY + 48),D / FD CB 30 9A
- RES $3,(IY + 64),E / FD CB 40 9B
- RES $3,(IY + 16),H / FD CB 10 9C
- RES $3,(IY + 32),L / FD CB 20 9D
- RES $3,(IY + 48) / FD CB 30 9E
- RES $3,(IY + 64),A / FD CB 40 9F
- RES $4,(IY + 16),B / FD CB 10 A0
- RES $4,(IY + 32),C / FD CB 20 A1
- RES $4,(IY + 48),D / FD CB 30 A2
- RES $4,(IY + 64),E / FD CB 40 A3
- RES $4,(IY + 16),H / FD CB 10 A4
- RES $4,(IY + 32),L / FD CB 20 A5
- RES $4,(IY + 48) / FD CB 30 A6
- RES $4,(IY + 64),A / FD CB 40 A7
- RES $5,(IY + 16),B / FD CB 10 A8
- RES $5,(IY + 32),C / FD CB 20 A9
- RES $5,(IY + 48),D / FD CB 30 AA
- RES $5,(IY + 64),E / FD CB 40 AB
- RES $5,(IY + 16),H / FD CB 10 AC
- RES $5,(IY + 32),L / FD CB 20 AD
- RES $5,(IY + 48) / FD CB 30 AE
- RES $5,(IY + 64),A / FD CB 40 AF
- RES $6,(IY + 16),B / FD CB 10 B0
- RES $6,(IY + 32),C / FD CB 20 B1
- RES $6,(IY + 48),D / FD CB 30 B2
- RES $6,(IY + 64),E / FD CB 40 B3
- RES $6,(IY + 16),H / FD CB 10 B4
- RES $6,(IY + 32),L / FD CB 20 B5
- RES $6,(IY + 48) / FD CB 30 B6
- RES $6,(IY + 64),A / FD CB 40 B7
- RES $7,(IY + 16),B / FD CB 10 B8
- RES $7,(IY + 32),C / FD CB 20 B9
- RES $7,(IY + 48),D / FD CB 30 BA
- RES $7,(IY + 64),E / FD CB 40 BB
- RES $7,(IY + 16),H / FD CB 10 BC
- RES $7,(IY + 32),L / FD CB 20 BD
- RES $7,(IY + 48) / FD CB 30 BE
- RES $7,(IY + 64),A / FD CB 40 BF
- SET $0,(IY + 16),B / FD CB 10 C0
- SET $0,(IY + 32),C / FD CB 20 C1
- SET $0,(IY + 48),D / FD CB 30 C2
- SET $0,(IY + 64),E / FD CB 40 C3
- SET $0,(IY + 16),H / FD CB 10 C4
- SET $0,(IY + 32),L / FD CB 20 C5
- SET $0,(IY + 48) / FD CB 30 C6
- SET $0,(IY + 64),A / FD CB 40 C7
- SET $1,(IY + 16),B / FD CB 10 C8
- SET $1,(IY + 32),C / FD CB 20 C9
- SET $1,(IY + 48),D / FD CB 30 CA
- SET $1,(IY + 64),E / FD CB 40 CB
- SET $1,(IY + 16),H / FD CB 10 CC
- SET $1,(IY + 32),L / FD CB 20 CD
- SET $1,(IY + 48) / FD CB 30 CE
- SET $1,(IY + 64),A / FD CB 40 CF
- SET $2,(IY + 16),B / FD CB 10 D0
- SET $2,(IY + 32),C / FD CB 20 D1
- SET $2,(IY + 48),D / FD CB 30 D2
- SET $2,(IY + 64),E / FD CB 40 D3
- SET $2,(IY + 16),H / FD CB 10 D4
- SET $2,(IY + 32),L / FD CB 20 D5
- SET $2,(IY + 48) / FD CB 30 D6
- SET $2,(IY + 64),A / FD CB 40 D7
- SET $3,(IY + 16),B / FD CB 10 D8
- SET $3,(IY + 32),C / FD CB 20 D9
- SET $3,(IY + 48),D / FD CB 30 DA
- SET $3,(IY + 64),E / FD CB 40 DB
- SET $3,(IY + 16),H / FD CB 10 DC
- SET $3,(IY + 32),L / FD CB 20 DD
- SET $3,(IY + 48) / FD CB 30 DE
- SET $3,(IY + 64),A / FD CB 40 DF
- SET $4,(IY + 16),B / FD CB 10 E0
- SET $4,(IY + 32),C / FD CB 20 E1
- SET $4,(IY + 48),D / FD CB 30 E2
- SET $4,(IY + 64),E / FD CB 40 E3
- SET $4,(IY + 16),H / FD CB 10 E4
- SET $4,(IY + 32),L / FD CB 20 E5
- SET $4,(IY + 48) / FD CB 30 E6
- SET $4,(IY + 64),A / FD CB 40 E7
- SET $5,(IY + 16),B / FD CB 10 E8
- SET $5,(IY + 32),C / FD CB 20 E9
- SET $5,(IY + 48),D / FD CB 30 EA
- SET $5,(IY + 64),E / FD CB 40 EB
- SET $5,(IY + 16),H / FD CB 10 EC
- SET $5,(IY + 32),L / FD CB 20 ED
- SET $5,(IY + 48) / FD CB 30 EE
- SET $5,(IY + 64),A / FD CB 40 EF
- SET $6,(IY + 16),B / FD CB 10 F0
- SET $6,(IY + 32),C / FD CB 20 F1
- SET $6,(IY + 48),D / FD CB 30 F2
- SET $6,(IY + 64),E / FD CB 40 F3
- SET $6,(IY + 16),H / FD CB 10 F4
- SET $6,(IY + 32),L / FD CB 20 F5
- SET $6,(IY + 48) / FD CB 30 F6
- SET $6,(IY + 64),A / FD CB 40 F7
- SET $7,(IY + 16),B / FD CB 10 F8
- SET $7,(IY + 32),C / FD CB 20 F9
- SET $7,(IY + 48),D / FD CB 30 FA
- SET $7,(IY + 64),E / FD CB 40 FB
- SET $7,(IY + 16),H / FD CB 10 FC
- SET $7,(IY + 32),L / FD CB 20 FD
- SET $7,(IY + 48) / FD CB 30 FE
- SET $7,(IY + 64),A / FD CB 40 FF
- POP IY / FD E1
- EX (SP),IY / FD E3
- PUSH IY / FD E5
- JP (IY) / FD E9
- LD SP,IY / FD F9
- CP A,$32 / FE 20
- RST $56 / FF
-
-/ and now, we are going to test at&t syntax in z80
- INC 32(IX) / DD 34 20
- DEC 16(IX) / DD 35 10
- LD 64(IX),$128 / DD 36 40 80
- LD B,32(IX) / DD 46 20
- LD C,48(IX) / DD 4E 30
- LD D,32(IX) / DD 56 20
- LD E,64(IX) / DD 5E 40
- LD H,16(IX) / DD 66 10
- LD L,48(IX) / DD 6E 30
- LD 64(IX),B / DD 70 40
- LD 16(IX),C / DD 71 10
- LD 32(IX),D / DD 72 20
- LD 48(IX),E / DD 73 30
- LD 16(IX),H / DD 74 10
- LD 32(IX),L / DD 75 20
- LD 48(IX),A / DD 77 30
- LD A,16(IX) / DD 7E 10
- ADD A,32(IX) / DD 86 20
- ADC A,48(IX) / DD 8E 30
- SUB A,16(IX) / DD 96 10
- SBC A,32(IX) / DD 9E 20
- AND A,48(IX) / DD A6 30
- XOR A,16(IX) / DD AE 10
- OR A,32(IX) / DD B6 20
- CP A,48(IX) / DD BE 30
- RLC 16(IX),B / DD CB 10 00
- RLC 32(IX),C / DD CB 20 01
- RLC 48(IX),D / DD CB 30 02
- RLC 64(IX),E / DD CB 40 03
- RLC 16(IX),H / DD CB 10 04
- RLC 32(IX),L / DD CB 20 05
- RLC 64(IX) / DD CB 40 06
- RLC 16(IX),A / DD CB 10 07
- RRC 32(IX),B / DD CB 20 08
- RRC 48(IX),C / DD CB 30 09
- RRC 64(IX),D / DD CB 40 0A
- RRC 16(IX),E / DD CB 10 0B
- RRC 32(IX),H / DD CB 20 0C
- RRC 48(IX),L / DD CB 30 0D
- RRC 16(IX) / DD CB 10 0E
- RRC 16(IX),A / DD CB 10 0F
- RL 32(IX),B / DD CB 20 10
- RL 48(IX),C / DD CB 30 11
- RL 64(IX),D / DD CB 40 12
- RL 16(IX),E / DD CB 10 13
- RL 32(IX),H / DD CB 20 14
- RL 48(IX),L / DD CB 30 15
- RL 32(IX) / DD CB 20 16
- RL 16(IX),A / DD CB 10 17
- RR 32(IX),B / DD CB 20 18
- RR 48(IX),C / DD CB 30 19
- RR 64(IX),D / DD CB 40 1A
- RR 16(IX),E / DD CB 10 1B
- RR 32(IX),H / DD CB 20 1C
- RR 48(IX),L / DD CB 30 1D
- RR 48(IX) / DD CB 30 1E
- RR 16(IX),A / DD CB 10 1F
- SLA 32(IX),B / DD CB 20 20
- SLA 48(IX),C / DD CB 30 21
- SLA 64(IX),D / DD CB 40 22
- SLA 16(IX),E / DD CB 10 23
- SLA 32(IX),H / DD CB 20 24
- SLA 48(IX),L / DD CB 30 25
- SLA 64(IX) / DD CB 40 26
- SLA 16(IX),A / DD CB 10 27
- SRA 32(IX),B / DD CB 20 28
- SRA 48(IX),C / DD CB 30 29
- SRA 64(IX),D / DD CB 40 2A
- SRA 16(IX),E / DD CB 10 2B
- SRA 32(IX),H / DD CB 20 2C
- SRA 48(IX),L / DD CB 30 2D
- SRA 16(IX) / DD CB 10 2E
- SRA 16(IX),A / DD CB 10 2F
- SLL 32(IX),B / DD CB 20 30
- SLL 48(IX),C / DD CB 30 31
- SLL 64(IX),D / DD CB 40 32
- SLL 16(IX),E / DD CB 10 33
- SLL 32(IX),H / DD CB 20 34
- SLL 48(IX),L / DD CB 30 35
- SLL 32(IX) / DD CB 20 36
- SLL 16(IX),A / DD CB 10 37
- SRL 32(IX),B / DD CB 20 38
- SRL 48(IX),C / DD CB 30 39
- SRL 64(IX),D / DD CB 40 3A
- SRL 16(IX),E / DD CB 10 3B
- SRL 32(IX),H / DD CB 20 3C
- SRL 48(IX),L / DD CB 30 3D
- SRL 48(IX) / DD CB 30 3E
- SRL 64(IX),A / DD CB 40 3F
- BIT $0,16(IX) / DD CB 10 46
- BIT $1,32(IX) / DD CB 20 4E
- BIT $2,48(IX) / DD CB 30 56
- BIT $3,64(IX) / DD CB 40 5E
- BIT $4,16(IX) / DD CB 10 66
- BIT $5,32(IX) / DD CB 20 6E
- BIT $6,48(IX) / DD CB 30 76
- BIT $7,64(IX) / DD CB 40 7E
- RES $0,16(IX),B / DD CB 10 80
- RES $0,32(IX),C / DD CB 20 81
- RES $0,48(IX),D / DD CB 30 82
- RES $0,64(IX),E / DD CB 40 83
- RES $0,16(IX),H / DD CB 10 84
- RES $0,32(IX),L / DD CB 20 85
- RES $0,48(IX) / DD CB 30 86
- RES $0,64(IX),A / DD CB 40 87
- RES $1,16(IX),B / DD CB 10 88
- RES $1,32(IX),C / DD CB 20 89
- RES $1,48(IX),D / DD CB 30 8A
- RES $1,64(IX),E / DD CB 40 8B
- RES $1,16(IX),H / DD CB 10 8C
- RES $1,32(IX),L / DD CB 20 8D
- RES $1,48(IX) / DD CB 30 8E
- RES $1,64(IX),A / DD CB 40 8F
- RES $2,16(IX),B / DD CB 10 90
- RES $2,32(IX),C / DD CB 20 91
- RES $2,48(IX),D / DD CB 30 92
- RES $2,64(IX),E / DD CB 40 93
- RES $2,16(IX),H / DD CB 10 94
- RES $2,32(IX),L / DD CB 20 95
- RES $2,48(IX) / DD CB 30 96
- RES $2,64(IX),A / DD CB 40 97
- RES $3,16(IX),B / DD CB 10 98
- RES $3,32(IX),C / DD CB 20 99
- RES $3,48(IX),D / DD CB 30 9A
- RES $3,64(IX),E / DD CB 40 9B
- RES $3,16(IX),H / DD CB 10 9C
- RES $3,32(IX),L / DD CB 20 9D
- RES $3,48(IX) / DD CB 30 9E
- RES $3,64(IX),A / DD CB 40 9F
- RES $4,16(IX),B / DD CB 10 A0
- RES $4,32(IX),C / DD CB 20 A1
- RES $4,48(IX),D / DD CB 30 A2
- RES $4,64(IX),E / DD CB 40 A3
- RES $4,16(IX),H / DD CB 10 A4
- RES $4,32(IX),L / DD CB 20 A5
- RES $4,48(IX) / DD CB 30 A6
- RES $4,64(IX),A / DD CB 40 A7
- RES $5,16(IX),B / DD CB 10 A8
- RES $5,32(IX),C / DD CB 20 A9
- RES $5,48(IX),D / DD CB 30 AA
- RES $5,64(IX),E / DD CB 40 AB
- RES $5,16(IX),H / DD CB 10 AC
- RES $5,32(IX),L / DD CB 20 AD
- RES $5,48(IX) / DD CB 30 AE
- RES $5,64(IX),A / DD CB 40 AF
- RES $6,16(IX),B / DD CB 10 B0
- RES $6,32(IX),C / DD CB 20 B1
- RES $6,48(IX),D / DD CB 30 B2
- RES $6,64(IX),E / DD CB 40 B3
- RES $6,16(IX),H / DD CB 10 B4
- RES $6,32(IX),L / DD CB 20 B5
- RES $6,48(IX) / DD CB 30 B6
- RES $6,64(IX),A / DD CB 40 B7
- RES $7,16(IX),B / DD CB 10 B8
- RES $7,32(IX),C / DD CB 20 B9
- RES $7,48(IX),D / DD CB 30 BA
- RES $7,64(IX),E / DD CB 40 BB
- RES $7,16(IX),H / DD CB 10 BC
- RES $7,32(IX),L / DD CB 20 BD
- RES $7,48(IX) / DD CB 30 BE
- RES $7,64(IX),A / DD CB 40 BF
- SET $0,16(IX),B / DD CB 10 C0
- SET $0,32(IX),C / DD CB 20 C1
- SET $0,48(IX),D / DD CB 30 C2
- SET $0,64(IX),E / DD CB 40 C3
- SET $0,16(IX),H / DD CB 10 C4
- SET $0,32(IX),L / DD CB 20 C5
- SET $0,48(IX) / DD CB 30 C6
- SET $0,64(IX),A / DD CB 40 C7
- SET $1,16(IX),B / DD CB 10 C8
- SET $1,32(IX),C / DD CB 20 C9
- SET $1,48(IX),D / DD CB 30 CA
- SET $1,64(IX),E / DD CB 40 CB
- SET $1,16(IX),H / DD CB 10 CC
- SET $1,32(IX),L / DD CB 20 CD
- SET $1,48(IX) / DD CB 30 CE
- SET $1,64(IX),A / DD CB 40 CF
- SET $2,16(IX),B / DD CB 10 D0
- SET $2,32(IX),C / DD CB 20 D1
- SET $2,48(IX),D / DD CB 30 D2
- SET $2,64(IX),E / DD CB 40 D3
- SET $2,16(IX),H / DD CB 10 D4
- SET $2,32(IX),L / DD CB 20 D5
- SET $2,48(IX) / DD CB 30 D6
- SET $2,64(IX),A / DD CB 40 D7
- SET $3,16(IX),B / DD CB 10 D8
- SET $3,32(IX),C / DD CB 20 D9
- SET $3,48(IX),D / DD CB 30 DA
- SET $3,64(IX),E / DD CB 40 DB
- SET $3,16(IX),H / DD CB 10 DC
- SET $3,32(IX),L / DD CB 20 DD
- SET $3,48(IX) / DD CB 30 DE
- SET $3,64(IX),A / DD CB 40 DF
- SET $4,16(IX),B / DD CB 10 E0
- SET $4,32(IX),C / DD CB 20 E1
- SET $4,48(IX),D / DD CB 30 E2
- SET $4,64(IX),E / DD CB 40 E3
- SET $4,16(IX),H / DD CB 10 E4
- SET $4,32(IX),L / DD CB 20 E5
- SET $4,48(IX) / DD CB 30 E6
- SET $4,64(IX),A / DD CB 40 E7
- SET $5,16(IX),B / DD CB 10 E8
- SET $5,32(IX),C / DD CB 20 E9
- SET $5,48(IX),D / DD CB 30 EA
- SET $5,64(IX),E / DD CB 40 EB
- SET $5,16(IX),H / DD CB 10 EC
- SET $5,32(IX),L / DD CB 20 ED
- SET $5,48(IX) / DD CB 30 EE
- SET $5,64(IX),A / DD CB 40 EF
- SET $6,16(IX),B / DD CB 10 F0
- SET $6,32(IX),C / DD CB 20 F1
- SET $6,48(IX),D / DD CB 30 F2
- SET $6,64(IX),E / DD CB 40 F3
- SET $6,16(IX),H / DD CB 10 F4
- SET $6,32(IX),L / DD CB 20 F5
- SET $6,48(IX) / DD CB 30 F6
- SET $6,64(IX),A / DD CB 40 F7
- SET $7,16(IX),B / DD CB 10 F8
- SET $7,32(IX),C / DD CB 20 F9
- SET $7,48(IX),D / DD CB 30 FA
- SET $7,64(IX),E / DD CB 40 FB
- SET $7,16(IX),H / DD CB 10 FC
- SET $7,32(IX),L / DD CB 20 FD
- SET $7,48(IX) / DD CB 30 FE
- SET $7,64(IX),A / DD CB 40 FF
- INC 32(IY) / FD 34 20
- DEC 48(IY) / FD 35 30
- LD 64(IY),$16 / FD 36 40 10
- LD B,32(IY) / FD 46 20
- LD C,48(IY) / FD 4E 30
- LD D,64(IY) / FD 56 40
- LD E,16(IY) / FD 5E 10
- LD H,32(IY) / FD 66 20
- LD L,48(IY) / FD 6E 30
- LD 64(IY),B / FD 70 40
- LD 16(IY),C / FD 71 10
- LD 32(IY),D / FD 72 20
- LD 48(IY),E / FD 73 30
- LD 64(IY),H / FD 74 40
- LD 16(IY),L / FD 75 10
- LD 32(IY),A / FD 77 20
- LD A,48(IY) / FD 7E 30
- ADD A,64(IY) / FD 86 40
- ADC A,16(IY) / FD 8E 10
- SUB A,32(IY) / FD 96 20
- SBC A,48(IY) / FD 9E 30
- AND A,64(IY) / FD A6 40
- XOR A,16(IY) / FD AE 10
- OR A,32(IY) / FD B6 20
- CP A,48(IY) / FD BE 30
- RLC 16(IY),B / FD CB 10 00
- RLC 32(IY),C / FD CB 20 01
- RLC 48(IY),D / FD CB 30 02
- RLC 64(IY),E / FD CB 40 03
- RLC 16(IY),H / FD CB 10 04
- RLC 32(IY),L / FD CB 20 05
- RLC 16(IY) / FD CB 10 06
- RLC 32(IY),A / FD CB 20 07
- RRC 48(IY),B / FD CB 30 08
- RRC 64(IY),C / FD CB 40 09
- RRC 16(IY),D / FD CB 10 0A
- RRC 32(IY),E / FD CB 20 0B
- RRC 48(IY),H / FD CB 30 0C
- RRC 64(IY),L / FD CB 40 0D
- RRC 32(IY) / FD CB 20 0E
- RRC 16(IY),A / FD CB 10 0F
- RL 32(IY),B / FD CB 20 10
- RL 48(IY),C / FD CB 30 11
- RL 64(IY),D / FD CB 40 12
- RL 16(IY),E / FD CB 10 13
- RL 32(IY),H / FD CB 20 14
- RL 48(IY),L / FD CB 30 15
- RL 48(IY) / FD CB 30 16
- RL 16(IY),A / FD CB 10 17
- RR 32(IY),B / FD CB 20 18
- RR 48(IY),C / FD CB 30 19
- RR 64(IY),D / FD CB 40 1A
- RR 16(IY),E / FD CB 10 1B
- RR 32(IY),H / FD CB 20 1C
- RR 48(IY),L / FD CB 30 1D
- RR 64(IY) / FD CB 40 1E
- RR 16(IY),A / FD CB 10 1F
- SLA 32(IY),B / FD CB 20 20
- SLA 48(IY),C / FD CB 30 21
- SLA 64(IY),D / FD CB 40 22
- SLA 16(IY),E / FD CB 10 23
- SLA 32(IY),H / FD CB 20 24
- SLA 48(IY),L / FD CB 30 25
- SLA 16(IY) / FD CB 10 26
- SLA 16(IY),A / FD CB 10 27
- SRA 32(IY),B / FD CB 20 28
- SRA 48(IY),C / FD CB 30 29
- SRA 64(IY),D / FD CB 40 2A
- SRA 16(IY),E / FD CB 10 2B
- SRA 32(IY),H / FD CB 20 2C
- SRA 48(IY),L / FD CB 30 2D
- SRA 32(IY) / FD CB 20 2E
- SRA 48(IY),A / FD CB 30 2F
- SLL 16(IY),B / FD CB 10 30
- SLL 32(IY),C / FD CB 20 31
- SLL 48(IY),D / FD CB 30 32
- SLL 64(IY),E / FD CB 40 33
- SLL 16(IY),H / FD CB 10 34
- SLL 32(IY),L / FD CB 20 35
- SLL 48(IY) / FD CB 30 36
- SLL 16(IY),A / FD CB 10 37
- SRL 32(IY),B / FD CB 20 38
- SRL 48(IY),C / FD CB 30 39
- SRL 64(IY),D / FD CB 40 3A
- SRL 16(IY),E / FD CB 10 3B
- SRL 32(IY),H / FD CB 20 3C
- SRL 48(IY),L / FD CB 30 3D
- SRL 64(IY) / FD CB 40 3E
- SRL 16(IY),A / FD CB 10 3F
- BIT $0,16(IY) / FD CB 10 46
- BIT $1,32(IY) / FD CB 20 4E
- BIT $2,48(IY) / FD CB 30 56
- BIT $3,64(IY) / FD CB 40 5E
- BIT $4,16(IY) / FD CB 10 66
- BIT $5,32(IY) / FD CB 20 6E
- BIT $6,48(IY) / FD CB 30 76
- BIT $7,64(IY) / FD CB 40 7E
- RES $0,16(IY),B / FD CB 10 80
- RES $0,32(IY),C / FD CB 20 81
- RES $0,48(IY),D / FD CB 30 82
- RES $0,64(IY),E / FD CB 40 83
- RES $0,16(IY),H / FD CB 10 84
- RES $0,32(IY),L / FD CB 20 85
- RES $0,48(IY) / FD CB 30 86
- RES $0,64(IY),A / FD CB 40 87
- RES $1,16(IY),B / FD CB 10 88
- RES $1,32(IY),C / FD CB 20 89
- RES $1,48(IY),D / FD CB 30 8A
- RES $1,64(IY),E / FD CB 40 8B
- RES $1,16(IY),H / FD CB 10 8C
- RES $1,32(IY),L / FD CB 20 8D
- RES $1,48(IY) / FD CB 30 8E
- RES $1,64(IY),A / FD CB 40 8F
- RES $2,16(IY),B / FD CB 10 90
- RES $2,32(IY),C / FD CB 20 91
- RES $2,48(IY),D / FD CB 30 92
- RES $2,64(IY),E / FD CB 40 93
- RES $2,16(IY),H / FD CB 10 94
- RES $2,32(IY),L / FD CB 20 95
- RES $2,48(IY) / FD CB 30 96
- RES $2,64(IY),A / FD CB 40 97
- RES $3,16(IY),B / FD CB 10 98
- RES $3,32(IY),C / FD CB 20 99
- RES $3,48(IY),D / FD CB 30 9A
- RES $3,64(IY),E / FD CB 40 9B
- RES $3,16(IY),H / FD CB 10 9C
- RES $3,32(IY),L / FD CB 20 9D
- RES $3,48(IY) / FD CB 30 9E
- RES $3,64(IY),A / FD CB 40 9F
- RES $4,16(IY),B / FD CB 10 A0
- RES $4,32(IY),C / FD CB 20 A1
- RES $4,48(IY),D / FD CB 30 A2
- RES $4,64(IY),E / FD CB 40 A3
- RES $4,16(IY),H / FD CB 10 A4
- RES $4,32(IY),L / FD CB 20 A5
- RES $4,48(IY) / FD CB 30 A6
- RES $4,64(IY),A / FD CB 40 A7
- RES $5,16(IY),B / FD CB 10 A8
- RES $5,32(IY),C / FD CB 20 A9
- RES $5,48(IY),D / FD CB 30 AA
- RES $5,64(IY),E / FD CB 40 AB
- RES $5,16(IY),H / FD CB 10 AC
- RES $5,32(IY),L / FD CB 20 AD
- RES $5,48(IY) / FD CB 30 AE
- RES $5,64(IY),A / FD CB 40 AF
- RES $6,16(IY),B / FD CB 10 B0
- RES $6,32(IY),C / FD CB 20 B1
- RES $6,48(IY),D / FD CB 30 B2
- RES $6,64(IY),E / FD CB 40 B3
- RES $6,16(IY),H / FD CB 10 B4
- RES $6,32(IY),L / FD CB 20 B5
- RES $6,48(IY) / FD CB 30 B6
- RES $6,64(IY),A / FD CB 40 B7
- RES $7,16(IY),B / FD CB 10 B8
- RES $7,32(IY),C / FD CB 20 B9
- RES $7,48(IY),D / FD CB 30 BA
- RES $7,64(IY),E / FD CB 40 BB
- RES $7,16(IY),H / FD CB 10 BC
- RES $7,32(IY),L / FD CB 20 BD
- RES $7,48(IY) / FD CB 30 BE
- RES $7,64(IY),A / FD CB 40 BF
- SET $0,16(IY),B / FD CB 10 C0
- SET $0,32(IY),C / FD CB 20 C1
- SET $0,48(IY),D / FD CB 30 C2
- SET $0,64(IY),E / FD CB 40 C3
- SET $0,16(IY),H / FD CB 10 C4
- SET $0,32(IY),L / FD CB 20 C5
- SET $0,48(IY) / FD CB 30 C6
- SET $0,64(IY),A / FD CB 40 C7
- SET $1,16(IY),B / FD CB 10 C8
- SET $1,32(IY),C / FD CB 20 C9
- SET $1,48(IY),D / FD CB 30 CA
- SET $1,64(IY),E / FD CB 40 CB
- SET $1,16(IY),H / FD CB 10 CC
- SET $1,32(IY),L / FD CB 20 CD
- SET $1,48(IY) / FD CB 30 CE
- SET $1,64(IY),A / FD CB 40 CF
- SET $2,16(IY),B / FD CB 10 D0
- SET $2,32(IY),C / FD CB 20 D1
- SET $2,48(IY),D / FD CB 30 D2
- SET $2,64(IY),E / FD CB 40 D3
- SET $2,16(IY),H / FD CB 10 D4
- SET $2,32(IY),L / FD CB 20 D5
- SET $2,48(IY) / FD CB 30 D6
- SET $2,64(IY),A / FD CB 40 D7
- SET $3,16(IY),B / FD CB 10 D8
- SET $3,32(IY),C / FD CB 20 D9
- SET $3,48(IY),D / FD CB 30 DA
- SET $3,64(IY),E / FD CB 40 DB
- SET $3,16(IY),H / FD CB 10 DC
- SET $3,32(IY),L / FD CB 20 DD
- SET $3,48(IY) / FD CB 30 DE
- SET $3,64(IY),A / FD CB 40 DF
- SET $4,16(IY),B / FD CB 10 E0
- SET $4,32(IY),C / FD CB 20 E1
- SET $4,48(IY),D / FD CB 30 E2
- SET $4,64(IY),E / FD CB 40 E3
- SET $4,16(IY),H / FD CB 10 E4
- SET $4,32(IY),L / FD CB 20 E5
- SET $4,48(IY) / FD CB 30 E6
- SET $4,64(IY),A / FD CB 40 E7
- SET $5,16(IY),B / FD CB 10 E8
- SET $5,32(IY),C / FD CB 20 E9
- SET $5,48(IY),D / FD CB 30 EA
- SET $5,64(IY),E / FD CB 40 EB
- SET $5,16(IY),H / FD CB 10 EC
- SET $5,32(IY),L / FD CB 20 ED
- SET $5,48(IY) / FD CB 30 EE
- SET $5,64(IY),A / FD CB 40 EF
- SET $6,16(IY),B / FD CB 10 F0
- SET $6,32(IY),C / FD CB 20 F1
- SET $6,48(IY),D / FD CB 30 F2
- SET $6,64(IY),E / FD CB 40 F3
- SET $6,16(IY),H / FD CB 10 F4
- SET $6,32(IY),L / FD CB 20 F5
- SET $6,48(IY) / FD CB 30 F6
- SET $6,64(IY),A / FD CB 40 F7
- SET $7,16(IY),B / FD CB 10 F8
- SET $7,32(IY),C / FD CB 20 F9
- SET $7,48(IY),D / FD CB 30 FA
- SET $7,64(IY),E / FD CB 40 FB
- SET $7,16(IY),H / FD CB 10 FC
- SET $7,32(IY),L / FD CB 20 FD
- SET $7,48(IY) / FD CB 30 FE
- SET $7,64(IY),A / FD CB 40 FF
--- a/as/target/x80/z80.c
+++ b/as/target/x80/z80.c
@@ -8,7 +8,6 @@
TUINT maxaddr = 0xFFFFFFFF;
int endian = LITTLE_ENDIAN;
-int left2right = 0;
void
iarch(void)
--- a/as/target/x86/amd64.c
+++ b/as/target/x86/amd64.c
@@ -5,7 +5,6 @@
TUINT maxaddr = 0xFFFFFFFFFFFFFFFF;
int endian = LITTLE_ENDIAN;
-int left2right = 0;
void
iarch(void)
--- /dev/null
+++ b/as/target/x86/i286.c
@@ -1,0 +1,53 @@
+static char sccsid[] = "@(#) ./as/target/x86/i286.c";
+
+#include "../../../inc/scc.h"
+#include "../../as.h"
+#include "../x86/proc.h"
+
+TUINT maxaddr = 0xFFFF;
+int endian = LITTLE_ENDIAN;
+int left2right = 0;
+
+void
+iarch(void)
+{
+ static struct {
+ char *name;
+ char type;
+ } regs[] = {
+ "CS", AREG_CS,
+ "DS", AREG_DS,
+ "SS", AREG_SS,
+ "ES", AREG_ES,
+
+ "AX", AREG_AX,
+ "AL", AREG_AL,
+ "AH", AREG_AH,
+
+ "BX", AREG_BX,
+ "BL", AREG_BL,
+ "BH", AREG_BH,
+
+ "CX", AREG_CX,
+ "CL", AREG_CL,
+ "CH", AREG_CH,
+
+ "DX", AREG_DX,
+ "DL", AREG_DL,
+ "DH", AREG_DH,
+
+ "SI", AREG_SI,
+ "DI", AREG_DI,
+
+ "SP", AREG_SP,
+ "BP", AREG_BP,
+
+ NULL
+ }, *bp;
+
+ for (bp = regs; bp->name; ++bp) {
+ Symbol *sym = lookup(bp->name);
+ sym->flags = FREG;
+ sym->value = bp->type;
+ }
+}
--- a/as/target/x86/i386.c
+++ b/as/target/x86/i386.c
@@ -6,7 +6,6 @@
TUINT maxaddr = 0xFFFFFFFF;
int endian = LITTLE_ENDIAN;
-int left2right = 0;
void
iarch(void)
--- a/as/target/x86/ins.c
+++ b/as/target/x86/ins.c
@@ -6,38 +6,296 @@
#include "../../as.h"
#include "proc.h"
+#define addrbyte(mod, reg, rm) ((mod) << 6 | (reg) << 3 | (rm))
+
+enum addr_mode {
+ MEM_MODE = 0,
+ MEM8_MODE = 1,
+ MEM16_MODE = 2,
+ REG_MODE = 3,
+};
+
+static int
+getclass(Node *np)
+{
+ if (np->addr != AREG)
+ return 0;
+
+ switch (np->sym->value) {
+ case AREG_AL:
+ case AREG_AH:
+ case AREG_BL:
+ case AREG_BH:
+ case AREG_CL:
+ case AREG_CH:
+ case AREG_DL:
+ case AREG_DH:
+ return R8CLASS;
+
+ case AREG_AX:
+ case AREG_BX:
+ case AREG_CX:
+ case AREG_DX:
+ case AREG_DI:
+ case AREG_SI:
+ case AREG_SP:
+ case AREG_BP:
+ return R16CLASS;
+
+ case AREG_CS:
+ case AREG_DS:
+ case AREG_SS:
+ case AREG_ES:
+ case AREG_FS:
+ case AREG_GS:
+
+ case AREG_EFLAGS:
+ case AREG_CF:
+ case AREG_PF:
+ case AREG_AF:
+ case AREG_ZF:
+ case AREG_SF:
+ case AREG_TF:
+ case AREG_IF:
+ case AREG_DF:
+ case AREG_OF:
+ case AREG_IOPL:
+ case AREG_NT:
+ case AREG_RF:
+ case AREG_VM:
+ case AREG_AC:
+ case AREG_VIF:
+ case AREG_VIP:
+ case AREG_ID:
+
+ case AREG_EAX:
+ case AREG_RAX:
+
+ case AREG_EBX:
+ case AREG_RBX:
+
+ case AREG_ECX:
+ case AREG_RCX:
+
+ case AREG_EDX:
+ case AREG_RDX:
+
+ case AREG_SIL:
+ case AREG_ESI:
+ case AREG_RSI:
+ case AREG_DIL:
+ case AREG_EDI:
+ case AREG_RDI:
+
+ case AREG_SPL:
+ case AREG_ESP:
+ case AREG_RSP:
+
+ case AREG_BPL:
+ case AREG_EBP:
+ case AREG_RBP:
+
+ case AREG_R0:
+ case AREG_MM0:
+ case AREG_R1:
+ case AREG_MM1:
+ case AREG_R2:
+ case AREG_MM2:
+ case AREG_R3:
+ case AREG_MM3:
+ case AREG_R4:
+ case AREG_MM4:
+ case AREG_R5:
+ case AREG_MM5:
+ case AREG_R6:
+ case AREG_MM6:
+ case AREG_R7:
+ case AREG_MM7:
+
+ case AREG_R8:
+ case AREG_R8L:
+ case AREG_R8W:
+ case AREG_R9:
+ case AREG_R9L:
+ case AREG_R9W:
+ case AREG_R10:
+ case AREG_R10L:
+ case AREG_R10W:
+ case AREG_R11:
+ case AREG_R11L:
+ case AREG_R11W:
+ case AREG_R12:
+ case AREG_R12L:
+ case AREG_R12W:
+ case AREG_R13:
+ case AREG_R13L:
+ case AREG_R13W:
+ case AREG_R14:
+ case AREG_R14L:
+ case AREG_R14W:
+ case AREG_R15:
+ case AREG_R15L:
+ case AREG_R15W:
+
+ case AREG_XMM0:
+ case AREG_XMM1:
+ case AREG_XMM2:
+ case AREG_XMM3:
+ case AREG_XMM4:
+ case AREG_XMM5:
+ case AREG_XMM6:
+ case AREG_XMM7:
+ case AREG_XMM8:
+ case AREG_XMM9:
+ case AREG_XMM10:
+ case AREG_XMM11:
+ case AREG_XMM12:
+ case AREG_XMM13:
+ case AREG_XMM14:
+ case AREG_XMM15:
+
+ case AREG_YMM0:
+ case AREG_YMM1:
+ case AREG_YMM2:
+ case AREG_YMM3:
+ case AREG_YMM4:
+ case AREG_YMM5:
+ case AREG_YMM6:
+ case AREG_YMM7:
+ case AREG_YMM8:
+ case AREG_YMM9:
+ case AREG_YMM10:
+ case AREG_YMM11:
+ case AREG_YMM12:
+ case AREG_YMM13:
+ case AREG_YMM14:
+ case AREG_YMM15:
+
+ case AREG_MXCSR:
+ return 0;
+ default:
+ abort();
+ }
+}
+
int
match(Op *op, Node **args)
{
unsigned char *p;
- int a, olda;
+ int arg, class, rep, opt;
+ Node *np;
if (!op->args)
return args == NULL;
- for (p = op->args; *p; ++p) {
- if (*p != AREP)
- a = *p;
- else
+ opt = rep = 0;
+ for (p = op->args; arg = *p; ++p) {
+ if (rep)
--p;
+ if ((np = *args++) == NULL)
+ return (rep|opt) != 0;
- switch (a) {
+ switch (arg) {
+ case AOPT:
+ opt = 1;
+ break;
+ case AREP:
+ rep = 1;
+ break;
+ case AREG_R8CLASS:
+ class = R8CLASS;
+ goto check_class;
+ case AREG_R16CLASS:
+ class = R16CLASS;
+ check_class:
+ if ((getclass(np) & class) == 0)
+ return 0;
+ break;
case AIMM8:
case AIMM16:
case AIMM32:
case AIMM64:
- case AREG_AL:
- case AREG_AH:
- case AREG_AX:
- case AREG_EAX:
+ if (np->addr != AIMM)
+ return 0;
+ if (toobig(np, arg))
+ error("overflow in immediate operand");
+ break;
+ case ASYM:
+ if (np->addr != AIMM || np->op != IDEN)
+ return 0;
+ break;
+ case ADIRECT:
+ case ASTR:
+ if (np->addr != arg)
+ return 0;
+ break;
default:
abort();
}
}
- return 1;
+
+ return *args == NULL;
}
Node *
moperand(void)
{
+}
+
+static int
+reg8toint(Node *np)
+{
+ switch (np->sym->value) {
+ case AREG_AL: return 0;
+ case AREG_CL: return 1;
+ case AREG_DL: return 2;
+ case AREG_BL: return 3;
+ case AREG_AH: return 4;
+ case AREG_CH: return 5;
+ case AREG_DH: return 6;
+ case AREG_BH: return 7;
+ default: abort();
+ }
+}
+
+void
+reg8_reg8(Op *op, Node **args)
+{
+ int src, dst;
+ char buf[2];
+
+ src = reg8toint(args[0]);
+ dst = reg8toint(args[1]);
+ buf[0] = op->bytes[0];
+ buf[1] = addrbyte(REG_MODE, src, dst);
+ emit(buf, 2);
+}
+
+static int
+reg16toint(Node *np)
+{
+ switch (np->sym->value) {
+ case AREG_AX: return 0;
+ case AREG_CX: return 1;
+ case AREG_DX: return 2;
+ case AREG_BX: return 3;
+ case AREG_SP: return 4;
+ case AREG_BP: return 5;
+ case AREG_SI: return 6;
+ case AREG_DI: return 7;
+ default: abort();
+ }
+}
+
+void
+reg16_reg16(Op *op, Node **args)
+{
+ int src, dst;
+ char buf[2];
+
+ src = reg16toint(args[0]);
+ dst = reg16toint(args[1]);
+ buf[0] = op->bytes[0];
+ buf[1] = addrbyte(REG_MODE, src, dst);
+ emit(buf, 2);
}
--- a/as/target/x86/proc.h
+++ b/as/target/x86/proc.h
@@ -146,4 +146,12 @@
AREG_YMM15,
AREG_MXCSR,
+
+ AREG_R8CLASS, /* register class for 8 bit registers in i286 */
+ AREG_R16CLASS, /* register class for 16 bit registers in i286 */
+};
+
+enum class {
+ R8CLASS = 1 << 0,
+ R16CLASS = 1 << 1,
};
--- a/as/target/x86/rules.dat
+++ b/as/target/x86/rules.dat
@@ -1,7 +1,9 @@
-^imm8 AIMM8
-^imm16 AIMM16
-^imm32 AIMM32
-^imm64 AIMM64
-^\(n\) ADIRECT
-^sym ASYM
-^string ASTR
+reg8 AREG_R8CLASS
+reg16 AREG_R16CLASS
+imm8 AIMM8
+imm16 AIMM16
+imm32 AIMM32
+imm64 AIMM64
+\(n\) ADIRECT
+sym ASYM
+string ASTR
--- a/as/target/x86/x86.dat
+++ b/as/target/x86/x86.dat
@@ -1,23 +1,28 @@
# Tab 16, tabs 16, :set ts=16
# op args size bytes format cpu
-.DB imm8+ 0 none defb BITS16,BITS32,BITS64
-.DEFB imm8+ 0 none defb BITS16,BITS32,BITS64
-.BYTE imm8+ 0 none defb BITS16,BITS32,BITS64
-.DW imm16+ 0 none defw BITS16,BITS32,BITS64
-.DEFW imm16+ 0 none defw BITS16,BITS32,BITS64
-.SHORT imm16+ 0 none defw BITS16,BITS32,BITS64
-.WORD imm16+ 0 none defw BITS16
-.WORD imm32+ 0 none defd BITS32,BITS64
-.DD imm32+ 0 none defd BITS16,BITS32,BITS64
-.DEFD imm32+ 0 none defd BITS16,BITS32,BITS64
-.LONG imm32+ 0 none defd BITS16,BITS32
-.LONG imm64+ 0 none defq BITS64
-.INT imm32+ 0 none defd BITS32,BITS64
-.INT imm16+ 0 none defd BITS16
-.DQ imm64+ 0 none defq BITS16,BITS32,BITS64
-.DEFQ imm64+ 0 none defq BITS16,BITS32,BITS64
-.EQU imm16 0 none equ BITS16
-.EQU imm32 0 none equ BITS32
-.EQU imm64 0 none equ BITS64
-NOP none 1 0x90 noargs BITS16,BITS32,BITS64
-RET none 1 0xc3 noargs BITS16,BITS32,BITS64
+.DB imm8+ 0 none defb I286,I386,AMD64
+.DEFB imm8+ 0 none defb I286,I386,AMD64
+.BYTE imm8+ 0 none defb I286,I386,AMD64
+.DW imm16+ 0 none defw I286,I386,AMD64
+.DEFW imm16+ 0 none defw I286,I386,AMD64
+.SHORT imm16+ 0 none defw I286,I386,AMD64
+.WORD imm16+ 0 none defw I286
+.WORD imm32+ 0 none defd I386,AMD64
+.DD imm32+ 0 none defd I286,I386,AMD64
+.DEFD imm32+ 0 none defd I286,I386,AMD64
+.LONG imm32+ 0 none defd I286,I386
+.LONG imm64+ 0 none defq AMD64
+.INT imm32+ 0 none defd I386,AMD64
+.INT imm16+ 0 none defd I286
+.DQ imm64+ 0 none defq I286,I386,AMD64
+.DEFQ imm64+ 0 none defq I286,I386,AMD64
+.EQU imm16 0 none equ I286
+.EQU imm32 0 none equ I386
+.EQU imm64 0 none equ AMD64
+NOP none 1 0x90 noargs I286,I386,AMD64
+RET none 1 0xc3 noargs I286,I386,AMD64
+
+
+# 8 bit arithmetic operations
+ADDB reg8,reg8 2 0x00 reg8_reg8 I286,I386,AMD64
+ADDW reg16,reg16 2 0x01 reg16_reg16 I286,I386,AMD64
--- a/as/target/z80.mk
+++ b/as/target/z80.mk
@@ -1,9 +1,8 @@
-Z80_LST = target/x80/z80tbl.o target/x80/z80.o target/x80/ins.o
+Z80_OBJ = $(OBJ) target/x80/z80tbl.o target/x80/z80.o target/x80/ins.o
-$(Z80_LST): target/x80/proc.h
-
target/x80/z80tbl.c: gentbl.awk target/x80/x80.dat target/x80/rules.dat
- LC_ALL=C ./gentbl.sh -f x80 -c z80
+ ./gentbl.sh -f x80 -c z80
-OBJ-z80 = $(OBJ) $(Z80_LST)
+$(LIBEXEC)/as-z80: $(OBJ) $(Z80_OBJ)
+ $(CC) $(SCC_LDFLAGS) $(Z80_OBJ) -lscc -o $@
--- a/as/test.sh
+++ /dev/null
@@ -1,46 +1,0 @@
-#!/bin/sh
-
-set -e
-file=${1?}
-exec >test.log
-exec 2>&1
-
-tmp1=`mktemp`
-tmp2=`mktemp`
-
-trap "rm -f a.out $tmp1 $tmp2" 0 2 3
-
-./as-$cpu $file
-
-sed -n '/^\// ! {
- s%.*/%%
- s%^[ ]*%%
- s%[ ]*$%%
- /^$/d
- s%[ ][ ]*%\
-%g
- p
-}' $file |
-nl -b a > $tmp1
-
-
-../objdump/objdump |
-sed -n '/^data:/,$ {
- /^data:/ ! {
- s%.*:%%
- s%^[ ]*%%
- s%[ ]*$%%
- /^$/d
- s%[ ][ ]*%\
-%g
- p
- }
-}' |
-nl -b a > $tmp2
-
-printf "test.s\n"
-cat $tmp1
-printf "\nobjdump\n"
-cat $tmp2
-printf "\ndiff\n"
-diff -u $tmp1 $tmp2
--- a/cc1/Makefile
+++ b/cc1/Makefile
@@ -1,33 +1,32 @@
.POSIX:
-# Makefile is only used as a template for makefile.
-# If you modify Makefile remember to run make dep
-
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
-MOREFLAGS = -I$(PROJECTDIR)/inc/$(STD) $(CC1_CFLAGS)
+MORECFLAGS = -I$(INCLUDE)/$(STD)
OBJ = types.o decl.o lex.o error.o symbol.o main.o expr.o \
code.o stmt.o cpp.o fold.o init.o builtin.o
-HDR = cc1.h \
- $(PROJECTDIR)/inc/scc.h \
- $(PROJECTDIR)/inc/$(STD)/cstd.h \
- $(PROJECTDIR)/inc/sysincludes.h
+TARGETS = $(LIBEXEC)/cc1-amd64-sysv $(LIBEXEC)/cc1-arm64-sysv \
+ $(LIBEXEC)/cc1-i386-sysv $(LIBEXEC)/cc1-z80-scc
-all:
- cp cc1-* $(PROJECTDIR)/rootdir/libexec/scc/
+all: $(TARGETS)
+$(TARGETS): $(LIBDIR)/libscc.a
+
dep:
- ./gendep.sh $(TARGETS)
+ $(PROJECTDIR)/mkdep.sh
clean:
rm -f *.o
rm -f target/*/*.o
- rm -f cc1-*
+ rm -f $(TARGETS)
-distclean: clean
- rm -f makefile
+include target/amd64-sysv/arch.mk
+include target/arm64-sysv/arch.mk
+include target/i386-sysv/arch.mk
+include target/z80-scc/arch.mk
+include deps.mk
--- /dev/null
+++ b/cc1/deps.mk
@@ -1,0 +1,45 @@
+cpp.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+decl.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+expr.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+init.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+lex.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+stmt.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+symbol.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+types.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+
+#deps
+builtin.o: ../inc/scc.h
+builtin.o: cc1.h
+code.o: ../inc/scc.h
+code.o: cc1.h
+cpp.o: ../inc/scc.h
+cpp.o: cc1.h
+decl.o: ../inc/scc.h
+decl.o: cc1.h
+error.o: ../inc/scc.h
+error.o: cc1.h
+expr.o: ../inc/scc.h
+expr.o: cc1.h
+fold.o: ../inc/scc.h
+fold.o: cc1.h
+init.o: ../inc/scc.h
+init.o: cc1.h
+lex.o: ../inc/scc.h
+lex.o: cc1.h
+main.o: ../inc/arg.h
+main.o: ../inc/scc.h
+main.o: cc1.h
+stmt.o: ../inc/scc.h
+stmt.o: cc1.h
+symbol.o: ../inc/scc.h
+symbol.o: cc1.h
+target/amd64-sysv/arch.o: target/amd64-sysv/../../../inc/scc.h
+target/amd64-sysv/arch.o: target/amd64-sysv/../../cc1.h
+target/arm64-sysv/arch.o: target/arm64-sysv/../../../inc/scc.h
+target/arm64-sysv/arch.o: target/arm64-sysv/../../cc1.h
+target/i386-sysv/arch.o: target/i386-sysv/../../../inc/scc.h
+target/i386-sysv/arch.o: target/i386-sysv/../../cc1.h
+target/z80-scc/arch.o: target/z80-scc/../../../inc/scc.h
+target/z80-scc/arch.o: target/z80-scc/../../cc1.h
+types.o: ../inc/scc.h
+types.o: cc1.h
--- a/cc1/gendep.sh
+++ /dev/null
@@ -1,27 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-re='\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)'
-
-echo $@ |
-tr ' ' '\n' |
-sed "s/$re/\1-\2/" |
-sort -u |
-(cat Makefile
-echo
-while read i
-do
- cat <<EOF
-all: cc1-$i
-OBJ-$i= \$(OBJ) target/$i/arch.o
-\$(OBJ-$i): \$(HDR)
-cc1-$i: \$(OBJ-$i) \$(LIBDIR)/libscc.a
- \$(CC) \$(SCC_LDFLAGS) \$(OBJ-$i) -lscc -o \$@
-
-EOF
- echo
-done) > $$.mk && mv $$.mk makefile
--- a/cc1/lex.c
+++ b/cc1/lex.c
@@ -197,7 +197,7 @@
newline();
break;
default:
- if (!isprint(c) && !ispunct(c))
+ if (!isprint(c) && !ispunct(c) && !isspace(c))
warn("invalid input character. The shame of UB is yours");
break;
}
--- /dev/null
+++ b/cc1/target/amd64-sysv/arch.mk
@@ -1,0 +1,5 @@
+
+OBJ-amd64-sysv= $(OBJ) target/amd64-sysv/arch.o
+
+$(LIBEXEC)/cc1-amd64-sysv: $(OBJ-amd64-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-amd64-sysv) -lscc -o $@
--- a/cc1/target/arm64-sysv/arch.c
+++ b/cc1/target/arm64-sysv/arch.c
@@ -1,0 +1,220 @@
+static char sccsid[] = "@(#) ./cc1/arch/arm64-sysv/arch.c";
+
+#include "../../../inc/scc.h"
+#include "../../cc1.h"
+
+#define RANK_BOOL 0
+#define RANK_SCHAR 1
+#define RANK_UCHAR 1
+#define RANK_CHAR 1
+#define RANK_SHORT 2
+#define RANK_USHORT 2
+#define RANK_INT 3
+#define RANK_UINT 3
+#define RANK_LONG 4
+#define RANK_ULONG 4
+#define RANK_LLONG 5
+#define RANK_ULLONG 5
+#define RANK_FLOAT 6
+#define RANK_DOUBLE 7
+#define RANK_LDOUBLE 8
+
+/*
+ * Initializaion of type pointers were done with
+ * a C99 initilizator '... = &(Type) {...', but
+ * c compiler in Plan9 gives error with this
+ * syntax, so I have switched it to this ugly form
+ * I hope I will change it again in the future
+ */
+
+static Type types[] = {
+ { /* 0 = voidtype */
+ .op = VOID,
+ .letter = L_VOID,
+ },
+ { /* 1 = pvoidtype */
+ .op = PTR,
+ .letter = L_POINTER,
+ .prop = TDEFINED,
+ .type = &types[5], /* chartype */
+ .size = 8,
+ .align = 8,
+ },
+ { /* 2 = booltype */
+ .op = INT,
+ .letter = L_BOOL,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 1,
+ .align = 1,
+ .n.rank = RANK_BOOL,
+ },
+ { /* 3 = schartype */
+ .op = INT,
+ .letter = L_INT8,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 1,
+ .align = 1,
+ .n.rank = RANK_SCHAR,
+ },
+ { /* 4 = uchartype */
+ .op = INT,
+ .letter = L_UINT8,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 1,
+ .align = 1,
+ .n.rank = RANK_UCHAR,
+ },
+ { /* 5 = chartype */
+ .op = INT,
+ .letter = L_INT8,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 1,
+ .align = 1,
+ .n.rank = RANK_CHAR,
+ },
+ { /* 6 = ushortype */
+ .op = INT,
+ .letter = L_UINT16,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 2,
+ .align = 2,
+ .n.rank = RANK_USHORT,
+ },
+ { /* 7 = shortype */
+ .op = INT,
+ .letter = L_INT16,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 2,
+ .align = 2,
+ .n.rank = RANK_SHORT,
+ },
+ { /* 8 = uinttype */
+ .op = INT,
+ .letter = L_UINT32,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 4,
+ .align = 4,
+ .n.rank = RANK_UINT,
+ },
+ { /* 9 = inttype */
+ .op = INT,
+ .letter = L_INT32,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 4,
+ .align = 4,
+ .n.rank = RANK_INT,
+ },
+ { /* 10 = longtype */
+ .op = INT,
+ .letter = L_INT64,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_LONG,
+ },
+ { /* 11 = ulongtype */
+ .op = INT,
+ .letter = L_UINT64,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_ULONG,
+ },
+ { /* 12 = ullongtype */
+ .op = INT,
+ .letter = L_UINT64,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_ULLONG,
+ },
+ { /* 13 = llongtype */
+ .op = INT,
+ .letter = L_INT64,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_LLONG,
+ },
+ { /* 14 = floattype */
+ .op = FLOAT,
+ .letter = L_FLOAT,
+ .prop = TDEFINED | TARITH,
+ .size = 4,
+ .align = 4,
+ .n.rank = RANK_FLOAT,
+ },
+ { /* 15 = doubletype */
+ .op = FLOAT,
+ .letter = L_DOUBLE,
+ .prop = TDEFINED | TARITH,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_DOUBLE,
+ },
+ { /* 16 = ldoubletype */
+ .op = FLOAT,
+ .letter = L_LDOUBLE,
+ .prop = TDEFINED | TARITH,
+ .size = 16,
+ .align = 16,
+ .n.rank = RANK_LDOUBLE,
+ },
+ { /* 17 = sizettype */
+ .op = INT,
+ .letter = L_UINT64,
+ .prop = TDEFINED | TINTEGER | TARITH,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_UINT,
+ },
+ { /* 18 = ellipsis */
+ .op = ELLIPSIS,
+ .letter = L_ELLIPSIS,
+ .prop = TDEFINED,
+ },
+ { /* 19 = pdifftype */
+ .op = INT,
+ .letter = L_INT64,
+ .prop = TDEFINED | TINTEGER | TARITH | TSIGNED,
+ .size = 8,
+ .align = 8,
+ .n.rank = RANK_LONG,
+ },
+ { /* 20 = va_type */
+ .op = STRUCT,
+ .letter = L_VA_ARG,
+ .prop = TDEFINED,
+ .size = 24,
+ .align = 8,
+ },
+};
+
+Type *voidtype = &types[0], *pvoidtype = &types[1],
+ *booltype = &types[2], *schartype = &types[3],
+ *uchartype = &types[4], *chartype = &types[5],
+ *ushortype = &types[6], *shortype = &types[7],
+ *uinttype = &types[8], *inttype = &types[9],
+ *longtype = &types[10], *ulongtype = &types[11],
+ *ullongtype = &types[12], *llongtype = &types[13],
+ *floattype = &types[14], *doubletype = &types[15],
+ *ldoubletype = &types[16],
+ *sizettype = &types[17], *pdifftype = &types[19],
+ *ellipsistype = &types[18], *va_type = &types[20],
+ *va_list_type;
+
+static Symbol dummy0 = {.u.i = 0, .type = &types[9]},
+ dummy1 = {.u.i = 1, .type = &types[9]};
+Symbol *zero = &dummy0, *one = &dummy1;
+
+void
+iarch(void)
+{
+ va_list_type = mktype(va_type, ARY, 1, NULL);
+}
+
+int
+valid_va_list(Type *tp)
+{
+ return tp->op == PTR && eqtype(tp->type, va_type, 1);
+}
--- /dev/null
+++ b/cc1/target/arm64-sysv/arch.mk
@@ -1,0 +1,5 @@
+
+OBJ-arm64-sysv= $(OBJ) target/arm64-sysv/arch.o
+
+$(LIBEXEC)/cc1-arm64-sysv: $(OBJ-arm64-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-arm64-sysv) -lscc -o $@
--- /dev/null
+++ b/cc1/target/i386-sysv/arch.mk
@@ -1,0 +1,5 @@
+
+OBJ-i386-sysv= $(OBJ) target/i386-sysv/arch.o
+
+$(LIBEXEC)/cc1-i386-sysv: $(OBJ-i386-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-i386-sysv) -lscc -o $@
--- /dev/null
+++ b/cc1/target/z80-scc/arch.mk
@@ -1,0 +1,5 @@
+
+OBJ-z80-scc= $(OBJ) target/z80-scc/arch.o
+
+$(LIBEXEC)/cc1-z80-scc: $(OBJ-z80-scc)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-z80-scc) -lscc -o $@
--- a/cc2/Makefile
+++ b/cc2/Makefile
@@ -1,33 +1,35 @@
.POSIX:
-# Makefile is only used as a template for makefile.
-# If you modify Makefile remember to run make dep
-
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
-MOREFLAGS = -I$(PROJECTDIR)/inc/$(STD) $(CC2_CFLAGS)
+MORECFLAGS = -I$(PROJECTDIR)/inc/$(STD)
OBJ = main.o parser.o peep.o symbol.o node.o code.o optm.o
-HDR = cc2.h $(PROJECTDIR)/inc/$(STD)/cstd.h $(PROJECTDIR)/inc/scc.h
-all:
- cp cc2-* $(PROJECTDIR)/rootdir/libexec/scc/
+TARGETS = $(LIBEXEC)/cc2-amd64-sysv $(LIBEXEC)/cc2-i386-sysv \
+ $(LIBEXEC)/cc2-qbe_amd64-sysv $(LIBEXEC)/cc2-z80-scc
-dep:
- MKQBE=${MKQBE} ./gendep.sh $(TARGETS)
+all: $(TARGETS)
-main.o: error.h
+$(TARGETS): $(LIBDIR)/libscc.a
+dep:
+ $(PROJECTDIR)/mkdep.sh
+
error.h: cc2.h
rm -f $@; trap 'rm -f $$$$.h' EXIT INT QUIT ;\
awk -f generror.awk cc2.h > $$$$.h && mv $$$$.h $@
clean:
- rm -f *.o
+ rm -f *.o error.h
rm -f target/*/*.o
- rm -f cc2-* error.h
+ rm -f $(TARGETS)
-distclean: clean
- rm -f makefile
+include target/amd64-sysv/target.mk
+include target/i386-sysv/target.mk
+include target/qbe_amd64-sysv/target.mk
+include target/qbe_arm64-sysv/target.mk
+include target/z80-scc/target.mk
+include deps.mk
--- /dev/null
+++ b/cc2/deps.mk
@@ -1,0 +1,61 @@
+parser.c: $(PROJECTDIR)/inc/$(STD)/cstd.h
+target/amd64-sysv/code.o: $(INCLUDE)/$(STD)/cstd.h
+target/i386-sysv/code.o: $(INCLUDE)/$(STD)/cstd.h
+target/qbe/cgen.o: $(INCLUDE)/$(STD)/cstd.h
+target/z80-scc/code.o: $(INCLUDE)/$(STD)/cstd.h
+
+#deps
+code.o: ../inc/scc.h
+code.o: cc2.h
+main.o: ../inc/arg.h
+main.o: ../inc/scc.h
+main.o: cc2.h
+main.o: error.h
+node.o: ../inc/scc.h
+node.o: cc2.h
+optm.o: ../inc/scc.h
+optm.o: cc2.h
+parser.o: ../inc/scc.h
+parser.o: cc2.h
+peep.o: ../inc/scc.h
+peep.o: cc2.h
+symbol.o: ../inc/scc.h
+symbol.o: cc2.h
+target/amd64-sysv/cgen.o: target/amd64-sysv/../../../inc/scc.h
+target/amd64-sysv/cgen.o: target/amd64-sysv/../../cc2.h
+target/amd64-sysv/cgen.o: target/amd64-sysv/arch.h
+target/amd64-sysv/code.o: target/amd64-sysv/../../../inc/scc.h
+target/amd64-sysv/code.o: target/amd64-sysv/../../cc2.h
+target/amd64-sysv/code.o: target/amd64-sysv/arch.h
+target/amd64-sysv/optm.o: target/amd64-sysv/../../../inc/scc.h
+target/amd64-sysv/optm.o: target/amd64-sysv/../../cc2.h
+target/amd64-sysv/types.o: target/amd64-sysv/../../../inc/scc.h
+target/amd64-sysv/types.o: target/amd64-sysv/../../cc2.h
+target/i386-sysv/cgen.o: target/i386-sysv/../../../inc/scc.h
+target/i386-sysv/cgen.o: target/i386-sysv/../../cc2.h
+target/i386-sysv/cgen.o: target/i386-sysv/arch.h
+target/i386-sysv/code.o: target/i386-sysv/../../../inc/scc.h
+target/i386-sysv/code.o: target/i386-sysv/../../cc2.h
+target/i386-sysv/code.o: target/i386-sysv/arch.h
+target/i386-sysv/optm.o: target/i386-sysv/../../../inc/scc.h
+target/i386-sysv/optm.o: target/i386-sysv/../../cc2.h
+target/i386-sysv/types.o: target/i386-sysv/../../../inc/scc.h
+target/i386-sysv/types.o: target/i386-sysv/../../cc2.h
+target/qbe/cgen.o: target/qbe/../../../inc/scc.h
+target/qbe/cgen.o: target/qbe/../../cc2.h
+target/qbe/cgen.o: target/qbe/arch.h
+target/qbe/code.o: target/qbe/../../../inc/scc.h
+target/qbe/code.o: target/qbe/../../cc2.h
+target/qbe/code.o: target/qbe/arch.h
+target/qbe/optm.o: target/qbe/../../../inc/scc.h
+target/qbe/optm.o: target/qbe/../../cc2.h
+target/z80-scc/cgen.o: target/z80-scc/../../../inc/scc.h
+target/z80-scc/cgen.o: target/z80-scc/../../cc2.h
+target/z80-scc/cgen.o: target/z80-scc/arch.h
+target/z80-scc/code.o: target/z80-scc/../../../inc/scc.h
+target/z80-scc/code.o: target/z80-scc/../../cc2.h
+target/z80-scc/code.o: target/z80-scc/arch.h
+target/z80-scc/optm.o: target/z80-scc/../../../inc/scc.h
+target/z80-scc/optm.o: target/z80-scc/../../cc2.h
+target/z80-scc/types.o: target/z80-scc/../../../inc/scc.h
+target/z80-scc/types.o: target/z80-scc/../../cc2.h
--- a/cc2/gendep.sh
+++ /dev/null
@@ -1,39 +1,0 @@
-#!/bin/sh
-
-gentarget()
-{
-
- cat <<EOF
-include target/$1/target.mk
-\$(OBJ-$1): \$(HDR)
-all: cc2-$1
-cc2-$1: \$(OBJ-$1) \$(LIBDIR)/libscc.a
- \$(CC) \$(SCC_LDFLAGS) \$(OBJ-$1) -lscc -o \$@
-
-EOF
-}
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-re='\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)'
-
-echo $@ |
-tr ' ' '\n' |
-sed "s/$re/\1-\2/" |
-sort -u |
-(cat Makefile
-while read i
-do
- if test ${MKQBE:-0} -eq 1
- then
- case $i in
- amd64-sysv)
- gentarget qbe_$i
- ;;
- esac
- fi
- gentarget $i
-done) > $$.mk && mv $$.mk makefile
--- a/cc2/target/amd64-sysv/target.mk
+++ b/cc2/target/amd64-sysv/target.mk
@@ -1,5 +1,9 @@
+
OBJ-amd64-sysv = $(OBJ) \
target/amd64-sysv/cgen.o \
target/amd64-sysv/optm.o \
target/amd64-sysv/code.o \
target/amd64-sysv/types.o
+
+$(LIBEXEC)/cc2-amd64-sysv: $(OBJ-amd64-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-amd64-sysv) -lscc -o $@
--- a/cc2/target/i386-sysv/target.mk
+++ b/cc2/target/i386-sysv/target.mk
@@ -1,5 +1,9 @@
+
OBJ-i386-sysv = $(OBJ) \
target/i386-sysv/cgen.o \
target/i386-sysv/optm.o \
target/i386-sysv/code.o \
target/i386-sysv/types.o
+
+$(LIBEXEC)/cc2-i386-sysv: $(OBJ-i386-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-i386-sysv) -lscc -o $@
--- a/cc2/target/qbe_amd64-sysv/target.mk
+++ b/cc2/target/qbe_amd64-sysv/target.mk
@@ -1,5 +1,9 @@
+
OBJ-qbe_amd64-sysv = $(OBJ) \
target/qbe/cgen.o \
target/qbe/optm.o \
target/qbe/code.o \
target/amd64-sysv/types.o
+
+$(LIBEXEC)/cc2-qbe_amd64-sysv: $(OBJ-qbe_amd64-sysv)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-qbe_amd64-sysv) -lscc -o $@
--- a/cc2/target/qbe_arm64-sysv/target.mk
+++ b/cc2/target/qbe_arm64-sysv/target.mk
@@ -1,4 +1,4 @@
-OBJ-qbe_amd64-sysv = $(OBJ) \
+OBJ-qbe_arm64-sysv = $(OBJ) \
target/qbe/cgen.o \
target/qbe/optm.o \
target/qbe/code.o \
--- a/cc2/target/z80-scc/target.mk
+++ b/cc2/target/z80-scc/target.mk
@@ -1,3 +1,4 @@
+
OBJ-z80-scc = $(OBJ) \
target/z80-scc/cgen.o \
target/z80-scc/optm.o \
@@ -4,3 +5,5 @@
target/z80-scc/code.o \
target/z80-scc/types.o
+$(LIBEXEC)/cc2-z80-scc: $(OBJ-z80-scc)
+ $(CC) $(SCC_LDFLAGS) $(OBJ-z80-scc) -lscc -o $@
--- /dev/null
+++ b/config.mk
@@ -1,0 +1,30 @@
+# scc version
+VERSION = 0.1
+
+## Customize below to fit your system
+DRIVER = posix
+
+# Can be c89 or c99
+STD = c99
+
+# paths
+PREFIX = $(PWD)/$(PROJECTDIR)/rootdir
+MANPREFIX = $(PREFIX)/share/man
+
+# scc expects to be built by a C99 compiler
+# if your system is not at least POSIX 2004 compatible, adjust CC
+# CC = c99
+# AR = ar
+AS = as
+
+### Systems
+# Plan9
+#SYSCFLAGS = -D_SUSV2_SOURCE
+#SYSLDCFLAGS =
+#STDCFLAGS =
+###
+# BSD
+#SYSCFLAGS =
+#SYSLDCFLAGS =
+#STDCFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
+###
--- a/config.mk.def
+++ /dev/null
@@ -1,32 +1,0 @@
-# scc version
-VERSION = 0.1
-
-## Customize below to fit your system
-# TARGETS is defined by a list of backend-arch-abi-sys. First
-# element of the list becomes the default target
-
-TARGETS = amd64-sysv-linux-elf \
- z80-scc-none-none \
- i386-sysv-linux-elf \
- amd64-sysv-openbsd-elf
-
-# USEQBE selects QBE by default in the targets that support it
-USEQBE = 1
-
-#MKQBE enable build of qbe backends
-MKQBE = 1
-
-DRIVER = posix
-
-# Can be c89 or c99
-STD = c99
-
-# paths
-PREFIX = $(HOME)
-MANPREFIX = $(PREFIX)/share/man
-
-# scc expects to be built by a C99 compiler
-# if your system is not at least POSIX 2004 compatible, adjust CC
-# CC = c99
-# AR = ar
-AS = as
--- /dev/null
+++ b/config.sh
@@ -1,0 +1,16 @@
+#!/bin/sh
+
+case `uname` in
+*BSD)
+ sys=BSD
+ ;;
+*Plan9)
+ sys=Plan9
+ ;;
+*)
+ exit
+ ;;
+esac
+
+
+(echo '/^# '$sys'/+;/^###$/- s/^#//'; echo w) | ed -s config.mk
--- a/configure
+++ /dev/null
@@ -1,15 +1,0 @@
-#!/bin/sh
-
-if [ ! -e config.mk ]
-then
- printf '%s\n' 'Generating config.mk from defaults...' \
- '(edit it for customization and then re-run this script)'
- trap "rm -f $$.mk" 0 2 3; \
- (cat config.mk.def ;\
- sed -n '/^# '`uname`'/,/^$$/p' system.mk) > $$.mk && \
- mv $$.mk config.mk
-fi
-
-printf 'Generating arch-dependant build files...\n'
-make dep > /dev/null && \
-printf 'You can now install scc with “make install”\n'
--- a/driver/Makefile
+++ b/driver/Makefile
@@ -7,4 +7,4 @@
include $(PROJECTDIR)/rules.mk
all dep clean distclean:
- +cd $(DRIVER) && $(MAKE) $@
+ +@cd $(DRIVER) && $(MAKE) $@
--- a/driver/posix/Makefile
+++ b/driver/posix/Makefile
@@ -1,30 +1,26 @@
.POSIX:
PROJECTDIR = ../..
-LIBDIR = $(PROJECTDIR)/lib/scc
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
+include $(INCLUDE)/incdep.mk
-OBJ = scc.o
-HDR = config.h \
- $(PROJECTDIR)/inc/scc.h \
- $(PROJECTDIR)/inc/arg.h \
- $(PROJECTDIR)/inc/syslibs.h \
- $(PROJECTDIR)/inc/ldflags.h
+# SYSLST is a list of backend-arch-abi-sys. First
+# element of the list becomes the default target
-all: scc cpp
- mkdir -p $(PROJECTDIR)/rootdir/bin
- cp scc cpp $(PROJECTDIR)/rootdir/bin/
+SYSLST = amd64-sysv-linux-elf z80-scc-none-none \
+ i386-sysv-linux-elf amd64-sysv-openbsd-elf
-dep:
- PREFIX=$(PREFIX) USEQBE=$(USEQBE) ./gendep.sh $(TARGETS)
+STDCFLAGS =
-$(OBJ): $(HDR)
+TARGETS = $(BINDIR)/scc $(BINDIR)/scpp
-scc: $(OBJ) $(LIBDIR)/libscc.a
- $(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
+all: $(TARGETS)
-cpp: cpp.sh config.h
+$(BINDIR)/scc: scc.o $(LIBDIR)/libscc.a
+ $(CC) $(SCC_LDFLAGS) scc.o -lscc -o $@
+
+$(BINDIR)/scpp: cpp.sh config.h
set -x ;\
trap "rm -f $$$$.sh" 0 2 3;\
rm -f $@ ;\
@@ -32,11 +28,15 @@
chmod +x $$$$.sh && \
mv $$$$.sh $@
-clean:
- rm -f $(OBJ)
- rm -f scc
- rm -f scpp
+config.h:
+ PREFIX=$(PREFIX) ./config.sh $(SYSLST)
-distclean: clean
+dep:
+ $(PROJECTDIR)/mkdep.sh
+
+clean:
+ rm -f scc scpp *.o
+ rm -f $(TARGETS)
rm -f config.h
+include deps.mk
--- /dev/null
+++ b/driver/posix/config.sh
@@ -1,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+rm -f config.h
+trap "rm -f $$.h" 0 2 3
+
+PREFIX=${PREFIX-$HOME}
+
+echo $@ |
+(IFS='- ' read arch abi sys format r
+echo \#define PREFIX \"$PREFIX\"
+echo \#define ARCH \"$arch\"
+echo \#define SYS \"$sys\"
+echo \#define ABI \"$abi\"
+echo \#define FORMAT \"$format\") > $$.h && mv $$.h config.h
--- /dev/null
+++ b/driver/posix/deps.mk
@@ -1,0 +1,8 @@
+#deps
+scc.o: ../../inc/arg.h
+scc.o: ../../inc/ldflags.h
+scc.o: ../../inc/scc.h
+scc.o: ../../inc/syscrts.h
+scc.o: ../../inc/sysincludes.h
+scc.o: ../../inc/syslibs.h
+scc.o: config.h
--- a/driver/posix/gendep.sh
+++ /dev/null
@@ -1,18 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f config.h
-trap "rm -f $$.h" 0 2 3
-
-PREFIX=${PREFIX-$HOME}
-USEQBE=${USEQBE:-1}
-
-echo $@ |
-(IFS='- ' read arch abi sys format r
-echo \#define PREFIX \"$PREFIX\"
-echo \#define USEQBE $USEQBE
-echo \#define ARCH \"$arch\"
-echo \#define SYS \"$sys\"
-echo \#define ABI \"$abi\"
-echo \#define FORMAT \"$format\") > $$.h && mv $$.h config.h
--- a/driver/posix/scc.c
+++ b/driver/posix/scc.c
@@ -16,6 +16,8 @@
#include "config.h"
#include "../../inc/arg.h"
#include "../../inc/scc.h"
+#include "../../inc/syscrts.h"
+#include "../../inc/sysincludes.h"
#include "../../inc/syslibs.h"
#include "../../inc/ldflags.h"
@@ -58,7 +60,7 @@
static char *tmpdir;
static size_t tmpdirln;
static struct items objtmp, objout;
-static int Mflag, Eflag, Sflag, cflag, dflag, kflag, sflag, Qflag = USEQBE;
+static int Mflag, Eflag, Sflag, cflag, dflag, kflag, sflag, Qflag = 1; /* TODO: Remove Qflag */
static int devnullfd = -1;
extern int failure;
@@ -118,6 +120,10 @@
switch (tool) {
case CC1:
+ for (n = 0; sysincludes[n]; ++n) {
+ addarg(tool, "-I");
+ addarg(tool, sysincludes[n]);
+ }
case CC2:
fmt = (qbe(tool)) ? "%s-qbe_%s-%s" : "%s-%s-%s";
n = snprintf(t->bin, sizeof(t->bin), fmt, t->cmd, arch, abi);
@@ -139,14 +145,19 @@
addarg(tool, "-L");
addarg(tool, syslibs[n]);
}
+ if (syscrts[0]) {
+ for (n = 0; syscrts[n]; ++n)
+ addarg(tool, syscrts[n]);
+ break;
+ }
n = snprintf(NULL, 0,
- "%s/lib/scc/crt/%s-%s-%s/crt.o",
+ "%s/lib/scc/%s-%s-%s/crt.o",
prefix, arch, abi, sys);
if (n < 0)
die("scc: wrong crt file name");
crt = xmalloc(++n);
sprintf(crt,
- "%s/lib/scc/crt/%s-%s-%s/crt.o",
+ "%s/lib/scc/%s-%s-%s/crt.o",
prefix, arch, abi, sys);
addarg(tool, crt);
break;
--- a/inc/Makefile
+++ b/inc/Makefile
@@ -3,31 +3,35 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
+include inclst.mk
-HDR = ldflags.h sysincludes.h syslibs.h
+all: config
-all:
+config: $(SYSHDR)
-dep: $(HDR)
-
-ldflags.h:
+$(INCLUDE)/ldflags.h:
rm -f $@ ; \
trap "rm -f $$$$.h" 0 2 3; \
cat < ldflags.def.h > $$$$.h; \
mv $$$$.h $@
-sysincludes.h:
+$(INCLUDE)/syscrts.h:
rm -f $@ ; \
trap "rm -f $$$$.h" 0 2 3; \
+ sed 's,PREFIX,"$(PREFIX)",g' < syscrts.def.h > $$$$.h && \
+ mv $$$$.h $@
+
+$(INCLUDE)/sysincludes.h:
+ rm -f $@ ; \
+ trap "rm -f $$$$.h" 0 2 3; \
sed 's,PREFIX,"$(PREFIX)",g' < sysincludes.def.h > $$$$.h && \
mv $$$$.h $@
-syslibs.h:
+$(INCLUDE)/syslibs.h:
rm -f $@ ; \
trap "rm -f $$$$.h" 0 2 3; \
sed 's,PREFIX,"$(PREFIX)",g' < syslibs.def.h > $$$$.h && \
mv $$$$.h $@
-clean:
distclean:
- rm -f $(HDR)
+ rm -f $(SYSHDR)
--- a/inc/coff32/aouthdr.h
+++ b/inc/coff32/aouthdr.h
@@ -12,4 +12,12 @@
long data_start; /* base of data segment */
};
-typedef struct aouthdr AOUTHDR;
+#define AOUTHDR struct aouthdr
+#define AOUTSZ sizeof(AOUTHDR)
+
+#define QMAGIC 0314
+#define STMAGIC 0401
+#define OMAGIC 0404
+#define JMAGIC 0407
+#define DMAGIC 0410
+#define ZMAGIC 0413
--- /dev/null
+++ b/inc/coff32/coff32.h
@@ -1,0 +1,22 @@
+
+typedef int (*packfun)(unsigned char *, char *, ...);
+
+#ifdef AOUTHDR
+extern void coff32_pack_aout(packfun fun, unsigned char *buff, AOUTHDR *aout);
+extern void coff32_unpack_aout(packfun fun, unsigned char *buff, AOUTHDR *ent);
+#endif
+
+#ifdef SYMENT
+extern void coff32_pack_ent(packfun fun, unsigned char *buff, SYMENT *ent);
+extern void coff32_unpack_ent(packfun fun, unsigned char *buff, SYMENT *ent);
+#endif
+
+#ifdef FILHDR
+extern void coff32_pack_hdr(packfun fun, unsigned char *buff, FILHDR *hdr);
+extern void coff32_unpack_hdr(packfun fun, unsigned char *buff, FILHDR *hdr);
+#endif
+
+#ifdef SCNHDR
+extern void coff32_pack_scn(packfun fun, unsigned char *buff, SCNHDR *scn);
+extern void coff32_unpack_scn(packfun fun, unsigned char *buff, SCNHDR *scn);
+#endif
--- a/inc/coff32/filehdr.h
+++ b/inc/coff32/filehdr.h
@@ -14,12 +14,18 @@
#define FILHDR struct filehdr
#define FILHSZ 20
-#define F_RELFLG (1 << 0)
-#define F_EXEC (1 << 1)
-#define F_LMNO (1 << 2)
-#define F_SYMS (1 << 3)
-#define F_AR16WR (1 << 4)
-#define F_AR32WR (1 << 5)
-#define F_A32WR (1 << 6)
+#define F_RELFLG 0000001
+#define F_EXEC 0000002
+#define F_LMNO 0000004
+#define F_SYMS 0000010
+#define F_MINMAL 0000020
+#define F_UPDATE 0000040
+#define F_SWADB 0000100
+#define F_AR16WR 0000200
+#define F_AR32WR 0000400
+#define F_A32WR 0001000
+#define F_PATCH 0002000
+#define F_NODF 0002000
+#define COFF_I386MAGIC 0x014c
#define COFF_Z80MAGIC 0x805a
--- /dev/null
+++ b/inc/incdep.mk
@@ -1,0 +1,7 @@
+include $(INCLUDE)/inclst.mk
+
+debug:
+ echo $(SYSHDR)
+
+$(SYSHDR):
+ +@cd $(INCLUDE) && $(MAKE)
--- /dev/null
+++ b/inc/inclst.mk
@@ -1,0 +1,4 @@
+SYSHDR = $(INCLUDE)/ldflags.h\
+ $(INCLUDE)/syscrts.h\
+ $(INCLUDE)/sysincludes.h\
+ $(INCLUDE)/syslibs.h
--- a/inc/ldflags.def.h
+++ b/inc/ldflags.def.h
@@ -1,6 +1,5 @@
char *ldflags[] = {
"-static",
- /* on OpenBSD, disable pie */
- /* "-nopie", */
+ "-z","nodefaultlib",
NULL
};
--- /dev/null
+++ b/inc/syscrts.def.h
@@ -1,0 +1,5 @@
+char *syscrts[] = {
+ /* configure below your system crts */
+ /* PREFIX "/lib/scc/crt.o", */
+ NULL
+};
--- a/inc/sysincludes.def.h
+++ b/inc/sysincludes.def.h
@@ -1,6 +1,6 @@
char *sysincludes[] = {
PREFIX "/include/scc/" ,
- PREFIX "/include/scc/bits/" TARGET "/",
+ PREFIX "/include/scc/bits/" ARCH "-" ABI "/",
/* configure below your standard sys include paths */
PREFIX "/include/",
PREFIX "/local/include/",
--- a/inc/syslibs.def.h
+++ b/inc/syslibs.def.h
@@ -1,4 +1,7 @@
-char *syslibs[] = {
+
+#define MAX_LIB_PATHS 32
+
+char *syslibs[MAX_LIB_PATHS + 1] = {
PREFIX "/lib/scc/" ,
/* configure below your standard sys include paths */
PREFIX "/lib/",
--- a/ld/Makefile
+++ b/ld/Makefile
@@ -2,32 +2,22 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
+include $(LIBCOFF32)/libdep.mk
-OBJ = main.o formats.o coff32.o obj.o
+OBJ = main.o coff32.o obj.o
+LIB = $(LIBDIR)/libscc.a $(LIBDIR)/libcoff32.a
+TARGET = ld
-all: ld
- cp ld $(PROJECTDIR)/rootdir/bin
+all: $(TARGET)
-ld: $(OBJ) $(LIBDIR)/libscc.a
- $(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
+$(TARGET): $(OBJ) $(LIB)
+ $(CC) $(SCC_LDFLAGS) $(OBJ) -lcoff32 -lscc -o $@
dep:
$(PROJECTDIR)/mkdep.sh
clean:
- rm -f ld *.o
+ rm -f $(BINDIR)/ld *.o
-distclean: clean
-
-#deps
-coff32.c: ../inc/coff32/filehdr.h
-coff32.c: ../inc/coff32/scnhdr.h
-coff32.c: ../inc/coff32/syms.h
-coff32.c: ../inc/scc.h
-coff32.c: ld.h
-formats.c: ld.h
-main.c: ../inc/arg.h
-main.c: ../inc/ar.h
-main.c: ../inc/scc.h
-main.c: ld.h
+include deps.mk
--- a/ld/coff32.c
+++ b/ld/coff32.c
@@ -1,103 +1,271 @@
static char sccsid[] = "@(#) ./ld/coff32.c";
#include <assert.h>
+#include <ctype.h>
#include <errno.h>
+#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include "../inc/coff32/aouthdr.h"
#include "../inc/coff32/filehdr.h"
#include "../inc/coff32/scnhdr.h"
#include "../inc/coff32/syms.h"
+#include "../inc/coff32/coff32.h"
#include "../inc/scc.h"
#include "ld.h"
-static int (*unpack)(unsigned char *, char *, ...);
-static long strtbl, symtbl, sectbl;
+#define NUMSCN_MAX 65536
+#define NUMENT_MAX 2147483648
-static FILHDR *
-getfhdr(unsigned char *buff, FILHDR *hdr)
+static long textpc = 0x1000;
+
+/*
+ * check overflow in: off + ptr + nitem*size
+ */
+static char *
+symname(Obj *obj, SYMENT *ent)
{
- int n;
+ long off;
- n = (*unpack)(buff,
- "sslllss",
- &hdr->f_magic,
- &hdr->f_nscns,
- &hdr->f_timdat,
- &hdr->f_symptr,
- &hdr->f_nsyms,
- &hdr->f_opthdr,
- &hdr->f_flags);
- assert(n == FILHSZ);
- return hdr;
+ if (ent->n_zeroes != 0)
+ return ent->n_name;
+
+ off = ent->n_offset;
+ if (off >= obj->strsiz) {
+ fprintf(stderr,
+ "ld: invalid offset in symbol table: %zd\n", off);
+ return "";
+ }
+
+ return &obj->strtbl[off];
}
-static void
-pass1(char *fname, char *member, FILE *fp)
+static int
+readstr(Obj *obj, long off)
{
- unsigned char buff[FILHSZ];
- FILHDR *hdr;
- Obj *obj;
- long siz, pos = ftell(fp);
+ unsigned char buff[4];
char *str;
+ size_t siz;
- if (fread(buff, FILHSZ, 1, fp) != 1)
- goto bad_file;
+ if (fseek(obj->fp, off, SEEK_SET) == EOF)
+ return -1;
- if ((hdr = malloc(sizeof(*hdr))) == NULL)
- goto out_of_memory;
+ if (fread(buff, 4, 1, obj->fp) != 1)
+ return -1;
- obj = newobj(fname);
- obj->hdr = getfhdr(buff, hdr);
+ (*obj->unpack)(buff, "l", &siz);
- /* TODO: Check overflow */
- strtbl = pos + hdr->f_symptr + hdr->f_nsyms* SYMESZ;
- symtbl = pos + hdr->f_symptr;
- sectbl = pos + FILHSZ + hdr->f_opthdr;
+ siz -= 4;
+ if (siz == 0) {
+ obj->strtbl = NULL;
+ obj->strsiz = 0;
+ return 0;
+ }
- if (fseek(fp, strtbl, SEEK_SET) == EOF)
- goto bad_file;
-
- if (fread(buff, 4, 1, fp) != 1)
- goto bad_file;
-
- (*unpack)(buff, "l", &siz);
-
if (siz > SIZE_MAX || (str = malloc(siz)) == NULL)
- goto out_of_memory;
+ outmem();
- if (fread(str, siz, 1, fp) != 1)
- goto bad_file;
+ if (fread(str, siz, 1, obj->fp) != 1)
+ return -1;
obj->strtbl = str;
+ obj->strsiz = siz;
-out_of_memory:
- die("ld: out of memory");
-bad_file:
- if (ferror(fp))
- die("ld: %s: %s", fname, strerror(errno));
- die("ld: %s: corrupted file", fname);
+ return 0;
}
-static void
-pass2(char *fname, char *member, FILE *fp)
+static int
+readsects(Obj *obj, long off)
{
+ unsigned a, nsec, i;
+ unsigned char buff[SCNHSZ];
+ SCNHDR *scns, *p;
+ FILHDR *hdr;
+ Symbol *sym;
+ Section *sp;
+
+ hdr = obj->filhdr;
+ nsec = hdr->f_nscns;
+
+ scns = NULL;
+ if (nsec <= SIZE_MAX / sizeof(*scns))
+ scns = malloc(nsec * sizeof(*scns));
+ if (!scns)
+ outmem();
+ obj->scnhdr = scns;
+
+ if (fseek(obj->fp, off, SEEK_SET) == EOF)
+ return -1;
+
+ a = obj->align - 1;
+ for (i = 0; i < nsec; ++i) {
+ p = &scns[i];
+ if (fread(buff, SCNHSZ, 1, obj->fp) != 1)
+ return -1;
+ coff32_unpack_scn(obj->unpack, buff, p);
+ sp = slookup(p->s_name);
+ p->s_vaddr = sp->base + sp->size;
+ sp->size += p->s_size;
+ }
+
+ return 0;
}
static int
+readents(Obj *obj, long off)
+{
+ SYMENT *ent, *ents;
+ SCNHDR *scn, *scns = obj->scnhdr;
+ FILHDR *hdr = obj->filhdr;;
+ long nsyms = hdr->f_nsyms;
+ unsigned nsect;
+ unsigned char buff[SYMESZ];
+ char *s;
+ int aux;
+ Symbol *sym;
+
+
+ if (fseek(obj->fp, off, SEEK_SET) == EOF)
+ return -1;
+
+ ents = NULL;
+ if (nsyms <= SIZE_MAX/sizeof(SYMENT))
+ ents = malloc((nsyms * sizeof(SYMENT)));
+ if (!ents)
+ outmem();
+ obj->enthdr = ents;
+
+ aux = 0;
+ for (ent = ents; ent < &ents[nsyms]; ++ent) {
+ if (fread(buff, SYMESZ, 1, obj->fp) != 1)
+ return -1;
+ coff32_unpack_ent(obj->unpack, buff, ent);
+ s = ent->n_name;
+ if (!s[0] && !s[1] && !s[2] && !s[3])
+ (*obj->unpack)(buff, "ll", &ent->n_zeroes, &ent->n_offset);
+
+ if (aux > 0) {
+ aux--;
+ continue;
+ }
+ aux = ent->n_numaux;
+
+ scn = NULL;
+ switch (ent->n_scnum) {
+ case N_DEBUG:
+ continue;
+ case N_ABS:
+ break;
+ case N_UNDEF:
+ /* TODO: deal wth common blocks */
+ break;
+ default:
+ nsect = ent->n_scnum-1;
+ if (nsect >= hdr->f_nscns)
+ corrupted(obj->fname, obj->member);
+ scn = &scns[nsect];
+ ent->n_value += scn->s_vaddr;
+ }
+
+ if (ent->n_sclass == C_EXT && ent->n_scnum != N_UNDEF) {
+ Symbol *sym = lookup(symname(obj, ent), INSTALL);
+
+ if (sym->flags & SDEFINED) {
+ redefined(obj, sym);
+ } else {
+ sym->flags |= SDEFINED;
+ sym->where = obj;
+ if (scn)
+ sym->section = slookup(scn->s_name);
+ }
+ }
+ }
+
+ return 0;
+}
+
+static long
+fileptr(long off, long ptr, long nitem, long size)
+{
+ if (off < 0 || ptr < 0 || nitem < 0 || size < 0)
+ return -1;
+
+ if (off > LONG_MAX - ptr)
+ return -1;
+ off += ptr;
+
+ if (size > 0) {
+ if (nitem > LONG_MAX / size)
+ return -1;
+ size *= nitem;
+ }
+
+ if (off > LONG_MAX - size)
+ return -1;
+ off += size;
+
+ return off;
+}
+
+Obj *
+load(Obj *obj)
+{
+ unsigned char buff[FILHSZ];
+ FILHDR *hdr;
+ char *strtbl;
+ long symoff, secoff, stroff, pos;
+
+ pos = ftell(obj->fp);
+ if (fread(buff, FILHSZ, 1, obj->fp) != 1)
+ goto bad_file;
+
+ if ((hdr = malloc(sizeof(*hdr))) == NULL)
+ outmem();
+ coff32_unpack_hdr(obj->unpack, buff, hdr);
+ obj->filhdr = hdr;
+
+ stroff = fileptr(pos, hdr->f_symptr, hdr->f_nsyms, SYMESZ);
+ symoff = fileptr(pos, hdr->f_symptr, 0, 0);
+ secoff = fileptr(pos, hdr->f_opthdr, 1, FILHSZ);
+
+ if (stroff < 0 || symoff < 0 || secoff < 0)
+ goto bad_file;
+
+ if (readstr(obj, stroff) < 0)
+ goto bad_file;
+ if (readsects(obj, secoff) < 0)
+ goto bad_file;
+ if (readents(obj, symoff) < 0)
+ goto bad_file;
+ return add(obj);
+
+bad_file:
+ fprintf(stderr,
+ "ld: %s: %s\n",
+ obj->fname,
+ (ferror(obj->fp)) ? strerror(errno) : "corrupted file");
+ exit(EXIT_FAILURE);
+}
+
+Obj *
probe(char *fname, char *member, FILE *fp)
{
int c;
int c1, c2;
- fpos_t pos;
+ long pos;
unsigned short magic;
+ unsigned align;
+ int (*unpack)(unsigned char *, char *, ...);
+ int (*pack)(unsigned char *, char *, ...);
+ Obj *obj;
- fgetpos(fp, &pos);
+ pos = ftell(fp);
c1 = getc(fp);
c2 = getc(fp);
- fsetpos(fp, &pos);
+ fseek(fp, pos, SEEK_SET);
if (ferror(fp))
die("ld: %s: %s", fname, strerror(errno));
@@ -107,15 +275,129 @@
magic = c1 | c2 << 8;
switch (magic) {
+ case COFF_I386MAGIC:
case COFF_Z80MAGIC:
- return 1;
+ unpack = lunpack;
+ pack = lpack;
+ align = 2;
+ break;
default:
- return 0;
+ return NULL;
}
+
+ obj = newobj(fname, member, fp);
+ obj->unpack = unpack;
+ obj->align = align;
+ obj->offset = pos;
+
+ return obj;
}
-struct objfile coff32 = {
- .probe = probe,
- .pass1 = pass1,
- .pass2 = pass2,
-};
+static void
+wrhdr(FILE *fp)
+{
+ FILHDR hdr;
+ Section *sp;
+ unsigned char buff[FILHSZ];
+
+ if (numsects > NUMSCN_MAX || numsymbols > NUMENT_MAX) {
+ fprintf(stderr, "ld: too many symbols or sections\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * we set the timestamp to 0 to make the output
+ * reproductible and to avoid a not standard use
+ * of time()
+ */
+ hdr.f_symptr = 0;
+ hdr.f_magic = COFF_Z80MAGIC;
+ hdr.f_nscns = numsects;
+ hdr.f_symptr = 0;
+ hdr.f_timdat = 0;
+ hdr.f_nsyms = 0;
+ hdr.f_opthdr = AOUTSZ;
+ hdr.f_flags = F_EXEC | F_AR32WR; /* TODO: set the correct endianess */
+
+ if (!sflag) {
+ hdr.f_symptr = 0; /* TODO: set correct value here */
+ hdr.f_flags |= F_SYMS;
+ hdr.f_nsyms = numsymbols;
+ }
+
+ coff32_pack_hdr(lpack, buff, &hdr);
+ fwrite(buff, FILHSZ, 1, fp);
+}
+
+static void
+wraout(FILE *fp)
+{
+ AOUTHDR aout;
+ unsigned char buff[AOUTSZ];
+ Symbol *sym;
+ long addr;
+
+ if ((sym = lookup(entry, NOINSTALL)) != NULL) {
+ addr = sym->value;
+ } else {
+ fprintf(stderr,
+ "ld: warning: cannot find entry symbol '%s'; defaulting to 0\n",
+ entry);
+ addr = 0;
+ }
+
+ aout.magic = ZMAGIC;
+ aout.vstamp = 0;
+ aout.entry = addr;
+ aout.tsize = tsize;
+ aout.dsize = dsize;
+ aout.bsize = bsize;
+ aout.text_start = textpc;
+ aout.data_start = textpc + dsize;
+
+ coff32_pack_aout(lpack, buff, &aout);
+ fwrite(buff, AOUTSZ, 1, fp);
+}
+
+static void
+wrscn(FILE *fp, Section *sp, long pc)
+{
+ SCNHDR scn;
+ unsigned char buff[SCNHSZ];
+
+ strcpy(scn.s_name, sp->name);
+ scn.s_paddr = pc;
+ scn.s_vaddr = pc;
+ scn.s_size = sp->size;
+ scn.s_scnptr = 0; /* TODO: file ptr */
+ scn.s_relptr = 0;
+ scn.s_lnnoptr = 0;
+ scn.s_nrelloc = 0;
+ scn.s_nlnno = 0;
+ scn.s_flags = 0; /* TODO: Add flags */
+
+ coff32_pack_scn(lpack, buff, &scn);
+ fwrite(buff, SCNHSZ, 1, fp);
+}
+
+void
+writeout(FILE *fp)
+{
+ Section *sp;
+ long pc = textpc;
+
+ wrhdr(fp);
+ wraout(fp);
+
+ for (sp = sectlst; sp; sp = sp->next) {
+ wrscn(fp, sp, pc);
+ pc += sp->size;
+ }
+
+ /* TODO: run over all the files */
+
+ if (fflush(fp) == EOF) {
+ perror("ld: error writing output file");
+ exit(EXIT_FAILURE);
+ }
+}
--- /dev/null
+++ b/ld/deps.mk
@@ -1,0 +1,15 @@
+
+#deps
+coff32.o: ../inc/coff32/aouthdr.h
+coff32.o: ../inc/coff32/coff32.h
+coff32.o: ../inc/coff32/filehdr.h
+coff32.o: ../inc/coff32/scnhdr.h
+coff32.o: ../inc/coff32/syms.h
+coff32.o: ../inc/scc.h
+coff32.o: ld.h
+main.o: ../inc/ar.h
+main.o: ../inc/scc.h
+main.o: ../inc/syslibs.h
+main.o: ld.h
+obj.o: ../inc/scc.h
+obj.o: ld.h
--- a/ld/formats.c
+++ /dev/null
@@ -1,13 +1,0 @@
-static char sccsid[] = "@(#) ./ld/probe.c";
-
-#include <stdio.h>
-
-#include "ld.h"
-
-/* TODO: Autogenerate this file */
-struct objfile coff32;
-
-struct objfile *formats[] = {
- &coff32,
- NULL,
-};
--- a/ld/ld.h
+++ b/ld/ld.h
@@ -1,20 +1,85 @@
+#define INSTALL 1
+#define NOINSTALL 0
+
typedef struct obj Obj;
+typedef struct symbol Symbol;
+typedef struct section Section;
struct obj {
char *fname;
- void *hdr;
+ char *member;
+ FILE *fp;
+ long offset;
+
+ void *filhdr;
+ void *scnhdr;
+ void *enthdr;
+
char *strtbl;
+ size_t strsiz;
+
+ int (*unpack)(unsigned char *, char *, ...);
+ int align;
+
struct obj *next;
};
-#ifdef stdin
-struct objfile {
- int (*probe)(char *fname, char *member, FILE *fp);
- void (*pass1)(char *fname, char *member, FILE *fp);
- void (*pass2)(char *fname, char *member, FILE *fp);
+enum symflg {
+ SDEFINED = 1 << 1,
};
-#endif
+struct symbol {
+ char *name;
+ unsigned char flags;
+ long size;
+ TUINT base;
+ TUINT value;
+ Section *section;
+ Obj *where;
+ struct symbol *hash, *next;
+};
+
+struct section {
+ char *name;
+ TUINT base;
+ TUINT size;
+ struct section *next;
+};
+
/* obj.c */
-extern Obj *newobj(char *fname);
+extern Obj *newobj(char *fname, char *member, FILE *fp);
+extern Obj *add(Obj *obj);
+extern void delobj(Obj *obj);
+extern Section *slookup(char *name);
+extern Symbol *lookup(char *name, int install);
+
+/* main.c */
+extern void outmem(void);
+extern void corrupted(char *fname, char *member);
+extern void redefined(Obj *obj, Symbol *sym);
+
+/* object format */
+extern Obj *probe(char *fname, char *member, FILE *fp);
+extern Obj *load(Obj *obj);
+extern void writeout(FILE *fp);
+
+
+/*
+ * Definition of globals variables
+ */
+extern int pass;
+extern int sflag;
+extern int xflag;
+extern int Xflag;
+extern int rflag;
+extern int dflag;
+extern int gflag;
+extern Obj *objlst;
+extern Section *sectlst;
+extern long numsects;
+extern long numsymbols;
+extern TUINT tsize, dsize, bsize;
+extern char *output;
+extern char *entry;
+extern char *datasiz;
--- a/ld/main.c
+++ b/ld/main.c
@@ -7,32 +7,66 @@
#include <stdlib.h>
#include <string.h>
-#include "../inc/arg.h"
#include "../inc/scc.h"
#include "../inc/ar.h"
+#include "../inc/syslibs.h"
#include "ld.h"
-char *argv0;
+char *output = "a.out", *entry = "start", *datasiz;
int pass;
+int sflag; /* discard all the symbols */
+int xflag; /* discard local symbols */
+int Xflag; /* discard locals starting with 'L' */
+int rflag; /* preserve relocation bits */
+int dflag; /* define common even with rflag */
+int gflag; /* preserve debug symbols */
+static int done;
+
+void
+redefined(Obj *obj, Symbol *sym)
+{
+ /* TODO: add infotmation about where it is defined */
+ fprintf(stderr,
+ "ld: %s: redifinition of symbol '%s'\n",
+ obj->fname, sym->name);
+}
+
+void
+corrupted(char *fname, char *member)
+{
+ char *fmt;
+
+ fmt = (member) ?
+ "ld: %s(%s): corrupted file\n" : "ld: %s: corrupted file\n";
+ fprintf(stderr, fmt, fname, member);
+ exit(EXIT_FAILURE);
+}
+
+void
+outmem(void)
+{
+ fputs("ld: out of memory\n", stderr);
+ exit(EXIT_FAILURE);
+}
+
+static void
+cleanup(void)
+{
+ if (!done)
+ remove(output);
+}
+
static int
object(char *fname, char *member, FILE *fp)
{
- extern struct objfile *formats[];
- struct objfile **p, *obj;
- void *data;
- void (*fun)(char *, char *, FILE *);
+ Obj *obj;
- for (p = formats; *p; ++p) {
- obj = *p;
- if ((*obj->probe)(fname, member, fp))
- break;
- }
- if (*p == NULL)
+ obj = probe(fname, member, fp);
+ if (!obj)
return 0;
+ load(obj);
- fun = (pass == 1) ? obj->pass1 : obj->pass2;
- (*fun)(fname, member, fp);
return 1;
}
@@ -64,35 +98,36 @@
goto file_error;
while (fread(&hdr, sizeof(hdr), 1, fp) == 1) {
- pos = ftell(fp);
if (strncmp(hdr.ar_fmag, ARFMAG, sizeof(hdr.ar_fmag)))
- goto corrupted;
+ corrupted(fname, NULL);
siz = 0;
sscanf(hdr.ar_size, "%10ld", &siz);
- if (siz == 0)
- goto corrupted;
-
if (siz & 1)
siz++;
- if (pos == -1 || pos > LONG_MAX - siz)
- die("ld: %s: overflow in size of archive", fname);
+ if (siz == 0)
+ corrupted(fname, NULL);
+
+ pos = ftell(fp);
+ if (pos == -1 || pos > LONG_MAX - siz) {
+ fprintf(stderr,
+ "ld: %s(%s): overflow in size of archive",
+ fname, member);
+ exit(EXIT_FAILURE);
+ }
pos += siz;
getfname(&hdr, member);
object(fname, member, fp);
if (fseek(fp, pos, SEEK_SET) == EOF)
- goto file_error;
+ break;
}
- if (ferror(fp))
- goto file_error;
- return;
-
-corrupted:
- die("ld: %s: corrupted archive", fname);
file_error:
- die("ld: %s: %s", fname, strerror(errno));
+ if (ferror(fp)) {
+ fprintf(stderr, "ld: %s: %s\n", fname, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
}
static int
@@ -106,7 +141,7 @@
fsetpos(fp, &pos);
if (ferror(fp))
- die("ld: %s: %s", fname, strerror(errno));
+ return 0;
if (strncmp(magic, ARMAG, SARMAG) != 0)
return 0;
@@ -115,73 +150,139 @@
}
static void
-process(char *fname)
+pass1(int argc, char *argv[])
{
FILE *fp;
+ char *s;
- if ((fp = fopen(fname, "rb")) == NULL)
- die("ld: %s: %s", fname, strerror(errno));
-
- if (!object(fname, fname, fp) && !archive(fname, fp))
- die("ld: %s: File format not recognized", fname);
-
- if (ferror(fp))
- die("ld: %s: %s", fname, strerror(errno));
-
- fclose(fp);
+ while ((s = *argv++) != NULL) {
+ if ((fp = fopen(s, "rb")) == NULL) {
+ fprintf(stderr, "ld: %s: %s\n", s, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (!object(s, NULL, fp) && !archive(s, fp)) {
+ fprintf(stderr, "ld: %s: File format not recognized\n", s);
+ exit(EXIT_FAILURE);
+ }
+ fclose(fp);
+ }
}
static void
-pass1(int argc, char *argv[])
+pass2(int argc, char *argv[])
{
- while (*argv)
- process(*argv++);
+ FILE *fp;
+
+ if ((fp = fopen(output, "wb")) != NULL) {
+ writeout(fp);
+ if (fclose(fp) != EOF)
+ return;
+ }
+
+ fprintf(stderr, "ld: %s: %s\n", output, strerror(errno));
+ exit(EXIT_FAILURE);
}
static void
-pass2(int argc, char *argv[])
+usage(void)
{
- while (*argv)
- process(*argv++);
+ fputs("usage: ld [options] file ...\n", stderr);
+ exit(1);
}
static void
-usage(void)
+Lpath(char *path)
{
- fputs("usage: ld [options] [@file] file ...\n", stderr);
- exit(1);
+ char **bp;
+
+ for (bp = syslibs; bp < &syslibs[MAX_LIB_PATHS] && *bp; ++bp)
+ ;
+ if (bp == &syslibs[MAX_LIB_PATHS]) {
+ fputs("ld: too many -L options\n", stderr);
+ exit(1);
+ }
+ *bp = path;
}
int
main(int argc, char *argv[])
{
- unsigned i;
+ char *cp, **p;
- ARGBEGIN {
- case 's':
- case 'u':
- case 'l':
- case 'x':
- case 'X':
- case 'r':
- case 'd':
- case 'n':
- case 'i':
- case 'o':
- case 'e':
- case 'O':
- case 'D':
- break;
- default:
- usage();
- } ARGEND
+ for (--argc; *++argv; --argc) {
+ if (argv[0][0] != '-' || argv[0][1] == 'l')
+ break;
+ if (argv[0][1] == '-') {
+ --argc, ++argv;
+ break;
+ }
+ for (cp = &argv[0][1]; *cp; ++cp) {
+ switch (*cp) {
+ case 's':
+ sflag = 1;
+ break;
+ case 'x':
+ xflag = 1;
+ break;
+ case 'X':
+ Xflag = 1;
+ break;
+ case 'r':
+ rflag = 1;
+ break;
+ case 'd':
+ dflag = 1;
+ break;
+ case 'i':
+ case 'n':
+ /* TODO */
+ break;
+ case 'L':
+ if (argc == 0)
+ goto usage;
+ ++argv, --argc;
+ Lpath(*argv);
+ break;
+ case 'u':
+ if (argc == 0)
+ goto usage;
+ ++argv, --argc;
+ lookup(*argv, INSTALL);
+ break;
+ case 'o':
+ if (argc == 0)
+ goto usage;
+ ++argv, --argc;
+ output = *argv;
+ break;
+ case 'e':
+ if (argc == 0)
+ goto usage;
+ ++argv, --argc;
+ entry = *argv;
+ break;
+ case 'D':
+ if (argc == 0)
+ goto usage;
+ ++argv, --argc;
+ datasiz = *argv;
+ break;
+ default:
+ usage:
+ usage();
+ }
+ }
+ }
-
if (argc == 0)
usage();
+ atexit(cleanup);
+
pass1(argc, argv);
pass2(argc, argv);
+
+ done = 1;
return 0;
}
--- a/ld/obj.c
+++ b/ld/obj.c
@@ -1,5 +1,7 @@
static char sccsid[] = "@(#) ./ld/obj.c";
+#include <errno.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -6,28 +8,146 @@
#include "../inc/scc.h"
#include "ld.h"
+#define NR_SYM_HASH 64
+
+TUINT tsize, dsize, bsize;
+
Obj *objlst;
-static Obj *tail;
+static Obj *objtail;
+long numsects, numsymbols;
+static Symbol *secttail;
+static Symbol *symtbl[NR_SYM_HASH];
+
+Section *sectlst;
+
Obj *
-newobj(char *fname)
+add(Obj *obj)
{
+ obj->next = NULL;
+
+ if (!objlst) {
+ objtail = objlst = obj;
+ } else {
+ objtail->next = obj;
+ objtail = obj;
+ }
+}
+
+void
+delobj(Obj *obj)
+{
+ free(obj->strtbl);
+ free(obj->scnhdr);
+ free(obj->filhdr);
+ free(obj->fname);
+ free(obj->member);
+ free(obj);
+}
+
+Obj *
+newobj(char *fname, char *member, FILE *fp)
+{
Obj *obj;
- char *s;
- size_t len = strlen(fname);
+ char *s, *t;
+ size_t len;
+ len = strlen(fname);
obj = malloc(sizeof(*obj));
- s = malloc(len+1);
+ s = malloc(len) + 1;
if (!obj || !s)
- die("ld: out of memory");
-
+ outmem();
+ memset(obj, 0, sizeof(*obj));
obj->fname = memcpy(s, fname, len);
- obj->next = NULL;
- if (!objlst)
- tail = objlst = obj;
- else
- tail->next = obj;
+ if (!member) {
+ obj->member = NULL;
+ } else {
+ len = strlen(member) + 1;
+ if ((s = malloc(len)) == NULL)
+ outmem();
+ obj->member = memcpy(s, member, len);
+ }
+ obj->fp = fp;
+ if ((obj->offset = ftell(fp)) == EOF) {
+ fprintf(stderr, "ld: %s: %s\n", fname, strerror(errno));
+ exit(1);
+ }
+
return obj;
+}
+
+Section *
+slookup(char *name)
+{
+ char *s;
+ Section *prev, *sp;
+ size_t len = strlen(name);
+
+ for (prev = sp = sectlst; sp; prev = sp, sp = sp->next) {
+ if (!memcmp(sp->name, name, len))
+ return sp;
+ }
+
+ sp = malloc(sizeof(*sp));
+ s = malloc(len);
+ if (!sp || !s)
+ outmem();
+ sp->name = s;
+ sp->base = 0;
+ sp->size = 0;
+ sp->next = NULL;
+
+ if (!prev)
+ sectlst = sp;
+ else
+ prev->next = sp;
+ numsects++;
+
+ return sp;
+}
+
+static unsigned
+hash(char *s)
+{
+ unsigned h, c;
+
+ for (h = 0; c = *s; ++s)
+ h = h*33 ^ c;
+ return h & NR_SYM_HASH-1;
+}
+
+Symbol *
+lookup(char *name, int install)
+{
+ unsigned h;
+ char *s;
+ size_t len;
+ Symbol *sym;
+
+ h = hash(name);
+ for (sym = symtbl[h]; sym; sym = sym->hash) {
+ s = sym->name;
+ if (*name == *s && !strcmp(name, s))
+ return sym;
+ }
+
+ if (!install)
+ return NULL;
+
+ len = strlen(name) + 1;
+ sym = malloc(sizeof(*sym));
+ s = malloc(len);
+ if (!sym || !s)
+ outmem();
+ memset(sym, 0, sizeof(*sym));
+ memcpy(s, name, len);
+
+ sym->hash = symtbl[h];
+ symtbl[h] = sym;
+ sym->name = s;
+ numsymbols++;
+
+ return sym;
}
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -4,7 +4,12 @@
include $(PROJECTDIR)/rules.mk
-DIRS = scc
+DIRS = scc coff32 crt c
-all dep clean distclean:
+all: $(DIRS)
+
+$(DIRS): FORCE
+ +@cd $@ && $(MAKE)
+
+dep clean distclean:
$(FORALL)
--- a/lib/c/Makefile
+++ b/lib/c/Makefile
@@ -1,4 +1,9 @@
.POSIX:
+PROJECTDIR = ../..
+include $(PROJECTDIR)/rules.mk
+
+DIRS = target
+
all dep clean distclean:
- +cd target && $(MAKE) $@
+ $(FORALL)
--- a/lib/c/__putc.c
+++ b/lib/c/__putc.c
@@ -2,35 +2,20 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
-#include "syscall.h"
-int
-_fflush(FILE *fp)
-{
- int lnbuf = fp->flags & _IOLBF;
- size_t cnt;
+extern int _flsbuf(FILE *fp);
- cnt = ((lnbuf) ? fp->lp : fp->wp) - fp->buf;
-
- if (_write(fp->fd, fp->buf, cnt) != cnt) {
- fp->flags |= _IOERR;
- return EOF;
- }
- fp->rp = fp->wp = fp->buf;
-
- return 0;
-}
-
int
fflush(FILE *fp)
{
- int err = 0;
+ int err;
if (fp)
return _flsbuf(fp);
+ err = 0;
for (fp = __iob; fp < &__iob[FOPEN_MAX]; ++fp) {
- if ((fp->flags & _IOWRITE) == 0 && _flush(fp))
+ if ((fp->flags & _IOWRITE) == 0 && _flsbuf(fp))
err = EOF;
}
return err;
@@ -71,10 +56,10 @@
}
if (fp->flags & _IOLBF) {
- if (fp->lp == fp->rp && _flush(fp))
+ if (fp->lp == fp->rp && _flsbuf(fp))
return EOF;
*fp->lp++ = ch;
- if (ch == '\n' && flsbuf(fp))
+ if (ch == '\n' && _flsbuf(fp))
return EOF;
} else {
if (fp->wp == fp->rp && _flsbuf(fp))
--- /dev/null
+++ b/lib/c/_flsbuf.c
@@ -1,0 +1,23 @@
+
+#include <errno.h>
+#include <stdio.h>
+#include "syscall.h"
+
+int
+_flsbuf(FILE *fp)
+{
+ int lnbuf = fp->flags & _IOLBF;
+ unsigned char *p;
+ size_t cnt;
+
+ p = (lnbuf) ? fp->lp : fp->wp;
+ cnt = p - fp->buf;
+
+ if (_write(fp->fd, fp->buf, cnt) != cnt) {
+ fp->flags |= _IOERR;
+ return EOF;
+ }
+ fp->lp = fp->rp = fp->wp = fp->buf;
+
+ return 0;
+}
--- a/lib/c/_fpopen.c
+++ b/lib/c/_fpopen.c
@@ -2,13 +2,15 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys.h>
#include "syscall.h"
+#include "libc.h"
#undef fopen
FILE *
_fpopen(const char * restrict fname,
- const char * restrict mode,
- FILE * restrict fp)
+ const char * restrict mode,
+ FILE * restrict fp)
{
int i, flags, fd, rw, bin;
@@ -52,12 +54,12 @@
return NULL;
}
- if ((fd = _open(name, flags)) < 0)
+ if ((fd = _open(fname, flags)) < 0)
return NULL;
if (fp->buf == NULL) {
if ((fp->buf = malloc(BUFSIZ)) == NULL) {
- close(fd);
+ _close(fd);
errno = ENOMEM;
return NULL;
}
@@ -66,7 +68,7 @@
fp->fd = fd;
if (!bin)
- fp->flags |= _IOTEXT;
+ fp->flags |= _IOTXT;
if (flags & O_RDWR)
fp->flags |= _IORW;
--- a/lib/c/calloc.c
+++ b/lib/c/calloc.c
@@ -1,5 +1,6 @@
#include <stdlib.h>
#include <string.h>
+#undef calloc
void *
calloc(size_t nmemb, size_t size)
--- a/lib/c/ctype.c
+++ b/lib/c/ctype.c
@@ -1,6 +1,5 @@
#define __USE_MACROS
#include <ctype.h>
-#undef ctype
int __ctmp;
--- /dev/null
+++ b/lib/c/errno.c
@@ -1,0 +1,1 @@
+int errno;
--- a/lib/c/fclose.c
+++ b/lib/c/fclose.c
@@ -1,7 +1,11 @@
+#include <stdlib.h>
#include <stdio.h>
+#include "syscall.h"
#undef fclose
+extern int _flsbuf(FILE *fp);
+
int
fclose(FILE *fp)
{
@@ -8,11 +12,11 @@
int r = EOF;
if ((fp->flags & _IOSTRG) == 0 &&
- fp->flags & (_IOWRITE | _IOREAD | _IOWR)) {
+ fp->flags & (_IOWRITE | _IOREAD | _IORW)) {
r = 0;
- if (fflush(fp) == EOF)
+ if (_flsbuf(fp) == EOF)
r = EOF;
- if (close(fp->fd) < 0)
+ if (_close(fp->fd) < 0)
r = EOF;
}
@@ -21,7 +25,7 @@
fp->buf = NULL;
}
- fp->flags &= ~(_IOWRITE | _IOREAD | _IOWR |
+ fp->flags &= ~(_IOWRITE | _IOREAD | _IORW |
_IOERR | _IOEOF |
_IOALLOC |
_IOTXT |
--- a/lib/c/fopen.c
+++ b/lib/c/fopen.c
@@ -1,18 +1,22 @@
#include <errno.h>
#include <stdio.h>
+
+#include "syscall.h"
+#include "libc.h"
#undef fopen
+
FILE *
fopen(const char * restrict name, const char * restrict mode)
{
FILE *fp;
- for (fp = __iob; fp < &__iob[FILE_MAX]; ++fp) {
- if (fp->flags & (_IOREAD | _IOWRITE | _IORW) == 0)
+ for (fp = __iob; fp < &__iob[FOPEN_MAX]; ++fp) {
+ if ((fp->flags & (_IOREAD | _IOWRITE | _IORW)) == 0)
break;
}
- if (fp == &__iob[FILE_MAX]) {
+ if (fp == &__iob[FOPEN_MAX]) {
errno = ENOMEM;
return NULL;
}
--- a/lib/c/fputs.c
+++ b/lib/c/fputs.c
@@ -1,5 +1,6 @@
#include <stdio.h>
+#undef fputs
int
fputs(const char * restrict bp, FILE * restrict fp)
--- a/lib/c/fread.c
+++ b/lib/c/fread.c
@@ -8,6 +8,7 @@
{
unsigned char *bp = ptr;
size_t n, i;
+ int c;
if (size == 0)
return 0;
@@ -15,8 +16,9 @@
for (n = 0; n < nmemb; n++) {
i = size;
do {
- if ((*bp++ = getc(fp)) == EOF)
+ if ((c = getc(fp)) == EOF)
return n;
+ *bp++ = c;
} while (--i);
}
--- a/lib/c/freopen.c
+++ b/lib/c/freopen.c
@@ -1,5 +1,8 @@
#include <stdio.h>
+
+#include "syscall.h"
+#include "libc.h"
#undef freopen
FILE *
--- a/lib/c/fseek.c
+++ b/lib/c/fseek.c
@@ -3,6 +3,8 @@
#include "syscall.h"
#undef fseek
+extern int _flsbuf(FILE *fp);
+
int
fseek(FILE *fp, long off, int whence)
{
@@ -9,12 +11,12 @@
if (fp->flags & _IOERR)
return EOF;
- if ((fp->flags & _IOWRITE) && fflush(fp))
+ if ((fp->flags & _IOWRITE) && _flsbuf(fp))
return -1;
else if (whence == SEEK_CUR && (fp->flags & _IOREAD))
- off -= fp->wp - fp->rd;
+ off -= fp->wp - fp->rp;
- if (_seek(fp->fd, off, type) < 0) {
+ if (_lseek(fp->fd, off, whence) < 0) {
fp->flags |= _IOERR;
return EOF;
}
--- a/lib/c/include/assert.h
+++ /dev/null
@@ -1,10 +1,0 @@
-
-void __assert(char *exp, char *file, long line);
-
-#undef assert
-#ifndef NDEBUG
-# define assert(exp) ((exp) ? (void) 0 : __assert(#exp, __FILE__, __LINE__))
-#else
-# define assert(exp) ((void)0)
-#endif
-
--- a/lib/c/include/bits/amd64-sysv/arch/limits.h
+++ /dev/null
@@ -1,17 +1,0 @@
-#define SCHAR_MAX 0x7F
-#define SCHAR_MIN (-SCHAR_MIN-1)
-#define CHAR_MAX 0x7F
-#define CHAR_MIN (-CHAR_MAX-1)
-#define UCHAR_MAX 0xFF
-#define SHRT_MAX 0x7FFF
-#define SHRT_MIN (-SHRT_MAX-1)
-#define USHRT_MAX 0xFFFF
-#define INT_MAX 0x7FFFFFFF
-#define INT_MIN (-INT_MAX-1)
-#define UINT_MAX 0xFFFFFFFF
-#define LONG_MAX 0x7FFFFFFFFFFFFFFF
-#define LONG_MIN (-LONG_MAX-1)
-#define ULONG_MAX 0xFFFFFFFFFFFFFFFF
-#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
-#define LLONG_MIN (-LLONG_MAX-1)
-#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- a/lib/c/include/bits/amd64-sysv/arch/signal.h
+++ /dev/null
@@ -1,27 +1,0 @@
-typedef int sig_atomic_t;
-
-#define SIG_ERR -1
-#define SIG_DFL 0
-#define SIG_IGN 1
-
-#define SIGHUP 1
-#define SIGINT 2
-#define SIGQUIT 3
-#define SIGILL 4
-#define SIGABRT 6
-#define SIGFPE 8
-#define SIGKILL 9
-#define SIGUSR1 10
-#define SIGSEGV 11
-#define SIGUSR2 12
-#define SIGPIPE 13
-#define SIGALRM 14
-#define SIGTERM 15
-#define SIGCHLD 17
-#define SIGCONT 18
-#define SIGSTOP 19
-#define SIGSSTP 20
-#define SIGTTIN 21
-#define SIGTTOU 22
-
-#define __NR_SIGNALS 23
--- a/lib/c/include/bits/amd64-sysv/arch/stddef.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#ifndef _WCHAR_T
-typedef int wchar_t;
-#define _WCHAR_T
-#endif
-
-#ifndef _PTRDIFF_T
-typedef long ptrdiff_t;
-#define _PTRDIFF_T
-#endif
--- a/lib/c/include/bits/amd64-sysv/arch/stdint.h
+++ /dev/null
@@ -1,115 +1,0 @@
-#define INT8_MAX 0x7F
-#define INT8_MIN (-INT8_MAX-1)
-#define UINT8_MAX 0xFF
-
-#define INT16_MAX 0x7FFF
-#define INT16_MIN (-INT16_MAX-1)
-#define UINT16_MAX 0xFFFF
-
-#define INT32_MAX 0x7FFFFFFF
-#define INT32_MIN (-INT32_MAX-1)
-#define UINT32_MAX 0xFFFFFFFF
-
-#define INT64_MAX 0x7FFFFFFFFFFFFFFF
-#define INT64_MIN (-INT64_MAX-1)
-#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
-
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-#define INT_FAST8_MIN INT32_MIN
-#define INT_FAST8_MAX INT32_MAX
-#define UINT_FAST8_MAX UINT32_MAX
-
-#define INT_FAST16_MIN INT32_MIN
-#define INT_FAST16_MAX INT32_MAX
-#define UINT_FAST16_MAX UINT32_MAX
-
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-#define INTPTR_MIN INT64_MIN
-#define INTPTR_MAX INT64_MAX
-#define UINTPTR_MAX UINT64_MAX
-
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-#define PTRDIFF_MIN INT64_MIN
-#define PTRDIFF_MAX INT64_MAX
-
-#define SIG_ATOMIC_MIN INT32_MIN
-#define SIG_ATOMIC_MAX INT32_MAX
-
-#define SIZE_MAX UINT64_MAX
-
-#define WCHAR_MIN INT32_MIN
-#define WCHAR_MAX INT32_MAX
-
-#define INT8_C(x) x
-#define INT16_C(x) x
-#define INT32_C(x) x
-#define INT64_C(x) x ## L
-
-#define UINT8_C(x) x
-#define UINT16_C(x) x
-#define UINT32_C(x) x ## U
-#define UINT64_C(x) x ## UL
-
-#define INTMAX_C(x) x ## L
-#define UINTMAX_C(x) x ## UL
-
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned uint32_t;
-typedef unsigned long uint64_t;
-
-typedef signed char int8_least_t;
-typedef short int16_least_t;
-typedef int int32_least_t;
-typedef long int64_least_t;
-
-typedef unsigned char uint8_least_t;
-typedef unsigned short uint16_least_t;
-typedef unsigned uint32_least_t;
-typedef unsigned long uint64_least_t;
-
-typedef int int8_fast_t;
-typedef int int16_fast_t;
-typedef int int32_fast_t;
-typedef long int64_fast_t;
-
-typedef unsigned uint8_fast_t;
-typedef unsigned uint16_fast_t;
-typedef unsigned uint32_fast_t;
-typedef unsigned long uint64_fast_t;
-
-typedef long intptr_t;
-typedef unsigned long uintptr_t;
-
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
--- a/lib/c/include/bits/amd64-sysv/arch/stdio.h
+++ /dev/null
@@ -1,13 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#define BUFSIZ 512
-#define FILENAME_MAX 256
-#define FOPEN_MAX 16
-
-#define TMP_MAX 25
-#define L_tmpnam 256
-
-typedef int fpos_t;
--- a/lib/c/include/bits/amd64-sysv/arch/stdlib.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-
-#ifndef _WCHAR_T
-typedef int wchar_t;
-#define _WCHAR_T
-#endif
-
-#define _ALIGNTYPE long double
--- a/lib/c/include/bits/amd64-sysv/arch/string.h
+++ /dev/null
@@ -1,3 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#endif
--- a/lib/c/include/bits/amd64-sysv/arch/time.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-typedef long int time_t;
--- a/lib/c/include/bits/i386-sysv/arch/limits.h
+++ /dev/null
@@ -1,17 +1,0 @@
-#define SCHAR_MAX 0x7F
-#define SCHAR_MIN (-SCHAR_MIN-1)
-#define CHAR_MAX 0x7F
-#define CHAR_MIN (-CHAR_MAX-1)
-#define UCHAR_MAX 0xFF
-#define SHRT_MAX 0x7FFF
-#define SHRT_MIN (-SHRT_MAX-1)
-#define USHRT_MAX 0xFFFF
-#define INT_MAX 0x7FFFFFFF
-#define INT_MIN (-INT_MAX-1)
-#define UINT_MAX 0xFFFFFFFF
-#define LONG_MAX 0x7FFFFFFF
-#define LONG_MIN (-LONG_MAX-1)
-#define ULONG_MAX 0xFFFFFFFF
-#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
-#define LLONG_MIN (-LLONG_MAX-1)
-#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- a/lib/c/include/bits/i386-sysv/arch/signal.h
+++ /dev/null
@@ -1,27 +1,0 @@
-typedef int sig_atomic_t;
-
-#define SIG_ERR -1
-#define SIG_DFL 0
-#define SIG_IGN 1
-
-#define SIGHUP 1
-#define SIGINT 2
-#define SIGQUIT 3
-#define SIGILL 4
-#define SIGABRT 6
-#define SIGFPE 8
-#define SIGKILL 9
-#define SIGUSR1 10
-#define SIGSEGV 11
-#define SIGUSR2 12
-#define SIGPIPE 13
-#define SIGALRM 14
-#define SIGTERM 15
-#define SIGCHLD 17
-#define SIGCONT 18
-#define SIGSTOP 19
-#define SIGSSTP 20
-#define SIGTTIN 21
-#define SIGTTOU 22
-
-#define __NR_SIGNALS 23
--- a/lib/c/include/bits/i386-sysv/arch/stddef.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#ifndef _WCHAR_T
-typedef int wchar_t;
-#define _WCHAR_T
-#endif
-
-#ifndef _PTRDIFF_T
-typedef long ptrdiff_t;
-#define _PTRDIFF_T
-#endif
--- a/lib/c/include/bits/i386-sysv/arch/stdint.h
+++ /dev/null
@@ -1,115 +1,0 @@
-#define INT8_MAX 0x7F
-#define INT8_MIN (-INT8_MAX-1)
-#define UINT8_MAX 0xFF
-
-#define INT16_MAX 0x7FFF
-#define INT16_MIN (-INT16_MAX-1)
-#define UINT16_MAX 0xFFFF
-
-#define INT32_MAX 0x7FFFFFFF
-#define INT32_MIN (-INT32_MAX-1)
-#define UINT32_MAX 0xFFFFFFFF
-
-#define INT64_MAX 0x7FFFFFFFFFFFFFFF
-#define INT64_MIN (-INT64_MAX-1)
-#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
-
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-#define INT_FAST8_MIN INT32_MIN
-#define INT_FAST8_MAX INT32_MAX
-#define UINT_FAST8_MAX UINT32_MAX
-
-#define INT_FAST16_MIN INT32_MIN
-#define INT_FAST16_MAX INT32_MAX
-#define UINT_FAST16_MAX UINT32_MAX
-
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-#define INTPTR_MIN INT32_MIN
-#define INTPTR_MAX INT32_MAX
-#define UINTPTR_MAX UINT32_MAX
-
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-#define PTRDIFF_MIN INT32_MIN
-#define PTRDIFF_MAX INT32_MAX
-
-#define SIG_ATOMIC_MIN INT32_MIN
-#define SIG_ATOMIC_MAX INT32_MAX
-
-#define SIZE_MAX UINT32_MAX
-
-#define WCHAR_MIN INT32_MIN
-#define WCHAR_MAX INT32_MAX
-
-#define INT8_C(x) x
-#define INT16_C(x) x
-#define INT32_C(x) x
-#define INT64_C(x) x ## LL
-
-#define UINT8_C(x) x
-#define UINT16_C(x) x
-#define UINT32_C(x) x ## U
-#define UINT64_C(x) x ## ULL
-
-#define INTMAX_C(x) x ## LL
-#define UINTMAX_C(x) x ## ULL
-
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef long long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned uint32_t;
-typedef unsigned long long uint64_t;
-
-typedef signed char int8_least_t;
-typedef short int16_least_t;
-typedef int int32_least_t;
-typedef long long int64_least_t;
-
-typedef unsigned char uint8_least_t;
-typedef unsigned short uint16_least_t;
-typedef unsigned uint32_least_t;
-typedef unsigned long long uint64_least_t;
-
-typedef int int8_fast_t;
-typedef int int16_fast_t;
-typedef int int32_fast_t;
-typedef long long int64_fast_t;
-
-typedef unsigned uint8_fast_t;
-typedef unsigned uint16_fast_t;
-typedef unsigned uint32_fast_t;
-typedef unsigned long long uint64_fast_t;
-
-typedef int intptr_t;
-typedef unsigned uintptr_t;
-
-typedef long long intmax_t;
-typedef unsigned long long uintmax_t;
--- a/lib/c/include/bits/i386-sysv/arch/stdio.h
+++ /dev/null
@@ -1,13 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#define BUFSIZ 512
-#define FILENAME_MAX 256
-#define FOPEN_MAX 16
-
-#define TMP_MAX 25
-#define L_tmpnam 256
-
-typedef long fpos_t;
--- a/lib/c/include/bits/i386-sysv/arch/stdlib.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-
-#ifndef _WCHAR_T
-typedef int wchar_t;
-#define _WCHAR_T
-#endif
-
-#define _ALIGNTYPE long double
--- a/lib/c/include/bits/i386-sysv/arch/string.h
+++ /dev/null
@@ -1,3 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#endif
--- a/lib/c/include/bits/i386-sysv/arch/time.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#ifndef _SIZET
-typedef unsigned long size_t;
-#define _SIZET
-#endif
-
-typedef long int time_t;
--- a/lib/c/include/bits/z80-dos/arch/limits.h
+++ /dev/null
@@ -1,17 +1,0 @@
-#define SCHAR_MAX 0x7F
-#define SCHAR_MIN (-SCHAR_MIN-1)
-#define CHAR_MAX 0xFF
-#define CHAR_MIN 0
-#define UCHAR_MAX 0xFF
-#define SHRT_MAX 0x7FFF
-#define SHRT_MIN (-SHRT_MAX-1)
-#define USHRT_MAX 0xFFFF
-#define INT_MAX 0x7FFF
-#define INT_MIN (-INT_MAX-1)
-#define UINT_MAX 0xFFFF
-#define LONG_MAX 0x7FFFFFFF
-#define LONG_MIN (-LONG_MAX-1)
-#define ULONG_MAX 0xFFFFFFFF
-#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
-#define LLONG_MIN (-LLONG_MAX-1)
-#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- a/lib/c/include/bits/z80-dos/arch/signal.h
+++ /dev/null
@@ -1,31 +1,0 @@
-typedef char sig_atomic_t;
-
-#define SIG_ERR -1
-#define SIG_DFL 0
-#define SIG_IGN 1
-
-#define SIG_ERR -1
-#define SIG_DFL 0
-#define SIG_IGN 1
-
-#define SIGHUP 1
-#define SIGINT 2
-#define SIGQUIT 3
-#define SIGILL 4
-#define SIGABRT 6
-#define SIGFPE 8
-#define SIGKILL 9
-#define SIGUSR1 10
-#define SIGSEGV 11
-#define SIGUSR2 12
-#define SIGPIPE 13
-#define SIGALRM 14
-#define SIGTERM 15
-#define SIGCHLD 17
-#define SIGCONT 18
-#define SIGSTOP 19
-#define SIGSSTP 20
-#define SIGTTIN 21
-#define SIGTTOU 22
-
-#define __NR_SIGNALS 23
--- a/lib/c/include/bits/z80-dos/arch/stddef.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned size_t;
-#define _SIZET
-#endif
-
-#ifndef _WCHAR_T
-typedef short wchar_t;
-#define _WCHAR_T
-#endif
-
-#ifndef _PTRDIFF_T
-typedef short ptrdiff_t;
-#define _PTRDIFF_T
-#endif
--- a/lib/c/include/bits/z80-dos/arch/stdint.h
+++ /dev/null
@@ -1,115 +1,0 @@
-#define INT8_MAX 0x7F
-#define INT8_MIN (-INT8_MAX-1)
-#define UINT8_MAX 0xFF
-
-#define INT16_MAX 0x7FFF
-#define INT16_MIN (-INT16_MAX-1)
-#define UINT16_MAX 0xFFFF
-
-#define INT32_MAX 0x7FFFFFFF
-#define INT32_MIN (-INT32_MAX-1)
-#define UINT32_MAX 0xFFFFFFFF
-
-#define INT64_MAX 0x7FFFFFFFFFFFFFFF
-#define INT64_MIN (-INT64_MAX-1)
-#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
-
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-#define INT_FAST8_MIN INT16_MIN
-#define INT_FAST8_MAX INT16_MAX
-#define UINT_FAST8_MAX UINT16_MAX
-
-#define INT_FAST16_MIN INT16_MIN
-#define INT_FAST16_MAX INT16_MAX
-#define UINT_FAST16_MAX UINT16_MAX
-
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-#define INTPTR_MIN INT16_MIN
-#define INTPTR_MAX INT16_MAX
-#define UINTPTR_MAX UINT16_MAX
-
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-#define PTRDIFF_MIN INT16_MIN
-#define PTRDIFF_MAX INT16_MAX
-
-#define SIG_ATOMIC_MIN INT16_MIN
-#define SIG_ATOMIC_MAX INT16_MAX
-
-#define SIZE_MAX UINT64_MAX
-
-#define WCHAR_MIN INT16_MIN
-#define WCHAR_MAX INT16_MAX
-
-#define INT8_C(x) x
-#define INT16_C(x) x
-#define INT32_C(x) x ## L
-#define INT64_C(x) x ## LL
-
-#define UINT8_C(x) x
-#define UINT16_C(x) x ## U
-#define UINT32_C(x) x ## UL
-#define UINT64_C(x) x ## ULL
-
-#define INTMAX_C(x) x ## LL
-#define UINTMAX_C(x) x ## ULL
-
-typedef signed char int8_t;
-typedef int int16_t;
-typedef long int32_t;
-typedef long long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned uint16_t;
-typedef unsigned long uint32_t;
-typedef unsigned long long uint64_t;
-
-typedef signed char int8_least_t;
-typedef int int16_least_t;
-typedef long int32_least_t;
-typedef long long int64_least_t;
-
-typedef unsigned char uint8_least_t;
-typedef unsigned uint16_least_t;
-typedef unsigned long uint32_least_t;
-typedef unsigned long long uint64_least_t;
-
-typedef signed char int8_fast_t;
-typedef int int16_fast_t;
-typedef long int32_fast_t;
-typedef long long int64_fast_t;
-
-typedef unsigned char uint8_fast_t;
-typedef unsigned uint16_fast_t;
-typedef unsigned long uint32_fast_t;
-typedef unsigned long long uint64_fast_t;
-
-typedef int intptr_t;
-typedef unsigned uintptr_t;
-
-typedef long long intmax_t;
-typedef unsigned long long uintmax_t;
--- a/lib/c/include/bits/z80-dos/arch/stdio.h
+++ /dev/null
@@ -1,13 +1,0 @@
-#ifndef _SIZET
-typedef unsigned size_t;
-#define _SIZET
-#endif
-
-#define BUFSIZ 512
-#define FILENAME_MAX 256
-#define FOPEN_MAX 16
-
-#define TMP_MAX 25
-#define L_tmpnam 256
-
-typedef long fpos_t;
--- a/lib/c/include/bits/z80-dos/arch/stdlib.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _SIZET
-typedef unsigned size_t;
-#define _SIZET
-#endif
-
-#define EXIT_FAILURE 1
-#define EXIT_SUCCESS 0
-
-#ifndef _WCHAR_T
-typedef short wchar_t;
-#define _WCHAR_T
-#endif
-
-#define _ALIGNTYPE int
--- a/lib/c/include/bits/z80-dos/arch/string.h
+++ /dev/null
@@ -1,3 +1,0 @@
-#ifndef _SIZET
-typedef unsigned size_t;
-#endif
--- a/lib/c/include/bits/z80-dos/arch/time.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#ifndef _SIZET
-typedef unsigned size_t;
-#define _SIZET
-#endif
-
-typedef long time_t;
--- a/lib/c/include/ctype.h
+++ /dev/null
@@ -1,52 +1,0 @@
-#ifndef _CTYPE_H
-#define _CTYPE_H
-
-extern int isalnum(int c);
-extern int isalpha(int c);
-extern int islower(int c);
-extern int isupper(int c);
-extern int isdigit(int c);
-extern int isxdigit(int c);
-extern int iscntrl(int c);
-extern int isgraph(int c);
-extern int isspace(int c);
-extern int isblank(int c);
-extern int isprint(int c);
-extern int ispunct(int c);
-extern int tolower(int c);
-extern int toupper(int c);
-
-#ifdef __USE_MACROS
-
-#define _U 0x01 /* upper */
-#define _L 0x02 /* lower */
-#define _D 0x04 /* digit */
-#define _C 0x08 /* cntrl */
-#define _P 0x10 /* punct */
-#define _S 0x20 /* white space (space/lf/tab) */
-#define _X 0x40 /* hex char */
-#define _SP 0x80 /* hard space (0x20) */
-
-extern unsigned char __ctype[];
-extern int __ctmp;
-
-#define isalnum(c) ((__ctype+1)[c] & (_U|_L|_D))
-#define isalpha(c) ((__ctype+1)[c] & (_U|_L))
-#define iscntrl(c) ((__ctype+1)[c] & (_C))
-#define isdigit(c) ((__ctype+1)[c] & (_D))
-#define isgraph(c) ((__ctype+1)[c] & (_P|_U|_L|_D))
-#define islower(c) ((__ctype+1)[c] & (_L))
-#define isprint(c) ((__ctype+1)[c] & (_P|_U|_L|_D|_SP))
-#define ispunct(c) ((__ctype+1)[c] & (_P))
-#define isspace(c) ((__ctype+1)[c] & (_S))
-#define isupper(c) ((__ctype+1)[c] & (_U))
-#define isxdigit(c) ((__ctype+1)[c] & (_D|_X))
-
-#define tolower(c) ((__ctmp=c, isupper(__ctmp) ? __ctmp | 0x20 : __ctmp))
-#define toupper(c) ((__ctmp=c, islower(__ctmp) ? __ctmp & ~0x20 : __ctmp))
-
-#define isascii(c) ((unsigned)(c)<=0x7f)
-
-#endif
-
-#endif
--- a/lib/c/include/errno.h
+++ /dev/null
@@ -1,14 +1,0 @@
-#ifndef _ERRNO_H
-#define _ERRNO_H
-
-#define EDOM 1
-#define EILSEQ 2
-#define ERANGE 3
-#define ENOMEM 4
-#define EBADF 5
-
-extern int errno;
-extern char *_sys_errlist[];
-extern int _sys_nerr;
-
-#endif
--- a/lib/c/include/limits.h
+++ /dev/null
@@ -1,9 +1,0 @@
-#ifndef _LIMITS_H
-#define _LIMITS_H
-
-#include <arch/limits.h>
-
-#define CHAR_BIT 8
-#define MB_LEN_MAX 1
-
-#endif
--- a/lib/c/include/locale.h
+++ /dev/null
@@ -1,45 +1,0 @@
-#ifndef _LOCALE_H
-#define _LOCALE_H
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-#define LC_ALL 0
-#define LC_COLLATE 1
-#define LC_CTYPE 2
-#define LC_MONETARY 3
-#define LC_NUMERIC 4
-#define LC_TIME 5
-
-struct lconv {
- char *decimal_point;
- char *thousands_sep;
- char *grouping;
- char *mon_decimal_point;
- char *mon_thousands_sep;
- char *mon_grouping;
- char *positive_sign;
- char *negative_sign;
- char *currency_symbol;
- char *int_curr_symbol;
- char frac_digits;
- char p_cs_precedes;
- char n_cs_precedes;
- char p_sep_by_space;
- char n_sep_by_space;
- char p_sign_posn;
- char n_sign_posn;
- char int_frac_digits;
- char int_p_cs_precedes;
- char int_n_cs_precedes;
- char int_p_sep_by_space;
- char int_n_sep_by_space;
- char int_p_sign_posn;
- char int_n_sign_posn;
-};
-
-extern char *setlocale(int category, const char *locale);
-extern struct lconv *localeconv(void);
-
-#endif
--- a/lib/c/include/signal.h
+++ /dev/null
@@ -1,9 +1,0 @@
-#ifndef _SIGNAL_H
-#define _SIGNAL_H
-
-#include <arch/signal.h>
-
-void ( *signal(int signum, void (*handler)(int)) ) (int);
-int raise(int sig);
-
-#endif
--- a/lib/c/include/stdarg.h
+++ /dev/null
@@ -1,10 +1,0 @@
-#ifndef _STDARG_H
-#define _STDARG_H
-
-#define va_list __builtin_va_list
-#define va_start(ap, last) __builtin_va_start(ap, last)
-#define va_end(ap) __builtin_va_end(ap)
-#define va_copy(to, from) __builtin_va_copy(to, from)
-#define va_arg(to, type) __builtin_va_arg(to, type)
-
-#endif
--- a/lib/c/include/stdbool.h
+++ /dev/null
@@ -1,9 +1,0 @@
-#ifndef _STDBOOL_H
-#define _STDBOOL_H
-
-#define bool _Bool
-#define true ((bool) 1)
-#define false ((bool) 0)
-#define __bool_true_false_are_defined 1
-
-#endif
--- a/lib/c/include/stddef.h
+++ /dev/null
@@ -1,12 +1,0 @@
-#ifndef _STDDEF_H
-#define _STDDEF_H
-
-#include <arch/stddef.h>
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-#define offsetof(st, m) ((size_t)&(((st *)0)->m))
-
-#endif
--- a/lib/c/include/stdint.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#ifndef _STDINT_H_
-#define _STDINT_H_
-
-#include <arch/stdint.h>
-
-#endif
--- a/lib/c/include/stdio.h
+++ /dev/null
@@ -1,127 +1,0 @@
-#ifndef _STDIO_H
-#define _STDIO_H
-
-#include <arch/stdio.h>
-
-#ifndef FOPEN_MAX
-#define FOPEN_MAX 12
-#endif
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-#define EOF -1
-#define SEEK_CUR 0
-#define SEEK_END 1
-#define SEEK_SET 2
-
-
-#define _IOWRITE (1 << 0)
-#define _IOREAD (1 << 1)
-#define _IORW (1 << 2)
-#define _IOEOF (1 << 3)
-#define _IOERR (1 << 4)
-#define _IOSTRG (1 << 5)
-#define _IOTXT (1 << 6)
-#define _IOFBF (1 << 7)
-#define _IOLBF (1 << 8)
-#define _IONBF (1 << 9)
-#define _IOALLOC (1 <<10)
-
-typedef struct {
- int fd; /* file descriptor */
- unsigned char *buf; /* pointer to i/o buffer */
- unsigned char *rp; /* read pointer */
- unsigned char *wp; /* write pointer */
- unsigned char *lp; /* write pointer used when line-buffering */
- size_t len; /* actual length of buffer */
- unsigned short flags;
- unsigned char unbuf[1]; /* tiny buffer for unbuffered io */
-} FILE;
-
-extern FILE __iob[FOPEN_MAX];
-
-#define stdin (&__iob[0])
-#define stdout (&__iob[1])
-#define stderr (&__iob[2])
-
-extern int remove(const char *filename);
-extern int rename(const char *old, const char *new);
-extern FILE *tmpfile(void);
-extern char *tmpnam(char *s);
-extern int fclose(FILE *fp);
-extern int fflush(FILE *fp);
-extern FILE *fopen(const char * restrict fname, const char * restrict mode);
-extern FILE *freopen(const char * restrict fname, const char * restrict mode,
- FILE * restrict fp);
-extern void setbuf(FILE * restrict fp, char * restrict buf);
-extern int setvbuf(FILE * restrict fp,
- char * restrict buf, int mode, size_t size);
-extern int fprintf(FILE * restrict fp, const char * restrict fmt, ...);
-extern int fscanf(FILE * restrict fp, const char * restrict fmt, ...);
-extern int printf(const char * restrict fmt, ...);
-extern int scanf(const char * restrict fmt, ...);
-extern int snprintf(char * restrict s,
- size_t n, const char * restrict fmt, ...);
-extern int sprintf(char * restrict s, const char * restrict fmt, ...);
-extern int sscanf(const char * restrict s, const char * restrict fmt, ...);
-
-#ifdef _STDARG_H
-extern int vfprintf(FILE * restrict fp,
- const char * restrict fmt, va_list arg);
-extern int vfscanf(FILE * restrict fp,
- const char * restrict fmt, va_list arg);
-extern int vprintf(const char * restrict fmt, va_list arg);
-extern int vscanf(const char * restrict fmt, va_list arg);
-extern int vsnprintf(char * restrict s, size_t n, const char * restrict fmt,
- va_list arg);
-extern int vsprintf(char * restrict s,
- const char * restrict fmt, va_list arg);
-extern int vsscanf(const char * restrict s,
- const char * restrict fmt, va_list arg);
-#endif
-
-extern int fgetc(FILE *fp);
-extern char *fgets(char * restrict s, int n, FILE * restrict fp);
-extern int fputc(int c, FILE *fp);
-extern int fputs(const char * restrict s, FILE * restrict fp);
-extern int getc(FILE *fp);
-extern int getchar(void);
-extern char *gets(char *s);
-extern int putc(int c, FILE *fp);
-extern int putchar(int c);
-extern int puts(const char *s);
-extern int ungetc(int c, FILE *fp);
-extern size_t fread(void * restrict ptr, size_t size, size_t nmemb,
- FILE * restrict fp);
-extern size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb,
- FILE * restrict fp);
-extern int fgetpos(FILE * restrict fp, fpos_t * restrict pos);
-extern int fseek(FILE *fp, long int offset, int whence);
-extern int fsetpos(FILE *fp, const fpos_t *pos);
-extern long int ftell(FILE *fp);
-extern void rewind(FILE *fp);
-extern void clearerr(FILE *fp);
-extern int feof(FILE *fp);
-extern int ferror(FILE *fp);
-extern void perror(const char *s);
-
-extern int __getc(FILE *fp);
-extern int __putc(int, FILE *fp);
-
-#ifdef __USE_MACROS
-#ifdef __UNIX_FILES
-#define getc(fp) ((fp)->rp >= (fp)->wp ? __getc(fp) : *(fp)->rp++)
-#define putc(c, fp) ((fp)->wp >= (fp)->rp ? __putc(c,fp) : (*(fp)->wp++ = c))
-#endif
-
-#define ferror(fp) ((fp)->flags & _IOERR)
-#define feof(fp) ((fp)->flags & _IOEOF)
-#define clearerr(fp) (void) ((fp)->flags &= ~(_IOERR|_IOEOF))
-#define getchar() getc(stdin)
-#define putchar(c) putc((c), stdout)
-#define setbuf(fp, b) (void) setvbuf(fp, b, b ? _IOFBF:_IONBF, BUFSIZ)
-#endif
-
-#endif
--- a/lib/c/include/stdlib.h
+++ /dev/null
@@ -1,79 +1,0 @@
-#ifndef _STDLIB_H
-#define _STDLIB_H
-
-#include <arch/stdlib.h>
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-#define _ATEXIT_MAX 32
-
-#define MB_CUR_MAX 1
-#define RAND_MAX 32767
-
-typedef struct {
- int quot, rem;
-} div_t;
-
-typedef struct {
- long quot, rem;
-} ldiv_t;
-
-typedef struct {
- long long quot, rem;
-} lldiv_t;
-
-extern double atof(const char *nptr);
-extern int atoi(const char *nptr);
-extern long int atol(const char *nptr);
-extern long long int atoll(const char *nptr);
-extern double strtod(const char * restrict nptr, char ** restrict endptr);
-extern float strtof(const char * restrict nptr, char ** restrict endptr);
-extern long double strtold(const char * restrict nptr, char ** restrict endptr);
-extern long int strtol(const char * restrict nptr, char ** restrict endptr, int base);
-extern long long int strtoll(const char * restrict nptr, char ** restrict endptr,
- int base);
-extern unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr,
- int base);
-extern unsigned long long int strtoull(const char * restrict nptr,
- char ** restrict endptr, int base);
-extern int rand(void);
-extern void srand(unsigned int seed);
-extern void *calloc(size_t nmemb, size_t size);
-extern void free(void *ptr);
-extern void *malloc(size_t size);
-extern void *realloc(void *ptr, size_t size);
-extern void abort(void);
-extern int atexit(void (*func)(void));
-extern void exit(int status);
-extern void _Exit(int status);
-extern char *getenv(const char *name);
-extern int system(const char *string);
-extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-extern void qsort(void *base, size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-extern int abs(int j);
-extern long int labs(long int j);
-extern long long int llabs(long long int j);
-extern div_t div(int numer, int denom);
-extern ldiv_t ldiv(long int numer, long int denom);
-extern lldiv_t lldiv(long long int numer, long long int denom);
-extern int mblen(const char *s, size_t n);
-extern int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);
-extern int wctomb(char *s, wchar_t wchar);
-extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
-extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
-
-#ifdef __USE_MACROS
-extern int __abs;
-extern long __labs;
-extern long long __llabs;
-
-#define abs(x) (__abs = (x), (__abs) < 0 ? -__abs : __abs)
-#define labs(x) (__labs = (x), (__labs) < 0 ? -__labs : __labs)
-#define llabs(x) (__llabs = (x), (__llabs) < 0 ? -__llabs : __llabs)
-#endif
-
-#endif
--- a/lib/c/include/string.h
+++ /dev/null
@@ -1,33 +1,0 @@
-#ifndef _STRING_H
-#define _STRING_H
-
-#include <arch/string.h>
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-extern void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
-extern void *memmove(void *s1, const void *s2, size_t n);
-extern char *strcpy(char * restrict s1, const char * restrict s2);
-extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
-extern char *strcat(char * restrict s1, const char * restrict s2);
-extern char *strncat(char * restrict s1, const char * restrict s2, size_t n);
-extern int memcmp(const void *s1, const void *s2, size_t n);
-extern int strcmp(const char *s1, const char *s2);
-extern int strcoll(const char *s1, const char *s2);
-extern int strncmp(const char *s1, const char *s2, size_t n);
-extern size_t strxfrm(char * restrict s1, const char * restrict s2, size_t n);
-extern void *memchr(const void *s, int c, size_t n);
-extern char *strchr(const char *s, int c);
-extern size_t strcspn(const char *s1, const char *s2);
-extern char *strpbrk(const char *s1, const char *s2);
-extern char *strrchr(const char *s, int c);
-extern size_t strspn(const char *s1, const char *s2);
-extern char *strstr(const char *s1, const char *s2);
-extern char *strtok(char * restrict s1, const char * restrict s2);
-extern void *memset(void *s, int c, size_t n);
-extern char *strerror(int errnum);
-extern size_t strlen(const char *s);
-
-#endif
--- a/lib/c/include/time.h
+++ /dev/null
@@ -1,38 +1,0 @@
-#ifndef _TIME_H
-#define _TIME_H
-
-#include <arch/time.h>
-
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif
-
-#define CLOCKS_PER_SEC 1000000
-
-typedef long int clock_t;
-
-struct tm {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday;
- int tm_yday;
- int tm_isdst;
-};
-
-extern clock_t clock(void);
-extern double difftime(time_t time1, time_t time0);
-extern time_t mktime(struct tm *timeptr);
-extern time_t time(time_t *timer);
-extern char *asctime(const struct tm *timeptr);
-extern char *ctime(const time_t *timer);
-extern struct tm *gmtime(const time_t *timer);
-extern struct tm *localtime(const time_t *timer);
-extern size_t strftime(char * restrict s, size_t maxsize,
- const char * restrict format,
- const struct tm * restrict timeptr);
-
-#endif
--- a/lib/c/isascii.c
+++ b/lib/c/isascii.c
@@ -1,4 +1,3 @@
-#define __USE_MACROS
#include <ctype.h>
#undef isascii
--- a/lib/c/isblank.c
+++ b/lib/c/isblank.c
@@ -1,3 +1,6 @@
+
+#include <ctype.h>
+
int
isblank(int c)
{
--- /dev/null
+++ b/lib/c/libc.h
@@ -1,0 +1,5 @@
+#ifdef stdin
+extern FILE *_fpopen(const char * restrict fname,
+ const char * restrict mode,
+ FILE * restrict fp);
+#endif
--- a/lib/c/memchr.c
+++ b/lib/c/memchr.c
@@ -4,7 +4,7 @@
void *
memchr(const void *s, int c, size_t n)
{
- unsigned char *bp = (char *) s;
+ unsigned char *bp = (unsigned char *) s;
while (n > 0 && *bp++ != c)
--n;
--- a/lib/c/putc.c
+++ b/lib/c/putc.c
@@ -5,5 +5,5 @@
int
putc(int ch, FILE *fp)
{
- return (fp->wp >= fp->rp) ? __putc(c,fp) : *fp->wp++ = c;
+ return (fp->wp >= fp->rp) ? __putc(ch,fp) : (*fp->wp++ = ch);
}
--- a/lib/c/putchar.c
+++ b/lib/c/putchar.c
@@ -5,5 +5,5 @@
int
putchar(int ch)
{
- return putc(ch, stdin);
+ return putc(ch, stdout);
}
--- a/lib/c/puts.c
+++ b/lib/c/puts.c
@@ -1,5 +1,6 @@
#include <stdio.h>
+#undef puts
int
puts(const char *str)
@@ -6,7 +7,7 @@
{
int ch;
- while (ch = *str)
+ while (ch = *str++)
putchar(ch);
return putchar('\n');
}
--- a/lib/c/realloc.c
+++ b/lib/c/realloc.c
@@ -2,6 +2,7 @@
#include <string.h>
#include "malloc.h"
+#undef realloc
void *
realloc(void *ptr, size_t nbytes)
--- a/lib/c/setvbuf.c
+++ b/lib/c/setvbuf.c
@@ -1,14 +1,17 @@
#include <errno.h>
#include <stdio.h>
+#include <stdlib.h>
#undef setvbuf
+extern int _flsbuf(FILE *fp);
+
int
setvbuf(FILE * restrict fp, char * restrict buf, int mode, size_t size)
{
int flags, r;
- if (fflush(fp) == EOF)
+ if (_flsbuf(fp) == EOF)
return EOF;
switch (mode) {
@@ -27,7 +30,7 @@
}
break;
default:
- errno = EIVAL;
+ errno = EINVAL;
return EOF;
}
@@ -34,11 +37,11 @@
flags = fp->flags;
if (flags & _IOALLOC)
free(fp->buf);
- flag &= ~(_IONBF | _IOLBF | _IOFBF | _IOALLOC | _IOALLOC);
+ flags &= ~(_IONBF | _IOLBF | _IOFBF | _IOALLOC | _IOALLOC);
flags |= mode;
fp->flags = flags;
fp->buf = buf;
- fp->size = size;
+ fp->len = size;
return 0;
}
--- a/lib/c/stdio.c
+++ b/lib/c/stdio.c
@@ -9,13 +9,19 @@
.fd = 0,
.buf = inbuf,
.len = BUFSIZ,
- .flags = _IOREAD
+ .flags = _IOREAD,
+ .lp = inbuf,
+ .rp = inbuf,
+ .wp = inbuf,
},
{
.fd = 1,
.buf = outbuf,
.len = BUFSIZ,
- .flags = _IOWRITE | _IOLBF
+ .flags = _IOWRITE | _IOLBF,
+ .lp = outbuf,
+ .rp = outbuf,
+ .wp = outbuf,
},
{
.fd = 2,
--- /dev/null
+++ b/lib/c/strnlen.c
@@ -1,0 +1,13 @@
+#include <string.h>
+
+#undef strnlen
+
+size_t
+strnlen(const char *s, size_t maxlen)
+{
+ size_t n;
+
+ for (n = 0; n < maxlen && *s++; ++n)
+ ;
+ return n;
+}
--- a/lib/c/strpbrk.c
+++ b/lib/c/strpbrk.c
@@ -11,7 +11,7 @@
for (p = s2; *p && *p != c; ++p)
;
if (*p == c)
- return s1;
+ return (char *) s1;
}
return NULL;
}
--- a/lib/c/syscall.h
+++ b/lib/c/syscall.h
@@ -1,14 +1,8 @@
extern void *_brk(void *addr);
-extern int _open(char *path, int flags, int perm);
+extern int _open(const char *path, int flags);
extern int _close(int fd);
extern int _read(int fd, void *buf, size_t n);
extern int _write(int fd, void *buf, size_t n);
extern int _lseek(int fd, long off, int whence);
extern void _Exit(int status);
-extern void _access(char *path, int mode);
-
-extern int raise(int sig);
-extern void (*signal(int sig, void (*func)(int)))(int);
-extern getenv(const char *var);
-extern int rename(const char *from, const char *to);
-extern int remove(const char *path);
+extern int _access(char *path, int mode);
--- /dev/null
+++ b/lib/c/target/.gitignore
@@ -1,0 +1,1 @@
+_sys_errlist.c
--- a/lib/c/target/Makefile
+++ b/lib/c/target/Makefile
@@ -3,7 +3,13 @@
include $(PROJECTDIR)/rules.mk
-DIRS = $(TARGETS)
+DIRS = amd64-sysv-linux \
+ amd64-sysv-openbsd \
+ amd64-sysv-netbsd \
-all dep clean distclean:
+all clean distclean:
+ $(FORALL)
+
+dep:
+ ./script/objlst.sh
$(FORALL)
--- a/lib/c/target/amd64-sysv-linux-elf/Makefile
+++ /dev/null
@@ -1,9 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../../..
-
-include $(PROJECTDIR)/rules.mk
-include ../objlst.mk
-include ../common.mk
-
-SCC_CFLAGS = -I../../include -I../../include/bits/amd64-sysv/
--- a/lib/c/target/amd64-sysv-linux-elf/gendep.sh
+++ /dev/null
@@ -1,16 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-(cat Makefile
-for i
-do
- cat <<EOF
-$i: ../../${i%.o}.c
- \$(CC) \$(TF_CFLAGS) ../../${i%.o}.c -c
-
-EOF
-done) > $$.mk && mv $$.mk makefile
--- /dev/null
+++ b/lib/c/target/amd64-sysv-linux/.gitignore
@@ -1,0 +1,10 @@
+_Exit.s
+_brk.s
+_close.s
+_getpid.s
+_kill.s
+_lseek.s
+_open.s
+_read.s
+_sigaction.s
+_write.s
--- /dev/null
+++ b/lib/c/target/amd64-sysv-linux/Makefile
@@ -1,0 +1,17 @@
+.POSIX:
+
+PROJECTDIR = ../../../..
+include $(PROJECTDIR)/rules.mk
+
+SYS = linux
+ARCH = amd64
+ABI = sysv
+SYSERRTBL = ../posix/linux.e
+MORECFLAGS = -std=c99 -g -static -nostdinc
+SYSOBJ = raise.o signal.o
+
+include syscall.mk
+include ../amd64-sysv/objlst.mk
+include ../script/objlst.mk
+include ../posix/objlst.mk
+include ../script/common.mk
--- /dev/null
+++ b/lib/c/target/amd64-sysv-linux/sys.h
@@ -1,0 +1,20 @@
+
+#define O_RDONLY 0x00000000
+#define O_WRONLY 0x00000001
+#define O_RDWR 0x00000002
+
+#define O_TRUNC 0x00000400
+#define O_APPEND 0x00000008
+#define O_CREAT 0x00000200
+
+typedef int pid_t;
+
+struct sigaction {
+ void (*sa_handler)(int);
+ int sa_mask;
+ int sa_flags;
+};
+
+extern pid_t _getpid(void);
+extern int _kill(pid_t pid, int signum);
+extern int _sigaction(int sig, struct sigaction *new, struct sigaction *old);
--- /dev/null
+++ b/lib/c/target/amd64-sysv-linux/syscall.lst
@@ -1,0 +1,11 @@
+#number name
+1 _Exit
+3 _read
+4 _write
+5 _open
+6 _close
+17 _brk
+20 _getpid
+37 _kill
+46 _sigaction
+199 _lseek
--- /dev/null
+++ b/lib/c/target/amd64-sysv-linux/syscall.mk
@@ -1,0 +1,1 @@
+SYSCALL = _Exit.o _read.o _write.o _open.o _close.o _brk.o _getpid.o _kill.o _sigaction.o _lseek.o
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/.gitignore
@@ -1,0 +1,10 @@
+_Exit.s
+_brk.s
+_close.s
+_getpid.s
+_kill.s
+_lseek.s
+_open.s
+_read.s
+_write.s
+_sigaction.s
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/Makefile
@@ -1,0 +1,17 @@
+.POSIX:
+
+PROJECTDIR = ../../../..
+include $(PROJECTDIR)/rules.mk
+
+SYS = netbsd
+ARCH = amd64
+ABI = sysv
+SYSERRTBL = ../posix/netbsd.e
+MORECFLAGS = -std=c99 -g -static -nostdinc
+SYSOBJ = raise.o signal.o _sigaction.o _sigaction2.o _setcontext.o
+
+include syscall.mk
+include ../amd64-sysv/objlst.mk
+include ../script/objlst.mk
+include ../posix/objlst.mk
+include ../script/common.mk
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/_setcontext.s
@@ -1,0 +1,14 @@
+
+ .text
+ .globl _Exit
+ .globl _setcontext
+
+_setcontext:
+ movq %r15,%rdi
+ movq $0x134,%rax
+ syscall
+
+ # Something was wrong, finish the program. We can't call
+ # abort here because it could generate a loop
+ movq $-1,%rdi
+ jmp _Exit
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/_sigaction.c
@@ -1,0 +1,15 @@
+
+#include <stddef.h>
+#include <sys.h>
+
+extern int _sigaction2(int sig,
+ struct sigaction *new, struct sigaction *old,
+ int siginfo[], int num);
+
+int
+_sigaction(int sig, struct sigaction *new, struct sigaction *old)
+{
+ extern int _setcontext[];
+
+ return _sigaction2(sig, new, old, _setcontext, 2);
+}
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/_sigaction2.s
@@ -1,0 +1,12 @@
+
+# This syscall cannot be autogenerated because it receives more than
+# 4 arguments
+
+ .text
+ .globl _sigaction2
+
+_sigaction2:
+ mov $0x154,%eax
+ mov %rcx,%r10
+ syscall
+ retq
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/sys.h
@@ -1,0 +1,20 @@
+
+#define O_RDONLY 0x00000000
+#define O_WRONLY 0x00000001
+#define O_RDWR 0x00000002
+
+#define O_TRUNC 0x00000400
+#define O_APPEND 0x00000008
+#define O_CREAT 0x00000200
+
+typedef int pid_t;
+
+struct sigaction {
+ void (*sa_handler)(int);
+ char sa_mask[8];
+ int sa_flags;
+};
+
+extern pid_t _getpid(void);
+extern int _kill(pid_t pid, int signum);
+extern int _sigaction(int sig, struct sigaction *new, struct sigaction *old);
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/syscall.lst
@@ -1,0 +1,10 @@
+#number name
+1 _Exit
+3 _read
+4 _write
+5 _open
+6 _close
+17 _brk
+20 _getpid
+37 _kill
+199 _lseek
--- /dev/null
+++ b/lib/c/target/amd64-sysv-netbsd/syscall.mk
@@ -1,0 +1,1 @@
+SYSCALL = _Exit.o _read.o _write.o _open.o _close.o _brk.o _getpid.o _kill.o _lseek.o
--- a/lib/c/target/amd64-sysv-openbsd-elf/Makefile
+++ /dev/null
@@ -1,7 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../../..
-
-include $(PROJECTDIR)/rules.mk
-include ../objlst.mk
-include ../common.mk
--- a/lib/c/target/amd64-sysv-openbsd-elf/gendep.sh
+++ /dev/null
@@ -1,16 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-(cat Makefile
-for i
-do
- cat <<EOF
-$i: ../../${i%.o}.c
- \$(CC) \$(TF_CFLAGS) ../../${i%.o}.c -c
-
-EOF
-done) > $$.mk && mv $$.mk makefile
--- /dev/null
+++ b/lib/c/target/amd64-sysv-openbsd/.gitignore
@@ -1,0 +1,10 @@
+_Exit.s
+_brk.s
+_close.s
+_getpid.s
+_kill.s
+_lseek.s
+_open.s
+_read.s
+_sigaction.s
+_write.s
--- /dev/null
+++ b/lib/c/target/amd64-sysv-openbsd/Makefile
@@ -1,0 +1,17 @@
+.POSIX:
+
+PROJECTDIR = ../../../..
+include $(PROJECTDIR)/rules.mk
+
+SYS = openbsd
+ARCH = amd64
+ABI = sysv
+SYSERRTBL = ../posix/netbsd.e
+MORECFLAGS = -std=c99 -g -static -nostdinc -fno-stack-protector --freestanding
+SYSOBJ = raise.o signal.o _sigaction.o
+
+include syscall.mk
+include ../amd64-sysv/objlst.mk
+include ../script/objlst.mk
+include ../posix/objlst.mk
+include ../script/common.mk
--- /dev/null
+++ b/lib/c/target/amd64-sysv-openbsd/sys.h
@@ -1,0 +1,20 @@
+
+#define O_RDONLY 0x00000000
+#define O_WRONLY 0x00000001
+#define O_RDWR 0x00000002
+
+#define O_TRUNC 0x00000400
+#define O_APPEND 0x00000008
+#define O_CREAT 0x00000200
+
+typedef int pid_t;
+
+struct sigaction {
+ void (*sa_handler)(int);
+ int sa_mask;
+ int sa_flags;
+};
+
+extern pid_t _getpid(void);
+extern int _kill(pid_t pid, int signum);
+extern int _sigaction(int sig, struct sigaction *new, struct sigaction *old);
--- /dev/null
+++ b/lib/c/target/amd64-sysv-openbsd/syscall.lst
@@ -1,0 +1,11 @@
+#number name
+1 _Exit
+3 _read
+4 _write
+5 _open
+6 _close
+17 _brk
+20 _getpid
+46 _sigaction
+122 _kill
+198 _lseek
--- /dev/null
+++ b/lib/c/target/amd64-sysv-openbsd/syscall.mk
@@ -1,0 +1,1 @@
+SYSCALL = _Exit.o _read.o _write.o _open.o _close.o _brk.o _getpid.o _sigaction.o _kill.o _lseek.o
--- /dev/null
+++ b/lib/c/target/amd64-sysv/longjmp.s
@@ -1,0 +1,20 @@
+# Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license
+ .file "longjmp"
+ .global longjmp
+
+longjmp:
+ mov %rsi,%rax # val will be longjmp return
+ test %rax,%rax
+ jnz 1f
+ inc %rax # if val==0, val=1 per longjmp semantics
+1:
+ mov (%rdi),%rbx # rdi is the jmp_buf, restore regs from it
+ mov 8(%rdi),%rbp
+ mov 16(%rdi),%r12
+ mov 24(%rdi),%r13
+ mov 32(%rdi),%r14
+ mov 40(%rdi),%r15
+ mov 48(%rdi),%rdx # this ends up being the stack pointer
+ mov %rdx,%rsp
+ mov 56(%rdi),%rdx # this is the instruction pointer
+ jmp *%rdx # goto saved address without altering rsp
--- /dev/null
+++ b/lib/c/target/amd64-sysv/objlst.mk
@@ -1,0 +1,7 @@
+ARCHOBJ = setjmp.o longjmp.o
+
+setjmp.o: ../amd64-sysv/setjmp.s
+ $(AS) $(ASFLAGS) -o $@ ../amd64-sysv/setjmp.s
+
+longjmp.o: ../amd64-sysv/longjmp.s
+ $(AS) $(ASFLAGS) -o $@ ../amd64-sysv/longjmp.s
--- /dev/null
+++ b/lib/c/target/amd64-sysv/setjmp.s
@@ -1,0 +1,17 @@
+/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */
+
+ .file "setjmp.s"
+ .global setjmp
+setjmp:
+ mov %rbx,(%rdi) # rdi is jmp_buf, move registers onto it
+ mov %rbp,8(%rdi)
+ mov %r12,16(%rdi)
+ mov %r13,24(%rdi)
+ mov %r14,32(%rdi)
+ mov %r15,40(%rdi)
+ lea 8(%rsp),%rdx # this is our rsp WITHOUT current ret addr
+ mov %rdx,48(%rdi)
+ mov (%rsp),%rdx # save return addr ptr for new rip
+ mov %rdx,56(%rdi)
+ xor %rax,%rax # always return 0
+ ret
--- a/lib/c/target/common.mk
+++ /dev/null
@@ -1,15 +1,0 @@
-
-all: libc.a
-
-libc.a: $(OBJ)
- $(AR) $(ARFLAGS) $@ $?
- ranlib $@
-
-dep:
- gendep.sh $(OBJ)
-
-clean:
- rm -f *.o
-
-distclean: clean
- rm -f makefile
--- a/lib/c/target/i386-sysv-linux-elf/Makefile
+++ /dev/null
@@ -1,7 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../../..
-
-include $(PROJECTDIR)/rules.mk
-include ../objlst.mk
-include ../common.mk
--- a/lib/c/target/i386-sysv-linux-elf/gendep.sh
+++ /dev/null
@@ -1,16 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-(cat Makefile
-for i
-do
- cat <<EOF
-$i: ../../${i%.o}.c
- \$(CC) \$(TF_CFLAGS) ../../${i%.o}.c -c
-
-EOF
-done) > $$.mk && mv $$.mk makefile
--- /dev/null
+++ b/lib/c/target/i386-sysv-linux/Makefile
@@ -1,0 +1,9 @@
+.POSIX:
+
+PROJECTDIR = ../../../..
+
+include $(PROJECTDIR)/rules.mk
+include ../objlst.mk
+include ../common.mk
+
+SCC_CFLAGS = -nostdinc -I../../include -I../../include/bits/i386-sysv/
--- a/lib/c/target/objlst.mk
+++ /dev/null
@@ -1,22 +1,0 @@
-
-OBJ = bsearch.o qsort.o \
- abs.o __abs.o labs.o __labs.o llabs.o __llabs.o \
- perror.o strerror.o \
- tmpnam.o \
- sprintf.o snprintf.o vsprintf.o vsnprintf.o \
- printf.o fprintf.o vfprintf.o \
- fgets.o gets.of fgetc.o fputc.o getchar.o putchar.o \
- fputs.o puts.o fread.o fwrite.o \
- getc.o putc.o __putc.o __getc.o \
- rewind.o fseek.o ferror.o feof.o clearerr.o \
- setbuf.o setvbuf.o \
- fclose.o fopen.c freopen.c _fpopen.o stdio.o \
- realloc.o calloc.o malloc.o \
- __assert.o strcpy.o strcmp.o strlen.o strchr.o \
- strrchr.o strcat.o strncmp.o strncpy.o strncat.o strcoll.o \
- strxfrm.o strstr.o strspn.o strcspn.o strpbrk.o strtok.o \
- memset.o memcpy.o memmove.o memcmp.o memchr.o \
- isalnum.o isalpha.o isascii.o isblank.o iscntrl.o isdigit.o \
- isgraph.o islower.o isprint.o ispunct.o isspace.o isupper.o \
- isxdigit.o toupper.o tolower.o ctype.o setlocale.o \
- localeconv.o atoi.o atol.o atoll.o atexit.o abort.o exit.o
--- /dev/null
+++ b/lib/c/target/posix/geterrno.sh
@@ -1,0 +1,8 @@
+#!/bin/sh
+
+awk '/define[ ]*E/ && $3 ~ /[0-9]+/ && $3 > 0 {
+ sub(/\#define[ ]*/, "")
+ sub(/\/\*/, "")
+ sub(/\*\//, "")
+}' /usr/include/sys/errno.h
--- /dev/null
+++ b/lib/c/target/posix/linux.e
@@ -1,0 +1,131 @@
+EPERM 1 Operation not permitted
+ENOENT 2 No such file or directory
+ESRCH 3 No such process
+EINTR 4 Interrupted system call
+EIO 5 I/O error
+ENXIO 6 No such device or address
+E2BIG 7 Argument list too long
+ENOEXEC 8 Exec format error
+EBADF 9 Bad file number
+ECHILD 10 No child processes
+EAGAIN 11 Try again
+ENOMEM 12 Out of memory
+EACCES 13 Permission denied
+EFAULT 14 Bad address
+ENOTBLK 15 Block device required
+EBUSY 16 Device or resource busy
+EEXIST 17 File exists
+EXDEV 18 Cross-device link
+ENODEV 19 No such device
+ENOTDIR 20 Not a directory
+EISDIR 21 Is a directory
+EINVAL 22 Invalid argument
+ENFILE 23 File table overflow
+EMFILE 24 Too many open files
+ENOTTY 25 Not a typewriter
+ETXTBSY 26 Text file busy
+EFBIG 27 File too large
+ENOSPC 28 No space left on device
+ESPIPE 29 Illegal seek
+EROFS 30 Read-only file system
+EMLINK 31 Too many links
+EPIPE 32 Broken pipe
+EDOM 33 Math argument out of domain of func
+ERANGE 34 Math result not representable
+EDEADLK 35 Resource deadlock would occur
+ENAMETOOLONG 36 File name too long
+ENOLCK 37 No record locks available
+ENOSYS 38 Invalid system call number
+ENOTEMPTY 39 Directory not empty
+ELOOP 40 Too many symbolic links encountered
+ENOMSG 42 No message of desired type
+EIDRM 43 Identifier removed
+ECHRNG 44 Channel number out of range
+EL2NSYNC 45 Level 2 not synchronized
+EL3HLT 46 Level 3 halted
+EL3RST 47 Level 3 reset
+ELNRNG 48 Link number out of range
+EUNATCH 49 Protocol driver not attached
+ENOCSI 50 No CSI structure available
+EL2HLT 51 Level 2 halted
+EBADE 52 Invalid exchange
+EBADR 53 Invalid request descriptor
+EXFULL 54 Exchange full
+ENOANO 55 No anode
+EBADRQC 56 Invalid request code
+EBADSLT 57 Invalid slot
+EBFONT 59 Bad font file format
+ENOSTR 60 Device not a stream
+ENODATA 61 No data available
+ETIME 62 Timer expired
+ENOSR 63 Out of streams resources
+ENONET 64 Machine is not on the network
+ENOPKG 65 Package not installed
+EREMOTE 66 Object is remote
+ENOLINK 67 Link has been severed
+EADV 68 Advertise error
+ESRMNT 69 Srmount error
+ECOMM 70 Communication error on send
+EPROTO 71 Protocol error
+EMULTIHOP 72 Multihop attempted
+EDOTDOT 73 RFS specific error
+EBADMSG 74 Not a data message
+EOVERFLOW 75 Value too large for defined data type
+ENOTUNIQ 76 Name not unique on network
+EBADFD 77 File descriptor in bad state
+EREMCHG 78 Remote address changed
+ELIBACC 79 Can not access a needed shared library
+ELIBBAD 80 Accessing a corrupted shared library
+ELIBSCN 81 .lib section in a.out corrupted
+ELIBMAX 82 Attempting to link in too many shared libraries
+ELIBEXEC 83 Cannot exec a shared library directly
+EILSEQ 84 Illegal byte sequence
+ERESTART 85 Interrupted system call should be restarted
+ESTRPIPE 86 Streams pipe error
+EUSERS 87 Too many users
+ENOTSOCK 88 Socket operation on non-socket
+EDESTADDRREQ 89 Destination address required
+EMSGSIZE 90 Message too long
+EPROTOTYPE 91 Protocol wrong type for socket
+ENOPROTOOPT 92 Protocol not available
+EPROTONOSUPPORT 93 Protocol not supported
+ESOCKTNOSUPPORT 94 Socket type not supported
+EOPNOTSUPP 95 Operation not supported on transport endpoint
+EPFNOSUPPORT 96 Protocol family not supported
+EAFNOSUPPORT 97 Address family not supported by protocol
+EADDRINUSE 98 Address already in use
+EADDRNOTAVAIL 99 Cannot assign requested address
+ENETDOWN 100 Network is down
+ENETUNREACH 101 Network is unreachable
+ENETRESET 102 Network dropped connection because of reset
+ECONNABORTED 103 Software caused connection abort
+ECONNRESET 104 Connection reset by peer
+ENOBUFS 105 No buffer space available
+EISCONN 106 Transport endpoint is already connected
+ENOTCONN 107 Transport endpoint is not connected
+ESHUTDOWN 108 Cannot send after transport endpoint shutdown
+ETOOMANYREFS 109 Too many references: cannot splice
+ETIMEDOUT 110 Connection timed out
+ECONNREFUSED 111 Connection refused
+EHOSTDOWN 112 Host is down
+EHOSTUNREACH 113 No route to host
+EALREADY 114 Operation already in progress
+EINPROGRESS 115 Operation now in progress
+ESTALE 116 Stale file handle
+EUCLEAN 117 Structure needs cleaning
+ENOTNAM 118 Not a XENIX named type file
+ENAVAIL 119 No XENIX semaphores available
+EISNAM 120 Is a named type file
+EREMOTEIO 121 Remote I/O error
+EDQUOT 122 Quota exceeded
+ENOMEDIUM 123 No medium found
+EMEDIUMTYPE 124 Wrong medium type
+ECANCELED 125 Operation Canceled
+ENOKEY 126 Required key not available
+EKEYEXPIRED 127 Key has expired
+EKEYREVOKED 128 Key has been revoked
+EKEYREJECTED 129 Key was rejected by service
+EOWNERDEAD 130 Owner died
+ENOTRECOVERABLE 131 State not recoverable
+ERFKILL 132 Operation not possible due to RF-kill
+EHWPOISON 133 Memory page has hardware error
--- /dev/null
+++ b/lib/c/target/posix/netbsd.e
@@ -1,0 +1,98 @@
+EPERM 1 Operation not permitted
+ENOENT 2 No such file or directory
+ESRCH 3 No such process
+EINTR 4 Interrupted system call
+EIO 5 Input/output error
+ENXIO 6 Device not configured
+E2BIG 7 Argument list too long
+ENOEXEC 8 Exec format error
+EBADF 9 Bad file descriptor
+ECHILD 10 No child processes
+EDEADLK 11 Resource deadlock avoided
+ENOMEM 12 Cannot allocate memory
+EACCES 13 Permission denied
+EFAULT 14 Bad address
+ENOTBLK 15 Block device required
+EBUSY 16 Device busy
+EEXIST 17 File exists
+EXDEV 18 Cross-device link
+ENODEV 19 Operation not supported by device
+ENOTDIR 20 Not a directory
+EISDIR 21 Is a directory
+EINVAL 22 Invalid argument
+ENFILE 23 Too many open files in system
+EMFILE 24 Too many open files
+ENOTTY 25 Inappropriate ioctl for device
+ETXTBSY 26 Text file busy
+EFBIG 27 File too large
+ENOSPC 28 No space left on device
+ESPIPE 29 Illegal seek
+EROFS 30 Read-only file system
+EMLINK 31 Too many links
+EPIPE 32 Broken pipe
+EDOM 33 Numerical argument out of domain
+ERANGE 34 Result too large or too small
+EAGAIN 35 Resource temporarily unavailable
+EWOULDBLOCK EAGAIN Operation would block
+EINPROGRESS 36 Operation now in progress
+EALREADY 37 Operation already in progress
+ENOTSOCK 38 Socket operation on non-socket
+EDESTADDRREQ 39 Destination address required
+EMSGSIZE 40 Message too long
+EPROTOTYPE 41 Protocol wrong type for socket
+ENOPROTOOPT 42 Protocol option not available
+EPROTONOSUPPORT 43 Protocol not supported
+ESOCKTNOSUPPORT 44 Socket type not supported
+EOPNOTSUPP 45 Operation not supported
+EPFNOSUPPORT 46 Protocol family not supported
+EAFNOSUPPORT 47 Address family not supported by protocol family
+EADDRINUSE 48 Address already in use
+EADDRNOTAVAIL 49 Can't assign requested address
+ENETDOWN 50 Network is down
+ENETUNREACH 51 Network is unreachable
+ENETRESET 52 Network dropped connection on reset
+ECONNABORTED 53 Software caused connection abort
+ECONNRESET 54 Connection reset by peer
+ENOBUFS 55 No buffer space available
+EISCONN 56 Socket is already connected
+ENOTCONN 57 Socket is not connected
+ESHUTDOWN 58 Can't send after socket shutdown
+ETOOMANYREFS 59 Too many references: can't splice
+ETIMEDOUT 60 Operation timed out
+ECONNREFUSED 61 Connection refused
+ELOOP 62 Too many levels of symbolic links
+ENAMETOOLONG 63 File name too long
+EHOSTDOWN 64 Host is down
+EHOSTUNREACH 65 No route to host
+ENOTEMPTY 66 Directory not empty
+EPROCLIM 67 Too many processes
+EUSERS 68 Too many users
+EDQUOT 69 Disc quota exceeded
+ESTALE 70 Stale NFS file handle
+EREMOTE 71 Too many levels of remote in path
+EBADRPC 72 RPC struct is bad
+ERPCMISMATCH 73 RPC version wrong
+EPROGUNAVAIL 74 RPC prog. not avail
+EPROGMISMATCH 75 Program version wrong
+EPROCUNAVAIL 76 Bad procedure for program
+ENOLCK 77 No locks available
+ENOSYS 78 Function not implemented
+EFTYPE 79 Inappropriate file type or format
+EAUTH 80 Authentication error
+ENEEDAUTH 81 Need authenticator
+EIDRM 82 Identifier removed
+ENOMSG 83 No message of desired type
+EOVERFLOW 84 Value too large to be stored in data type
+EILSEQ 85 Illegal byte sequence
+ENOTSUP 86 Not supported
+ECANCELED 87 Operation canceled
+EBADMSG 88 Bad or Corrupt message
+ENODATA 89 No message available
+ENOSR 90 No STREAM resources
+ENOSTR 91 Not a STREAM
+ETIME 92 STREAM ioctl timeout
+ENOATTR 93 Attribute not found
+EMULTIHOP 94 Multihop attempted
+ENOLINK 95 Link has been severed
+EPROTO 96 Protocol error
+ELAST 96 Must equal largest errno
--- /dev/null
+++ b/lib/c/target/posix/objlst.mk
@@ -1,0 +1,6 @@
+
+raise.o: ../posix/raise.c ../../syscall.h
+ $(CC) $(SCC_CFLAGS) ../posix/raise.c -c
+
+signal.o: ../posix/signal.c ../../syscall.h
+ $(CC) $(SCC_CFLAGS) ../posix/signal.c -c
--- /dev/null
+++ b/lib/c/target/posix/openbsd.e
@@ -1,0 +1,96 @@
+EPERM 1 Operation not permitted
+ENOENT 2 No such file or directory
+ESRCH 3 No such process
+EINTR 4 Interrupted system call
+EIO 5 Input/output error
+ENXIO 6 Device not configured
+E2BIG 7 Argument list too long
+ENOEXEC 8 Exec format error
+EBADF 9 Bad file descriptor
+ECHILD 10 No child processes
+EDEADLK 11 Resource deadlock avoided
+ENOMEM 12 Cannot allocate memory
+EACCES 13 Permission denied
+EFAULT 14 Bad address
+ENOTBLK 15 Block device required
+EBUSY 16 Device busy
+EEXIST 17 File exists
+EXDEV 18 Cross-device link
+ENODEV 19 Operation not supported by device
+ENOTDIR 20 Not a directory
+EISDIR 21 Is a directory
+EINVAL 22 Invalid argument
+ENFILE 23 Too many open files in system
+EMFILE 24 Too many open files
+ENOTTY 25 Inappropriate ioctl for device
+ETXTBSY 26 Text file busy
+EFBIG 27 File too large
+ENOSPC 28 No space left on device
+ESPIPE 29 Illegal seek
+EROFS 30 Read-only file system
+EMLINK 31 Too many links
+EPIPE 32 Broken pipe
+EDOM 33 Numerical argument out of domain
+ERANGE 34 Result too large
+EAGAIN 35 Resource temporarily unavailable
+EINPROGRESS 36 Operation now in progress
+EALREADY 37 Operation already in progress
+ENOTSOCK 38 Socket operation on non-socket
+EDESTADDRREQ 39 Destination address required
+EMSGSIZE 40 Message too long
+EPROTOTYPE 41 Protocol wrong type for socket
+ENOPROTOOPT 42 Protocol not available
+EPROTONOSUPPORT 43 Protocol not supported
+ESOCKTNOSUPPORT 44 Socket type not supported
+EOPNOTSUPP 45 Operation not supported
+EPFNOSUPPORT 46 Protocol family not supported
+EAFNOSUPPORT 47 Address family not supported by protocol family
+EADDRINUSE 48 Address already in use
+EADDRNOTAVAIL 49 Can't assign requested address
+ENETDOWN 50 Network is down
+ENETUNREACH 51 Network is unreachable
+ENETRESET 52 Network dropped connection on reset
+ECONNABORTED 53 Software caused connection abort
+ECONNRESET 54 Connection reset by peer
+ENOBUFS 55 No buffer space available
+EISCONN 56 Socket is already connected
+ENOTCONN 57 Socket is not connected
+ESHUTDOWN 58 Can't send after socket shutdown
+ETOOMANYREFS 59 Too many references: can't splice
+ETIMEDOUT 60 Operation timed out
+ECONNREFUSED 61 Connection refused
+ELOOP 62 Too many levels of symbolic links
+ENAMETOOLONG 63 File name too long
+EHOSTDOWN 64 Host is down
+EHOSTUNREACH 65 No route to host
+ENOTEMPTY 66 Directory not empty
+EPROCLIM 67 Too many processes
+EUSERS 68 Too many users
+EDQUOT 69 Disk quota exceeded
+ESTALE 70 Stale NFS file handle
+EREMOTE 71 Too many levels of remote in path
+EBADRPC 72 RPC struct is bad
+ERPCMISMATCH 73 RPC version wrong
+EPROGUNAVAIL 74 RPC program not available
+EPROGMISMATCH 75 Program version wrong
+EPROCUNAVAIL 76 Bad procedure for program
+ENOLCK 77 No locks available
+ENOSYS 78 Function not implemented
+EFTYPE 79 Inappropriate file type or format
+EAUTH 80 Authentication error
+ENEEDAUTH 81 Need authenticator
+EIPSEC 82 IPsec processing failure
+ENOATTR 83 Attribute not found
+EILSEQ 84 Illegal byte sequence
+ENOMEDIUM 85 No medium found
+EMEDIUMTYPE 86 Wrong medium type
+EOVERFLOW 87 Value too large to be stored in data type
+ECANCELED 88 Operation canceled
+EIDRM 89 Identifier removed
+ENOMSG 90 No message of desired type
+ENOTSUP 91 Not supported
+EBADMSG 92 Bad message
+ENOTRECOVERABLE 93 State not recoverable
+EOWNERDEAD 94 Previous owner died
+EPROTO 95 Protocol error
+ELAST 95 Must be equal largest errno
--- /dev/null
+++ b/lib/c/target/posix/raise.c
@@ -1,0 +1,12 @@
+
+#include <stddef.h>
+#include <signal.h>
+#include <sys.h>
+
+#undef raise
+
+int
+raise(int signum)
+{
+ return _kill(_getpid(), signum);
+}
--- /dev/null
+++ b/lib/c/target/posix/signal.c
@@ -1,0 +1,21 @@
+
+#include <stddef.h>
+#include <signal.h>
+#include <sys.h>
+
+#include "../../syscall.h"
+
+#undef signal
+
+void
+(*signal(int signum, void (*func)(int)))(int)
+{
+ struct sigaction sa = {
+ .sa_handler = func,
+ };
+
+ if (_sigaction(signum, &sa, &sa) < 0)
+ return SIG_ERR;
+
+ return sa.sa_handler;
+}
--- /dev/null
+++ b/lib/c/target/script/amd64-sysv.sh
@@ -1,0 +1,15 @@
+#!/bin/sh
+
+#
+# This job is very easy because app and kernel ABI are identical
+# until the 4th parameter, so we only have to set the syscall
+# number in rax
+
+awk '/^#/ {next}
+ {name=$2 ".s"
+ printf ".global %s\n" \
+ "%s:\n" \
+ "\tmovq\t$%d,%%rax\n" \
+ "\tsyscall\n" \
+ "\tret\n", $2, $2, $1 > name
+ close(name)}' syscall.lst
--- /dev/null
+++ b/lib/c/target/script/common.mk
@@ -1,0 +1,38 @@
+SYSNAME = $(ARCH)-$(ABI)-$(SYS)
+SYSASM = $(SYSCALL:.o=.s)
+TARGET = $(LIBDIR)/$(SYSNAME)/libc.a
+INCLUDE = -I$(INCDIR) \
+ -I$(INCDIR)/bits/$(ARCH)-$(ABI) \
+ -I$(INCDIR)/bits/$(SYS) \
+ -I.
+SYSERRNO = $(INCDIR)/bits/$(SYS)/sys/errno.h
+OBJ = $(LIBOBJ) $(SYSOBJ) $(SYSCALL) $(ARCHOBJ)
+
+SCC_CFLAGS = $(MORECFLAGS) $(INCLUDE)
+
+all: $(TARGET)
+
+$(OBJ): $(SYSERRNO)
+
+$(SYSERRNO): $(SYSERRTBL)
+ trap "rm -f $$$$.tmp" 0 2 3 4; \
+ ../script/generrno.sh $(SYSERRTBL) > $$$$.tmp && mv $$$$.tmp $@
+
+_sys_errlist.c: $(SYSERRTBL) $(SYSERRNO)
+ trap "rm -f $$$$.tmp" 0 2 3 4; \
+ ../script/generrstr.sh $(SYSERRTBL) > $$$$.tmp && mv $$$$.tmp $@
+
+$(TARGET): $(OBJ)
+ $(AR) $(ARFLAGS) $@ $?
+ ranlib $@
+
+clean:
+ rm -f *.o *.a _sys_errlist.c $(SYSERRNO)
+ rm -f $(SYSASM)
+ rm -f $(TARGET)
+
+$(SYSASM): syscall.lst
+ ../script/amd64-sysv.sh
+
+dep:
+ ../script/syscall.sh
--- /dev/null
+++ b/lib/c/target/script/generrno.sh
@@ -1,0 +1,12 @@
+#!/bin/sh
+
+awk '
+/^E/ && $2 > 0 {
+ errno[$1] = $2
+}
+
+END {
+ for (i in errno)
+ print "#define", i, errno[i] | "sort -n -k3"
+ close("sort -n -k3")
+}' $@
--- /dev/null
+++ b/lib/c/target/script/generrstr.sh
@@ -1,0 +1,21 @@
+#!/bin/sh
+
+awk '
+/^E/ && $2 > 0 {
+ str = ""
+ for (i = 3; i <= NF; i++)
+ str = str " " $i
+ sub(/^ /, "", str)
+ errstr[$1] = str
+ if ($2 > max)
+ max = $2;
+}
+
+END {
+ print "#include <errno.h>\n"
+ print "char *_sys_errstr[] = {"
+ for (i in errstr)
+ printf "\t%-20.20s = \"%s\",\n", "[" i "]", errstr[i]
+ print "};"
+ print "int _sys_nerr =", $2 + 1 ";"
+}' $@
--- /dev/null
+++ b/lib/c/target/script/objlst.mk
@@ -1,0 +1,319 @@
+
+LIBOBJ = bsearch.o qsort.o \
+ abs.o __abs.o labs.o __labs.o llabs.o __llabs.o \
+ perror.o strerror.o \
+ tmpnam.o \
+ sprintf.o snprintf.o vsprintf.o vsnprintf.o \
+ printf.o fprintf.o vfprintf.o \
+ fgets.o gets.o fgetc.o fputc.o getchar.o putchar.o \
+ fputs.o puts.o fread.o fwrite.o \
+ getc.o putc.o __putc.o __getc.o \
+ rewind.o fseek.o ferror.o feof.o clearerr.o \
+ setbuf.o setvbuf.o \
+ fclose.o fopen.o freopen.o _fpopen.o _flsbuf.o stdio.o \
+ realloc.o calloc.o malloc.o \
+ __assert.o strcpy.o strcmp.o strlen.o strchr.o \
+ strrchr.o strcat.o strncmp.o strncpy.o strncat.o strcoll.o \
+ strxfrm.o strstr.o strspn.o strcspn.o strpbrk.o strtok.o \
+ memset.o memcpy.o memmove.o memcmp.o memchr.o \
+ isalnum.o isalpha.o isascii.o isblank.o iscntrl.o isdigit.o \
+ isgraph.o islower.o isprint.o ispunct.o isspace.o isupper.o \
+ isxdigit.o toupper.o tolower.o ctype.o setlocale.o \
+ localeconv.o atoi.o atol.o atoll.o atexit.o abort.o exit.o \
+ errno.o _sys_errlist.o strnlen.o wcsnlen.o
+
+#rules
+__abs.o: ../../__abs.c
+ $(CC) $(SCC_CFLAGS) ../../__abs.c -c
+
+__assert.o: ../../__assert.c
+ $(CC) $(SCC_CFLAGS) ../../__assert.c -c
+
+__getc.o: ../../__getc.c
+ $(CC) $(SCC_CFLAGS) ../../__getc.c -c
+
+__labs.o: ../../__labs.c
+ $(CC) $(SCC_CFLAGS) ../../__labs.c -c
+
+__llabs.o: ../../__llabs.c
+ $(CC) $(SCC_CFLAGS) ../../__llabs.c -c
+
+__putc.o: ../../__putc.c
+ $(CC) $(SCC_CFLAGS) ../../__putc.c -c
+
+_flsbuf.o: ../../_flsbuf.c
+ $(CC) $(SCC_CFLAGS) ../../_flsbuf.c -c
+
+_fpopen.o: ../../_fpopen.c
+ $(CC) $(SCC_CFLAGS) ../../_fpopen.c -c
+
+abort.o: ../../abort.c
+ $(CC) $(SCC_CFLAGS) ../../abort.c -c
+
+abs.o: ../../abs.c
+ $(CC) $(SCC_CFLAGS) ../../abs.c -c
+
+atexit.o: ../../atexit.c
+ $(CC) $(SCC_CFLAGS) ../../atexit.c -c
+
+atoi.o: ../../atoi.c
+ $(CC) $(SCC_CFLAGS) ../../atoi.c -c
+
+atol.o: ../../atol.c
+ $(CC) $(SCC_CFLAGS) ../../atol.c -c
+
+atoll.o: ../../atoll.c
+ $(CC) $(SCC_CFLAGS) ../../atoll.c -c
+
+bsearch.o: ../../bsearch.c
+ $(CC) $(SCC_CFLAGS) ../../bsearch.c -c
+
+calloc.o: ../../calloc.c
+ $(CC) $(SCC_CFLAGS) ../../calloc.c -c
+
+clearerr.o: ../../clearerr.c
+ $(CC) $(SCC_CFLAGS) ../../clearerr.c -c
+
+ctype.o: ../../ctype.c
+ $(CC) $(SCC_CFLAGS) ../../ctype.c -c
+
+errno.o: ../../errno.c
+ $(CC) $(SCC_CFLAGS) ../../errno.c -c
+
+exit.o: ../../exit.c
+ $(CC) $(SCC_CFLAGS) ../../exit.c -c
+
+fclose.o: ../../fclose.c
+ $(CC) $(SCC_CFLAGS) ../../fclose.c -c
+
+feof.o: ../../feof.c
+ $(CC) $(SCC_CFLAGS) ../../feof.c -c
+
+ferror.o: ../../ferror.c
+ $(CC) $(SCC_CFLAGS) ../../ferror.c -c
+
+fgetc.o: ../../fgetc.c
+ $(CC) $(SCC_CFLAGS) ../../fgetc.c -c
+
+fgets.o: ../../fgets.c
+ $(CC) $(SCC_CFLAGS) ../../fgets.c -c
+
+fopen.o: ../../fopen.c
+ $(CC) $(SCC_CFLAGS) ../../fopen.c -c
+
+fprintf.o: ../../fprintf.c
+ $(CC) $(SCC_CFLAGS) ../../fprintf.c -c
+
+fputc.o: ../../fputc.c
+ $(CC) $(SCC_CFLAGS) ../../fputc.c -c
+
+fputs.o: ../../fputs.c
+ $(CC) $(SCC_CFLAGS) ../../fputs.c -c
+
+fread.o: ../../fread.c
+ $(CC) $(SCC_CFLAGS) ../../fread.c -c
+
+freopen.o: ../../freopen.c
+ $(CC) $(SCC_CFLAGS) ../../freopen.c -c
+
+fseek.o: ../../fseek.c
+ $(CC) $(SCC_CFLAGS) ../../fseek.c -c
+
+fwrite.o: ../../fwrite.c
+ $(CC) $(SCC_CFLAGS) ../../fwrite.c -c
+
+getc.o: ../../getc.c
+ $(CC) $(SCC_CFLAGS) ../../getc.c -c
+
+getchar.o: ../../getchar.c
+ $(CC) $(SCC_CFLAGS) ../../getchar.c -c
+
+gets.o: ../../gets.c
+ $(CC) $(SCC_CFLAGS) ../../gets.c -c
+
+isalnum.o: ../../isalnum.c
+ $(CC) $(SCC_CFLAGS) ../../isalnum.c -c
+
+isalpha.o: ../../isalpha.c
+ $(CC) $(SCC_CFLAGS) ../../isalpha.c -c
+
+isascii.o: ../../isascii.c
+ $(CC) $(SCC_CFLAGS) ../../isascii.c -c
+
+isblank.o: ../../isblank.c
+ $(CC) $(SCC_CFLAGS) ../../isblank.c -c
+
+iscntrl.o: ../../iscntrl.c
+ $(CC) $(SCC_CFLAGS) ../../iscntrl.c -c
+
+isdigit.o: ../../isdigit.c
+ $(CC) $(SCC_CFLAGS) ../../isdigit.c -c
+
+isgraph.o: ../../isgraph.c
+ $(CC) $(SCC_CFLAGS) ../../isgraph.c -c
+
+islower.o: ../../islower.c
+ $(CC) $(SCC_CFLAGS) ../../islower.c -c
+
+isprint.o: ../../isprint.c
+ $(CC) $(SCC_CFLAGS) ../../isprint.c -c
+
+ispunct.o: ../../ispunct.c
+ $(CC) $(SCC_CFLAGS) ../../ispunct.c -c
+
+isspace.o: ../../isspace.c
+ $(CC) $(SCC_CFLAGS) ../../isspace.c -c
+
+isupper.o: ../../isupper.c
+ $(CC) $(SCC_CFLAGS) ../../isupper.c -c
+
+isxdigit.o: ../../isxdigit.c
+ $(CC) $(SCC_CFLAGS) ../../isxdigit.c -c
+
+labs.o: ../../labs.c
+ $(CC) $(SCC_CFLAGS) ../../labs.c -c
+
+llabs.o: ../../llabs.c
+ $(CC) $(SCC_CFLAGS) ../../llabs.c -c
+
+localeconv.o: ../../localeconv.c
+ $(CC) $(SCC_CFLAGS) ../../localeconv.c -c
+
+malloc.o: ../../malloc.c
+ $(CC) $(SCC_CFLAGS) ../../malloc.c -c
+
+memchr.o: ../../memchr.c
+ $(CC) $(SCC_CFLAGS) ../../memchr.c -c
+
+memcmp.o: ../../memcmp.c
+ $(CC) $(SCC_CFLAGS) ../../memcmp.c -c
+
+memcpy.o: ../../memcpy.c
+ $(CC) $(SCC_CFLAGS) ../../memcpy.c -c
+
+memmove.o: ../../memmove.c
+ $(CC) $(SCC_CFLAGS) ../../memmove.c -c
+
+memset.o: ../../memset.c
+ $(CC) $(SCC_CFLAGS) ../../memset.c -c
+
+perror.o: ../../perror.c
+ $(CC) $(SCC_CFLAGS) ../../perror.c -c
+
+printf.o: ../../printf.c
+ $(CC) $(SCC_CFLAGS) ../../printf.c -c
+
+putc.o: ../../putc.c
+ $(CC) $(SCC_CFLAGS) ../../putc.c -c
+
+putchar.o: ../../putchar.c
+ $(CC) $(SCC_CFLAGS) ../../putchar.c -c
+
+puts.o: ../../puts.c
+ $(CC) $(SCC_CFLAGS) ../../puts.c -c
+
+qsort.o: ../../qsort.c
+ $(CC) $(SCC_CFLAGS) ../../qsort.c -c
+
+rand.o: ../../rand.c
+ $(CC) $(SCC_CFLAGS) ../../rand.c -c
+
+realloc.o: ../../realloc.c
+ $(CC) $(SCC_CFLAGS) ../../realloc.c -c
+
+rewind.o: ../../rewind.c
+ $(CC) $(SCC_CFLAGS) ../../rewind.c -c
+
+setbuf.o: ../../setbuf.c
+ $(CC) $(SCC_CFLAGS) ../../setbuf.c -c
+
+setlocale.o: ../../setlocale.c
+ $(CC) $(SCC_CFLAGS) ../../setlocale.c -c
+
+setvbuf.o: ../../setvbuf.c
+ $(CC) $(SCC_CFLAGS) ../../setvbuf.c -c
+
+snprintf.o: ../../snprintf.c
+ $(CC) $(SCC_CFLAGS) ../../snprintf.c -c
+
+sprintf.o: ../../sprintf.c
+ $(CC) $(SCC_CFLAGS) ../../sprintf.c -c
+
+stdio.o: ../../stdio.c
+ $(CC) $(SCC_CFLAGS) ../../stdio.c -c
+
+strcat.o: ../../strcat.c
+ $(CC) $(SCC_CFLAGS) ../../strcat.c -c
+
+strchr.o: ../../strchr.c
+ $(CC) $(SCC_CFLAGS) ../../strchr.c -c
+
+strcmp.o: ../../strcmp.c
+ $(CC) $(SCC_CFLAGS) ../../strcmp.c -c
+
+strcoll.o: ../../strcoll.c
+ $(CC) $(SCC_CFLAGS) ../../strcoll.c -c
+
+strcpy.o: ../../strcpy.c
+ $(CC) $(SCC_CFLAGS) ../../strcpy.c -c
+
+strcspn.o: ../../strcspn.c
+ $(CC) $(SCC_CFLAGS) ../../strcspn.c -c
+
+strerror.o: ../../strerror.c
+ $(CC) $(SCC_CFLAGS) ../../strerror.c -c
+
+strlen.o: ../../strlen.c
+ $(CC) $(SCC_CFLAGS) ../../strlen.c -c
+
+strncat.o: ../../strncat.c
+ $(CC) $(SCC_CFLAGS) ../../strncat.c -c
+
+strncmp.o: ../../strncmp.c
+ $(CC) $(SCC_CFLAGS) ../../strncmp.c -c
+
+strncpy.o: ../../strncpy.c
+ $(CC) $(SCC_CFLAGS) ../../strncpy.c -c
+
+strnlen.o: ../../strnlen.c
+ $(CC) $(SCC_CFLAGS) ../../strnlen.c -c
+
+strpbrk.o: ../../strpbrk.c
+ $(CC) $(SCC_CFLAGS) ../../strpbrk.c -c
+
+strrchr.o: ../../strrchr.c
+ $(CC) $(SCC_CFLAGS) ../../strrchr.c -c
+
+strspn.o: ../../strspn.c
+ $(CC) $(SCC_CFLAGS) ../../strspn.c -c
+
+strstr.o: ../../strstr.c
+ $(CC) $(SCC_CFLAGS) ../../strstr.c -c
+
+strtok.o: ../../strtok.c
+ $(CC) $(SCC_CFLAGS) ../../strtok.c -c
+
+strxfrm.o: ../../strxfrm.c
+ $(CC) $(SCC_CFLAGS) ../../strxfrm.c -c
+
+tmpnam.o: ../../tmpnam.c
+ $(CC) $(SCC_CFLAGS) ../../tmpnam.c -c
+
+tolower.o: ../../tolower.c
+ $(CC) $(SCC_CFLAGS) ../../tolower.c -c
+
+toupper.o: ../../toupper.c
+ $(CC) $(SCC_CFLAGS) ../../toupper.c -c
+
+vfprintf.o: ../../vfprintf.c
+ $(CC) $(SCC_CFLAGS) ../../vfprintf.c -c
+
+vsnprintf.o: ../../vsnprintf.c
+ $(CC) $(SCC_CFLAGS) ../../vsnprintf.c -c
+
+vsprintf.o: ../../vsprintf.c
+ $(CC) $(SCC_CFLAGS) ../../vsprintf.c -c
+
+wcsnlen.o: ../../wcsnlen.c
+ $(CC) $(SCC_CFLAGS) ../../wcsnlen.c -c
+
--- /dev/null
+++ b/lib/c/target/script/objlst.sh
@@ -1,0 +1,20 @@
+#!/bin/sh
+
+set -e
+
+
+(cd ..
+echo H
+echo '/^#rules/+;$c'
+
+for i in *.c
+do
+ cat <<EOF
+${i%.c}.o: ../../$i
+ \$(CC) \$(SCC_CFLAGS) ../../$i -c
+
+EOF
+done
+
+echo .
+echo w) | ed -s script/objlst.mk
--- /dev/null
+++ b/lib/c/target/script/syscall.sh
@@ -1,0 +1,8 @@
+#!/bin/sh
+
+(echo '/SYS/c'
+ awk 'BEGIN {printf "SYSCALL = "}
+ ! /^#/ {printf "%s.o ", $2}
+ END {print ""}' syscall.lst
+ echo .
+ echo w) | ed -s syscall.mk
--- a/lib/c/target/z80-scc-none-none/Makefile
+++ /dev/null
@@ -1,7 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../../..
-
-include $(PROJECTDIR)/rules.mk
-include ../objlst.mk
-include ../common.mk
--- a/lib/c/target/z80-scc-none-none/gendep.sh
+++ /dev/null
@@ -1,16 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile
-trap "rm -f $$.mk" 0 2 3
-
-(cat Makefile
-for i
-do
- cat <<EOF
-$i: ../../${i%.o}.c
- \$(CC) \$(TF_CFLAGS) ../../${i%.o}.c -c
-
-EOF
-done) > $$.mk && mv $$.mk makefile
--- /dev/null
+++ b/lib/c/target/z80-scc-none/Makefile
@@ -1,0 +1,9 @@
+.POSIX:
+
+PROJECTDIR = ../../../..
+
+include $(PROJECTDIR)/rules.mk
+include ../objlst.mk
+include ../common.mk
+
+SCC_CFLAGS = -nostdinc -I../../include -I../../include/bits/z80-none/
--- a/lib/c/vfprintf.c
+++ b/lib/c/vfprintf.c
@@ -64,7 +64,7 @@
uval = (uintmax_t) va_arg(va, void *);
} else {
val = va_arg(va, int);
- uval = (unsigned) uval;
+ uval = (unsigned) val;
}
if ((flags & UNSIGNED) == 0 && val < 0) {
@@ -128,6 +128,7 @@
int left = 0, adjust;
size_t cnt = 0;
wchar_t wc;
+#if 0
if (width < 0) {
left = 1;
@@ -148,7 +149,7 @@
for ( ; adjust < 0; adjust--)
putc(' ', fp);
-
+#endif
return cnt;
}
--- a/lib/c/vsnprintf.c
+++ b/lib/c/vsnprintf.c
@@ -9,13 +9,13 @@
FILE f;
int r;
- f.flag = _IOWRT | _IOSTRG;
- f.size = siz;
+ f.flags = _IORW | _IOSTRG;
+ f.len = siz;
f.buf = s;
f.wp = s;
f.rp = s + siz;
- r = vfprintf(&f, fmt, va);
+ r = vfprintf(&f, fmt, ap);
if (s) {
if (f.wp == f.rp)
--f.wp;
--- a/lib/c/vsprintf.c
+++ b/lib/c/vsprintf.c
@@ -1,6 +1,7 @@
#include <limits.h>
#include <stdarg.h>
+#include <stdint.h>
#include <stdio.h>
#undef vsprintf
--- /dev/null
+++ b/lib/c/wcsnlen.c
@@ -1,0 +1,10 @@
+#include <stdio.h>
+#include <wchar.h>
+
+#undef wcsnlen
+
+size_t
+wcsnlen(const wchar_t *s, size_t maxlen)
+{
+ return 0;
+}
--- /dev/null
+++ b/lib/coff32/Makefile
@@ -1,0 +1,22 @@
+.POSIX:
+
+PROJECTDIR = ../..
+LIBCOFF32 = .
+include $(PROJECTDIR)/rules.mk
+include objlst.mk
+
+TARGET = $(LIBDIR)/libcoff32.a
+
+all: $(TARGET)
+
+$(TARGET): $(LIBCOFF32-OBJ)
+ $(AR) $(ARFLAGS) $@ $?
+ ranlib $@
+
+dep:
+ $(PROJECTDIR)/mkdep.sh
+
+clean:
+ rm -f *.o $(TARGET)
+
+include deps.mk
--- /dev/null
+++ b/lib/coff32/coff32_pack_aout.c
@@ -1,0 +1,10 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/aouthdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_pack_aout(packfun fun, unsigned char *buff, AOUTHDR *aout)
+{
+}
--- /dev/null
+++ b/lib/coff32/coff32_pack_ent.c
@@ -1,0 +1,21 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/syms.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_pack_ent(packfun fun, unsigned char *buff, SYMENT *ent)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "'8lsscc",
+ &ent->n_name,
+ &ent->n_value,
+ &ent->n_scnum,
+ &ent->n_type,
+ &ent->n_sclass,
+ &ent->n_numaux);
+ assert(n == SYMESZ);
+}
--- /dev/null
+++ b/lib/coff32/coff32_pack_hdr.c
@@ -1,0 +1,22 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/filehdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_pack_hdr(packfun fun, unsigned char *buff, FILHDR *hdr)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "sslllss",
+ hdr->f_magic,
+ hdr->f_nscns,
+ hdr->f_timdat,
+ hdr->f_symptr,
+ hdr->f_nsyms,
+ hdr->f_opthdr,
+ hdr->f_flags);
+ assert(n == FILHSZ);
+}
--- /dev/null
+++ b/lib/coff32/coff32_pack_scn.c
@@ -1,0 +1,25 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/scnhdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_pack_scn(packfun fun, unsigned char *buff, SCNHDR *scn)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "'8llllllssl",
+ scn->s_name,
+ scn->s_paddr,
+ scn->s_vaddr,
+ scn->s_size,
+ scn->s_scnptr,
+ scn->s_relptr,
+ scn->s_lnnoptr,
+ scn->s_nrelloc,
+ scn->s_nlnno,
+ scn->s_flags);
+ assert(n == SCNHSZ);
+}
--- /dev/null
+++ b/lib/coff32/coff32_unpack_aout.c
@@ -1,0 +1,10 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/aouthdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_unpack_aout(packfun fun, unsigned char *buff, AOUTHDR *ent)
+{
+}
--- /dev/null
+++ b/lib/coff32/coff32_unpack_ent.c
@@ -1,0 +1,21 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/syms.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_unpack_ent(packfun fun, unsigned char *buff, SYMENT *ent)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "'8lsscc",
+ &ent->n_name,
+ &ent->n_value,
+ &ent->n_scnum,
+ &ent->n_type,
+ &ent->n_sclass,
+ &ent->n_numaux);
+ assert(n == SYMESZ);
+}
--- /dev/null
+++ b/lib/coff32/coff32_unpack_hdr.c
@@ -1,0 +1,23 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/filehdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_unpack_hdr(packfun fun, unsigned char *buff, FILHDR *hdr)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "sslllss",
+ &hdr->f_magic,
+ &hdr->f_nscns,
+ &hdr->f_timdat,
+ &hdr->f_symptr,
+ &hdr->f_nsyms,
+ &hdr->f_opthdr,
+ &hdr->f_flags);
+ assert(n == FILHSZ);
+}
+
--- /dev/null
+++ b/lib/coff32/coff32_unpack_scn.c
@@ -1,0 +1,25 @@
+
+#include <assert.h>
+
+#include "../../inc/coff32/scnhdr.h"
+#include "../../inc/coff32/coff32.h"
+
+void
+coff32_unpack_scn(packfun fun, unsigned char *buff, SCNHDR *scn)
+{
+ int n;
+
+ n = (*fun)(buff,
+ "'8llllllssl",
+ scn->s_name,
+ &scn->s_paddr,
+ &scn->s_vaddr,
+ &scn->s_size,
+ &scn->s_scnptr,
+ &scn->s_relptr,
+ &scn->s_lnnoptr,
+ &scn->s_nrelloc,
+ &scn->s_nlnno,
+ &scn->s_flags);
+ assert(n == SCNHSZ);
+}
--- /dev/null
+++ b/lib/coff32/deps.mk
@@ -1,0 +1,17 @@
+#deps
+coff32_pack_aout.o: ../../inc/coff32/aouthdr.h
+coff32_pack_aout.o: ../../inc/coff32/coff32.h
+coff32_pack_ent.o: ../../inc/coff32/coff32.h
+coff32_pack_ent.o: ../../inc/coff32/syms.h
+coff32_pack_hdr.o: ../../inc/coff32/coff32.h
+coff32_pack_hdr.o: ../../inc/coff32/filehdr.h
+coff32_pack_scn.o: ../../inc/coff32/coff32.h
+coff32_pack_scn.o: ../../inc/coff32/scnhdr.h
+coff32_unpack_aout.o: ../../inc/coff32/aouthdr.h
+coff32_unpack_aout.o: ../../inc/coff32/coff32.h
+coff32_unpack_ent.o: ../../inc/coff32/coff32.h
+coff32_unpack_ent.o: ../../inc/coff32/syms.h
+coff32_unpack_hdr.o: ../../inc/coff32/coff32.h
+coff32_unpack_hdr.o: ../../inc/coff32/filehdr.h
+coff32_unpack_scn.o: ../../inc/coff32/coff32.h
+coff32_unpack_scn.o: ../../inc/coff32/scnhdr.h
--- /dev/null
+++ b/lib/coff32/libdep.mk
@@ -1,0 +1,4 @@
+include $(LIBCOFF32)/objlst.mk
+
+$(LIBDIR)/libcoff32.a: $(LIBCOFF32-OBJ)
+ +cd $(LIBCOFF32) && $(MAKE)
--- /dev/null
+++ b/lib/coff32/objlst.mk
@@ -1,0 +1,9 @@
+
+LIBCOFF32-OBJ = $(LIBCOFF32)/coff32_pack_hdr.o \
+ $(LIBCOFF32)/coff32_unpack_hdr.o \
+ $(LIBCOFF32)/coff32_pack_scn.o \
+ $(LIBCOFF32)/coff32_unpack_scn.o \
+ $(LIBCOFF32)/coff32_pack_aout.o \
+ $(LIBCOFF32)/coff32_unpack_aout.o \
+ $(LIBCOFF32)/coff32_pack_ent.o \
+ $(LIBCOFF32)/coff32_unpack_ent.o
--- a/lib/crt/Makefile
+++ b/lib/crt/Makefile
@@ -1,16 +1,14 @@
.POSIX:
PROJECTDIR = ../..
-
include $(PROJECTDIR)/rules.mk
-all:
+DIRS = amd64-sysv-linux amd64-sysv-openbsd amd64-sysv-netbsd
-dep:
- ./gendep.sh $(TARGETS)
+all: $(DIRS)
-clean:
- rm -f */crt.o
+$(DIRS): FORCE
+ @cd $@ && $(MAKE)
-distclean: clean
- rm -f makefile
+clean:
+ $(FORALL)
--- /dev/null
+++ b/lib/crt/amd64-sysv-linux/Makefile
@@ -1,0 +1,9 @@
+.POSIX:
+
+PROJECTDIR = ../../..
+include $(PROJECTDIR)/rules.mk
+
+CRT = $(LIBDIR)/amd64-sysv-linux/crt.o
+TARGETS = $(CRT)
+
+include ../common.mk
--- a/lib/crt/amd64-sysv-linux/crt.s
+++ b/lib/crt/amd64-sysv-linux/crt.s
@@ -5,4 +5,4 @@
_start:
call main
movl %eax, %edi
- call exit
+ jmp exit
--- /dev/null
+++ b/lib/crt/amd64-sysv-netbsd/Makefile
@@ -1,0 +1,9 @@
+.POSIX:
+
+PROJECTDIR = ../../..
+include $(PROJECTDIR)/rules.mk
+
+CRT = $(LIBDIR)/amd64-sysv-netbsd/crt.o
+TARGETS = $(CRT)
+
+include ../common.mk
--- /dev/null
+++ b/lib/crt/amd64-sysv-netbsd/crt.s
@@ -1,0 +1,17 @@
+ .file "crt.s"
+
+ .section .note.netbsd.ident
+ .long 7
+ .long 4
+ .long 1
+ .ascii "NetBSD\0"
+ .p2align 2
+ .long 200000000
+
+ .text
+ .align 8
+ .global _start
+_start:
+ call main
+ movl %eax, %edi
+ jmp exit
--- /dev/null
+++ b/lib/crt/amd64-sysv-openbsd/Makefile
@@ -1,0 +1,9 @@
+.POSIX:
+
+PROJECTDIR = ../../..
+include $(PROJECTDIR)/rules.mk
+
+CRT = $(LIBDIR)/amd64-sysv-openbsd/crt.o
+TARGETS = $(CRT)
+
+include ../common.mk
--- a/lib/crt/amd64-sysv-openbsd/crt.s
+++ b/lib/crt/amd64-sysv-openbsd/crt.s
@@ -15,9 +15,4 @@
_start:
call main
movl %eax, %edi
- call exit
-
- .data
- .global __guard_local
-__guard_local:
- .long 0
+ jmp exit
--- /dev/null
+++ b/lib/crt/common.mk
@@ -1,0 +1,8 @@
+all: $(TARGETS)
+
+$(CRT): crt.o
+ cp crt.o $@
+
+clean:
+ rm -f *.o
+ rm -f $(TARGETS)
--- a/lib/crt/gendep.sh
+++ /dev/null
@@ -1,25 +1,0 @@
-#!/bin/sh
-
-set -e
-
-rm -f makefile $$.tmp
-trap "rm -f $$.mk $$.tmp" 0 2 3
-
-re='\([^-]*\)-\([^-]*\)-\([^-]*\)-\([^-]*\)'
-
-echo $@ |
-tr ' ' '\n' |
-sed "s/$re/\1-\2-\3/" |
-sort -u |
-(cat Makefile
-echo
-while read i
-do
- cat <<EOF >> $$.tmp
- mkdir -p ../../rootdir/lib/scc/crt/$i
- cp $i/crt.o ../../rootdir/lib/scc/crt/$i/
-EOF
- echo all: $i/crt.o
-done
-echo all:
-cat $$.tmp) > $$.mk && mv $$.mk makefile
--- a/lib/scc/Makefile
+++ b/lib/scc/Makefile
@@ -1,23 +1,21 @@
-.POSIX:
PROJECTDIR = ../..
-LIBDIR = .
+LIBSCC = .
include $(PROJECTDIR)/rules.mk
include objlst.mk
-all: libscc.a
+TARGET = $(LIBDIR)/libscc.a
-$(LIB-OBJ): $(PROJECTDIR)/inc/scc.h
-$(LIBDIR)/wmyro.o: $(PROJECTDIR)/inc/myro.h
-$(LIBDIR)/rmyro.o: $(PROJECTDIR)/inc/myro.h
+all: $(TARGET)
-libscc.a: $(LIB-OBJ)
- ar $(ARFLAGS) $@ $?
+$(TARGET): $(LIBSCC-OBJ)
+ $(AR) $(ARFLAGS) $@ $?
ranlib $@
dep:
+ $(PROJECTDIR)/mkdep.sh
clean:
- rm -f *.o *.a
+ rm -f *.o $(LIBDIR)/libscc.a
-distclean: clean
+include deps.mk
--- a/lib/scc/bpack.c
+++ b/lib/scc/bpack.c
@@ -1,3 +1,5 @@
+
+#include <ctype.h>
#include <stdarg.h>
#include "../../inc/scc.h"
@@ -5,10 +7,12 @@
int
bpack(unsigned char *dst, char *fmt, ...)
{
- unsigned char *bp;
+ unsigned char *bp, *cp;
unsigned s;
unsigned long l;
unsigned long long q;
+ size_t n;
+ int d;
va_list va;
bp = dst;
@@ -15,6 +19,15 @@
va_start(va, fmt);
while (*fmt) {
switch (*fmt++) {
+ case '\'':
+ for (n = 0; isdigit(*fmt); n += d) {
+ n *= 10;
+ d = *fmt++ - '0';
+ }
+ cp = va_arg(va, unsigned char *);
+ while (n--)
+ *bp++ = *cp++;
+ break;
case 'c':
*bp++ = va_arg(va, unsigned);
break;
--- a/lib/scc/bunpack.c
+++ b/lib/scc/bunpack.c
@@ -26,7 +26,7 @@
n *= 10;
d = *fmt++ - '0';
}
- cp = va_arg(va, char *);
+ cp = va_arg(va, unsigned char *);
while (n--)
*cp++ = *bp++;
break;
--- /dev/null
+++ b/lib/scc/deps.mk
@@ -1,0 +1,18 @@
+#deps
+alloc.o: ../../inc/scc.h
+bpack.o: ../../inc/scc.h
+bunpack.o: ../../inc/scc.h
+casecmp.o: ../../inc/scc.h
+debug.o: ../../inc/scc.h
+die.o: ../../inc/scc.h
+lpack.o: ../../inc/scc.h
+lunpack.o: ../../inc/scc.h
+newitem.o: ../../inc/scc.h
+rmyro.o: ../../inc/myro.h
+rmyro.o: ../../inc/scc.h
+wmyro.o: ../../inc/myro.h
+wmyro.o: ../../inc/scc.h
+xcalloc.o: ../../inc/scc.h
+xmalloc.o: ../../inc/scc.h
+xrealloc.o: ../../inc/scc.h
+xstrdup.o: ../../inc/scc.h
--- a/lib/scc/libdep.mk
+++ b/lib/scc/libdep.mk
@@ -1,4 +1,4 @@
-include $(LIBDIR)/objlst.mk
+include $(LIBSCC)/objlst.mk
-$(LIBDIR)/libscc.a: $(LIB-OBJ)
- +cd $(LIBDIR) && $(MAKE)
+$(LIBDIR)/libscc.a: $(LIBSCC-OBJ)
+ +@cd $(LIBSCC) && $(MAKE)
--- a/lib/scc/lpack.c
+++ b/lib/scc/lpack.c
@@ -1,3 +1,5 @@
+
+#include <ctype.h>
#include <stdarg.h>
#include "../../inc/scc.h"
@@ -5,10 +7,12 @@
int
lpack(unsigned char *dst, char *fmt, ...)
{
- unsigned char *bp;
+ unsigned char *bp, *cp;
unsigned s;
unsigned long l;
unsigned long long q;
+ size_t n;
+ int d;
va_list va;
bp = dst;
@@ -15,6 +19,15 @@
va_start(va, fmt);
while (*fmt) {
switch (*fmt++) {
+ case '\'':
+ for (n = 0; isdigit(*fmt); n += d) {
+ n *= 10;
+ d = *fmt++ - '0';
+ }
+ cp = va_arg(va, unsigned char *);
+ while (n--)
+ *bp++ = *cp++;
+ break;
case 'c':
*bp++ = va_arg(va, unsigned);
break;
--- a/lib/scc/lunpack.c
+++ b/lib/scc/lunpack.c
@@ -26,7 +26,7 @@
n *= 10;
d = *fmt++ - '0';
}
- cp = va_arg(va, char *);
+ cp = va_arg(va, unsigned char *);
while (n--)
*cp++ = *bp++;
break;
--- a/lib/scc/objlst.mk
+++ b/lib/scc/objlst.mk
@@ -1,16 +1,16 @@
-LIB-OBJ = $(LIBDIR)/debug.o \
- $(LIBDIR)/die.o \
- $(LIBDIR)/newitem.o \
- $(LIBDIR)/xcalloc.o \
- $(LIBDIR)/xmalloc.o \
- $(LIBDIR)/xrealloc.o \
- $(LIBDIR)/xstrdup.o \
- $(LIBDIR)/alloc.o \
- $(LIBDIR)/casecmp.o \
- $(LIBDIR)/lunpack.o \
- $(LIBDIR)/lpack.o \
- $(LIBDIR)/bunpack.o \
- $(LIBDIR)/bpack.o \
- $(LIBDIR)/wmyro.o \
- $(LIBDIR)/rmyro.o \
+LIBSCC-OBJ = $(LIBSCC)/debug.o \
+ $(LIBSCC)/die.o \
+ $(LIBSCC)/newitem.o \
+ $(LIBSCC)/xcalloc.o \
+ $(LIBSCC)/xmalloc.o \
+ $(LIBSCC)/xrealloc.o \
+ $(LIBSCC)/xstrdup.o \
+ $(LIBSCC)/alloc.o \
+ $(LIBSCC)/casecmp.o \
+ $(LIBSCC)/lunpack.o \
+ $(LIBSCC)/lpack.o \
+ $(LIBSCC)/bunpack.o \
+ $(LIBSCC)/bpack.o \
+ $(LIBSCC)/wmyro.o \
+ $(LIBSCC)/rmyro.o \
--- a/lib/sys/Makefile
+++ /dev/null
@@ -1,14 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../..
-
-include $(PROJECTDIR)/rules.mk
-
-all clean distclean:
- +@pwd=$$PWD ;\
- for i in $(SYSS); \
- do \
- cd $$i; \
- $(MAKE) -e SYS=$i $@ ;\
- cd $$pwd; \
- done
--- a/lib/sys/abi/amd64-sysv.sh
+++ /dev/null
@@ -1,15 +1,0 @@
-#!/bin/sh
-
-#
-# This job is very easy because app and kernel ABI are identical
-# until the 4th parameter, so we only have to set the syscall
-# number in rax
-
-awk '/^#/ {next}
- {name=$2 ".s"
- printf ".global %s\n" \
- "%s:\n" \
- "\tmovq\t$%d,%%rax\n" \
- "\tsyscall\n" \
- "\tret\n", $2, $2, $1 > name
- close(name)}' syscall.lst
--- a/lib/sys/amd64-sysv-linux/Makefile
+++ /dev/null
@@ -1,4 +1,0 @@
-.POSIX:
-
-include ../common.mk
-ABI = amd64-sysv
--- a/lib/sys/amd64-sysv-linux/syscall.lst
+++ /dev/null
@@ -1,11 +1,0 @@
-#number name
-0 _read
-1 _write
-2 _open
-3 _close
-3 _lseek
-12 _brk
-13 _rt_sigaction
-38 _getpid
-60 _Exit
-32 _kill
--- a/lib/sys/common.mk
+++ /dev/null
@@ -1,14 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../..
-
-include $(PROJECTDIR)/rules.mk
-
-all clean distclean: system.mk
- +$(MAKE) ABI=$(ABI) -f ../libsys.mk $@
-
-system.mk: syscall.lst
- rm -f $@; trap "rm -f $$$$.mk" 0 2 3; \
- awk 'BEGIN{printf "OBJ = "} \
- ! /^#/ {printf "%s.o ", $$2}' syscall.lst > $$$$.mk && \
- mv $$$$.mk $@
--- a/lib/sys/i386-sysv-linux/Makefile
+++ /dev/null
@@ -1,3 +1,0 @@
-.POSIX:
-
-include ../Makefile.sys
--- a/lib/sys/libsys.mk
+++ /dev/null
@@ -1,25 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../../..
-
-include $(PROJECTDIR)/rules.mk
-include system.mk
-
-ASM = $(OBJ:.o=.s)
-
-all: libsys.a
-
-libsys.a: $(OBJ)
- $(AR) $(ARFLAGS) $@ $?
- ranlib $@
-
-$(ASM): syscall.lst
- ../abi/$(ABI).sh
-
-clean:
- rm -f $(ASM)
- rm -f $(OBJ)
- rm -f libsys.a
-
-distclean: clean
- rm -f system.mk
--- a/lib/sys/qbe-linux/Makefile
+++ /dev/null
@@ -1,4 +1,0 @@
-.POSIX:
-
-include ../common.mk
-ABI=amd64-sysv
--- a/lib/sys/qbe-linux/syscall.lst
+++ /dev/null
@@ -1,11 +1,0 @@
-#number name
-0 _read
-1 _write
-2 _open
-3 _close
-3 _lseek
-12 _brk
-13 _rt_sigaction
-38 _getpid
-60 _Exit
-32 _kill
--- a/lib/sys/z80-linux/Makefile
+++ /dev/null
@@ -1,3 +1,0 @@
-.POSIX:
-
-include ../Makefile.sys
--- a/mkdep.sh
+++ b/mkdep.sh
@@ -1,11 +1,19 @@
#!/bin/sh
set -e
-trap "rm -f $$.tmp" 0 2 3
-(sed '/^#deps/q' Makefile
-for i in *.c
+(echo '/^#deps/+;$c'
+
+for i in `find . -name '*.c'`
do
- sed -n '/#include "/ s/#include "\(.*\)"/'$i': \1/p' $i
+ file=`basename $i | sed 's/\.c$/.o/'`
+
+ dir=`dirname $i |
+ sed -e 's,^\./,,' -e 's,^\.$,,' -e 's,...*[^/],&/,'`
+
+ sed -n "/#include \"/ s,#include \"\(.*\)\",$dir$file: $dir\1,p" $i
done |
-sort) > $$.tmp && mv $$.tmp Makefile
+LC_ALL=C sort -s
+
+echo .
+echo w) | ed -s deps.mk
--- a/nm/Makefile
+++ b/nm/Makefile
@@ -2,14 +2,13 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
OBJ = main.o coff32.o formats.o
-all: nm
- cp nm $(PROJECTDIR)/rootdir/bin/nm
+all: $(BINDIR)/nm
-nm: $(OBJ) $(LIBDIR)/libscc.a
+$(BINDIR)/nm: $(OBJ) $(LIBDIR)/libscc.a
$(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
dep:
@@ -16,18 +15,8 @@
$(PROJECTDIR)/mkdep.sh
clean:
- rm -f nm *.o
+ rm -f $(BINDIR)/nm *.o
distclean: clean
-#deps
-coff32.c: ../inc/coff32/filehdr.h
-coff32.c: ../inc/coff32/scnhdr.h
-coff32.c: ../inc/coff32/syms.h
-coff32.c: ../inc/scc.h
-coff32.c: nm.h
-formats.c: nm.h
-main.c: ../inc/arg.h
-main.c: ../inc/ar.h
-main.c: ../inc/scc.h
-main.c: nm.h
+include deps.mk
--- a/nm/coff32.c
+++ b/nm/coff32.c
@@ -30,7 +30,7 @@
switch (ent->n_scnum) {
case N_DEBUG:
- c = '?';
+ c = 'n';
break;
case N_ABS:
c = 'a';
@@ -251,9 +251,9 @@
long pos = ftell(fp);
if (fread(buff, FILHSZ, 1, fp) != 1) {
- if (ferror(fp))
- die("nm: %s: %s", fname, strerror(errno));
- die("nm: %s: corrupted file", fname);
+ if (!ferror(fp))
+ return 0;
+ die("nm: %s: %s", fname, strerror(errno));
}
getfhdr(buff, &hdr);
@@ -297,6 +297,7 @@
magic = c1 | c2 << 8;
switch (magic) {
+ case COFF_I386MAGIC:
case COFF_Z80MAGIC:
unpack = lunpack;
return 1;
--- /dev/null
+++ b/nm/deps.mk
@@ -1,0 +1,12 @@
+
+#deps
+coff32.o: ../inc/coff32/filehdr.h
+coff32.o: ../inc/coff32/scnhdr.h
+coff32.o: ../inc/coff32/syms.h
+coff32.o: ../inc/scc.h
+coff32.o: nm.h
+formats.o: nm.h
+main.o: ../inc/ar.h
+main.o: ../inc/arg.h
+main.o: ../inc/scc.h
+main.o: nm.h
--- a/objdump/Makefile
+++ b/objdump/Makefile
@@ -2,19 +2,19 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-include $(LIBDIR)/libdep.mk
+include $(LIBSCC)/libdep.mk
OBJ = main.o
-all: objdump
+all: $(BINDIR)/objdump
-objdump: $(OBJ) $(LIBDIR)/libscc.a
+$(BINDIR)/objdump: $(OBJ) $(LIBDIR)/libscc.a
$(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
-main.o: $(PROJECTDIR)/inc/scc.h $(PROJECTDIR)/inc/myro.h $(PROJECTDIR)/inc/arg.h
-
dep:
+ $(PROJECTDIR)/mkdep.sh
+
clean:
- rm -f objdump *.o
+ rm -f $(BINDIR)/objdump *.o
-distclean: clean
+include deps.mk
--- /dev/null
+++ b/objdump/deps.mk
@@ -1,0 +1,4 @@
+#deps
+main.o: ../inc/arg.h
+main.o: ../inc/myro.h
+main.o: ../inc/scc.h
--- /dev/null
+++ b/rootdir/bin/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/include/scc/assert.h
@@ -1,0 +1,9 @@
+
+extern void __assert(char *exp, char *file, long line);
+
+#undef assert
+#ifndef NDEBUG
+# define assert(exp) ((exp) ? (void) 0 : __assert(#exp, __FILE__, __LINE__))
+#else
+# define assert(exp) ((void)0)
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/.gitignore
@@ -1,0 +1,1 @@
+errno.h
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/limits.h
@@ -1,0 +1,18 @@
+#define CHAR_BIT 8
+#define SCHAR_MAX 0x7F
+#define SCHAR_MIN (-SCHAR_MAX-1)
+#define CHAR_MAX 0x7F
+#define CHAR_MIN (-CHAR_MAX-1)
+#define UCHAR_MAX 0xFF
+#define SHRT_MAX 0x7FFF
+#define SHRT_MIN (-SHRT_MAX-1)
+#define USHRT_MAX 0xFFFF
+#define INT_MAX 0x7FFFFFFF
+#define INT_MIN (-INT_MAX-1)
+#define UINT_MAX 0xFFFFFFFF
+#define LONG_MAX 0x7FFFFFFFFFFFFFFF
+#define LONG_MIN (-LONG_MAX-1)
+#define ULONG_MAX 0xFFFFFFFFFFFFFFFF
+#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
+#define LLONG_MIN (-LLONG_MAX-1)
+#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/setjmp.h
@@ -1,0 +1,1 @@
+typedef unsigned long long jmp_buf[8];
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/stddef.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#ifndef _WCHAR_T
+typedef int wchar_t;
+#define _WCHAR_T
+#endif
+
+#ifndef _PTRDIFF_T
+typedef long ptrdiff_t;
+#define _PTRDIFF_T
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/stdint.h
@@ -1,0 +1,115 @@
+#define INT8_MAX 0x7F
+#define INT8_MIN (-INT8_MAX-1)
+#define UINT8_MAX 0xFF
+
+#define INT16_MAX 0x7FFF
+#define INT16_MIN (-INT16_MAX-1)
+#define UINT16_MAX 0xFFFF
+
+#define INT32_MAX 0x7FFFFFFF
+#define INT32_MIN (-INT32_MAX-1)
+#define UINT32_MAX 0xFFFFFFFF
+
+#define INT64_MAX 0x7FFFFFFFFFFFFFFF
+#define INT64_MIN (-INT64_MAX-1)
+#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
+
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST8_MAX INT8_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST16_MAX INT16_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST32_MAX INT32_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+
+#define INT_LEAST64_MIN INT64_MIN
+#define INT_LEAST64_MAX INT64_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+#define INT_FAST8_MIN INT32_MIN
+#define INT_FAST8_MAX INT32_MAX
+#define UINT_FAST8_MAX UINT32_MAX
+
+#define INT_FAST16_MIN INT32_MIN
+#define INT_FAST16_MAX INT32_MAX
+#define UINT_FAST16_MAX UINT32_MAX
+
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST32_MAX INT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INT_FAST64_MIN INT64_MIN
+#define INT_FAST64_MAX INT64_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+#define INTPTR_MIN INT64_MIN
+#define INTPTR_MAX INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+#define PTRDIFF_MIN INT64_MIN
+#define PTRDIFF_MAX INT64_MAX
+
+#define SIG_ATOMIC_MIN INT32_MIN
+#define SIG_ATOMIC_MAX INT32_MAX
+
+#define SIZE_MAX UINT64_MAX
+
+#define WCHAR_MIN INT32_MIN
+#define WCHAR_MAX INT32_MAX
+
+#define INT8_C(x) x
+#define INT16_C(x) x
+#define INT32_C(x) x
+#define INT64_C(x) x ## L
+
+#define UINT8_C(x) x
+#define UINT16_C(x) x
+#define UINT32_C(x) x ## U
+#define UINT64_C(x) x ## UL
+
+#define INTMAX_C(x) x ## L
+#define UINTMAX_C(x) x ## UL
+
+typedef signed char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+typedef long int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned uint32_t;
+typedef unsigned long uint64_t;
+
+typedef signed char int8_least_t;
+typedef short int16_least_t;
+typedef int int32_least_t;
+typedef long int64_least_t;
+
+typedef unsigned char uint8_least_t;
+typedef unsigned short uint16_least_t;
+typedef unsigned uint32_least_t;
+typedef unsigned long uint64_least_t;
+
+typedef int int8_fast_t;
+typedef int int16_fast_t;
+typedef int int32_fast_t;
+typedef long int64_fast_t;
+
+typedef unsigned uint8_fast_t;
+typedef unsigned uint16_fast_t;
+typedef unsigned uint32_fast_t;
+typedef unsigned long uint64_fast_t;
+
+typedef long intptr_t;
+typedef unsigned long uintptr_t;
+
+typedef long intmax_t;
+typedef unsigned long uintmax_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/stdio.h
@@ -1,0 +1,15 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#define BUFSIZ 512
+#define FILENAME_MAX 256
+#define FOPEN_MAX 16
+
+#define TMP_MAX 25
+#define L_tmpnam 256
+
+#define _TMPNAME "/tmp/tmp.0000000"
+
+typedef int fpos_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/stdlib.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#ifndef _WCHAR_T
+typedef int wchar_t;
+#define _WCHAR_T
+#endif
+
+#define _ALIGNTYPE long double
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/string.h
@@ -1,0 +1,3 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/amd64-sysv/arch/time.h
@@ -1,0 +1,6 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+typedef long int time_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/limits.h
@@ -1,0 +1,18 @@
+#define CHAR_BIT 8
+#define SCHAR_MAX 0x7F
+#define SCHAR_MIN (-SCHAR_MIN-1)
+#define CHAR_MAX 0x7F
+#define CHAR_MIN (-CHAR_MAX-1)
+#define UCHAR_MAX 0xFF
+#define SHRT_MAX 0x7FFF
+#define SHRT_MIN (-SHRT_MAX-1)
+#define USHRT_MAX 0xFFFF
+#define INT_MAX 0x7FFFFFFF
+#define INT_MIN (-INT_MAX-1)
+#define UINT_MAX 0xFFFFFFFF
+#define LONG_MAX 0x7FFFFFFF
+#define LONG_MIN (-LONG_MAX-1)
+#define ULONG_MAX 0xFFFFFFFF
+#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
+#define LLONG_MIN (-LLONG_MAX-1)
+#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/stddef.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#ifndef _WCHAR_T
+typedef int wchar_t;
+#define _WCHAR_T
+#endif
+
+#ifndef _PTRDIFF_T
+typedef long ptrdiff_t;
+#define _PTRDIFF_T
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/stdint.h
@@ -1,0 +1,115 @@
+#define INT8_MAX 0x7F
+#define INT8_MIN (-INT8_MAX-1)
+#define UINT8_MAX 0xFF
+
+#define INT16_MAX 0x7FFF
+#define INT16_MIN (-INT16_MAX-1)
+#define UINT16_MAX 0xFFFF
+
+#define INT32_MAX 0x7FFFFFFF
+#define INT32_MIN (-INT32_MAX-1)
+#define UINT32_MAX 0xFFFFFFFF
+
+#define INT64_MAX 0x7FFFFFFFFFFFFFFF
+#define INT64_MIN (-INT64_MAX-1)
+#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
+
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST8_MAX INT8_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST16_MAX INT16_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST32_MAX INT32_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+
+#define INT_LEAST64_MIN INT64_MIN
+#define INT_LEAST64_MAX INT64_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+#define INT_FAST8_MIN INT32_MIN
+#define INT_FAST8_MAX INT32_MAX
+#define UINT_FAST8_MAX UINT32_MAX
+
+#define INT_FAST16_MIN INT32_MIN
+#define INT_FAST16_MAX INT32_MAX
+#define UINT_FAST16_MAX UINT32_MAX
+
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST32_MAX INT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INT_FAST64_MIN INT64_MIN
+#define INT_FAST64_MAX INT64_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+#define INTPTR_MIN INT32_MIN
+#define INTPTR_MAX INT32_MAX
+#define UINTPTR_MAX UINT32_MAX
+
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+#define PTRDIFF_MIN INT32_MIN
+#define PTRDIFF_MAX INT32_MAX
+
+#define SIG_ATOMIC_MIN INT32_MIN
+#define SIG_ATOMIC_MAX INT32_MAX
+
+#define SIZE_MAX UINT32_MAX
+
+#define WCHAR_MIN INT32_MIN
+#define WCHAR_MAX INT32_MAX
+
+#define INT8_C(x) x
+#define INT16_C(x) x
+#define INT32_C(x) x
+#define INT64_C(x) x ## LL
+
+#define UINT8_C(x) x
+#define UINT16_C(x) x
+#define UINT32_C(x) x ## U
+#define UINT64_C(x) x ## ULL
+
+#define INTMAX_C(x) x ## LL
+#define UINTMAX_C(x) x ## ULL
+
+typedef signed char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+typedef long long int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned uint32_t;
+typedef unsigned long long uint64_t;
+
+typedef signed char int8_least_t;
+typedef short int16_least_t;
+typedef int int32_least_t;
+typedef long long int64_least_t;
+
+typedef unsigned char uint8_least_t;
+typedef unsigned short uint16_least_t;
+typedef unsigned uint32_least_t;
+typedef unsigned long long uint64_least_t;
+
+typedef int int8_fast_t;
+typedef int int16_fast_t;
+typedef int int32_fast_t;
+typedef long long int64_fast_t;
+
+typedef unsigned uint8_fast_t;
+typedef unsigned uint16_fast_t;
+typedef unsigned uint32_fast_t;
+typedef unsigned long long uint64_fast_t;
+
+typedef int intptr_t;
+typedef unsigned uintptr_t;
+
+typedef long long intmax_t;
+typedef unsigned long long uintmax_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/stdio.h
@@ -1,0 +1,15 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#define BUFSIZ 512
+#define FILENAME_MAX 256
+#define FOPEN_MAX 16
+
+#define TMP_MAX 25
+#define L_tmpnam 256
+
+#define _TMPNAME "/tmp/tmp.0000000"
+
+typedef long fpos_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/stdlib.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#ifndef _WCHAR_T
+typedef int wchar_t;
+#define _WCHAR_T
+#endif
+
+#define _ALIGNTYPE long double
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/string.h
@@ -1,0 +1,3 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/i386-sysv/arch/time.h
@@ -1,0 +1,6 @@
+#ifndef _SIZET
+typedef unsigned long size_t;
+#define _SIZET
+#endif
+
+typedef long int time_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/linux/sys/signal.h
@@ -1,0 +1,27 @@
+typedef int sig_atomic_t;
+
+#define SIG_ERR ((void (*)(int))-1)
+#define SIG_DFL ((void (*)(int)) 0)
+#define SIG_IGN ((void (*)(int)) 1)
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGABRT 6
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGUSR1 10
+#define SIGSEGV 11
+#define SIGUSR2 12
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGSSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+
+#define __NR_SIGNALS 23
--- /dev/null
+++ b/rootdir/include/scc/bits/netbsd/sys/signal.h
@@ -1,0 +1,27 @@
+typedef int sig_atomic_t;
+
+#define SIG_ERR ((void (*)(int))-1)
+#define SIG_DFL ((void (*)(int)) 0)
+#define SIG_IGN ((void (*)(int)) 1)
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGABRT 6
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGUSR1 10
+#define SIGSEGV 11
+#define SIGUSR2 12
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGSSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+
+#define __NR_SIGNALS 23
--- /dev/null
+++ b/rootdir/include/scc/bits/openbsd/sys/signal.h
@@ -1,0 +1,27 @@
+typedef int sig_atomic_t;
+
+#define SIG_ERR ((void (*)(int))-1)
+#define SIG_DFL ((void (*)(int)) 0)
+#define SIG_IGN ((void (*)(int)) 1)
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGABRT 6
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGUSR1 10
+#define SIGSEGV 11
+#define SIGUSR2 12
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGSSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+
+#define __NR_SIGNALS 23
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/limits.h
@@ -1,0 +1,18 @@
+#define CHAR_BIT 8
+#define SCHAR_MAX 0x7F
+#define SCHAR_MIN (-SCHAR_MIN-1)
+#define CHAR_MAX 0xFF
+#define CHAR_MIN 0
+#define UCHAR_MAX 0xFF
+#define SHRT_MAX 0x7FFF
+#define SHRT_MIN (-SHRT_MAX-1)
+#define USHRT_MAX 0xFFFF
+#define INT_MAX 0x7FFF
+#define INT_MIN (-INT_MAX-1)
+#define UINT_MAX 0xFFFF
+#define LONG_MAX 0x7FFFFFFF
+#define LONG_MIN (-LONG_MAX-1)
+#define ULONG_MAX 0xFFFFFFFF
+#define LLONG_MAX 0x7FFFFFFFFFFFFFFF
+#define LLONG_MIN (-LLONG_MAX-1)
+#define ULLONG_MAX 0xFFFFFFFFFFFFFFFF
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/stddef.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned size_t;
+#define _SIZET
+#endif
+
+#ifndef _WCHAR_T
+typedef short wchar_t;
+#define _WCHAR_T
+#endif
+
+#ifndef _PTRDIFF_T
+typedef short ptrdiff_t;
+#define _PTRDIFF_T
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/stdint.h
@@ -1,0 +1,115 @@
+#define INT8_MAX 0x7F
+#define INT8_MIN (-INT8_MAX-1)
+#define UINT8_MAX 0xFF
+
+#define INT16_MAX 0x7FFF
+#define INT16_MIN (-INT16_MAX-1)
+#define UINT16_MAX 0xFFFF
+
+#define INT32_MAX 0x7FFFFFFF
+#define INT32_MIN (-INT32_MAX-1)
+#define UINT32_MAX 0xFFFFFFFF
+
+#define INT64_MAX 0x7FFFFFFFFFFFFFFF
+#define INT64_MIN (-INT64_MAX-1)
+#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
+
+#define INT_LEAST8_MIN INT8_MIN
+#define INT_LEAST8_MAX INT8_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+
+#define INT_LEAST16_MIN INT16_MIN
+#define INT_LEAST16_MAX INT16_MAX
+#define UINT_LEAST16_MAX UINT16_MAX
+
+#define INT_LEAST32_MIN INT32_MIN
+#define INT_LEAST32_MAX INT32_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+
+#define INT_LEAST64_MIN INT64_MIN
+#define INT_LEAST64_MAX INT64_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+#define INT_FAST8_MIN INT16_MIN
+#define INT_FAST8_MAX INT16_MAX
+#define UINT_FAST8_MAX UINT16_MAX
+
+#define INT_FAST16_MIN INT16_MIN
+#define INT_FAST16_MAX INT16_MAX
+#define UINT_FAST16_MAX UINT16_MAX
+
+#define INT_FAST32_MIN INT32_MIN
+#define INT_FAST32_MAX INT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INT_FAST64_MIN INT64_MIN
+#define INT_FAST64_MAX INT64_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+#define INTPTR_MIN INT16_MIN
+#define INTPTR_MAX INT16_MAX
+#define UINTPTR_MAX UINT16_MAX
+
+#define INTMAX_MIN INT64_MIN
+#define INTMAX_MAX INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+#define PTRDIFF_MIN INT16_MIN
+#define PTRDIFF_MAX INT16_MAX
+
+#define SIG_ATOMIC_MIN INT16_MIN
+#define SIG_ATOMIC_MAX INT16_MAX
+
+#define SIZE_MAX UINT64_MAX
+
+#define WCHAR_MIN INT16_MIN
+#define WCHAR_MAX INT16_MAX
+
+#define INT8_C(x) x
+#define INT16_C(x) x
+#define INT32_C(x) x ## L
+#define INT64_C(x) x ## LL
+
+#define UINT8_C(x) x
+#define UINT16_C(x) x ## U
+#define UINT32_C(x) x ## UL
+#define UINT64_C(x) x ## ULL
+
+#define INTMAX_C(x) x ## LL
+#define UINTMAX_C(x) x ## ULL
+
+typedef signed char int8_t;
+typedef int int16_t;
+typedef long int32_t;
+typedef long long int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned uint16_t;
+typedef unsigned long uint32_t;
+typedef unsigned long long uint64_t;
+
+typedef signed char int8_least_t;
+typedef int int16_least_t;
+typedef long int32_least_t;
+typedef long long int64_least_t;
+
+typedef unsigned char uint8_least_t;
+typedef unsigned uint16_least_t;
+typedef unsigned long uint32_least_t;
+typedef unsigned long long uint64_least_t;
+
+typedef signed char int8_fast_t;
+typedef int int16_fast_t;
+typedef long int32_fast_t;
+typedef long long int64_fast_t;
+
+typedef unsigned char uint8_fast_t;
+typedef unsigned uint16_fast_t;
+typedef unsigned long uint32_fast_t;
+typedef unsigned long long uint64_fast_t;
+
+typedef int intptr_t;
+typedef unsigned uintptr_t;
+
+typedef long long intmax_t;
+typedef unsigned long long uintmax_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/stdio.h
@@ -1,0 +1,15 @@
+#ifndef _SIZET
+typedef unsigned size_t;
+#define _SIZET
+#endif
+
+#define BUFSIZ 512
+#define FILENAME_MAX 256
+#define FOPEN_MAX 16
+
+#define TMP_MAX 25
+#define L_tmpnam 256
+
+#define _TMPNAME "TMP.000"
+
+typedef long fpos_t;
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/stdlib.h
@@ -1,0 +1,14 @@
+#ifndef _SIZET
+typedef unsigned size_t;
+#define _SIZET
+#endif
+
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+
+#ifndef _WCHAR_T
+typedef short wchar_t;
+#define _WCHAR_T
+#endif
+
+#define _ALIGNTYPE int
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/string.h
@@ -1,0 +1,3 @@
+#ifndef _SIZET
+typedef unsigned size_t;
+#endif
--- /dev/null
+++ b/rootdir/include/scc/bits/z80-dos/arch/time.h
@@ -1,0 +1,6 @@
+#ifndef _SIZET
+typedef unsigned size_t;
+#define _SIZET
+#endif
+
+typedef long time_t;
--- /dev/null
+++ b/rootdir/include/scc/ctype.h
@@ -1,0 +1,52 @@
+#ifndef _CTYPE_H
+#define _CTYPE_H
+
+extern int isalnum(int c);
+extern int isalpha(int c);
+extern int islower(int c);
+extern int isupper(int c);
+extern int isdigit(int c);
+extern int isxdigit(int c);
+extern int iscntrl(int c);
+extern int isgraph(int c);
+extern int isspace(int c);
+extern int isblank(int c);
+extern int isprint(int c);
+extern int ispunct(int c);
+extern int tolower(int c);
+extern int toupper(int c);
+
+#ifdef __USE_MACROS
+
+#define _U 0x01 /* upper */
+#define _L 0x02 /* lower */
+#define _D 0x04 /* digit */
+#define _C 0x08 /* cntrl */
+#define _P 0x10 /* punct */
+#define _S 0x20 /* white space (space/lf/tab) */
+#define _X 0x40 /* hex char */
+#define _SP 0x80 /* hard space (0x20) */
+
+extern unsigned char __ctype[];
+extern int __ctmp;
+
+#define isalnum(c) ((__ctype+1)[c] & (_U|_L|_D))
+#define isalpha(c) ((__ctype+1)[c] & (_U|_L))
+#define iscntrl(c) ((__ctype+1)[c] & (_C))
+#define isdigit(c) ((__ctype+1)[c] & (_D))
+#define isgraph(c) ((__ctype+1)[c] & (_P|_U|_L|_D))
+#define islower(c) ((__ctype+1)[c] & (_L))
+#define isprint(c) ((__ctype+1)[c] & (_P|_U|_L|_D|_SP))
+#define ispunct(c) ((__ctype+1)[c] & (_P))
+#define isspace(c) ((__ctype+1)[c] & (_S))
+#define isupper(c) ((__ctype+1)[c] & (_U))
+#define isxdigit(c) ((__ctype+1)[c] & (_D|_X))
+
+#define tolower(c) ((__ctmp=c, isupper(__ctmp) ? __ctmp | 0x20 : __ctmp))
+#define toupper(c) ((__ctmp=c, islower(__ctmp) ? __ctmp & ~0x20 : __ctmp))
+
+#define isascii(c) ((unsigned)(c)<=0x7f)
+
+#endif
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/errno.h
@@ -1,0 +1,10 @@
+#ifndef _ERRNO_H
+#define _ERRNO_H
+
+#include <sys/errno.h>
+
+extern int errno;
+extern char *_sys_errlist[];
+extern int _sys_nerr;
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/float.h
@@ -1,0 +1,4 @@
+#ifndef _FLOAT_H
+#define _FLOAT_H
+#error not supported yet
+#endif
--- /dev/null
+++ b/rootdir/include/scc/limits.h
@@ -1,0 +1,8 @@
+#ifndef _LIMITS_H
+#define _LIMITS_H
+
+#include <arch/limits.h>
+
+#define MB_LEN_MAX 4
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/locale.h
@@ -1,0 +1,45 @@
+#ifndef _LOCALE_H
+#define _LOCALE_H
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#define LC_ALL 0
+#define LC_COLLATE 1
+#define LC_CTYPE 2
+#define LC_MONETARY 3
+#define LC_NUMERIC 4
+#define LC_TIME 5
+
+struct lconv {
+ char *decimal_point;
+ char *thousands_sep;
+ char *grouping;
+ char *mon_decimal_point;
+ char *mon_thousands_sep;
+ char *mon_grouping;
+ char *positive_sign;
+ char *negative_sign;
+ char *currency_symbol;
+ char *int_curr_symbol;
+ char frac_digits;
+ char p_cs_precedes;
+ char n_cs_precedes;
+ char p_sep_by_space;
+ char n_sep_by_space;
+ char p_sign_posn;
+ char n_sign_posn;
+ char int_frac_digits;
+ char int_p_cs_precedes;
+ char int_n_cs_precedes;
+ char int_p_sep_by_space;
+ char int_n_sep_by_space;
+ char int_p_sign_posn;
+ char int_n_sign_posn;
+};
+
+extern char *setlocale(int category, const char *locale);
+extern struct lconv *localeconv(void);
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/math.h
@@ -1,0 +1,4 @@
+#ifndef _MATH_H
+#define _MATH_H
+#error math.h is not supported yet
+#endif
--- /dev/null
+++ b/rootdir/include/scc/setjmp.h
@@ -1,0 +1,11 @@
+#ifndef _SETJMP_H
+#define _SETJMP_H
+
+#include <arch/setjmp.h>
+
+extern int setjmp(jmp_buf env);
+extern void longjmp(jmp_buf env, int val);
+
+#define setjmp setjmp
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/signal.h
@@ -1,0 +1,9 @@
+#ifndef _SIGNAL_H
+#define _SIGNAL_H
+
+#include <sys/signal.h>
+
+void ( *signal(int signum, void (*handler)(int)) ) (int);
+int raise(int sig);
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stdarg.h
@@ -1,0 +1,10 @@
+#ifndef _STDARG_H
+#define _STDARG_H
+
+#define va_list __builtin_va_list
+#define va_start(ap, last) __builtin_va_start(ap, last)
+#define va_end(ap) __builtin_va_end(ap)
+#define va_copy(to, from) __builtin_va_copy(to, from)
+#define va_arg(to, type) __builtin_va_arg(to, type)
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stdbool.h
@@ -1,0 +1,9 @@
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+#define bool _Bool
+#define true 1
+#define false 0
+#define __bool_true_false_are_defined 1
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stddef.h
@@ -1,0 +1,12 @@
+#ifndef _STDDEF_H
+#define _STDDEF_H
+
+#include <arch/stddef.h>
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#define offsetof(st, m) ((size_t)&(((st *)0)->m))
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stdint.h
@@ -1,0 +1,6 @@
+#ifndef _STDINT_H_
+#define _STDINT_H_
+
+#include <arch/stdint.h>
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stdio.h
@@ -1,0 +1,127 @@
+#ifndef _STDIO_H
+#define _STDIO_H
+
+#include <arch/stdio.h>
+
+#ifndef FOPEN_MAX
+#define FOPEN_MAX 12
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#define EOF -1
+#define SEEK_CUR 0
+#define SEEK_END 1
+#define SEEK_SET 2
+
+
+#define _IOWRITE (1 << 0)
+#define _IOREAD (1 << 1)
+#define _IORW (1 << 2)
+#define _IOEOF (1 << 3)
+#define _IOERR (1 << 4)
+#define _IOSTRG (1 << 5)
+#define _IOTXT (1 << 6)
+#define _IOFBF (1 << 7)
+#define _IOLBF (1 << 8)
+#define _IONBF (1 << 9)
+#define _IOALLOC (1 <<10)
+
+typedef struct {
+ int fd; /* file descriptor */
+ unsigned char *buf; /* pointer to i/o buffer */
+ unsigned char *rp; /* read pointer */
+ unsigned char *wp; /* write pointer */
+ unsigned char *lp; /* write pointer used when line-buffering */
+ size_t len; /* actual length of buffer */
+ unsigned short flags;
+ unsigned char unbuf[1]; /* tiny buffer for unbuffered io */
+} FILE;
+
+extern FILE __iob[FOPEN_MAX];
+
+#define stdin (&__iob[0])
+#define stdout (&__iob[1])
+#define stderr (&__iob[2])
+
+extern int remove(const char *filename);
+extern int rename(const char *old, const char *new);
+extern FILE *tmpfile(void);
+extern char *tmpnam(char *s);
+extern int fclose(FILE *fp);
+extern int fflush(FILE *fp);
+extern FILE *fopen(const char * restrict fname, const char * restrict mode);
+extern FILE *freopen(const char * restrict fname, const char * restrict mode,
+ FILE * restrict fp);
+extern void setbuf(FILE * restrict fp, char * restrict buf);
+extern int setvbuf(FILE * restrict fp,
+ char * restrict buf, int mode, size_t size);
+extern int fprintf(FILE * restrict fp, const char * restrict fmt, ...);
+extern int fscanf(FILE * restrict fp, const char * restrict fmt, ...);
+extern int printf(const char * restrict fmt, ...);
+extern int scanf(const char * restrict fmt, ...);
+extern int snprintf(char * restrict s,
+ size_t n, const char * restrict fmt, ...);
+extern int sprintf(char * restrict s, const char * restrict fmt, ...);
+extern int sscanf(const char * restrict s, const char * restrict fmt, ...);
+
+#ifdef _STDARG_H
+extern int vfprintf(FILE * restrict fp,
+ const char * restrict fmt, va_list arg);
+extern int vfscanf(FILE * restrict fp,
+ const char * restrict fmt, va_list arg);
+extern int vprintf(const char * restrict fmt, va_list arg);
+extern int vscanf(const char * restrict fmt, va_list arg);
+extern int vsnprintf(char * restrict s, size_t n, const char * restrict fmt,
+ va_list arg);
+extern int vsprintf(char * restrict s,
+ const char * restrict fmt, va_list arg);
+extern int vsscanf(const char * restrict s,
+ const char * restrict fmt, va_list arg);
+#endif
+
+extern int fgetc(FILE *fp);
+extern char *fgets(char * restrict s, int n, FILE * restrict fp);
+extern int fputc(int c, FILE *fp);
+extern int fputs(const char * restrict s, FILE * restrict fp);
+extern int getc(FILE *fp);
+extern int getchar(void);
+extern char *gets(char *s);
+extern int putc(int c, FILE *fp);
+extern int putchar(int c);
+extern int puts(const char *s);
+extern int ungetc(int c, FILE *fp);
+extern size_t fread(void * restrict ptr, size_t size, size_t nmemb,
+ FILE * restrict fp);
+extern size_t fwrite(const void * restrict ptr, size_t size, size_t nmemb,
+ FILE * restrict fp);
+extern int fgetpos(FILE * restrict fp, fpos_t * restrict pos);
+extern int fseek(FILE *fp, long int offset, int whence);
+extern int fsetpos(FILE *fp, const fpos_t *pos);
+extern long int ftell(FILE *fp);
+extern void rewind(FILE *fp);
+extern void clearerr(FILE *fp);
+extern int feof(FILE *fp);
+extern int ferror(FILE *fp);
+extern void perror(const char *s);
+
+extern int __getc(FILE *fp);
+extern int __putc(int, FILE *fp);
+
+#ifdef __USE_MACROS
+#ifdef __UNIX_FILES
+#define getc(fp) ((fp)->rp >= (fp)->wp ? __getc(fp) : *(fp)->rp++)
+#define putc(c, fp) ((fp)->wp >= (fp)->rp ? __putc(c,fp) : (*(fp)->wp++ = c))
+#endif
+
+#define ferror(fp) ((fp)->flags & _IOERR)
+#define feof(fp) ((fp)->flags & _IOEOF)
+#define clearerr(fp) (void) ((fp)->flags &= ~(_IOERR|_IOEOF))
+#define getchar() getc(stdin)
+#define putchar(c) putc((c), stdout)
+#define setbuf(fp, b) (void) setvbuf(fp, b, b ? _IOFBF:_IONBF, BUFSIZ)
+#endif
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/stdlib.h
@@ -1,0 +1,79 @@
+#ifndef _STDLIB_H
+#define _STDLIB_H
+
+#include <arch/stdlib.h>
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#define _ATEXIT_MAX 32
+
+#define MB_CUR_MAX 1
+#define RAND_MAX 32767
+
+typedef struct {
+ int quot, rem;
+} div_t;
+
+typedef struct {
+ long quot, rem;
+} ldiv_t;
+
+typedef struct {
+ long long quot, rem;
+} lldiv_t;
+
+extern double atof(const char *nptr);
+extern int atoi(const char *nptr);
+extern long int atol(const char *nptr);
+extern long long int atoll(const char *nptr);
+extern double strtod(const char * restrict nptr, char ** restrict endptr);
+extern float strtof(const char * restrict nptr, char ** restrict endptr);
+extern long double strtold(const char * restrict nptr, char ** restrict endptr);
+extern long int strtol(const char * restrict nptr, char ** restrict endptr, int base);
+extern long long int strtoll(const char * restrict nptr, char ** restrict endptr,
+ int base);
+extern unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr,
+ int base);
+extern unsigned long long int strtoull(const char * restrict nptr,
+ char ** restrict endptr, int base);
+extern int rand(void);
+extern void srand(unsigned int seed);
+extern void *calloc(size_t nmemb, size_t size);
+extern void free(void *ptr);
+extern void *malloc(size_t size);
+extern void *realloc(void *ptr, size_t size);
+extern void abort(void);
+extern int atexit(void (*func)(void));
+extern void exit(int status);
+extern void _Exit(int status);
+extern char *getenv(const char *name);
+extern int system(const char *string);
+extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *));
+extern void qsort(void *base, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *));
+extern int abs(int j);
+extern long int labs(long int j);
+extern long long int llabs(long long int j);
+extern div_t div(int numer, int denom);
+extern ldiv_t ldiv(long int numer, long int denom);
+extern lldiv_t lldiv(long long int numer, long long int denom);
+extern int mblen(const char *s, size_t n);
+extern int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);
+extern int wctomb(char *s, wchar_t wchar);
+extern size_t mbstowcs(wchar_t * restrict pwcs, const char * restrict s, size_t n);
+extern size_t wcstombs(char * restrict s, const wchar_t * restrict pwcs, size_t n);
+
+#ifdef __USE_MACROS
+extern int __abs;
+extern long __labs;
+extern long long __llabs;
+
+#define abs(x) (__abs = (x), (__abs) < 0 ? -__abs : __abs)
+#define labs(x) (__labs = (x), (__labs) < 0 ? -__labs : __labs)
+#define llabs(x) (__llabs = (x), (__llabs) < 0 ? -__llabs : __llabs)
+#endif
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/string.h
@@ -1,0 +1,34 @@
+#ifndef _STRING_H
+#define _STRING_H
+
+#include <arch/string.h>
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+extern void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
+extern void *memmove(void *s1, const void *s2, size_t n);
+extern char *strcpy(char * restrict s1, const char * restrict s2);
+extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
+extern char *strcat(char * restrict s1, const char * restrict s2);
+extern char *strncat(char * restrict s1, const char * restrict s2, size_t n);
+extern int memcmp(const void *s1, const void *s2, size_t n);
+extern int strcmp(const char *s1, const char *s2);
+extern int strcoll(const char *s1, const char *s2);
+extern int strncmp(const char *s1, const char *s2, size_t n);
+extern size_t strxfrm(char * restrict s1, const char * restrict s2, size_t n);
+extern void *memchr(const void *s, int c, size_t n);
+extern char *strchr(const char *s, int c);
+extern size_t strcspn(const char *s1, const char *s2);
+extern char *strpbrk(const char *s1, const char *s2);
+extern char *strrchr(const char *s, int c);
+extern size_t strspn(const char *s1, const char *s2);
+extern char *strstr(const char *s1, const char *s2);
+extern char *strtok(char * restrict s1, const char * restrict s2);
+extern void *memset(void *s, int c, size_t n);
+extern char *strerror(int errnum);
+extern size_t strlen(const char *s);
+extern size_t strnlen(const char *s, size_t maxlen);
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/time.h
@@ -1,0 +1,38 @@
+#ifndef _TIME_H
+#define _TIME_H
+
+#include <arch/time.h>
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#define CLOCKS_PER_SEC 1000000
+
+typedef long int clock_t;
+
+struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+};
+
+extern clock_t clock(void);
+extern double difftime(time_t time1, time_t time0);
+extern time_t mktime(struct tm *timeptr);
+extern time_t time(time_t *timer);
+extern char *asctime(const struct tm *timeptr);
+extern char *ctime(const time_t *timer);
+extern struct tm *gmtime(const time_t *timer);
+extern struct tm *localtime(const time_t *timer);
+extern size_t strftime(char * restrict s, size_t maxsize,
+ const char * restrict format,
+ const struct tm * restrict timeptr);
+
+#endif
--- /dev/null
+++ b/rootdir/include/scc/wchar.h
@@ -1,0 +1,11 @@
+#ifndef _WCHAR_H
+#define _WCHAR_H
+
+/* TODO: This is only a placeholder */
+typedef long wchar_t;
+typedef long wint_t;
+
+extern size_t wcsnlen(const wchar_t *s, size_t maxlen);
+extern wint_t putwc(wchar_t wc, FILE *fp);
+
+#endif
--- /dev/null
+++ b/rootdir/lib/scc/amd64-sysv-linux/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/lib/scc/amd64-sysv-netbsd/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/lib/scc/amd64-sysv-openbsd/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/lib/scc/i386-sysv-linux/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/lib/scc/i386-sysv-openbsd/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/lib/scc/z80-scc-none/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- /dev/null
+++ b/rootdir/libexec/scc/README
@@ -1,0 +1,1 @@
+This is a placeholder for VCS
--- a/rules.mk
+++ b/rules.mk
@@ -1,15 +1,19 @@
include $(PROJECTDIR)/config.mk
-INCDIR = $(PROJECTDIR)/inc/
-LIBDIR = $(PROJECTDIR)/lib/scc
+INCLUDE = $(PROJECTDIR)/inc
-SCC_CFLAGS = $(MOREFLAGS) \
- $(SYSCFLAGS) \
- -g \
- $(CFLAGS)
+BINDIR = $(PROJECTDIR)/rootdir/bin
+INCDIR = $(PROJECTDIR)/rootdir/include/scc
+LIBDIR = $(PROJECTDIR)/rootdir/lib/scc
+LIBEXEC = $(PROJECTDIR)/rootdir/libexec/scc
-SCC_LDFLAGS = -L$(LIBDIR) -g $(LDFLAGS)
+LIBSCC = $(PROJECTDIR)/lib/scc
+LIBCOFF32 = $(PROJECTDIR)/lib/coff32
+SCC_CFLAGS = $(MORECFLAGS) $(SYSCFLAGS) $(STDCFLAGS) -g $(CFLAGS)
+
+SCC_LDFLAGS = $(MORELFLAGS) $(SYSLDFLAGS) -L$(LIBDIR) -g $(LDFLAGS)
+
# helper macro to run over all the directories
FORALL = +@set -e ;\
pwd=$$PWD; \
@@ -26,14 +30,8 @@
.c.o:
$(CC) $(SCC_CFLAGS) -o $@ -c $<
-.c:
- $(CC) $(SCC_CFLAGS) $(SCC_LDFLAGS) -o $@ $<
-
-
-all: $(PROJECTDIR)/rootdir/bin $(PROJECTDIR)/rootdir/libexec/scc
-
-$(PROJECTDIR)/rootdir/bin:
- mkdir -p $(PROJECTDIR)/rootdir/bin
-
-$(PROJECTDIR)/rootdir/libexec/scc:
- mkdir -p $(PROJECTDIR)/rootdir/libexec/scc
+all:
+dep:
+clean:
+distclean: clean
+FORCE:
--- a/system.mk
+++ /dev/null
@@ -1,18 +1,0 @@
-# Plan9
-SYSCFLAGS = -D_SUSV2_SOURCE
-
-# NetBSD
-CC1_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-CC2_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-AS_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-
-# OpenBSD
-CC1_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-CC2_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-AS_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-
-# FreeBSD
-CC1_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-CC2_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-AS_CFLAGS = -D_ISOC99_SOURCE -D_ANSI_SOURCE
-
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -3,10 +3,11 @@
PROJECTDIR = ..
include $(PROJECTDIR)/rules.mk
-DIRS=ar nm
+DIRS=ar/execute \
+ nm/execute \
+ as/execute \
+ libc/execute \
+ scc/execute scc/error
all clean:
$(FORALL)
-
-distclean: clean
-dep:
--- a/tests/ar/Makefile
+++ /dev/null
@@ -1,9 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../..
-include $(PROJECTDIR)/rules.mk
-
-DIRS=error execute
-
-all clean:
- $(FORALL)
--- a/tests/ar/error/Makefile
+++ /dev/null
@@ -1,3 +1,0 @@
-.POSIX:
-
-all clean:
--- a/tests/ar/execute/0001-append.sh
+++ b/tests/ar/execute/0001-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#Append generated files at once to an empty archive
--- a/tests/ar/execute/0002-append.sh
+++ b/tests/ar/execute/0002-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#Append generated files one by one to an empty file
--- a/tests/ar/execute/0003-append.sh
+++ b/tests/ar/execute/0003-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#Append generated files at once to an existing archive
--- a/tests/ar/execute/0004-append.sh
+++ b/tests/ar/execute/0004-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#empty file list
--- a/tests/ar/execute/0005-append.sh
+++ b/tests/ar/execute/0005-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#empty file list
--- a/tests/ar/execute/0006-append.sh
+++ b/tests/ar/execute/0006-append.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file.a f1 f2 f3 $tmp1 $tmp2; exit" 0 2 3
###########################################################################
#empty file list
--- a/tests/ar/execute/0007-delete.sh
+++ b/tests/ar/execute/0007-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#delete one member
--- a/tests/ar/execute/0008-delete.sh
+++ b/tests/ar/execute/0008-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#delete two members, 1st and 2nd
--- a/tests/ar/execute/0009-delete.sh
+++ b/tests/ar/execute/0009-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#delete two members, 2nd and 3rd
--- a/tests/ar/execute/0010-delete.sh
+++ b/tests/ar/execute/0010-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#remove all the members
--- a/tests/ar/execute/0011-delete.sh
+++ b/tests/ar/execute/0011-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#no members
--- a/tests/ar/execute/0012-delete.sh
+++ b/tests/ar/execute/0012-delete.sh
@@ -3,7 +3,7 @@
set -e
-trap "rm -f file.a" 0 2 3
+trap "rm -f file.a; exit" 0 2 3
############################################################################
#delete one member
--- a/tests/ar/execute/0013-print.sh
+++ b/tests/ar/execute/0013-print.sh
@@ -1,12 +1,11 @@
#!/bin/sh
-
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print 1st member
--- a/tests/ar/execute/0014-print.sh
+++ b/tests/ar/execute/0014-print.sh
@@ -1,12 +1,11 @@
#!/bin/sh
-
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print 3rd member
--- a/tests/ar/execute/0015-print.sh
+++ b/tests/ar/execute/0015-print.sh
@@ -1,13 +1,11 @@
#!/bin/sh
-
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print 2nd member with verbose
--- a/tests/ar/execute/0016-print.sh
+++ b/tests/ar/execute/0016-print.sh
@@ -1,12 +1,11 @@
#!/bin/sh
-
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print all members
--- a/tests/ar/execute/0017-print.sh
+++ b/tests/ar/execute/0017-print.sh
@@ -1,11 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
#and now with no members in command line
--- a/tests/ar/execute/0018-list.sh
+++ b/tests/ar/execute/0018-list.sh
@@ -4,8 +4,8 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#list 1st member
--- a/tests/ar/execute/0019-list.sh
+++ b/tests/ar/execute/0019-list.sh
@@ -4,8 +4,8 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print 3rd member
--- a/tests/ar/execute/0020-list.sh
+++ b/tests/ar/execute/0020-list.sh
@@ -4,7 +4,8 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print 2nd member with verbose
--- a/tests/ar/execute/0021-list.sh
+++ b/tests/ar/execute/0021-list.sh
@@ -4,7 +4,8 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#print all members
--- a/tests/ar/execute/0022-list.sh
+++ b/tests/ar/execute/0022-list.sh
@@ -4,8 +4,8 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file.a $tmp1 $tmp2" 0 2 3
+trap "rm -f file.a $tmp1 $tmp2; exit" 0 2 3
############################################################################
#list 1st member
--- a/tests/ar/execute/0023-extract.sh
+++ b/tests/ar/execute/0023-extract.sh
@@ -1,11 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#extract 1st member
--- a/tests/ar/execute/0024-extract.sh
+++ b/tests/ar/execute/0024-extract.sh
@@ -1,12 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#extract 3rd member
--- a/tests/ar/execute/0025-extract.sh
+++ b/tests/ar/execute/0025-extract.sh
@@ -1,11 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#extract 3rd member
--- a/tests/ar/execute/0026-extract.sh
+++ b/tests/ar/execute/0026-extract.sh
@@ -1,11 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#extract all members
--- a/tests/ar/execute/0027-extract.sh
+++ b/tests/ar/execute/0027-extract.sh
@@ -1,12 +1,11 @@
#!/bin/sh
-
set -e
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#extract without parameters
--- a/tests/ar/execute/0029-move.sh
+++ b/tests/ar/execute/0029-move.sh
@@ -1,13 +1,11 @@
#!/bin/sh
-
-
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#move 1st without specifier
--- a/tests/ar/execute/0030-move.sh
+++ b/tests/ar/execute/0030-move.sh
@@ -1,13 +1,11 @@
#!/bin/sh
-
-
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#move 1st at the end
--- a/tests/ar/execute/0031-move.sh
+++ b/tests/ar/execute/0031-move.sh
@@ -1,13 +1,11 @@
#!/bin/sh
-
-
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#and now, test without parameters
--- a/tests/ar/execute/0032-update.sh
+++ b/tests/ar/execute/0032-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that already exist
--- a/tests/ar/execute/0033-update.sh
+++ b/tests/ar/execute/0033-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that doesn't exist
--- a/tests/ar/execute/0034-update.sh
+++ b/tests/ar/execute/0034-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that exists and using -a
--- a/tests/ar/execute/0035-update.sh
+++ b/tests/ar/execute/0035-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that exists and using -b
--- a/tests/ar/execute/0036-update.sh
+++ b/tests/ar/execute/0036-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that doesn't exist and using -b
--- a/tests/ar/execute/0037-update.sh
+++ b/tests/ar/execute/0037-update.sh
@@ -2,10 +2,10 @@
set -e
-trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update one member that doesn't exist and using -a
--- a/tests/ar/execute/0038-update.sh
+++ b/tests/ar/execute/0038-update.sh
@@ -2,10 +2,10 @@
set -e
-#trap "rm -f file* $tmp1 $tmp2" 0 2 3
-
tmp1=`mktemp`
tmp2=`mktemp`
+
+trap "rm -f file* $tmp1 $tmp2; exit" 0 2 3
############################################################################
#Update without parameters
--- a/tests/ar/execute/Makefile
+++ b/tests/ar/execute/Makefile
@@ -1,12 +1,12 @@
.POSIX:
PROJECTDIR=$$PWD/../../../
-ROOTDIR=$(PROJECTDIR)/rootdir
+ROOT=$(PROJECTDIR)/rootdir
all: tests
tests: master.a
- PATH=$(ROOTDIR)/bin:$$PATH ./chktest.sh
+ @TZ=UTC PATH=$(ROOT)/bin:$$PATH ./chktest.sh
master.a:
./mkmaster.sh
--- a/tests/ar/execute/chktest.sh
+++ b/tests/ar/execute/chktest.sh
@@ -1,9 +1,6 @@
#!/bin/sh
-ttyflags=`stty -g`
-trap "stty $ttyflags;tabs -8;rm -rf file*" 0 2 3 15
-stty tabs
-tabs 40
+trap "rm -rf file*; exit" 0 2 3 15
ulimit -c 0
rm -f test.log
rm -rf file*
@@ -11,6 +8,6 @@
for i in *-*.sh
do
printf "Test: %s\n\n" $i >> test.log
- printf "%s\t" $i
- ./$i >> test.log 2>&1 && echo [OK] || echo [FAIL]
+ ./$i >> test.log 2>&1 && printf '[PASS]: ' || printf '[FAIL]: '
+ echo "$i"
done
--- a/tests/ar/execute/mkmaster.sh
+++ b/tests/ar/execute/mkmaster.sh
@@ -2,7 +2,7 @@
uid=`id -u`
gid=`id -g`
-time=`date -d "1980-01-01" +%s`
+time=315532800
cat <<EOF >master.a
!<arch>
--- /dev/null
+++ b/tests/as/execute/Makefile
@@ -1,0 +1,12 @@
+.POSIX:
+
+PROJECTDIR=$$PWD/../../../
+ROOT=$(PROJECTDIR)/rootdir
+
+all: tests
+
+tests:
+ @PATH=$(ROOT)/bin:$$PATH ./chktest.sh
+
+clean:
+ rm -f test.log
--- /dev/null
+++ b/tests/as/execute/chktest.sh
@@ -1,0 +1,12 @@
+#!/bin/sh
+
+ulimit -c 0
+rm -f test.log
+
+for i in *.s
+do
+ cpu="${i%.s}"
+ printf "Test: %s\n\n" $cpu >> test.log
+ ./test.sh $cpu && printf '[PASS]: ' || printf '[FAIL]: '
+ printf 'testing cpu=%s\n' "$cpu"
+done
--- /dev/null
+++ b/tests/as/execute/i286.s
@@ -1,0 +1,150 @@
+/ Look in http://www.mlsite.net/8086/
+/ Look in http://www.srmuniv.ac.in/sites/default/files/2017/15CS205J-unitII.pdf
+/ Look in http://www.c-jump.com/CIS77/reference/Instructions_by_Opcode.html
+/ Look in http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0020_encoding_overview
+/ Look in http://www.c-jump.com/CIS77/reference/Instructions_by_Opcode.html
+/ Look in https://www.felixcloutier.com/x86/index.html
+
+ ADDB AL,AL / 00 C0
+ ADDB CL,AL / 00 C8
+ ADDB DL,AL / 00 D0
+ ADDB BL,AL / 00 D8
+ ADDB AH,AL / 00 E0
+ ADDB CH,AL / 00 E8
+ ADDB DH,AL / 00 F0
+ ADDB BH,AL / 00 F8
+
+ ADDW AX,AX / 01 C0
+ ADDW CX,AX / 01 C8
+ ADDW DX,AX / 01 D0
+ ADDW BX,AX / 01 D8
+ ADDW SP,AX / 01 E0
+ ADDW BP,AX / 01 E8
+ ADDW SI,AX / 01 F0
+ ADDW DI,AX / 01 F8
+
+ ADDB AL,CL / 00 C1
+ ADDB CL,CL / 00 C9
+ ADDB DL,CL / 00 D1
+ ADDB BL,CL / 00 D9
+ ADDB AH,CL / 00 E1
+ ADDB CH,CL / 00 E9
+ ADDB DH,CL / 00 F1
+ ADDB BH,CL / 00 F9
+
+ ADDW AX,CX / 01 C1
+ ADDW CX,CX / 01 C9
+ ADDW DX,CX / 01 D1
+ ADDW BX,CX / 01 D9
+ ADDW SP,CX / 01 E1
+ ADDW BP,CX / 01 E9
+ ADDW SI,CX / 01 F1
+ ADDW DI,CX / 01 F9
+
+ ADDB AL,DL / 00 C2
+ ADDB CL,DL / 00 CA
+ ADDB DL,DL / 00 D2
+ ADDB BL,DL / 00 DA
+ ADDB AH,DL / 00 E2
+ ADDB CH,DL / 00 EA
+ ADDB DH,DL / 00 F2
+ ADDB BH,DL / 00 FA
+
+ ADDW AX,DX / 01 C2
+ ADDW CX,DX / 01 CA
+ ADDW DX,DX / 01 D2
+ ADDW BX,DX / 01 DA
+ ADDW SP,DX / 01 E2
+ ADDW BP,DX / 01 EA
+ ADDW SI,DX / 01 F2
+ ADDW DI,DX / 01 FA
+
+ ADDB AL,BL / 00 C3
+ ADDB CL,BL / 00 CB
+ ADDB DL,BL / 00 D3
+ ADDB BL,BL / 00 DB
+ ADDB AH,BL / 00 E3
+ ADDB CH,BL / 00 EB
+ ADDB DH,BL / 00 F3
+ ADDB BH,BL / 00 FB
+
+ ADDW AX,BX / 01 C3
+ ADDW CX,BX / 01 CB
+ ADDW DX,BX / 01 D3
+ ADDW BX,BX / 01 DB
+ ADDW SP,BX / 01 E3
+ ADDW BP,BX / 01 EB
+ ADDW SI,BX / 01 F3
+ ADDW DI,BX / 01 FB
+
+ ADDB AL,AH / 00 C4
+ ADDB CL,AH / 00 CC
+ ADDB DL,AH / 00 D4
+ ADDB BL,AH / 00 DC
+ ADDB AH,AH / 00 E4
+ ADDB CH,AH / 00 EC
+ ADDB DH,AH / 00 F4
+ ADDB BH,AH / 00 FC
+
+ ADDW AX,SP / 01 C4
+ ADDW CX,SP / 01 CC
+ ADDW DX,SP / 01 D4
+ ADDW BX,SP / 01 DC
+ ADDW SP,SP / 01 E4
+ ADDW BP,SP / 01 EC
+ ADDW SI,SP / 01 F4
+ ADDW DI,SP / 01 FC
+
+ ADDB AL,CH / 00 C5
+ ADDB CL,CH / 00 CD
+ ADDB DL,CH / 00 D5
+ ADDB BL,CH / 00 DD
+ ADDB AH,CH / 00 E5
+ ADDB CH,CH / 00 ED
+ ADDB DH,CH / 00 F5
+ ADDB BH,CH / 00 FD
+
+ ADDW AX,BP / 01 C5
+ ADDW CX,BP / 01 CD
+ ADDW DX,BP / 01 D5
+ ADDW BX,BP / 01 DD
+ ADDW SP,BP / 01 E5
+ ADDW BP,BP / 01 ED
+ ADDW SI,BP / 01 F5
+ ADDW DI,BP / 01 FD
+
+ ADDB AL,DH / 00 C6
+ ADDB CL,DH / 00 CE
+ ADDB DL,DH / 00 D6
+ ADDB BL,DH / 00 DE
+ ADDB AH,DH / 00 E6
+ ADDB CH,DH / 00 EE
+ ADDB DH,DH / 00 F6
+ ADDB BH,DH / 00 FE
+
+ ADDW AX,SI / 01 C6
+ ADDW CX,SI / 01 CE
+ ADDW DX,SI / 01 D6
+ ADDW BX,SI / 01 DE
+ ADDW SP,SI / 01 E6
+ ADDW BP,SI / 01 EE
+ ADDW SI,SI / 01 F6
+ ADDW DI,SI / 01 FE
+
+ ADDB AL,BH / 00 C7
+ ADDB CL,BH / 00 CF
+ ADDB DL,BH / 00 D7
+ ADDB BL,BH / 00 DF
+ ADDB AH,BH / 00 E7
+ ADDB CH,BH / 00 EF
+ ADDB DH,BH / 00 F7
+ ADDB BH,BH / 00 FF
+
+ ADDW AX,DI / 01 C7
+ ADDW CX,DI / 01 CF
+ ADDW DX,DI / 01 D7
+ ADDW BX,DI / 01 DF
+ ADDW SP,DI / 01 E7
+ ADDW BP,DI / 01 EF
+ ADDW SI,DI / 01 F7
+ ADDW DI,DI / 01 FF
--- /dev/null
+++ b/tests/as/execute/test.sh
@@ -1,0 +1,43 @@
+#!/bin/sh
+
+set -e
+cpu=${1?}
+exec >>test.log
+exec 2>&1
+
+tmp1=`mktemp`
+tmp2=`mktemp`
+file=$cpu.s
+
+trap "rm -f a.out $tmp1 $tmp2; exit" 0 2 3
+
+as-$cpu $file
+
+sed -n '/^\// ! {
+ s%.*/%%
+ s%^[ ]*%%
+ s%[ ]*$%%
+ /^$/d
+ s%[ ][ ]*%\
+%g
+ p
+}' $file |
+nl -b a > $tmp1
+
+
+objdump |
+sed -n '/^data:/,$ {
+ /^data:/ ! {
+ s%.*:%%
+ s%^[ ]*%%
+ s%[ ]*$%%
+ /^$/d
+ s%[ ][ ]*%\
+%g
+ p
+ }
+}' |
+nl -b a > $tmp2
+
+echo diff
+diff -u $tmp1 $tmp2
--- /dev/null
+++ b/tests/as/execute/z80.s
@@ -1,0 +1,1588 @@
+ NOP / 00
+ LD BC,$64 / 01 40 00
+ LD (BC),A / 02
+ INC BC / 03
+ INC B / 04
+ DEC B / 05
+ LD B,$32 / 06 20
+ RLCA / 07
+ EX AF,AF' / 08
+ ADD HL,BC / 09
+ LD A,(BC) / 0A
+ DEC BC / 0B
+ INC C / 0C
+ DEC C / 0D
+ LD C,$64 / 0E 40
+ RRCA / 0F
+L1: DJNZ $L1 / 10 02
+ LD DE,$32 / 11 20 00
+ LD (DE),A / 12
+ INC DE / 13
+ INC D / 14
+ DEC D / 15
+ LD D,$64 / 16 40
+ RLA / 17
+L2: JR $L2 / 18 02
+ ADD HL,DE / 19
+ LD A,(DE) / 1A
+ DEC DE / 1B
+ INC E / 1C
+ DEC E / 1D
+ LD E,$64 / 1E 40
+ RRA / 1F
+L3: JR NZ,$L3 / 20 02
+ LD HL,$32 / 21 20 00
+ LD (32768),HL / 22 00 80
+ INC HL / 23
+ INC H / 24
+ DEC H / 25
+ LD H,$64 / 26 40
+ DAA / 27
+L4: JR Z,$L4 / 28 02
+ ADD HL,HL / 29
+ LD HL,(16384) / 2A 00 40
+ DEC HL / 2B
+ INC L / 2C
+ DEC L / 2D
+ LD L,$32 / 2E 20
+ CPL / 2F
+L5: JR NC,$L5 / 30 02
+ LD SP,$64 / 31 40 00
+ LD (32768),A / 32 00 80
+ INC SP / 33
+ INC (HL) / 34
+ DEC (HL) / 35
+ LD (HL),$32 / 36 20
+ SCF / 37
+L6: JR C,$L6 / 38 02
+ ADD HL,SP / 39
+ LD A,(16384) / 3A 00 40
+ DEC SP / 3B
+ INC A / 3C
+ DEC A / 3D
+ LD A,$32 / 3E 20
+ CCF / 3F
+ LD B,B / 40
+ LD B,C / 41
+ LD B,D / 42
+ LD B,E / 43
+ LD B,H / 44
+ LD B,L / 45
+ LD B,(HL) / 46
+ LD B,A / 47
+ LD C,B / 48
+ LD C,C / 49
+ LD C,D / 4A
+ LD C,E / 4B
+ LD C,H / 4C
+ LD C,L / 4D
+ LD C,(HL) / 4E
+ LD C,A / 4F
+ LD D,B / 50
+ LD D,C / 51
+ LD D,D / 52
+ LD D,E / 53
+ LD D,H / 54
+ LD D,L / 55
+ LD D,(HL) / 56
+ LD D,A / 57
+ LD E,B / 58
+ LD E,C / 59
+ LD E,D / 5A
+ LD E,E / 5B
+ LD E,H / 5C
+ LD E,L / 5D
+ LD E,(HL) / 5E
+ LD E,A / 5F
+ LD H,B / 60
+ LD H,C / 61
+ LD H,D / 62
+ LD H,E / 63
+ LD H,H / 64
+ LD H,L / 65
+ LD H,(HL) / 66
+ LD H,A / 67
+ LD L,B / 68
+ LD L,C / 69
+ LD L,D / 6A
+ LD L,E / 6B
+ LD L,H / 6C
+ LD L,L / 6D
+ LD L,(HL) / 6E
+ LD L,A / 6F
+ LD (HL),B / 70
+ LD (HL),C / 71
+ LD (HL),D / 72
+ LD (HL),E / 73
+ LD (HL),H / 74
+ LD (HL),L / 75
+ HALT / 76
+ LD (HL),A / 77
+ LD A,B / 78
+ LD A,C / 79
+ LD A,D / 7A
+ LD A,E / 7B
+ LD A,H / 7C
+ LD A,L / 7D
+ LD A,(HL) / 7E
+ LD A,A / 7F
+ ADD A,B / 80
+ ADD A,C / 81
+ ADD A,D / 82
+ ADD A,E / 83
+ ADD A,H / 84
+ ADD A,L / 85
+ ADD A,(HL) / 86
+ ADD A,A / 87
+ ADC A,B / 88
+ ADC A,C / 89
+ ADC A,D / 8A
+ ADC A,E / 8B
+ ADC A,H / 8C
+ ADC A,L / 8D
+ ADC A,(HL) / 8E
+ ADC A,A / 8F
+ SUB A,B / 90
+ SUB A,C / 91
+ SUB A,D / 92
+ SUB A,E / 93
+ SUB A,H / 94
+ SUB A,L / 95
+ SUB A,(HL) / 96
+ SUB A,A / 97
+ SBC A,B / 98
+ SBC A,C / 99
+ SBC A,D / 9A
+ SBC A,E / 9B
+ SBC A,H / 9C
+ SBC A,L / 9D
+ SBC A,(HL) / 9E
+ SBC A,A / 9F
+ AND A,B / A0
+ AND A,C / A1
+ AND A,D / A2
+ AND A,E / A3
+ AND A,H / A4
+ AND A,L / A5
+ AND A,(HL) / A6
+ AND A,A / A7
+ XOR A,B / A8
+ XOR A,C / A9
+ XOR A,D / AA
+ XOR A,E / AB
+ XOR A,H / AC
+ XOR A,L / AD
+ XOR A,(HL) / AE
+ XOR A,A / AF
+ OR A,B / B0
+ OR A,C / B1
+ OR A,D / B2
+ OR A,E / B3
+ OR A,H / B4
+ OR A,L / B5
+ OR A,(HL) / B6
+ OR A,A / B7
+ CP A,B / B8
+ CP A,C / B9
+ CP A,D / BA
+ CP A,E / BB
+ CP A,H / BC
+ CP A,L / BD
+ CP A,(HL) / BE
+ CP A,A / BF
+ RET NZ / C0
+ POP BC / C1
+ JP NZ,$16384 / C2 00 40
+ JP $32768 / C3 00 80
+ CALL NZ,$32768 / C4 00 80
+ PUSH BC / C5
+ ADD A,$32 / C6 20
+ RST $0 / C7
+ RET Z / C8
+ RET / C9
+ JP Z,$32768 / CA 00 80
+ RLC B / CB 00
+ RLC C / CB 01
+ RLC D / CB 02
+ RLC E / CB 03
+ RLC H / CB 04
+ RLC L / CB 05
+ RLC (HL) / CB 06
+ RLC A / CB 07
+ RRC B / CB 08
+ RRC C / CB 09
+ RRC D / CB 0A
+ RRC E / CB 0B
+ RRC H / CB 0C
+ RRC L / CB 0D
+ RRC (HL) / CB 0E
+ RRC A / CB 0F
+ RL B / CB 10
+ RL C / CB 11
+ RL D / CB 12
+ RL E / CB 13
+ RL H / CB 14
+ RL L / CB 15
+ RL (HL) / CB 16
+ RL A / CB 17
+ RR B / CB 18
+ RR C / CB 19
+ RR D / CB 1A
+ RR E / CB 1B
+ RR H / CB 1C
+ RR L / CB 1D
+ RR (HL) / CB 1E
+ RR A / CB 1F
+ SLA B / CB 20
+ SLA C / CB 21
+ SLA D / CB 22
+ SLA E / CB 23
+ SLA H / CB 24
+ SLA L / CB 25
+ SLA (HL) / CB 26
+ SLA A / CB 27
+ SRA B / CB 28
+ SRA C / CB 29
+ SRA D / CB 2A
+ SRA E / CB 2B
+ SRA H / CB 2C
+ SRA L / CB 2D
+ SRA (HL) / CB 2E
+ SRA A / CB 2F
+ SLL B / CB 30
+ SLL C / CB 31
+ SLL D / CB 32
+ SLL E / CB 33
+ SLL H / CB 34
+ SLL L / CB 35
+ SLL (HL) / CB 36
+ SLL A / CB 37
+ SRL B / CB 38
+ SRL C / CB 39
+ SRL D / CB 3A
+ SRL E / CB 3B
+ SRL H / CB 3C
+ SRL L / CB 3D
+ SRL (HL) / CB 3E
+ SRL A / CB 3F
+ BIT $0,B / CB 40
+ BIT $0,C / CB 41
+ BIT $0,D / CB 42
+ BIT $0,E / CB 43
+ BIT $0,H / CB 44
+ BIT $0,L / CB 45
+ BIT $0,(HL) / CB 46
+ BIT $0,A / CB 47
+ BIT $1,B / CB 48
+ BIT $1,C / CB 49
+ BIT $1,D / CB 4A
+ BIT $1,E / CB 4B
+ BIT $1,H / CB 4C
+ BIT $1,L / CB 4D
+ BIT $1,(HL) / CB 4E
+ BIT $1,A / CB 4F
+ BIT $2,B / CB 50
+ BIT $2,C / CB 51
+ BIT $2,D / CB 52
+ BIT $2,E / CB 53
+ BIT $2,H / CB 54
+ BIT $2,L / CB 55
+ BIT $2,(HL) / CB 56
+ BIT $2,A / CB 57
+ BIT $3,B / CB 58
+ BIT $3,C / CB 59
+ BIT $3,D / CB 5A
+ BIT $3,E / CB 5B
+ BIT $3,H / CB 5C
+ BIT $3,L / CB 5D
+ BIT $3,(HL) / CB 5E
+ BIT $3,A / CB 5F
+ BIT $4,B / CB 60
+ BIT $4,C / CB 61
+ BIT $4,D / CB 62
+ BIT $4,E / CB 63
+ BIT $4,H / CB 64
+ BIT $4,L / CB 65
+ BIT $4,(HL) / CB 66
+ BIT $4,A / CB 67
+ BIT $5,B / CB 68
+ BIT $5,C / CB 69
+ BIT $5,D / CB 6A
+ BIT $5,E / CB 6B
+ BIT $5,H / CB 6C
+ BIT $5,L / CB 6D
+ BIT $5,(HL) / CB 6E
+ BIT $5,A / CB 6F
+ BIT $6,B / CB 70
+ BIT $6,C / CB 71
+ BIT $6,D / CB 72
+ BIT $6,E / CB 73
+ BIT $6,H / CB 74
+ BIT $6,L / CB 75
+ BIT $6,(HL) / CB 76
+ BIT $6,A / CB 77
+ BIT $7,B / CB 78
+ BIT $7,C / CB 79
+ BIT $7,D / CB 7A
+ BIT $7,E / CB 7B
+ BIT $7,H / CB 7C
+ BIT $7,L / CB 7D
+ BIT $7,(HL) / CB 7E
+ BIT $7,A / CB 7F
+ RES $0,B / CB 80
+ RES $0,C / CB 81
+ RES $0,D / CB 82
+ RES $0,E / CB 83
+ RES $0,H / CB 84
+ RES $0,L / CB 85
+ RES $0,(HL) / CB 86
+ RES $0,A / CB 87
+ RES $1,B / CB 88
+ RES $1,C / CB 89
+ RES $1,D / CB 8A
+ RES $1,E / CB 8B
+ RES $1,H / CB 8C
+ RES $1,L / CB 8D
+ RES $1,(HL) / CB 8E
+ RES $1,A / CB 8F
+ RES $2,B / CB 90
+ RES $2,C / CB 91
+ RES $2,D / CB 92
+ RES $2,E / CB 93
+ RES $2,H / CB 94
+ RES $2,L / CB 95
+ RES $2,(HL) / CB 96
+ RES $2,A / CB 97
+ RES $3,B / CB 98
+ RES $3,C / CB 99
+ RES $3,D / CB 9A
+ RES $3,E / CB 9B
+ RES $3,H / CB 9C
+ RES $3,L / CB 9D
+ RES $3,(HL) / CB 9E
+ RES $3,A / CB 9F
+ RES $4,B / CB A0
+ RES $4,C / CB A1
+ RES $4,D / CB A2
+ RES $4,E / CB A3
+ RES $4,H / CB A4
+ RES $4,L / CB A5
+ RES $4,(HL) / CB A6
+ RES $4,A / CB A7
+ RES $5,B / CB A8
+ RES $5,C / CB A9
+ RES $5,D / CB AA
+ RES $5,E / CB AB
+ RES $5,H / CB AC
+ RES $5,L / CB AD
+ RES $5,(HL) / CB AE
+ RES $5,A / CB AF
+ RES $6,B / CB B0
+ RES $6,C / CB B1
+ RES $6,D / CB B2
+ RES $6,E / CB B3
+ RES $6,H / CB B4
+ RES $6,L / CB B5
+ RES $6,(HL) / CB B6
+ RES $6,A / CB B7
+ RES $7,B / CB B8
+ RES $7,C / CB B9
+ RES $7,D / CB BA
+ RES $7,E / CB BB
+ RES $7,H / CB BC
+ RES $7,L / CB BD
+ RES $7,(HL) / CB BE
+ RES $7,A / CB BF
+ SET $0,B / CB C0
+ SET $0,C / CB C1
+ SET $0,D / CB C2
+ SET $0,E / CB C3
+ SET $0,H / CB C4
+ SET $0,L / CB C5
+ SET $0,(HL) / CB C6
+ SET $0,A / CB C7
+ SET $1,B / CB C8
+ SET $1,C / CB C9
+ SET $1,D / CB CA
+ SET $1,E / CB CB
+ SET $1,H / CB CC
+ SET $1,L / CB CD
+ SET $1,(HL) / CB CE
+ SET $1,A / CB CF
+ SET $2,B / CB D0
+ SET $2,C / CB D1
+ SET $2,D / CB D2
+ SET $2,E / CB D3
+ SET $2,H / CB D4
+ SET $2,L / CB D5
+ SET $2,(HL) / CB D6
+ SET $2,A / CB D7
+ SET $3,B / CB D8
+ SET $3,C / CB D9
+ SET $3,D / CB DA
+ SET $3,E / CB DB
+ SET $3,H / CB DC
+ SET $3,L / CB DD
+ SET $3,(HL) / CB DE
+ SET $3,A / CB DF
+ SET $4,B / CB E0
+ SET $4,C / CB E1
+ SET $4,D / CB E2
+ SET $4,E / CB E3
+ SET $4,H / CB E4
+ SET $4,L / CB E5
+ SET $4,(HL) / CB E6
+ SET $4,A / CB E7
+ SET $5,B / CB E8
+ SET $5,C / CB E9
+ SET $5,D / CB EA
+ SET $5,E / CB EB
+ SET $5,H / CB EC
+ SET $5,L / CB ED
+ SET $5,(HL) / CB EE
+ SET $5,A / CB EF
+ SET $6,B / CB F0
+ SET $6,C / CB F1
+ SET $6,D / CB F2
+ SET $6,E / CB F3
+ SET $6,H / CB F4
+ SET $6,L / CB F5
+ SET $6,(HL) / CB F6
+ SET $6,A / CB F7
+ SET $7,B / CB F8
+ SET $7,C / CB F9
+ SET $7,D / CB FA
+ SET $7,E / CB FB
+ SET $7,H / CB FC
+ SET $7,L / CB FD
+ SET $7,(HL) / CB FE
+ SET $7,A / CB FF
+ CALL Z,$16384 / CC 00 40
+ CALL $16384 / CD 00 40
+ ADC A,$64 / CE 40
+ RST $8 / CF
+ RET NC / D0
+ POP DE / D1
+ JP NC,$16384 / D2 00 40
+ OUT (153),A / D3 99
+ CALL NC,$32768 / D4 00 80
+ PUSH DE / D5
+ SUB A,$32 / D6 20
+ RST $16 / D7
+ RET C / D8
+ EXX / D9
+ JP C,$16384 / DA 00 40
+ IN A,(153) / DB 99
+ CALL C,$32768 / DC 00 80
+ ADD IX,BC / DD 09
+ ADD IX,DE / DD 19
+ LD IX,$64 / DD 21 40 00
+ LD (32768),IX / DD 22 00 80
+ INC IX / DD 23
+ INC IXH / DD 24
+ DEC IXH / DD 25
+ LD IXH,$32 / DD 26 20
+ ADD IX,IX / DD 29
+ LD IX,(16384) / DD 2A 00 40
+ DEC IX / DD 2B
+ INC IXL / DD 2C
+ DEC IXL / DD 2D
+ LD IXL,$64 / DD 2E 40
+ INC (IX + 32) / DD 34 20
+ DEC (IX + 16) / DD 35 10
+ LD (IX + 64),$128 / DD 36 40 80
+ ADD IX,SP / DD 39
+ LD B,IXH / DD 44
+ LD B,IXL / DD 45
+ LD B,(IX + 32) / DD 46 20
+ LD C,IXH / DD 4C
+ LD C,IXL / DD 4D
+ LD C,(IX + 48) / DD 4E 30
+ LD D,IXH / DD 54
+ LD D,IXL / DD 55
+ LD D,(IX + 32) / DD 56 20
+ LD E,IXH / DD 5C
+ LD E,IXL / DD 5D
+ LD E,(IX + 64) / DD 5E 40
+ LD IXH,B / DD 60
+ LD IXH,C / DD 61
+ LD IXH,D / DD 62
+ LD IXH,E / DD 63
+ LD IXH,IXH / DD 64
+ LD IXH,IXL / DD 65
+ LD H,(IX + 16) / DD 66 10
+ LD IXH,A / DD 67
+ LD IXL,B / DD 68
+ LD IXL,C / DD 69
+ LD IXL,D / DD 6A
+ LD IXL,E / DD 6B
+ LD IXL,IXH / DD 6C
+ LD IXL,IXL / DD 6D
+ LD L,(IX + 48) / DD 6E 30
+ LD IXL,A / DD 6F
+ LD (IX + 64),B / DD 70 40
+ LD (IX + 16),C / DD 71 10
+ LD (IX + 32),D / DD 72 20
+ LD (IX + 48),E / DD 73 30
+ LD (IX + 16),H / DD 74 10
+ LD (IX + 32),L / DD 75 20
+ LD (IX + 48),A / DD 77 30
+ LD A,IXH / DD 7C
+ LD A,IXL / DD 7D
+ LD A,(IX + 16) / DD 7E 10
+ ADD A,IXH / DD 84
+ ADD A,IXL / DD 85
+ ADD A,(IX + 32) / DD 86 20
+ ADC A,IXH / DD 8C
+ ADC A,IXL / DD 8D
+ ADC A,(IX + 48) / DD 8E 30
+ SUB A,IXH / DD 94
+ SUB A,IXL / DD 95
+ SUB A,(IX + 16) / DD 96 10
+ SBC A,IXH / DD 9C
+ SBC A,IXL / DD 9D
+ SBC A,(IX + 32) / DD 9E 20
+ AND A,IXH / DD A4
+ AND A,IXL / DD A5
+ AND A,(IX + 48) / DD A6 30
+ XOR A,IXH / DD AC
+ XOR A,IXL / DD AD
+ XOR A,(IX + 16) / DD AE 10
+ OR A,IXH / DD B4
+ OR A,IXL / DD B5
+ OR A,(IX + 32) / DD B6 20
+ CP A,IXH / DD BC
+ CP A,IXL / DD BD
+ CP A,(IX + 48) / DD BE 30
+ RLC (IX + 16),B / DD CB 10 00
+ RLC (IX + 32),C / DD CB 20 01
+ RLC (IX + 48),D / DD CB 30 02
+ RLC (IX + 64),E / DD CB 40 03
+ RLC (IX + 16),H / DD CB 10 04
+ RLC (IX + 32),L / DD CB 20 05
+ RLC (IX + 64) / DD CB 40 06
+ RLC (IX + 16),A / DD CB 10 07
+ RRC (IX + 32),B / DD CB 20 08
+ RRC (IX + 48),C / DD CB 30 09
+ RRC (IX + 64),D / DD CB 40 0A
+ RRC (IX + 16),E / DD CB 10 0B
+ RRC (IX + 32),H / DD CB 20 0C
+ RRC (IX + 48),L / DD CB 30 0D
+ RRC (IX + 16) / DD CB 10 0E
+ RRC (IX + 16),A / DD CB 10 0F
+ RL (IX + 32),B / DD CB 20 10
+ RL (IX + 48),C / DD CB 30 11
+ RL (IX + 64),D / DD CB 40 12
+ RL (IX + 16),E / DD CB 10 13
+ RL (IX + 32),H / DD CB 20 14
+ RL (IX + 48),L / DD CB 30 15
+ RL (IX + 32) / DD CB 20 16
+ RL (IX + 16),A / DD CB 10 17
+ RR (IX + 32),B / DD CB 20 18
+ RR (IX + 48),C / DD CB 30 19
+ RR (IX + 64),D / DD CB 40 1A
+ RR (IX + 16),E / DD CB 10 1B
+ RR (IX + 32),H / DD CB 20 1C
+ RR (IX + 48),L / DD CB 30 1D
+ RR (IX + 48) / DD CB 30 1E
+ RR (IX + 16),A / DD CB 10 1F
+ SLA (IX + 32),B / DD CB 20 20
+ SLA (IX + 48),C / DD CB 30 21
+ SLA (IX + 64),D / DD CB 40 22
+ SLA (IX + 16),E / DD CB 10 23
+ SLA (IX + 32),H / DD CB 20 24
+ SLA (IX + 48),L / DD CB 30 25
+ SLA (IX + 64) / DD CB 40 26
+ SLA (IX + 16),A / DD CB 10 27
+ SRA (IX + 32),B / DD CB 20 28
+ SRA (IX + 48),C / DD CB 30 29
+ SRA (IX + 64),D / DD CB 40 2A
+ SRA (IX + 16),E / DD CB 10 2B
+ SRA (IX + 32),H / DD CB 20 2C
+ SRA (IX + 48),L / DD CB 30 2D
+ SRA (IX + 16) / DD CB 10 2E
+ SRA (IX + 16),A / DD CB 10 2F
+ SLL (IX + 32),B / DD CB 20 30
+ SLL (IX + 48),C / DD CB 30 31
+ SLL (IX + 64),D / DD CB 40 32
+ SLL (IX + 16),E / DD CB 10 33
+ SLL (IX + 32),H / DD CB 20 34
+ SLL (IX + 48),L / DD CB 30 35
+ SLL (IX + 32) / DD CB 20 36
+ SLL (IX + 16),A / DD CB 10 37
+ SRL (IX + 32),B / DD CB 20 38
+ SRL (IX + 48),C / DD CB 30 39
+ SRL (IX + 64),D / DD CB 40 3A
+ SRL (IX + 16),E / DD CB 10 3B
+ SRL (IX + 32),H / DD CB 20 3C
+ SRL (IX + 48),L / DD CB 30 3D
+ SRL (IX + 48) / DD CB 30 3E
+ SRL (IX + 64),A / DD CB 40 3F
+ BIT $0,(IX + 16) / DD CB 10 46
+ BIT $1,(IX + 32) / DD CB 20 4E
+ BIT $2,(IX + 48) / DD CB 30 56
+ BIT $3,(IX + 64) / DD CB 40 5E
+ BIT $4,(IX + 16) / DD CB 10 66
+ BIT $5,(IX + 32) / DD CB 20 6E
+ BIT $6,(IX + 48) / DD CB 30 76
+ BIT $7,(IX + 64) / DD CB 40 7E
+ RES $0,(IX + 16),B / DD CB 10 80
+ RES $0,(IX + 32),C / DD CB 20 81
+ RES $0,(IX + 48),D / DD CB 30 82
+ RES $0,(IX + 64),E / DD CB 40 83
+ RES $0,(IX + 16),H / DD CB 10 84
+ RES $0,(IX + 32),L / DD CB 20 85
+ RES $0,(IX + 48) / DD CB 30 86
+ RES $0,(IX + 64),A / DD CB 40 87
+ RES $1,(IX + 16),B / DD CB 10 88
+ RES $1,(IX + 32),C / DD CB 20 89
+ RES $1,(IX + 48),D / DD CB 30 8A
+ RES $1,(IX + 64),E / DD CB 40 8B
+ RES $1,(IX + 16),H / DD CB 10 8C
+ RES $1,(IX + 32),L / DD CB 20 8D
+ RES $1,(IX + 48) / DD CB 30 8E
+ RES $1,(IX + 64),A / DD CB 40 8F
+ RES $2,(IX + 16),B / DD CB 10 90
+ RES $2,(IX + 32),C / DD CB 20 91
+ RES $2,(IX + 48),D / DD CB 30 92
+ RES $2,(IX + 64),E / DD CB 40 93
+ RES $2,(IX + 16),H / DD CB 10 94
+ RES $2,(IX + 32),L / DD CB 20 95
+ RES $2,(IX + 48) / DD CB 30 96
+ RES $2,(IX + 64),A / DD CB 40 97
+ RES $3,(IX + 16),B / DD CB 10 98
+ RES $3,(IX + 32),C / DD CB 20 99
+ RES $3,(IX + 48),D / DD CB 30 9A
+ RES $3,(IX + 64),E / DD CB 40 9B
+ RES $3,(IX + 16),H / DD CB 10 9C
+ RES $3,(IX + 32),L / DD CB 20 9D
+ RES $3,(IX + 48) / DD CB 30 9E
+ RES $3,(IX + 64),A / DD CB 40 9F
+ RES $4,(IX + 16),B / DD CB 10 A0
+ RES $4,(IX + 32),C / DD CB 20 A1
+ RES $4,(IX + 48),D / DD CB 30 A2
+ RES $4,(IX + 64),E / DD CB 40 A3
+ RES $4,(IX + 16),H / DD CB 10 A4
+ RES $4,(IX + 32),L / DD CB 20 A5
+ RES $4,(IX + 48) / DD CB 30 A6
+ RES $4,(IX + 64),A / DD CB 40 A7
+ RES $5,(IX + 16),B / DD CB 10 A8
+ RES $5,(IX + 32),C / DD CB 20 A9
+ RES $5,(IX + 48),D / DD CB 30 AA
+ RES $5,(IX + 64),E / DD CB 40 AB
+ RES $5,(IX + 16),H / DD CB 10 AC
+ RES $5,(IX + 32),L / DD CB 20 AD
+ RES $5,(IX + 48) / DD CB 30 AE
+ RES $5,(IX + 64),A / DD CB 40 AF
+ RES $6,(IX + 16),B / DD CB 10 B0
+ RES $6,(IX + 32),C / DD CB 20 B1
+ RES $6,(IX + 48),D / DD CB 30 B2
+ RES $6,(IX + 64),E / DD CB 40 B3
+ RES $6,(IX + 16),H / DD CB 10 B4
+ RES $6,(IX + 32),L / DD CB 20 B5
+ RES $6,(IX + 48) / DD CB 30 B6
+ RES $6,(IX + 64),A / DD CB 40 B7
+ RES $7,(IX + 16),B / DD CB 10 B8
+ RES $7,(IX + 32),C / DD CB 20 B9
+ RES $7,(IX + 48),D / DD CB 30 BA
+ RES $7,(IX + 64),E / DD CB 40 BB
+ RES $7,(IX + 16),H / DD CB 10 BC
+ RES $7,(IX + 32),L / DD CB 20 BD
+ RES $7,(IX + 48) / DD CB 30 BE
+ RES $7,(IX + 64),A / DD CB 40 BF
+ SET $0,(IX + 16),B / DD CB 10 C0
+ SET $0,(IX + 32),C / DD CB 20 C1
+ SET $0,(IX + 48),D / DD CB 30 C2
+ SET $0,(IX + 64),E / DD CB 40 C3
+ SET $0,(IX + 16),H / DD CB 10 C4
+ SET $0,(IX + 32),L / DD CB 20 C5
+ SET $0,(IX + 48) / DD CB 30 C6
+ SET $0,(IX + 64),A / DD CB 40 C7
+ SET $1,(IX + 16),B / DD CB 10 C8
+ SET $1,(IX + 32),C / DD CB 20 C9
+ SET $1,(IX + 48),D / DD CB 30 CA
+ SET $1,(IX + 64),E / DD CB 40 CB
+ SET $1,(IX + 16),H / DD CB 10 CC
+ SET $1,(IX + 32),L / DD CB 20 CD
+ SET $1,(IX + 48) / DD CB 30 CE
+ SET $1,(IX + 64),A / DD CB 40 CF
+ SET $2,(IX + 16),B / DD CB 10 D0
+ SET $2,(IX + 32),C / DD CB 20 D1
+ SET $2,(IX + 48),D / DD CB 30 D2
+ SET $2,(IX + 64),E / DD CB 40 D3
+ SET $2,(IX + 16),H / DD CB 10 D4
+ SET $2,(IX + 32),L / DD CB 20 D5
+ SET $2,(IX + 48) / DD CB 30 D6
+ SET $2,(IX + 64),A / DD CB 40 D7
+ SET $3,(IX + 16),B / DD CB 10 D8
+ SET $3,(IX + 32),C / DD CB 20 D9
+ SET $3,(IX + 48),D / DD CB 30 DA
+ SET $3,(IX + 64),E / DD CB 40 DB
+ SET $3,(IX + 16),H / DD CB 10 DC
+ SET $3,(IX + 32),L / DD CB 20 DD
+ SET $3,(IX + 48) / DD CB 30 DE
+ SET $3,(IX + 64),A / DD CB 40 DF
+ SET $4,(IX + 16),B / DD CB 10 E0
+ SET $4,(IX + 32),C / DD CB 20 E1
+ SET $4,(IX + 48),D / DD CB 30 E2
+ SET $4,(IX + 64),E / DD CB 40 E3
+ SET $4,(IX + 16),H / DD CB 10 E4
+ SET $4,(IX + 32),L / DD CB 20 E5
+ SET $4,(IX + 48) / DD CB 30 E6
+ SET $4,(IX + 64),A / DD CB 40 E7
+ SET $5,(IX + 16),B / DD CB 10 E8
+ SET $5,(IX + 32),C / DD CB 20 E9
+ SET $5,(IX + 48),D / DD CB 30 EA
+ SET $5,(IX + 64),E / DD CB 40 EB
+ SET $5,(IX + 16),H / DD CB 10 EC
+ SET $5,(IX + 32),L / DD CB 20 ED
+ SET $5,(IX + 48) / DD CB 30 EE
+ SET $5,(IX + 64),A / DD CB 40 EF
+ SET $6,(IX + 16),B / DD CB 10 F0
+ SET $6,(IX + 32),C / DD CB 20 F1
+ SET $6,(IX + 48),D / DD CB 30 F2
+ SET $6,(IX + 64),E / DD CB 40 F3
+ SET $6,(IX + 16),H / DD CB 10 F4
+ SET $6,(IX + 32),L / DD CB 20 F5
+ SET $6,(IX + 48) / DD CB 30 F6
+ SET $6,(IX + 64),A / DD CB 40 F7
+ SET $7,(IX + 16),B / DD CB 10 F8
+ SET $7,(IX + 32),C / DD CB 20 F9
+ SET $7,(IX + 48),D / DD CB 30 FA
+ SET $7,(IX + 64),E / DD CB 40 FB
+ SET $7,(IX + 16),H / DD CB 10 FC
+ SET $7,(IX + 32),L / DD CB 20 FD
+ SET $7,(IX + 48) / DD CB 30 FE
+ SET $7,(IX + 64),A / DD CB 40 FF
+ POP IX / DD E1
+ EX (SP),IX / DD E3
+ PUSH IX / DD E5
+ JP IX / DD E9
+ LD SP,IX / DD F9
+ SBC A,$64 / DE 40
+ RST $24 / DF
+ RET PO / E0
+ POP HL / E1
+ JP PO,$32768 / E2 00 80
+ EX (SP),HL / E3
+ CALL PO,$16384 / E4 00 40
+ PUSH HL / E5
+ AND A,$16 / E6 10
+ RST $32 / E7
+ RET PE / E8
+ JP HL / E9
+ JP PE,$16384 / EA 00 40
+ EX DE,HL / EB
+ CALL PE,$16384 / EC 00 40
+ IN B,(C) / ED 40
+ OUT (C),B / ED 41
+ SBC HL,BC / ED 42
+ LD (32768),BC / ED 43 00 80
+ NEG / ED 44
+ RETN / ED 45
+ IM $0 / ED 46
+ LD I,A / ED 47
+ IN C,(C) / ED 48
+ OUT (C),C / ED 49
+ ADC HL,BC / ED 4A
+ LD BC,(16384) / ED 4B 00 40
+ RETI / ED 4D
+ LD R,A / ED 4F
+ IN D,(C) / ED 50
+ OUT (C),D / ED 51
+ SBC HL,DE / ED 52
+ LD (32768),DE / ED 53 00 80
+ IM $1 / ED 56
+ LD A,I / ED 57
+ IN E,(C) / ED 58
+ OUT (C),E / ED 59
+ ADC HL,DE / ED 5A
+ LD DE,(16384) / ED 5B 00 40
+ IM $2 / ED 5E
+ LD A,R / ED 5F
+ IN H,(C) / ED 60
+ OUT (C),H / ED 61
+ SBC HL,HL / ED 62
+ RRD / ED 67
+ IN L,(C) / ED 68
+ OUT (C),L / ED 69
+ ADC HL,HL / ED 6A
+ RLD / ED 6F
+ IN F,(C) / ED 70
+ OUT (C),$0 / ED 71
+ SBC HL,SP / ED 72
+ LD (16384),SP / ED 73 00 40
+ IN A,(C) / ED 78
+ OUT (C),A / ED 79
+ ADC HL,SP / ED 7A
+ LD SP,(32768) / ED 7B 00 80
+ LDI / ED A0
+ CPI / ED A1
+ INI / ED A2
+ OUTI / ED A3
+ LDD / ED A8
+ CPD / ED A9
+ IND / ED AA
+ OUTD / ED AB
+ LDIR / ED B0
+ CPIR / ED B1
+ INIR / ED B2
+ OTIR / ED B3
+ LDDR / ED B8
+ CPDR / ED B9
+ INDR / ED BA
+ OTDR / ED BB
+ XOR A,$32 / EE 20
+ RST $40 / EF
+ RET P / F0
+ POP AF / F1
+ JP P,$32768 / F2 00 80
+ DI / F3
+ CALL P,$16384 / F4 00 40
+ PUSH AF / F5
+ OR A,$32 / F6 20
+ RST $48 / F7
+ RET M / F8
+ LD SP,HL / F9
+ JP M,$32768 / FA 00 80
+ EI / FB
+ CALL M,$16384 / FC 00 40
+ ADD IY,BC / FD 09
+ ADD IY,DE / FD 19
+ LD IY,$32768 / FD 21 00 80
+ LD (16384),IY / FD 22 00 40
+ INC IY / FD 23
+ INC IYH / FD 24
+ DEC IYH / FD 25
+ LD IYH,$32 / FD 26 20
+ ADD IY,IY / FD 29
+ LD IY,(32768) / FD 2A 00 80
+ DEC IY / FD 2B
+ INC IYL / FD 2C
+ DEC IYL / FD 2D
+ LD IYL,$16 / FD 2E 10
+ INC (IY + 32) / FD 34 20
+ DEC (IY + 48) / FD 35 30
+ LD (IY + 64),$16 / FD 36 40 10
+ ADD IY,SP / FD 39
+ LD B,IYH / FD 44
+ LD B,IYL / FD 45
+ LD B,(IY + 32) / FD 46 20
+ LD C,IYH / FD 4C
+ LD C,IYL / FD 4D
+ LD C,(IY + 48) / FD 4E 30
+ LD D,IYH / FD 54
+ LD D,IYL / FD 55
+ LD D,(IY + 64) / FD 56 40
+ LD E,IYH / FD 5C
+ LD E,IYL / FD 5D
+ LD E,(IY + 16) / FD 5E 10
+ LD IYH,B / FD 60
+ LD IYH,C / FD 61
+ LD IYH,D / FD 62
+ LD IYH,E / FD 63
+ LD IYH,IYH / FD 64
+ LD IYH,IYL / FD 65
+ LD H,(IY + 32) / FD 66 20
+ LD IYH,A / FD 67
+ LD IYL,B / FD 68
+ LD IYL,C / FD 69
+ LD IYL,D / FD 6A
+ LD IYL,E / FD 6B
+ LD IYL,IYH / FD 6C
+ LD IYL,IYL / FD 6D
+ LD L,(IY + 48) / FD 6E 30
+ LD IYL,A / FD 6F
+ LD (IY + 64),B / FD 70 40
+ LD (IY + 16),C / FD 71 10
+ LD (IY + 32),D / FD 72 20
+ LD (IY + 48),E / FD 73 30
+ LD (IY + 64),H / FD 74 40
+ LD (IY + 16),L / FD 75 10
+ LD (IY + 32),A / FD 77 20
+ LD A,IYH / FD 7C
+ LD A,IYL / FD 7D
+ LD A,(IY + 48) / FD 7E 30
+ ADD A,IYH / FD 84
+ ADD A,IYL / FD 85
+ ADD A,(IY + 64) / FD 86 40
+ ADC A,IYH / FD 8C
+ ADC A,IYL / FD 8D
+ ADC A,(IY + 16) / FD 8E 10
+ SUB A,IYH / FD 94
+ SUB A,IYL / FD 95
+ SUB A,(IY + 32) / FD 96 20
+ SBC A,IYH / FD 9C
+ SBC A,IYL / FD 9D
+ SBC A,(IY + 48) / FD 9E 30
+ AND A,IYH / FD A4
+ AND A,IYL / FD A5
+ AND A,(IY + 64) / FD A6 40
+ XOR A,IYH / FD AC
+ XOR A,IYL / FD AD
+ XOR A,(IY + 16) / FD AE 10
+ OR A,IYH / FD B4
+ OR A,IYL / FD B5
+ OR A,(IY + 32) / FD B6 20
+ CP A,IYH / FD BC
+ CP A,IYL / FD BD
+ CP A,(IY + 48) / FD BE 30
+ RLC (IY + 16),B / FD CB 10 00
+ RLC (IY + 32),C / FD CB 20 01
+ RLC (IY + 48),D / FD CB 30 02
+ RLC (IY + 64),E / FD CB 40 03
+ RLC (IY + 16),H / FD CB 10 04
+ RLC (IY + 32),L / FD CB 20 05
+ RLC (IY + 16) / FD CB 10 06
+ RLC (IY + 32),A / FD CB 20 07
+ RRC (IY + 48),B / FD CB 30 08
+ RRC (IY + 64),C / FD CB 40 09
+ RRC (IY + 16),D / FD CB 10 0A
+ RRC (IY + 32),E / FD CB 20 0B
+ RRC (IY + 48),H / FD CB 30 0C
+ RRC (IY + 64),L / FD CB 40 0D
+ RRC (IY + 32) / FD CB 20 0E
+ RRC (IY + 16),A / FD CB 10 0F
+ RL (IY + 32),B / FD CB 20 10
+ RL (IY + 48),C / FD CB 30 11
+ RL (IY + 64),D / FD CB 40 12
+ RL (IY + 16),E / FD CB 10 13
+ RL (IY + 32),H / FD CB 20 14
+ RL (IY + 48),L / FD CB 30 15
+ RL (IY + 48) / FD CB 30 16
+ RL (IY + 16),A / FD CB 10 17
+ RR (IY + 32),B / FD CB 20 18
+ RR (IY + 48),C / FD CB 30 19
+ RR (IY + 64),D / FD CB 40 1A
+ RR (IY + 16),E / FD CB 10 1B
+ RR (IY + 32),H / FD CB 20 1C
+ RR (IY + 48),L / FD CB 30 1D
+ RR (IY + 64) / FD CB 40 1E
+ RR (IY + 16),A / FD CB 10 1F
+ SLA (IY + 32),B / FD CB 20 20
+ SLA (IY + 48),C / FD CB 30 21
+ SLA (IY + 64),D / FD CB 40 22
+ SLA (IY + 16),E / FD CB 10 23
+ SLA (IY + 32),H / FD CB 20 24
+ SLA (IY + 48),L / FD CB 30 25
+ SLA (IY + 16) / FD CB 10 26
+ SLA (IY + 16),A / FD CB 10 27
+ SRA (IY + 32),B / FD CB 20 28
+ SRA (IY + 48),C / FD CB 30 29
+ SRA (IY + 64),D / FD CB 40 2A
+ SRA (IY + 16),E / FD CB 10 2B
+ SRA (IY + 32),H / FD CB 20 2C
+ SRA (IY + 48),L / FD CB 30 2D
+ SRA (IY + 32) / FD CB 20 2E
+ SRA (IY + 48),A / FD CB 30 2F
+ SLL (IY + 16),B / FD CB 10 30
+ SLL (IY + 32),C / FD CB 20 31
+ SLL (IY + 48),D / FD CB 30 32
+ SLL (IY + 64),E / FD CB 40 33
+ SLL (IY + 16),H / FD CB 10 34
+ SLL (IY + 32),L / FD CB 20 35
+ SLL (IY + 48) / FD CB 30 36
+ SLL (IY + 16),A / FD CB 10 37
+ SRL (IY + 32),B / FD CB 20 38
+ SRL (IY + 48),C / FD CB 30 39
+ SRL (IY + 64),D / FD CB 40 3A
+ SRL (IY + 16),E / FD CB 10 3B
+ SRL (IY + 32),H / FD CB 20 3C
+ SRL (IY + 48),L / FD CB 30 3D
+ SRL (IY + 64) / FD CB 40 3E
+ SRL (IY + 16),A / FD CB 10 3F
+ BIT $0,(IY + 16) / FD CB 10 46
+ BIT $1,(IY + 32) / FD CB 20 4E
+ BIT $2,(IY + 48) / FD CB 30 56
+ BIT $3,(IY + 64) / FD CB 40 5E
+ BIT $4,(IY + 16) / FD CB 10 66
+ BIT $5,(IY + 32) / FD CB 20 6E
+ BIT $6,(IY + 48) / FD CB 30 76
+ BIT $7,(IY + 64) / FD CB 40 7E
+ RES $0,(IY + 16),B / FD CB 10 80
+ RES $0,(IY + 32),C / FD CB 20 81
+ RES $0,(IY + 48),D / FD CB 30 82
+ RES $0,(IY + 64),E / FD CB 40 83
+ RES $0,(IY + 16),H / FD CB 10 84
+ RES $0,(IY + 32),L / FD CB 20 85
+ RES $0,(IY + 48) / FD CB 30 86
+ RES $0,(IY + 64),A / FD CB 40 87
+ RES $1,(IY + 16),B / FD CB 10 88
+ RES $1,(IY + 32),C / FD CB 20 89
+ RES $1,(IY + 48),D / FD CB 30 8A
+ RES $1,(IY + 64),E / FD CB 40 8B
+ RES $1,(IY + 16),H / FD CB 10 8C
+ RES $1,(IY + 32),L / FD CB 20 8D
+ RES $1,(IY + 48) / FD CB 30 8E
+ RES $1,(IY + 64),A / FD CB 40 8F
+ RES $2,(IY + 16),B / FD CB 10 90
+ RES $2,(IY + 32),C / FD CB 20 91
+ RES $2,(IY + 48),D / FD CB 30 92
+ RES $2,(IY + 64),E / FD CB 40 93
+ RES $2,(IY + 16),H / FD CB 10 94
+ RES $2,(IY + 32),L / FD CB 20 95
+ RES $2,(IY + 48) / FD CB 30 96
+ RES $2,(IY + 64),A / FD CB 40 97
+ RES $3,(IY + 16),B / FD CB 10 98
+ RES $3,(IY + 32),C / FD CB 20 99
+ RES $3,(IY + 48),D / FD CB 30 9A
+ RES $3,(IY + 64),E / FD CB 40 9B
+ RES $3,(IY + 16),H / FD CB 10 9C
+ RES $3,(IY + 32),L / FD CB 20 9D
+ RES $3,(IY + 48) / FD CB 30 9E
+ RES $3,(IY + 64),A / FD CB 40 9F
+ RES $4,(IY + 16),B / FD CB 10 A0
+ RES $4,(IY + 32),C / FD CB 20 A1
+ RES $4,(IY + 48),D / FD CB 30 A2
+ RES $4,(IY + 64),E / FD CB 40 A3
+ RES $4,(IY + 16),H / FD CB 10 A4
+ RES $4,(IY + 32),L / FD CB 20 A5
+ RES $4,(IY + 48) / FD CB 30 A6
+ RES $4,(IY + 64),A / FD CB 40 A7
+ RES $5,(IY + 16),B / FD CB 10 A8
+ RES $5,(IY + 32),C / FD CB 20 A9
+ RES $5,(IY + 48),D / FD CB 30 AA
+ RES $5,(IY + 64),E / FD CB 40 AB
+ RES $5,(IY + 16),H / FD CB 10 AC
+ RES $5,(IY + 32),L / FD CB 20 AD
+ RES $5,(IY + 48) / FD CB 30 AE
+ RES $5,(IY + 64),A / FD CB 40 AF
+ RES $6,(IY + 16),B / FD CB 10 B0
+ RES $6,(IY + 32),C / FD CB 20 B1
+ RES $6,(IY + 48),D / FD CB 30 B2
+ RES $6,(IY + 64),E / FD CB 40 B3
+ RES $6,(IY + 16),H / FD CB 10 B4
+ RES $6,(IY + 32),L / FD CB 20 B5
+ RES $6,(IY + 48) / FD CB 30 B6
+ RES $6,(IY + 64),A / FD CB 40 B7
+ RES $7,(IY + 16),B / FD CB 10 B8
+ RES $7,(IY + 32),C / FD CB 20 B9
+ RES $7,(IY + 48),D / FD CB 30 BA
+ RES $7,(IY + 64),E / FD CB 40 BB
+ RES $7,(IY + 16),H / FD CB 10 BC
+ RES $7,(IY + 32),L / FD CB 20 BD
+ RES $7,(IY + 48) / FD CB 30 BE
+ RES $7,(IY + 64),A / FD CB 40 BF
+ SET $0,(IY + 16),B / FD CB 10 C0
+ SET $0,(IY + 32),C / FD CB 20 C1
+ SET $0,(IY + 48),D / FD CB 30 C2
+ SET $0,(IY + 64),E / FD CB 40 C3
+ SET $0,(IY + 16),H / FD CB 10 C4
+ SET $0,(IY + 32),L / FD CB 20 C5
+ SET $0,(IY + 48) / FD CB 30 C6
+ SET $0,(IY + 64),A / FD CB 40 C7
+ SET $1,(IY + 16),B / FD CB 10 C8
+ SET $1,(IY + 32),C / FD CB 20 C9
+ SET $1,(IY + 48),D / FD CB 30 CA
+ SET $1,(IY + 64),E / FD CB 40 CB
+ SET $1,(IY + 16),H / FD CB 10 CC
+ SET $1,(IY + 32),L / FD CB 20 CD
+ SET $1,(IY + 48) / FD CB 30 CE
+ SET $1,(IY + 64),A / FD CB 40 CF
+ SET $2,(IY + 16),B / FD CB 10 D0
+ SET $2,(IY + 32),C / FD CB 20 D1
+ SET $2,(IY + 48),D / FD CB 30 D2
+ SET $2,(IY + 64),E / FD CB 40 D3
+ SET $2,(IY + 16),H / FD CB 10 D4
+ SET $2,(IY + 32),L / FD CB 20 D5
+ SET $2,(IY + 48) / FD CB 30 D6
+ SET $2,(IY + 64),A / FD CB 40 D7
+ SET $3,(IY + 16),B / FD CB 10 D8
+ SET $3,(IY + 32),C / FD CB 20 D9
+ SET $3,(IY + 48),D / FD CB 30 DA
+ SET $3,(IY + 64),E / FD CB 40 DB
+ SET $3,(IY + 16),H / FD CB 10 DC
+ SET $3,(IY + 32),L / FD CB 20 DD
+ SET $3,(IY + 48) / FD CB 30 DE
+ SET $3,(IY + 64),A / FD CB 40 DF
+ SET $4,(IY + 16),B / FD CB 10 E0
+ SET $4,(IY + 32),C / FD CB 20 E1
+ SET $4,(IY + 48),D / FD CB 30 E2
+ SET $4,(IY + 64),E / FD CB 40 E3
+ SET $4,(IY + 16),H / FD CB 10 E4
+ SET $4,(IY + 32),L / FD CB 20 E5
+ SET $4,(IY + 48) / FD CB 30 E6
+ SET $4,(IY + 64),A / FD CB 40 E7
+ SET $5,(IY + 16),B / FD CB 10 E8
+ SET $5,(IY + 32),C / FD CB 20 E9
+ SET $5,(IY + 48),D / FD CB 30 EA
+ SET $5,(IY + 64),E / FD CB 40 EB
+ SET $5,(IY + 16),H / FD CB 10 EC
+ SET $5,(IY + 32),L / FD CB 20 ED
+ SET $5,(IY + 48) / FD CB 30 EE
+ SET $5,(IY + 64),A / FD CB 40 EF
+ SET $6,(IY + 16),B / FD CB 10 F0
+ SET $6,(IY + 32),C / FD CB 20 F1
+ SET $6,(IY + 48),D / FD CB 30 F2
+ SET $6,(IY + 64),E / FD CB 40 F3
+ SET $6,(IY + 16),H / FD CB 10 F4
+ SET $6,(IY + 32),L / FD CB 20 F5
+ SET $6,(IY + 48) / FD CB 30 F6
+ SET $6,(IY + 64),A / FD CB 40 F7
+ SET $7,(IY + 16),B / FD CB 10 F8
+ SET $7,(IY + 32),C / FD CB 20 F9
+ SET $7,(IY + 48),D / FD CB 30 FA
+ SET $7,(IY + 64),E / FD CB 40 FB
+ SET $7,(IY + 16),H / FD CB 10 FC
+ SET $7,(IY + 32),L / FD CB 20 FD
+ SET $7,(IY + 48) / FD CB 30 FE
+ SET $7,(IY + 64),A / FD CB 40 FF
+ POP IY / FD E1
+ EX (SP),IY / FD E3
+ PUSH IY / FD E5
+ JP IY / FD E9
+ LD SP,IY / FD F9
+ CP A,$32 / FE 20
+ RST $56 / FF
+
+/ and now, we are going to test at&t syntax in z80
+ INC 32(IX) / DD 34 20
+ DEC 16(IX) / DD 35 10
+ LD 64(IX),$128 / DD 36 40 80
+ LD B,32(IX) / DD 46 20
+ LD C,48(IX) / DD 4E 30
+ LD D,32(IX) / DD 56 20
+ LD E,64(IX) / DD 5E 40
+ LD H,16(IX) / DD 66 10
+ LD L,48(IX) / DD 6E 30
+ LD 64(IX),B / DD 70 40
+ LD 16(IX),C / DD 71 10
+ LD 32(IX),D / DD 72 20
+ LD 48(IX),E / DD 73 30
+ LD 16(IX),H / DD 74 10
+ LD 32(IX),L / DD 75 20
+ LD 48(IX),A / DD 77 30
+ LD A,16(IX) / DD 7E 10
+ ADD A,32(IX) / DD 86 20
+ ADC A,48(IX) / DD 8E 30
+ SUB A,16(IX) / DD 96 10
+ SBC A,32(IX) / DD 9E 20
+ AND A,48(IX) / DD A6 30
+ XOR A,16(IX) / DD AE 10
+ OR A,32(IX) / DD B6 20
+ CP A,48(IX) / DD BE 30
+ RLC 16(IX),B / DD CB 10 00
+ RLC 32(IX),C / DD CB 20 01
+ RLC 48(IX),D / DD CB 30 02
+ RLC 64(IX),E / DD CB 40 03
+ RLC 16(IX),H / DD CB 10 04
+ RLC 32(IX),L / DD CB 20 05
+ RLC 64(IX) / DD CB 40 06
+ RLC 16(IX),A / DD CB 10 07
+ RRC 32(IX),B / DD CB 20 08
+ RRC 48(IX),C / DD CB 30 09
+ RRC 64(IX),D / DD CB 40 0A
+ RRC 16(IX),E / DD CB 10 0B
+ RRC 32(IX),H / DD CB 20 0C
+ RRC 48(IX),L / DD CB 30 0D
+ RRC 16(IX) / DD CB 10 0E
+ RRC 16(IX),A / DD CB 10 0F
+ RL 32(IX),B / DD CB 20 10
+ RL 48(IX),C / DD CB 30 11
+ RL 64(IX),D / DD CB 40 12
+ RL 16(IX),E / DD CB 10 13
+ RL 32(IX),H / DD CB 20 14
+ RL 48(IX),L / DD CB 30 15
+ RL 32(IX) / DD CB 20 16
+ RL 16(IX),A / DD CB 10 17
+ RR 32(IX),B / DD CB 20 18
+ RR 48(IX),C / DD CB 30 19
+ RR 64(IX),D / DD CB 40 1A
+ RR 16(IX),E / DD CB 10 1B
+ RR 32(IX),H / DD CB 20 1C
+ RR 48(IX),L / DD CB 30 1D
+ RR 48(IX) / DD CB 30 1E
+ RR 16(IX),A / DD CB 10 1F
+ SLA 32(IX),B / DD CB 20 20
+ SLA 48(IX),C / DD CB 30 21
+ SLA 64(IX),D / DD CB 40 22
+ SLA 16(IX),E / DD CB 10 23
+ SLA 32(IX),H / DD CB 20 24
+ SLA 48(IX),L / DD CB 30 25
+ SLA 64(IX) / DD CB 40 26
+ SLA 16(IX),A / DD CB 10 27
+ SRA 32(IX),B / DD CB 20 28
+ SRA 48(IX),C / DD CB 30 29
+ SRA 64(IX),D / DD CB 40 2A
+ SRA 16(IX),E / DD CB 10 2B
+ SRA 32(IX),H / DD CB 20 2C
+ SRA 48(IX),L / DD CB 30 2D
+ SRA 16(IX) / DD CB 10 2E
+ SRA 16(IX),A / DD CB 10 2F
+ SLL 32(IX),B / DD CB 20 30
+ SLL 48(IX),C / DD CB 30 31
+ SLL 64(IX),D / DD CB 40 32
+ SLL 16(IX),E / DD CB 10 33
+ SLL 32(IX),H / DD CB 20 34
+ SLL 48(IX),L / DD CB 30 35
+ SLL 32(IX) / DD CB 20 36
+ SLL 16(IX),A / DD CB 10 37
+ SRL 32(IX),B / DD CB 20 38
+ SRL 48(IX),C / DD CB 30 39
+ SRL 64(IX),D / DD CB 40 3A
+ SRL 16(IX),E / DD CB 10 3B
+ SRL 32(IX),H / DD CB 20 3C
+ SRL 48(IX),L / DD CB 30 3D
+ SRL 48(IX) / DD CB 30 3E
+ SRL 64(IX),A / DD CB 40 3F
+ BIT $0,16(IX) / DD CB 10 46
+ BIT $1,32(IX) / DD CB 20 4E
+ BIT $2,48(IX) / DD CB 30 56
+ BIT $3,64(IX) / DD CB 40 5E
+ BIT $4,16(IX) / DD CB 10 66
+ BIT $5,32(IX) / DD CB 20 6E
+ BIT $6,48(IX) / DD CB 30 76
+ BIT $7,64(IX) / DD CB 40 7E
+ RES $0,16(IX),B / DD CB 10 80
+ RES $0,32(IX),C / DD CB 20 81
+ RES $0,48(IX),D / DD CB 30 82
+ RES $0,64(IX),E / DD CB 40 83
+ RES $0,16(IX),H / DD CB 10 84
+ RES $0,32(IX),L / DD CB 20 85
+ RES $0,48(IX) / DD CB 30 86
+ RES $0,64(IX),A / DD CB 40 87
+ RES $1,16(IX),B / DD CB 10 88
+ RES $1,32(IX),C / DD CB 20 89
+ RES $1,48(IX),D / DD CB 30 8A
+ RES $1,64(IX),E / DD CB 40 8B
+ RES $1,16(IX),H / DD CB 10 8C
+ RES $1,32(IX),L / DD CB 20 8D
+ RES $1,48(IX) / DD CB 30 8E
+ RES $1,64(IX),A / DD CB 40 8F
+ RES $2,16(IX),B / DD CB 10 90
+ RES $2,32(IX),C / DD CB 20 91
+ RES $2,48(IX),D / DD CB 30 92
+ RES $2,64(IX),E / DD CB 40 93
+ RES $2,16(IX),H / DD CB 10 94
+ RES $2,32(IX),L / DD CB 20 95
+ RES $2,48(IX) / DD CB 30 96
+ RES $2,64(IX),A / DD CB 40 97
+ RES $3,16(IX),B / DD CB 10 98
+ RES $3,32(IX),C / DD CB 20 99
+ RES $3,48(IX),D / DD CB 30 9A
+ RES $3,64(IX),E / DD CB 40 9B
+ RES $3,16(IX),H / DD CB 10 9C
+ RES $3,32(IX),L / DD CB 20 9D
+ RES $3,48(IX) / DD CB 30 9E
+ RES $3,64(IX),A / DD CB 40 9F
+ RES $4,16(IX),B / DD CB 10 A0
+ RES $4,32(IX),C / DD CB 20 A1
+ RES $4,48(IX),D / DD CB 30 A2
+ RES $4,64(IX),E / DD CB 40 A3
+ RES $4,16(IX),H / DD CB 10 A4
+ RES $4,32(IX),L / DD CB 20 A5
+ RES $4,48(IX) / DD CB 30 A6
+ RES $4,64(IX),A / DD CB 40 A7
+ RES $5,16(IX),B / DD CB 10 A8
+ RES $5,32(IX),C / DD CB 20 A9
+ RES $5,48(IX),D / DD CB 30 AA
+ RES $5,64(IX),E / DD CB 40 AB
+ RES $5,16(IX),H / DD CB 10 AC
+ RES $5,32(IX),L / DD CB 20 AD
+ RES $5,48(IX) / DD CB 30 AE
+ RES $5,64(IX),A / DD CB 40 AF
+ RES $6,16(IX),B / DD CB 10 B0
+ RES $6,32(IX),C / DD CB 20 B1
+ RES $6,48(IX),D / DD CB 30 B2
+ RES $6,64(IX),E / DD CB 40 B3
+ RES $6,16(IX),H / DD CB 10 B4
+ RES $6,32(IX),L / DD CB 20 B5
+ RES $6,48(IX) / DD CB 30 B6
+ RES $6,64(IX),A / DD CB 40 B7
+ RES $7,16(IX),B / DD CB 10 B8
+ RES $7,32(IX),C / DD CB 20 B9
+ RES $7,48(IX),D / DD CB 30 BA
+ RES $7,64(IX),E / DD CB 40 BB
+ RES $7,16(IX),H / DD CB 10 BC
+ RES $7,32(IX),L / DD CB 20 BD
+ RES $7,48(IX) / DD CB 30 BE
+ RES $7,64(IX),A / DD CB 40 BF
+ SET $0,16(IX),B / DD CB 10 C0
+ SET $0,32(IX),C / DD CB 20 C1
+ SET $0,48(IX),D / DD CB 30 C2
+ SET $0,64(IX),E / DD CB 40 C3
+ SET $0,16(IX),H / DD CB 10 C4
+ SET $0,32(IX),L / DD CB 20 C5
+ SET $0,48(IX) / DD CB 30 C6
+ SET $0,64(IX),A / DD CB 40 C7
+ SET $1,16(IX),B / DD CB 10 C8
+ SET $1,32(IX),C / DD CB 20 C9
+ SET $1,48(IX),D / DD CB 30 CA
+ SET $1,64(IX),E / DD CB 40 CB
+ SET $1,16(IX),H / DD CB 10 CC
+ SET $1,32(IX),L / DD CB 20 CD
+ SET $1,48(IX) / DD CB 30 CE
+ SET $1,64(IX),A / DD CB 40 CF
+ SET $2,16(IX),B / DD CB 10 D0
+ SET $2,32(IX),C / DD CB 20 D1
+ SET $2,48(IX),D / DD CB 30 D2
+ SET $2,64(IX),E / DD CB 40 D3
+ SET $2,16(IX),H / DD CB 10 D4
+ SET $2,32(IX),L / DD CB 20 D5
+ SET $2,48(IX) / DD CB 30 D6
+ SET $2,64(IX),A / DD CB 40 D7
+ SET $3,16(IX),B / DD CB 10 D8
+ SET $3,32(IX),C / DD CB 20 D9
+ SET $3,48(IX),D / DD CB 30 DA
+ SET $3,64(IX),E / DD CB 40 DB
+ SET $3,16(IX),H / DD CB 10 DC
+ SET $3,32(IX),L / DD CB 20 DD
+ SET $3,48(IX) / DD CB 30 DE
+ SET $3,64(IX),A / DD CB 40 DF
+ SET $4,16(IX),B / DD CB 10 E0
+ SET $4,32(IX),C / DD CB 20 E1
+ SET $4,48(IX),D / DD CB 30 E2
+ SET $4,64(IX),E / DD CB 40 E3
+ SET $4,16(IX),H / DD CB 10 E4
+ SET $4,32(IX),L / DD CB 20 E5
+ SET $4,48(IX) / DD CB 30 E6
+ SET $4,64(IX),A / DD CB 40 E7
+ SET $5,16(IX),B / DD CB 10 E8
+ SET $5,32(IX),C / DD CB 20 E9
+ SET $5,48(IX),D / DD CB 30 EA
+ SET $5,64(IX),E / DD CB 40 EB
+ SET $5,16(IX),H / DD CB 10 EC
+ SET $5,32(IX),L / DD CB 20 ED
+ SET $5,48(IX) / DD CB 30 EE
+ SET $5,64(IX),A / DD CB 40 EF
+ SET $6,16(IX),B / DD CB 10 F0
+ SET $6,32(IX),C / DD CB 20 F1
+ SET $6,48(IX),D / DD CB 30 F2
+ SET $6,64(IX),E / DD CB 40 F3
+ SET $6,16(IX),H / DD CB 10 F4
+ SET $6,32(IX),L / DD CB 20 F5
+ SET $6,48(IX) / DD CB 30 F6
+ SET $6,64(IX),A / DD CB 40 F7
+ SET $7,16(IX),B / DD CB 10 F8
+ SET $7,32(IX),C / DD CB 20 F9
+ SET $7,48(IX),D / DD CB 30 FA
+ SET $7,64(IX),E / DD CB 40 FB
+ SET $7,16(IX),H / DD CB 10 FC
+ SET $7,32(IX),L / DD CB 20 FD
+ SET $7,48(IX) / DD CB 30 FE
+ SET $7,64(IX),A / DD CB 40 FF
+ INC 32(IY) / FD 34 20
+ DEC 48(IY) / FD 35 30
+ LD 64(IY),$16 / FD 36 40 10
+ LD B,32(IY) / FD 46 20
+ LD C,48(IY) / FD 4E 30
+ LD D,64(IY) / FD 56 40
+ LD E,16(IY) / FD 5E 10
+ LD H,32(IY) / FD 66 20
+ LD L,48(IY) / FD 6E 30
+ LD 64(IY),B / FD 70 40
+ LD 16(IY),C / FD 71 10
+ LD 32(IY),D / FD 72 20
+ LD 48(IY),E / FD 73 30
+ LD 64(IY),H / FD 74 40
+ LD 16(IY),L / FD 75 10
+ LD 32(IY),A / FD 77 20
+ LD A,48(IY) / FD 7E 30
+ ADD A,64(IY) / FD 86 40
+ ADC A,16(IY) / FD 8E 10
+ SUB A,32(IY) / FD 96 20
+ SBC A,48(IY) / FD 9E 30
+ AND A,64(IY) / FD A6 40
+ XOR A,16(IY) / FD AE 10
+ OR A,32(IY) / FD B6 20
+ CP A,48(IY) / FD BE 30
+ RLC 16(IY),B / FD CB 10 00
+ RLC 32(IY),C / FD CB 20 01
+ RLC 48(IY),D / FD CB 30 02
+ RLC 64(IY),E / FD CB 40 03
+ RLC 16(IY),H / FD CB 10 04
+ RLC 32(IY),L / FD CB 20 05
+ RLC 16(IY) / FD CB 10 06
+ RLC 32(IY),A / FD CB 20 07
+ RRC 48(IY),B / FD CB 30 08
+ RRC 64(IY),C / FD CB 40 09
+ RRC 16(IY),D / FD CB 10 0A
+ RRC 32(IY),E / FD CB 20 0B
+ RRC 48(IY),H / FD CB 30 0C
+ RRC 64(IY),L / FD CB 40 0D
+ RRC 32(IY) / FD CB 20 0E
+ RRC 16(IY),A / FD CB 10 0F
+ RL 32(IY),B / FD CB 20 10
+ RL 48(IY),C / FD CB 30 11
+ RL 64(IY),D / FD CB 40 12
+ RL 16(IY),E / FD CB 10 13
+ RL 32(IY),H / FD CB 20 14
+ RL 48(IY),L / FD CB 30 15
+ RL 48(IY) / FD CB 30 16
+ RL 16(IY),A / FD CB 10 17
+ RR 32(IY),B / FD CB 20 18
+ RR 48(IY),C / FD CB 30 19
+ RR 64(IY),D / FD CB 40 1A
+ RR 16(IY),E / FD CB 10 1B
+ RR 32(IY),H / FD CB 20 1C
+ RR 48(IY),L / FD CB 30 1D
+ RR 64(IY) / FD CB 40 1E
+ RR 16(IY),A / FD CB 10 1F
+ SLA 32(IY),B / FD CB 20 20
+ SLA 48(IY),C / FD CB 30 21
+ SLA 64(IY),D / FD CB 40 22
+ SLA 16(IY),E / FD CB 10 23
+ SLA 32(IY),H / FD CB 20 24
+ SLA 48(IY),L / FD CB 30 25
+ SLA 16(IY) / FD CB 10 26
+ SLA 16(IY),A / FD CB 10 27
+ SRA 32(IY),B / FD CB 20 28
+ SRA 48(IY),C / FD CB 30 29
+ SRA 64(IY),D / FD CB 40 2A
+ SRA 16(IY),E / FD CB 10 2B
+ SRA 32(IY),H / FD CB 20 2C
+ SRA 48(IY),L / FD CB 30 2D
+ SRA 32(IY) / FD CB 20 2E
+ SRA 48(IY),A / FD CB 30 2F
+ SLL 16(IY),B / FD CB 10 30
+ SLL 32(IY),C / FD CB 20 31
+ SLL 48(IY),D / FD CB 30 32
+ SLL 64(IY),E / FD CB 40 33
+ SLL 16(IY),H / FD CB 10 34
+ SLL 32(IY),L / FD CB 20 35
+ SLL 48(IY) / FD CB 30 36
+ SLL 16(IY),A / FD CB 10 37
+ SRL 32(IY),B / FD CB 20 38
+ SRL 48(IY),C / FD CB 30 39
+ SRL 64(IY),D / FD CB 40 3A
+ SRL 16(IY),E / FD CB 10 3B
+ SRL 32(IY),H / FD CB 20 3C
+ SRL 48(IY),L / FD CB 30 3D
+ SRL 64(IY) / FD CB 40 3E
+ SRL 16(IY),A / FD CB 10 3F
+ BIT $0,16(IY) / FD CB 10 46
+ BIT $1,32(IY) / FD CB 20 4E
+ BIT $2,48(IY) / FD CB 30 56
+ BIT $3,64(IY) / FD CB 40 5E
+ BIT $4,16(IY) / FD CB 10 66
+ BIT $5,32(IY) / FD CB 20 6E
+ BIT $6,48(IY) / FD CB 30 76
+ BIT $7,64(IY) / FD CB 40 7E
+ RES $0,16(IY),B / FD CB 10 80
+ RES $0,32(IY),C / FD CB 20 81
+ RES $0,48(IY),D / FD CB 30 82
+ RES $0,64(IY),E / FD CB 40 83
+ RES $0,16(IY),H / FD CB 10 84
+ RES $0,32(IY),L / FD CB 20 85
+ RES $0,48(IY) / FD CB 30 86
+ RES $0,64(IY),A / FD CB 40 87
+ RES $1,16(IY),B / FD CB 10 88
+ RES $1,32(IY),C / FD CB 20 89
+ RES $1,48(IY),D / FD CB 30 8A
+ RES $1,64(IY),E / FD CB 40 8B
+ RES $1,16(IY),H / FD CB 10 8C
+ RES $1,32(IY),L / FD CB 20 8D
+ RES $1,48(IY) / FD CB 30 8E
+ RES $1,64(IY),A / FD CB 40 8F
+ RES $2,16(IY),B / FD CB 10 90
+ RES $2,32(IY),C / FD CB 20 91
+ RES $2,48(IY),D / FD CB 30 92
+ RES $2,64(IY),E / FD CB 40 93
+ RES $2,16(IY),H / FD CB 10 94
+ RES $2,32(IY),L / FD CB 20 95
+ RES $2,48(IY) / FD CB 30 96
+ RES $2,64(IY),A / FD CB 40 97
+ RES $3,16(IY),B / FD CB 10 98
+ RES $3,32(IY),C / FD CB 20 99
+ RES $3,48(IY),D / FD CB 30 9A
+ RES $3,64(IY),E / FD CB 40 9B
+ RES $3,16(IY),H / FD CB 10 9C
+ RES $3,32(IY),L / FD CB 20 9D
+ RES $3,48(IY) / FD CB 30 9E
+ RES $3,64(IY),A / FD CB 40 9F
+ RES $4,16(IY),B / FD CB 10 A0
+ RES $4,32(IY),C / FD CB 20 A1
+ RES $4,48(IY),D / FD CB 30 A2
+ RES $4,64(IY),E / FD CB 40 A3
+ RES $4,16(IY),H / FD CB 10 A4
+ RES $4,32(IY),L / FD CB 20 A5
+ RES $4,48(IY) / FD CB 30 A6
+ RES $4,64(IY),A / FD CB 40 A7
+ RES $5,16(IY),B / FD CB 10 A8
+ RES $5,32(IY),C / FD CB 20 A9
+ RES $5,48(IY),D / FD CB 30 AA
+ RES $5,64(IY),E / FD CB 40 AB
+ RES $5,16(IY),H / FD CB 10 AC
+ RES $5,32(IY),L / FD CB 20 AD
+ RES $5,48(IY) / FD CB 30 AE
+ RES $5,64(IY),A / FD CB 40 AF
+ RES $6,16(IY),B / FD CB 10 B0
+ RES $6,32(IY),C / FD CB 20 B1
+ RES $6,48(IY),D / FD CB 30 B2
+ RES $6,64(IY),E / FD CB 40 B3
+ RES $6,16(IY),H / FD CB 10 B4
+ RES $6,32(IY),L / FD CB 20 B5
+ RES $6,48(IY) / FD CB 30 B6
+ RES $6,64(IY),A / FD CB 40 B7
+ RES $7,16(IY),B / FD CB 10 B8
+ RES $7,32(IY),C / FD CB 20 B9
+ RES $7,48(IY),D / FD CB 30 BA
+ RES $7,64(IY),E / FD CB 40 BB
+ RES $7,16(IY),H / FD CB 10 BC
+ RES $7,32(IY),L / FD CB 20 BD
+ RES $7,48(IY) / FD CB 30 BE
+ RES $7,64(IY),A / FD CB 40 BF
+ SET $0,16(IY),B / FD CB 10 C0
+ SET $0,32(IY),C / FD CB 20 C1
+ SET $0,48(IY),D / FD CB 30 C2
+ SET $0,64(IY),E / FD CB 40 C3
+ SET $0,16(IY),H / FD CB 10 C4
+ SET $0,32(IY),L / FD CB 20 C5
+ SET $0,48(IY) / FD CB 30 C6
+ SET $0,64(IY),A / FD CB 40 C7
+ SET $1,16(IY),B / FD CB 10 C8
+ SET $1,32(IY),C / FD CB 20 C9
+ SET $1,48(IY),D / FD CB 30 CA
+ SET $1,64(IY),E / FD CB 40 CB
+ SET $1,16(IY),H / FD CB 10 CC
+ SET $1,32(IY),L / FD CB 20 CD
+ SET $1,48(IY) / FD CB 30 CE
+ SET $1,64(IY),A / FD CB 40 CF
+ SET $2,16(IY),B / FD CB 10 D0
+ SET $2,32(IY),C / FD CB 20 D1
+ SET $2,48(IY),D / FD CB 30 D2
+ SET $2,64(IY),E / FD CB 40 D3
+ SET $2,16(IY),H / FD CB 10 D4
+ SET $2,32(IY),L / FD CB 20 D5
+ SET $2,48(IY) / FD CB 30 D6
+ SET $2,64(IY),A / FD CB 40 D7
+ SET $3,16(IY),B / FD CB 10 D8
+ SET $3,32(IY),C / FD CB 20 D9
+ SET $3,48(IY),D / FD CB 30 DA
+ SET $3,64(IY),E / FD CB 40 DB
+ SET $3,16(IY),H / FD CB 10 DC
+ SET $3,32(IY),L / FD CB 20 DD
+ SET $3,48(IY) / FD CB 30 DE
+ SET $3,64(IY),A / FD CB 40 DF
+ SET $4,16(IY),B / FD CB 10 E0
+ SET $4,32(IY),C / FD CB 20 E1
+ SET $4,48(IY),D / FD CB 30 E2
+ SET $4,64(IY),E / FD CB 40 E3
+ SET $4,16(IY),H / FD CB 10 E4
+ SET $4,32(IY),L / FD CB 20 E5
+ SET $4,48(IY) / FD CB 30 E6
+ SET $4,64(IY),A / FD CB 40 E7
+ SET $5,16(IY),B / FD CB 10 E8
+ SET $5,32(IY),C / FD CB 20 E9
+ SET $5,48(IY),D / FD CB 30 EA
+ SET $5,64(IY),E / FD CB 40 EB
+ SET $5,16(IY),H / FD CB 10 EC
+ SET $5,32(IY),L / FD CB 20 ED
+ SET $5,48(IY) / FD CB 30 EE
+ SET $5,64(IY),A / FD CB 40 EF
+ SET $6,16(IY),B / FD CB 10 F0
+ SET $6,32(IY),C / FD CB 20 F1
+ SET $6,48(IY),D / FD CB 30 F2
+ SET $6,64(IY),E / FD CB 40 F3
+ SET $6,16(IY),H / FD CB 10 F4
+ SET $6,32(IY),L / FD CB 20 F5
+ SET $6,48(IY) / FD CB 30 F6
+ SET $6,64(IY),A / FD CB 40 F7
+ SET $7,16(IY),B / FD CB 10 F8
+ SET $7,32(IY),C / FD CB 20 F9
+ SET $7,48(IY),D / FD CB 30 FA
+ SET $7,64(IY),E / FD CB 40 FB
+ SET $7,16(IY),H / FD CB 10 FC
+ SET $7,32(IY),L / FD CB 20 FD
+ SET $7,48(IY) / FD CB 30 FE
+ SET $7,64(IY),A / FD CB 40 FF
--- /dev/null
+++ b/tests/libc/execute/0001-abort.c
@@ -1,0 +1,27 @@
+#include <assert.h>
+#include <stdio.h>
+#include <signal.h>
+#include <stdlib.h>
+
+/*
+output:
+aborting
+end:
+*/
+
+void
+handler(int dummy)
+{
+ _Exit(0);
+}
+
+int
+main(void)
+{
+ printf("aborting\n");
+ assert(signal(SIGABRT, handler) != SIG_ERR);
+ abort();
+ printf("borning\n");
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0002-assert.c
@@ -1,0 +1,35 @@
+
+#include <assert.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/*
+output:
+First assert
+Second assert, that must fail
+end:
+*/
+
+void
+handler(int dummy)
+{
+ _Exit(0);
+}
+
+int
+main()
+{
+ int i;
+ char c;
+
+ assert(signal(SIGABRT, handler) != SIG_ERR);
+
+ printf("First assert\n");
+ assert(sizeof(i) >= sizeof(c));
+
+ printf("Second assert, that must fail\n");
+ assert(sizeof(i) < sizeof(c));
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0003-assert.c
@@ -1,0 +1,27 @@
+#include <assert.h>
+#include <stdio.h>
+
+/*
+output:
+First assert
+Second assert, that must fail
+end:
+*/
+
+int
+main()
+{
+ int i;
+ char c;
+
+ printf("First assert\n");
+ assert(sizeof(i) >= sizeof(c));
+
+#define NDEBUG
+#include <assert.h>
+
+ printf("Second assert, that must fail\n");
+ assert(sizeof(i) < sizeof(c));
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0004-abort.c
@@ -1,0 +1,21 @@
+#include <assert.h>
+#include <stdio.h>
+#include <signal.h>
+#include <stdlib.h>
+
+/*
+output:
+aborting
+end:
+*/
+
+int
+main(void)
+{
+ printf("aborting\n");
+ assert(signal(SIGABRT, SIG_IGN) != SIG_ERR);
+ abort();
+ printf("borning\n");
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0005-ctype.c
@@ -1,0 +1,572 @@
+#define __USE_MACROS
+#include <assert.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <limits.h>
+
+/*
+ * This test assumes an ascii representation
+ */
+
+#define TESTW(f) fputs(#f ":" , stdout); \
+ for (i = 0; i <= UCHAR_MAX; i++) \
+ if (f(i)) printf(" %d", i); \
+ putchar('\n')
+
+#define TESTC(f) fputs(#f ": " , stdout); \
+ for (i = 0; i <= UCHAR_MAX; i++) \
+ if (f(i)) putchar(i); \
+ putchar('\n')
+
+#define TESTEOF(f) fputs(#f ": " , stdout); \
+ if (!f(EOF)) putchar('!'); puts("EOF");
+
+#define TESTLU(f) \
+ for (i = 0; i < UCHAR_MAX; i++) { \
+ n = f(i); \
+ if (!isgraph(i)) \
+ continue; \
+ printf("%s: %c <-> %c\n", #f, i, n); \
+ }
+
+void
+test1()
+{
+ int i;
+
+ puts("\ntest1");
+ TESTC(isalnum);
+ TESTC(isalpha);
+ TESTC(isdigit);
+ TESTC(isgraph);
+ TESTC(islower);
+ TESTC(isupper);
+ TESTC(isprint);
+ TESTC(ispunct);
+ TESTC(isxdigit);
+ TESTC(isdigit);
+ TESTW(iscntrl);
+ TESTW(isspace);
+ TESTEOF(isalpha);
+ TESTEOF(isdigit);
+ TESTEOF(isgraph);
+ TESTEOF(islower);
+ TESTEOF(isupper);
+ TESTEOF(isprint);
+ TESTEOF(ispunct);
+ TESTEOF(isxdigit);
+ TESTEOF(isdigit);
+ TESTEOF(iscntrl);
+ TESTEOF(isspace);
+}
+
+#undef isalnum
+#undef isalpha
+#undef isdigit
+#undef isgraph
+#undef islower
+#undef isupper
+#undef isprint
+#undef ispunct
+#undef isxdigit
+#undef isdigit
+
+void
+test2()
+{
+ int i;
+
+ puts("\ntest2");
+ TESTC(isalnum);
+ TESTC(isalpha);
+ TESTC(isdigit);
+ TESTC(isgraph);
+ TESTC(islower);
+ TESTC(isupper);
+ TESTC(isprint);
+ TESTC(ispunct);
+ TESTC(isxdigit);
+ TESTC(isdigit);
+ TESTW(iscntrl);
+ TESTW(isspace);
+ TESTEOF(isalpha);
+ TESTEOF(isdigit);
+ TESTEOF(isgraph);
+ TESTEOF(islower);
+ TESTEOF(isupper);
+ TESTEOF(isprint);
+ TESTEOF(ispunct);
+ TESTEOF(isxdigit);
+ TESTEOF(isdigit);
+ TESTEOF(iscntrl);
+ TESTEOF(isspace);
+}
+
+void test3()
+{
+ int i, n;
+
+ puts("\ntest3");
+ TESTLU(tolower);
+ TESTLU(toupper);
+}
+
+#undef tolower
+#undef toupper
+
+void test4()
+{
+ int i, n;
+
+ puts("\ntest4");
+ TESTLU(tolower);
+ TESTLU(toupper);
+ assert(tolower(EOF) == EOF);
+ assert(toupper(EOF) == EOF);
+}
+
+int
+main()
+{
+ test1();
+ test2();
+ test3();
+ test4();
+
+ return 0;
+}
+
+/*
+output:
+
+test1
+isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+isdigit: 0123456789
+isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+islower: abcdefghijklmnopqrstuvwxyz
+isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
+isxdigit: 0123456789ABCDEFabcdef
+isdigit: 0123456789
+iscntrl: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127
+isspace: 9 10 11 12 13 32
+isalpha: !EOF
+isdigit: !EOF
+isgraph: !EOF
+islower: !EOF
+isupper: !EOF
+isprint: !EOF
+ispunct: !EOF
+isxdigit: !EOF
+isdigit: !EOF
+iscntrl: !EOF
+isspace: !EOF
+
+test2
+isalnum: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+isalpha: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+isdigit: 0123456789
+isgraph: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+islower: abcdefghijklmnopqrstuvwxyz
+isupper: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+isprint: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ispunct: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
+isxdigit: 0123456789ABCDEFabcdef
+isdigit: 0123456789
+iscntrl: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127
+isspace: 9 10 11 12 13 32
+isalpha: !EOF
+isdigit: !EOF
+isgraph: !EOF
+islower: !EOF
+isupper: !EOF
+isprint: !EOF
+ispunct: !EOF
+isxdigit: !EOF
+isdigit: !EOF
+iscntrl: !EOF
+isspace: !EOF
+
+test3
+tolower: ! <-> !
+tolower: " <-> "
+tolower: # <-> #
+tolower: $ <-> $
+tolower: % <-> %
+tolower: & <-> &
+tolower: ' <-> '
+tolower: ( <-> (
+tolower: ) <-> )
+tolower: * <-> *
+tolower: + <-> +
+tolower: , <-> ,
+tolower: - <-> -
+tolower: . <-> .
+tolower: / <-> /
+tolower: 0 <-> 0
+tolower: 1 <-> 1
+tolower: 2 <-> 2
+tolower: 3 <-> 3
+tolower: 4 <-> 4
+tolower: 5 <-> 5
+tolower: 6 <-> 6
+tolower: 7 <-> 7
+tolower: 8 <-> 8
+tolower: 9 <-> 9
+tolower: : <-> :
+tolower: ; <-> ;
+tolower: < <-> <
+tolower: = <-> =
+tolower: > <-> >
+tolower: ? <-> ?
+tolower: @ <-> @
+tolower: A <-> a
+tolower: B <-> b
+tolower: C <-> c
+tolower: D <-> d
+tolower: E <-> e
+tolower: F <-> f
+tolower: G <-> g
+tolower: H <-> h
+tolower: I <-> i
+tolower: J <-> j
+tolower: K <-> k
+tolower: L <-> l
+tolower: M <-> m
+tolower: N <-> n
+tolower: O <-> o
+tolower: P <-> p
+tolower: Q <-> q
+tolower: R <-> r
+tolower: S <-> s
+tolower: T <-> t
+tolower: U <-> u
+tolower: V <-> v
+tolower: W <-> w
+tolower: X <-> x
+tolower: Y <-> y
+tolower: Z <-> z
+tolower: [ <-> [
+tolower: \ <-> \
+tolower: ] <-> ]
+tolower: ^ <-> ^
+tolower: _ <-> _
+tolower: ` <-> `
+tolower: a <-> a
+tolower: b <-> b
+tolower: c <-> c
+tolower: d <-> d
+tolower: e <-> e
+tolower: f <-> f
+tolower: g <-> g
+tolower: h <-> h
+tolower: i <-> i
+tolower: j <-> j
+tolower: k <-> k
+tolower: l <-> l
+tolower: m <-> m
+tolower: n <-> n
+tolower: o <-> o
+tolower: p <-> p
+tolower: q <-> q
+tolower: r <-> r
+tolower: s <-> s
+tolower: t <-> t
+tolower: u <-> u
+tolower: v <-> v
+tolower: w <-> w
+tolower: x <-> x
+tolower: y <-> y
+tolower: z <-> z
+tolower: { <-> {
+tolower: | <-> |
+tolower: } <-> }
+tolower: ~ <-> ~
+toupper: ! <-> !
+toupper: " <-> "
+toupper: # <-> #
+toupper: $ <-> $
+toupper: % <-> %
+toupper: & <-> &
+toupper: ' <-> '
+toupper: ( <-> (
+toupper: ) <-> )
+toupper: * <-> *
+toupper: + <-> +
+toupper: , <-> ,
+toupper: - <-> -
+toupper: . <-> .
+toupper: / <-> /
+toupper: 0 <-> 0
+toupper: 1 <-> 1
+toupper: 2 <-> 2
+toupper: 3 <-> 3
+toupper: 4 <-> 4
+toupper: 5 <-> 5
+toupper: 6 <-> 6
+toupper: 7 <-> 7
+toupper: 8 <-> 8
+toupper: 9 <-> 9
+toupper: : <-> :
+toupper: ; <-> ;
+toupper: < <-> <
+toupper: = <-> =
+toupper: > <-> >
+toupper: ? <-> ?
+toupper: @ <-> @
+toupper: A <-> A
+toupper: B <-> B
+toupper: C <-> C
+toupper: D <-> D
+toupper: E <-> E
+toupper: F <-> F
+toupper: G <-> G
+toupper: H <-> H
+toupper: I <-> I
+toupper: J <-> J
+toupper: K <-> K
+toupper: L <-> L
+toupper: M <-> M
+toupper: N <-> N
+toupper: O <-> O
+toupper: P <-> P
+toupper: Q <-> Q
+toupper: R <-> R
+toupper: S <-> S
+toupper: T <-> T
+toupper: U <-> U
+toupper: V <-> V
+toupper: W <-> W
+toupper: X <-> X
+toupper: Y <-> Y
+toupper: Z <-> Z
+toupper: [ <-> [
+toupper: \ <-> \
+toupper: ] <-> ]
+toupper: ^ <-> ^
+toupper: _ <-> _
+toupper: ` <-> `
+toupper: a <-> A
+toupper: b <-> B
+toupper: c <-> C
+toupper: d <-> D
+toupper: e <-> E
+toupper: f <-> F
+toupper: g <-> G
+toupper: h <-> H
+toupper: i <-> I
+toupper: j <-> J
+toupper: k <-> K
+toupper: l <-> L
+toupper: m <-> M
+toupper: n <-> N
+toupper: o <-> O
+toupper: p <-> P
+toupper: q <-> Q
+toupper: r <-> R
+toupper: s <-> S
+toupper: t <-> T
+toupper: u <-> U
+toupper: v <-> V
+toupper: w <-> W
+toupper: x <-> X
+toupper: y <-> Y
+toupper: z <-> Z
+toupper: { <-> {
+toupper: | <-> |
+toupper: } <-> }
+toupper: ~ <-> ~
+
+test4
+tolower: ! <-> !
+tolower: " <-> "
+tolower: # <-> #
+tolower: $ <-> $
+tolower: % <-> %
+tolower: & <-> &
+tolower: ' <-> '
+tolower: ( <-> (
+tolower: ) <-> )
+tolower: * <-> *
+tolower: + <-> +
+tolower: , <-> ,
+tolower: - <-> -
+tolower: . <-> .
+tolower: / <-> /
+tolower: 0 <-> 0
+tolower: 1 <-> 1
+tolower: 2 <-> 2
+tolower: 3 <-> 3
+tolower: 4 <-> 4
+tolower: 5 <-> 5
+tolower: 6 <-> 6
+tolower: 7 <-> 7
+tolower: 8 <-> 8
+tolower: 9 <-> 9
+tolower: : <-> :
+tolower: ; <-> ;
+tolower: < <-> <
+tolower: = <-> =
+tolower: > <-> >
+tolower: ? <-> ?
+tolower: @ <-> @
+tolower: A <-> a
+tolower: B <-> b
+tolower: C <-> c
+tolower: D <-> d
+tolower: E <-> e
+tolower: F <-> f
+tolower: G <-> g
+tolower: H <-> h
+tolower: I <-> i
+tolower: J <-> j
+tolower: K <-> k
+tolower: L <-> l
+tolower: M <-> m
+tolower: N <-> n
+tolower: O <-> o
+tolower: P <-> p
+tolower: Q <-> q
+tolower: R <-> r
+tolower: S <-> s
+tolower: T <-> t
+tolower: U <-> u
+tolower: V <-> v
+tolower: W <-> w
+tolower: X <-> x
+tolower: Y <-> y
+tolower: Z <-> z
+tolower: [ <-> [
+tolower: \ <-> \
+tolower: ] <-> ]
+tolower: ^ <-> ^
+tolower: _ <-> _
+tolower: ` <-> `
+tolower: a <-> a
+tolower: b <-> b
+tolower: c <-> c
+tolower: d <-> d
+tolower: e <-> e
+tolower: f <-> f
+tolower: g <-> g
+tolower: h <-> h
+tolower: i <-> i
+tolower: j <-> j
+tolower: k <-> k
+tolower: l <-> l
+tolower: m <-> m
+tolower: n <-> n
+tolower: o <-> o
+tolower: p <-> p
+tolower: q <-> q
+tolower: r <-> r
+tolower: s <-> s
+tolower: t <-> t
+tolower: u <-> u
+tolower: v <-> v
+tolower: w <-> w
+tolower: x <-> x
+tolower: y <-> y
+tolower: z <-> z
+tolower: { <-> {
+tolower: | <-> |
+tolower: } <-> }
+tolower: ~ <-> ~
+toupper: ! <-> !
+toupper: " <-> "
+toupper: # <-> #
+toupper: $ <-> $
+toupper: % <-> %
+toupper: & <-> &
+toupper: ' <-> '
+toupper: ( <-> (
+toupper: ) <-> )
+toupper: * <-> *
+toupper: + <-> +
+toupper: , <-> ,
+toupper: - <-> -
+toupper: . <-> .
+toupper: / <-> /
+toupper: 0 <-> 0
+toupper: 1 <-> 1
+toupper: 2 <-> 2
+toupper: 3 <-> 3
+toupper: 4 <-> 4
+toupper: 5 <-> 5
+toupper: 6 <-> 6
+toupper: 7 <-> 7
+toupper: 8 <-> 8
+toupper: 9 <-> 9
+toupper: : <-> :
+toupper: ; <-> ;
+toupper: < <-> <
+toupper: = <-> =
+toupper: > <-> >
+toupper: ? <-> ?
+toupper: @ <-> @
+toupper: A <-> A
+toupper: B <-> B
+toupper: C <-> C
+toupper: D <-> D
+toupper: E <-> E
+toupper: F <-> F
+toupper: G <-> G
+toupper: H <-> H
+toupper: I <-> I
+toupper: J <-> J
+toupper: K <-> K
+toupper: L <-> L
+toupper: M <-> M
+toupper: N <-> N
+toupper: O <-> O
+toupper: P <-> P
+toupper: Q <-> Q
+toupper: R <-> R
+toupper: S <-> S
+toupper: T <-> T
+toupper: U <-> U
+toupper: V <-> V
+toupper: W <-> W
+toupper: X <-> X
+toupper: Y <-> Y
+toupper: Z <-> Z
+toupper: [ <-> [
+toupper: \ <-> \
+toupper: ] <-> ]
+toupper: ^ <-> ^
+toupper: _ <-> _
+toupper: ` <-> `
+toupper: a <-> A
+toupper: b <-> B
+toupper: c <-> C
+toupper: d <-> D
+toupper: e <-> E
+toupper: f <-> F
+toupper: g <-> G
+toupper: h <-> H
+toupper: i <-> I
+toupper: j <-> J
+toupper: k <-> K
+toupper: l <-> L
+toupper: m <-> M
+toupper: n <-> N
+toupper: o <-> O
+toupper: p <-> P
+toupper: q <-> Q
+toupper: r <-> R
+toupper: s <-> S
+toupper: t <-> T
+toupper: u <-> U
+toupper: v <-> V
+toupper: w <-> W
+toupper: x <-> X
+toupper: y <-> Y
+toupper: z <-> Z
+toupper: { <-> {
+toupper: | <-> |
+toupper: } <-> }
+toupper: ~ <-> ~
+end:
+*/
--- /dev/null
+++ b/tests/libc/execute/0006-limits.c
@@ -1,0 +1,183 @@
+#include <limits.h>
+#include <stdio.h>
+
+/*
+ * This test assumes that CHAR_BIT is the size of every
+ * unit returned by sizeof. It also assumes 2 complement.
+ */
+
+/*
+output:
+test1
+test2
+test3
+end:
+*/
+
+void
+test1()
+{
+ puts("test1");
+
+ if (CHAR_BIT < 8 ||
+ CHAR_MAX < 127 || CHAR_MIN > 0 ||
+ CHAR_MAX != SCHAR_MAX && CHAR_MAX != UCHAR_MAX)
+ puts("wrong char definition");
+
+ if (SCHAR_MAX < 127 || CHAR_MIN > -127)
+ puts("wrong signed char definition");
+
+ if (UCHAR_MAX < 255 || UCHAR_MAX <= 0)
+ puts("wrong unsigned char definition");
+
+ if (SHRT_MAX < 32767 ||
+ SHRT_MIN > -32767 ||
+ USHRT_MAX < 65535 || USHRT_MAX <= 0)
+ puts("wrong short definition");
+
+ if (INT_MAX < 32767 ||
+ INT_MIN > -32767 ||
+ UINT_MAX < 65535 || UINT_MAX <= 0 ||
+ INT_MAX < SCHAR_MAX || INT_MIN > SCHAR_MIN ||
+ UINT_MAX < UCHAR_MAX ||
+ INT_MAX < SHRT_MAX || INT_MIN > SHRT_MIN ||
+ UINT_MAX < USHRT_MAX)
+ puts("wrong int definition");
+
+ if (LONG_MAX < 2147483647 ||
+ LONG_MIN > -2147483647 ||
+ ULONG_MAX < 4294967295 || ULONG_MAX <= 0 ||
+ LONG_MAX < SCHAR_MAX || LONG_MIN > SCHAR_MIN ||
+ ULONG_MAX < UCHAR_MAX ||
+ LONG_MAX < SHRT_MAX || LONG_MIN > SHRT_MIN ||
+ ULONG_MAX < USHRT_MAX ||
+ LONG_MAX < INT_MAX || LONG_MIN > INT_MIN ||
+ ULONG_MAX < UINT_MAX)
+ puts("wrong long definition");
+
+ if (LONG_MAX < 9223372036854775807 ||
+ LONG_MIN > -9223372036854775807 ||
+ ULONG_MAX < 18446744073709551615 || ULONG_MAX <= 0 ||
+ LONG_MAX < SCHAR_MAX || LONG_MIN > SCHAR_MIN ||
+ ULONG_MAX < UCHAR_MAX ||
+ LONG_MAX < SHRT_MAX || LONG_MIN > SHRT_MIN ||
+ ULONG_MAX < USHRT_MAX ||
+ LONG_MAX < LONG_MAX || LONG_MIN > LONG_MIN ||
+ ULONG_MAX < ULONG_MAX)
+ puts("wrong long definition");
+
+ if (LLONG_MAX < 9223372036854775807 ||
+ LLONG_MIN > -9223372036854775807 ||
+ ULLONG_MAX < 18446744073709551615 || ULLONG_MAX <= 0 ||
+ LLONG_MAX < SCHAR_MAX || LLONG_MIN > SCHAR_MIN ||
+ ULLONG_MAX < UCHAR_MAX ||
+ LLONG_MAX < SHRT_MAX || LLONG_MIN > SHRT_MIN ||
+ ULLONG_MAX < USHRT_MAX ||
+ LLONG_MAX < LONG_MAX || LLONG_MIN > LONG_MIN ||
+ ULLONG_MAX < ULONG_MAX)
+ puts("wrong long long definition");
+
+ if (MB_LEN_MAX < sizeof(char))
+ puts("wrong value for MB_LEN_MAX");
+}
+
+
+void
+test2()
+{
+ char c;
+ int i;
+
+ puts("test2");
+ if ('\xff' > 0) {
+ for (c = i = 0; i < CHAR_BIT; i++) {
+ c <<= 1;
+ c |= 1;
+ }
+ if (c != CHAR_MAX)
+ printf("wrong char max %d-%d", c, CHAR_MAX);
+ if (CHAR_MIN != 0)
+ printf("wrong char min %d-%d", c, CHAR_MIN);
+ } else {
+ for (c = i = 0; i < CHAR_BIT -1; i++) {
+ c <<= 1;
+ c |= 1;
+ }
+ if (c != CHAR_MAX)
+ printf("wrong char max %d-%d", c, CHAR_MAX);
+ c = -c - 1;
+ if (c != CHAR_MIN)
+ printf("wrong char min %d-%d", c, CHAR_MIN);
+ }
+}
+
+#define SMAX(t) for (t = n = 0; n < sizeof(t)*CHAR_BIT -1; n++) {t <<= 1; t |= 1;}
+#define UMAX(t) for (t = n = 0; n < sizeof(t)*CHAR_BIT; n++) {t <<= 1; t |= 1;}
+
+void
+test3()
+{
+ signed char sc;
+ unsigned char uc;
+ int i, n;
+ unsigned u;
+ long l;
+ unsigned long ul;
+ long long ll;
+ unsigned long long ull;
+
+ puts("test3");
+ SMAX(sc);
+ if (sc != SCHAR_MAX)
+ printf("wrong signed char max %d %d\n", sc, SCHAR_MAX);
+ sc = -sc - 1;
+ if (sc != SCHAR_MIN)
+ printf("wrong signed char min %d %d\n", sc, SCHAR_MIN);
+
+ UMAX(uc);
+ if (uc != UCHAR_MAX)
+ printf("wrong unsigned char max %u %u", uc, UCHAR_MAX);
+
+ SMAX(i);
+ if (i != INT_MAX)
+ printf("wrong int max %d %d\n", i, INT_MAX);
+ i = -i - 1;
+ if (i != INT_MIN)
+ printf("wrong int min %d %d\n", i, INT_MIN);
+
+ UMAX(u);
+ if (u != UINT_MAX)
+ printf("wrong unsigned int max %u %u\n", u, UINT_MAX);
+
+ SMAX(l);
+ if (l != LONG_MAX)
+ printf("wrong long max %ld %ld\n", l, (long) LONG_MAX);
+ l = -l - 1;
+ if (l != LONG_MIN)
+ printf("wrong long max %ld %ld\n", l, (long) LONG_MIN);
+
+ UMAX(ul);
+ if (ul != ULONG_MAX)
+ printf("wrong int max %lu %lu\n", ul, (unsigned long) ULONG_MAX);
+
+ SMAX(ll);
+ if (ll != LLONG_MAX)
+ printf("wrong llong max %lld %lld\n", ll, (long long) LLONG_MAX);
+ ll = -ll - 1;
+ if (ll != LLONG_MIN)
+ printf("wrong llong min %lld %lld\n", ll, (long long) LLONG_MIN);
+
+ UMAX(ull);
+ if (ull != ULLONG_MAX)
+ printf("wrong ullong max %llu %llu\n", ull, (unsigned long long) ULLONG_MAX);
+}
+
+int
+main()
+{
+ test1();
+ test2();
+ test3();
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0007-signal.c
@@ -1,0 +1,168 @@
+#include <assert.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdio.h>
+
+sig_atomic_t abrt, fpe, iint, segv, term, def;
+jmp_buf recover;
+
+/*
+output:
+test 1
+test 2
+test 3
+test 4
+end:
+*/
+
+void
+handler1(int sig)
+{
+ switch (sig) {
+ case SIGABRT:
+ abrt = 1;
+ break;
+ case SIGFPE:
+ fpe = 1;
+ break;
+ case SIGINT:
+ iint = 1;
+ break;
+ case SIGSEGV:
+ segv = 1;
+ break;
+ case SIGTERM:
+ term = 1;
+ break;
+ default:
+ def = 1;
+ break;
+ }
+}
+
+void
+handler2(int sig)
+{
+ switch (sig) {
+ case SIGABRT:
+ abrt = 1;
+ break;
+ case SIGFPE:
+ fpe = 1;
+ break;
+ case SIGINT:
+ iint = 1;
+ break;
+ case SIGSEGV:
+ segv = 1;
+ break;
+ case SIGTERM:
+ term = 1;
+ break;
+ default:
+ def = 1;
+ break;
+ }
+ longjmp(recover, 1);
+}
+
+void
+test1()
+{
+ puts("test 1");
+ assert(signal(SIGABRT, handler1) == SIG_DFL);
+ assert(signal(SIGFPE, handler1) == SIG_DFL);
+ assert(signal(SIGINT, handler1) == SIG_DFL);
+ assert(signal(SIGSEGV, handler1) == SIG_DFL);
+ assert(signal(SIGTERM, handler1) == SIG_DFL);
+}
+
+void
+test2()
+{
+ puts("test 2");
+ term = abrt = fpe = iint = segv = 0;
+ assert(signal(SIGABRT, handler1) == handler1);
+ assert(signal(SIGFPE, handler1) == handler1);
+ assert(signal(SIGINT, handler1) == handler1);
+ assert(signal(SIGSEGV, handler1) == handler1);
+ assert(signal(SIGTERM, handler1) == handler1);
+
+ assert(raise(SIGABRT) != -1);
+ assert(raise(SIGFPE) != -1);
+ assert(raise(SIGINT) != -1);
+ assert(raise(SIGSEGV) != -1);
+ assert(raise(SIGTERM) != -1);
+
+ if (!abrt || !fpe || !iint || !segv || !term)
+ printf("a handled signal was missed: %d %d %d %d %d\n",
+ abrt, fpe, iint, segv, term);
+ if (def)
+ puts("a wrong signal was received");
+}
+
+void
+test3()
+{
+ puts("test 3");
+ def = abrt = term = fpe = iint = segv = 0;
+ assert(signal(SIGABRT, SIG_IGN) == handler1);
+ assert(signal(SIGFPE, SIG_IGN) == handler1);
+ assert(signal(SIGINT, SIG_IGN) == handler1);
+ assert(signal(SIGSEGV, SIG_IGN) == handler1);
+ assert(signal(SIGTERM, SIG_IGN) == handler1);
+
+ assert(raise(SIGABRT) != -1);
+ assert(raise(SIGFPE) != -1);
+ assert(raise(SIGINT) != -1);
+ assert(raise(SIGSEGV) != -1);
+ assert(raise(SIGTERM) != -1);
+
+ if (abrt || fpe || iint || segv || term)
+ printf("a handled signal was received: %d %d %d %d %d\n",
+ abrt, fpe, iint, segv, term);
+ if (def)
+ puts("a wrong signal was received");
+}
+
+void
+test4()
+{
+ puts("test 4");
+ def = abrt = term = fpe = iint = segv = 0;
+ assert(signal(SIGABRT, handler2) == SIG_IGN);
+ assert(signal(SIGFPE, handler2) == SIG_IGN);
+ assert(signal(SIGINT, handler2) == SIG_IGN);
+ assert(signal(SIGSEGV, handler2) == SIG_IGN);
+ assert(signal(SIGTERM, handler2) == SIG_IGN);
+
+ if (!setjmp(recover))
+ assert(raise(SIGABRT) != -1);
+ if (!setjmp(recover))
+ assert(raise(SIGFPE) != -1);
+ if (!setjmp(recover))
+ assert(raise(SIGINT) != -1);
+ if (!setjmp(recover))
+ assert(raise(SIGSEGV) != -1);
+ if (!setjmp(recover))
+ assert(raise(SIGTERM) != -1);
+
+ if (!abrt || !fpe || !iint || !segv || !term)
+ printf("a handled signal was missed: %d %d %d %d %d\n",
+ abrt, fpe, iint, segv, term);
+ if (def)
+ puts("a wrong signal was received");
+}
+
+int
+main()
+{
+ assert(SIG_ERR != SIG_IGN && SIG_ERR != SIG_DFL);
+
+ test1();
+ test2();
+ test3();
+ test4();
+
+ return;
+}
--- /dev/null
+++ b/tests/libc/execute/0008-longjmp.c
@@ -1,0 +1,45 @@
+#include <setjmp.h>
+#include <stdio.h>
+
+/*
+output:
+test 1
+i = 1, v = 2
+test 2
+i = 2, v = 3
+end:
+*/
+
+jmp_buf recover;
+
+void
+test(char *s, int val)
+{
+ puts(s);
+ longjmp(recover, val);
+}
+
+int
+main()
+{
+ static int i;
+ auto volatile int v;
+
+ i = 0;
+ v = 1;
+ if (!setjmp(recover)) {
+ i = 1;
+ v = 2;
+ test("test 1", 1);
+ }
+ printf("i = %d, v = %d\n", i, v);
+
+ if (!setjmp(recover)) {
+ i = 2;
+ v = 3;
+ test("test 2", 0);
+ }
+ printf("i = %d, v = %d\n", i, v);
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0009-stdarg.c
@@ -1,0 +1,79 @@
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/*
+output:
+test 1
+test 2
+end:
+*/
+
+void
+test(char *s, char *fmt, ...)
+{
+ va_list va;
+ int cnt = 1;
+ long long *p;
+
+ puts(s);
+
+ va_start(va, fmt);
+ while (*fmt) {
+ printf("fmt = '%c'\n", *fmt);
+ switch (*fmt++) {
+ case 'c':
+ assert(va_arg(va, int) == cnt++);
+ break;
+ case 's':
+ assert(va_arg(va, int) == cnt++);
+ break;
+ case 'i':
+ assert(va_arg(va, int) == cnt++);
+ break;
+ case 'l':
+ assert(va_arg(va, long) == cnt++);
+ break;
+ case 'q':
+ assert(va_arg(va, long long) == cnt++);
+ break;
+ case 'p':
+ p = va_arg(va, void *);
+ assert(*p == cnt++);
+ break;
+ case 'f':
+ assert(va_arg(va, double) == cnt++);
+ break;
+ default:
+ abort();
+ }
+ }
+ va_end(va);
+}
+
+int
+main()
+{
+ char c;
+ short s;
+ int i;
+ long l;
+ long long ll;
+ float f;
+
+ c = 1;
+ i = 2;
+ l = 3;
+ ll = 4;
+ test("test 1", "cilp", c, i, l, (void *) &ll);
+
+
+ c = 1;
+ s = 2;
+ ll = 3;
+ f = 4.0;
+ test("test 2", "csqf", c, s, ll, f);
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/0010-stddef.c
@@ -1,0 +1,43 @@
+#include <assert.h>
+#include <stddef.h>
+#include <stdio.h>
+
+/*
+output:
+NULL = 0
+end:
+*/
+
+typedef struct test Test;
+
+struct test {
+ int a, b, c;
+ char d;
+} test = {
+ .a = 1,
+ .b = 2,
+ .c = 3,
+ .d = 4,
+};
+
+int
+main()
+{
+ wchar_t wc = L'c';
+ char *q, *p = (char *) &test;
+
+ printf("NULL = %p\n", NULL);
+
+ p += offsetof(Test, d);
+
+ assert(sizeof(size_t) == sizeof(ptrdiff_t));
+ assert(wc == L'c');
+ assert(*p == 4);
+ assert(offsetof(Test, d) > offsetof(Test, a));
+ assert(offsetof(Test, d) > offsetof(Test, b));
+ assert(offsetof(Test, d) > offsetof(Test, c));
+ assert(sizeof(sizeof(int)) == sizeof(size_t));
+ assert(sizeof(p - q) == sizeof(ptrdiff_t));
+
+ return 0;
+}
--- /dev/null
+++ b/tests/libc/execute/Makefile
@@ -1,0 +1,13 @@
+.POSIX:
+
+ROOT = ../../../rootdir
+CFLAGS =
+CC = SCCPREFIX=$(ROOT) ./cc.sh
+
+all: tests
+
+tests:
+ @CFLAGS='' SCCPREFIX=$(ROOT) ./chktest.sh libc-tests.lst
+
+clean:
+ rm -f *.o *core a.out test.log
--- /dev/null
+++ b/tests/libc/execute/cc.sh
@@ -1,0 +1,50 @@
+#!/bin/sh
+
+set -e
+
+for i
+do
+ case "$i" in
+ -r)
+ root=$2
+ shift 2
+ ;;
+ -a)
+ abi=$2
+ shift 2
+ ;;
+ -s)
+ sys=$2
+ shift 2
+ ;;
+ -o)
+ out=$2
+ shift 2
+ ;;
+ -*)
+ echo usage: cc.sh [-t target] file
+ exit 1
+ ;;
+ esac
+done
+
+sys=${sys:-`uname | tr 'A-Z' 'a-z'`}
+abi=${abi:-amd64-sysv}
+out=${out:-a.out}
+root=${root:-$SCCPREFIX}
+inc=$root/include/scc
+arch_inc=$root/include/scc/bits/$abi
+sys_inc=$root/include/scc/bits/$sys
+lib=$root/lib/scc/${abi}-${sys}
+obj=${1%.c}.o
+
+includes="-nostdinc -I$inc -I$arch_inc -I$sys_inc"
+flags="-std=c99 -g -w -fno-stack-protector --freestanding -static"
+
+if ! gcc -nopie 2>&1 | grep unrecogn >/dev/null
+then
+ pie=-nopie
+fi
+
+gcc $flags $pie $includes -c $1
+ld -g $pie -z nodefaultlib -static -L$lib $lib/crt.o $obj -lc -o $out
--- /dev/null
+++ b/tests/libc/execute/chktest.sh
@@ -1,0 +1,21 @@
+#!/bin/sh
+
+file=${1?' empty input file'}
+tmp1=`mktemp`
+tmp2=`mktemp`
+trap "rm -f a.out *.o $tmp1 $tmp2; exit" 0 1 2 3 15
+ulimit -c 0
+rm -f test.log
+
+while read i state
+do
+ rm -f a.out *.o $tmp1 $tmp2
+
+ (echo $i
+ ./cc.sh $CFLAGS $i.c
+ echo '/^output:$/+;/^end:$/-'w $tmp1 | ed -s $i.c
+ ./a.out > $tmp2
+ diff -u $tmp1 $tmp2) >> test.log 2>&1 &&
+ printf '[PASS]' || printf '[FAIL]'
+ printf '%s: %s\n' "$state" "$i"
+done < $file
--- /dev/null
+++ b/tests/libc/execute/libc-tests.lst
@@ -1,0 +1,10 @@
+0001-abort
+0002-assert
+0003-assert
+0004-abort
+0005-ctype
+0006-limits
+0007-signal
+0008-longjmp
+0009-stdarg [TODO]
+0010-stddef
--- a/tests/nm/Makefile
+++ /dev/null
@@ -1,9 +1,0 @@
-.POSIX:
-
-PROJECTDIR = ../..
-include $(PROJECTDIR)/rules.mk
-
-DIRS=execute
-
-all clean:
- $(FORALL)
--- a/tests/nm/execute/0001-z80.sh
+++ b/tests/nm/execute/0001-z80.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm z80.out > $tmp1
--- a/tests/nm/execute/0002-z80-u.sh
+++ b/tests/nm/execute/0002-z80-u.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -u z80.out > $tmp1
--- a/tests/nm/execute/0003-z80-g.sh
+++ b/tests/nm/execute/0003-z80-g.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -g z80.out > $tmp1
--- a/tests/nm/execute/0004-z80-v.sh
+++ b/tests/nm/execute/0004-z80-v.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -v z80.out > $tmp1
--- a/tests/nm/execute/0005-z80-A.sh
+++ b/tests/nm/execute/0005-z80-A.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f f.out f.a $tmp1 $tmp2" 0 2 3
+trap "rm -f f.out f.a $tmp1 $tmp2; exit" 0 2 3
rm -f f.a
ar -qv f.a z80.out
--- a/tests/nm/execute/0006-z80-o.sh
+++ b/tests/nm/execute/0006-z80-o.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -t o z80.out > $tmp1
--- a/tests/nm/execute/0007-z80-d.sh
+++ b/tests/nm/execute/0007-z80-d.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -t d z80.out > $tmp1
--- a/tests/nm/execute/0008-z80-x.sh
+++ b/tests/nm/execute/0008-z80-x.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -t x z80.out > $tmp1
--- a/tests/nm/execute/0009-z80-P-o.sh
+++ b/tests/nm/execute/0009-z80-P-o.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -P -t o z80.out > $tmp1
--- a/tests/nm/execute/0010-z80-P-d.sh
+++ b/tests/nm/execute/0010-z80-P-d.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -P -t x z80.out > $tmp1
--- a/tests/nm/execute/0011-z80-P-x.sh
+++ b/tests/nm/execute/0011-z80-P-x.sh
@@ -4,7 +4,7 @@
tmp1=`mktemp`
tmp2=`mktemp`
-trap "rm -f $tmp1 $tmp2" 0 2 3
+trap "rm -f $tmp1 $tmp2; exit" 0 2 3
nm -P -t x z80.out > $tmp1
--- a/tests/nm/execute/Makefile
+++ b/tests/nm/execute/Makefile
@@ -1,7 +1,6 @@
.POSIX:
-PROJECTDIR=$$PWD/../../..
-ROOTDIR=$(PROJECTDIR)/rootdir
+ROOT=$(PROJECTDIR)/rootdir
OUT = z80.out
@@ -8,7 +7,7 @@
all: tests
tests: $(OUT)
- @PATH=$(ROOTDIR)/bin:$$PATH ./chktest.sh
+ @PATH=$(ROOT)/bin:$$PATH ./chktest.sh
z80.out: master.s
z80-unknown-coff-as -o $@ master.s
--- a/tests/nm/execute/chktest.sh
+++ b/tests/nm/execute/chktest.sh
@@ -1,16 +1,12 @@
-#!/bin//sh
+#!/bin/sh
-ttyflags=`stty -g`
-trap "stty $ttyflags;tabs -8; rm -f a.out" 0 2 3 15
-stty tabs
-tabs 40
+trap "rm -f a.out; exit" 0 2 3 15
ulimit -c 0
rm -f test.log
-
for i in *-*.sh
do
printf "Test: %s\n\n" $i >> test.log
- printf "%s\t" $i
- ./$i >> test.log 2>&1 && echo [OK] || echo [FAIL]
+ ./$i >> test.log 2>&1 && printf '[PASS]: ' || printf '[FAIL]: '
+ echo "$i"
done
--- a/tests/scc/Makefile
+++ /dev/null
@@ -1,7 +1,0 @@
-.POSIX:
-include ../../config.mk
-
-DIRS=error execute
-
-all clean:
- $(FORALL)
--- a/tests/scc/error/Makefile
+++ b/tests/scc/error/Makefile
@@ -1,10 +1,11 @@
.POSIX:
+ROOT=../../../rootdir
+
all: tests
tests:
- CFLAGS='' SCCEXECPATH=../../bin PATH=../../bin:$$PATH ./chktest.sh < scc-tests.lst
+ @CFLAGS='' SCCPREFIX=$(ROOT) PATH=$(ROOT)/bin:$$PATH ./chktest.sh scc-tests.lst
clean:
rm -f *.as *.o *.ir *.qbe *core test.log
-
--- a/tests/scc/error/chktest.sh
+++ b/tests/scc/error/chktest.sh
@@ -1,10 +1,10 @@
#!/bin/sh
+file=${1?' empty input file'}
err=/tmp/$$.err
chk=/tmp/$$.chk
-trap "tabs -8;rm -f a.out *.o $chk $err" 0 1 2 3 15
-tabs 40
+trap "rm -f a.out *.o $chk $err; exit" 0 1 2 3 15
ulimit -c 0
rm -f test.log
@@ -11,10 +11,10 @@
while read i state
do
echo $i >> test.log
- printf "%s\t%s" $i $state
scc $CFLAGS -w -c $i 2> $err
echo "/^PATTERN/+;/^\./-w $chk" | ed -s $i
- diff -c $chk $err >> test.log && echo [OK] || echo [FAILED]
+ diff -c $chk $err >> test.log && printf '[PASS]' || echo '[FAIL]'
+ printf "%s: %s\n" "$state" "$i"
rm -f *.o
-done
+done < $file
--- a/tests/scc/execute/0137-int-cast.c
+++ b/tests/scc/execute/0137-int-cast.c
@@ -1,137 +1,3 @@
-/*
-name: TEST013
-description: Basic test of integer types and integer conversions
-comments: This test depends of the configuration in the type system.
- With the current configuration char is equal to unsigned char,
- short is equal to int, and unsigned short is equal to unsigned.
-error:
-output:
-G1 I "a
-G2 N "b
-G3 K "c
-G4 C "d
-G5 K "e
-G6 W "f
-G7 Z "g
-G8 Q "h
-G9 O "i
-G10 I "j
-G11 N "k
-G13 I F "main
-{
-\
- G1 G2 gI :I
- G1 G3 gI :I
- G1 G4 gI :I
- G1 G5 gI :I
- G1 G6 gI :I
- G1 G7 gI :I
- G1 G8 gI :I
- G1 G9 gI :I
- G1 G10 :I
- G1 G11 gI :I
- G2 G1 gN :N
- G2 G3 gN :N
- G2 G4 gN :N
- G2 G5 gN :N
- G2 G6 gN :N
- G2 G7 gN :N
- G2 G8 gN :N
- G2 G9 gN :N
- G2 G10 gN :N
- G2 G11 :N
- G3 G1 gK :K
- G3 G2 gK :K
- G3 G4 gK :K
- G3 G5 :K
- G3 G6 gK :K
- G3 G7 gK :K
- G3 G8 gK :K
- G3 G9 gK :K
- G3 G10 gK :K
- G3 G11 gK :K
- G4 G1 gC :C
- G4 G2 gC :C
- G4 G3 gC :C
- G4 G5 gC :C
- G4 G6 gC :C
- G4 G7 gC :C
- G4 G8 gC :C
- G4 G9 gC :C
- G4 G10 gC :C
- G4 G11 gC :C
- G5 G1 gK :K
- G5 G2 gK :K
- G5 G3 :K
- G5 G4 gK :K
- G5 G6 gK :K
- G5 G7 gK :K
- G5 G8 gK :K
- G5 G9 gK :K
- G5 G10 gK :K
- G5 G11 gK :K
- G6 G1 gW :W
- G6 G2 gW :W
- G6 G3 gW :W
- G6 G4 gW :W
- G6 G5 gW :W
- G6 G7 gW :W
- G6 G8 gW :W
- G6 G9 gW :W
- G6 G10 gW :W
- G6 G11 gW :W
- G7 G1 gZ :Z
- G7 G2 gZ :Z
- G7 G3 gZ :Z
- G7 G4 gZ :Z
- G7 G5 gZ :Z
- G7 G6 gZ :Z
- G7 G8 gZ :Z
- G7 G9 gZ :Z
- G7 G10 gZ :Z
- G7 G11 gZ :Z
- G8 G1 gQ :Q
- G8 G2 gQ :Q
- G8 G3 gQ :Q
- G8 G4 gQ :Q
- G8 G5 gQ :Q
- G8 G6 gQ :Q
- G8 G7 gQ :Q
- G8 G9 gQ :Q
- G8 G10 gQ :Q
- G8 G11 gQ :Q
- G9 G1 gO :O
- G9 G2 gO :O
- G9 G3 gO :O
- G9 G4 gO :O
- G9 G5 gO :O
- G9 G6 gO :O
- G9 G7 gO :O
- G9 G8 gO :O
- G9 G10 gO :O
- G9 G11 gO :O
- G10 G1 :I
- G10 G2 gI :I
- G10 G3 gI :I
- G10 G4 gI :I
- G10 G5 gI :I
- G10 G6 gI :I
- G10 G7 gI :I
- G10 G8 gI :I
- G10 G9 gI :I
- G10 G11 gI :I
- G11 G1 gN :N
- G11 G2 :N
- G11 G3 gN :N
- G11 G4 gN :N
- G11 G5 gN :N
- G11 G6 gN :N
- G11 G7 gN :N
- G11 G8 gN :N
- G11 G10 gN :N
- G11 G9 gN :N
-}
-*/
int a;
unsigned b;
--- a/tests/scc/execute/0141-int-iden.c
+++ b/tests/scc/execute/0141-int-iden.c
@@ -28,10 +28,18 @@
i = i * 1;
i = 1 * i;
i = i / 1;
- i = 1 / i;
+
+ if (i)
+ i = 1 / i;
+
i = i & ~0;
i = ~0 & i;
i = i % 1;
- i = i / 0;
- i = i % 0;
+
+ if (0)
+ i = i / 0;
+ if (0)
+ i = i % 0;
+
+ return 0;
}
--- a/tests/scc/execute/0154-if-defined
+++ /dev/null
@@ -1,15 +1,0 @@
-#if defined(FOO)
-int a;
-#elif !defined(FOO) && defined(BAR)
-int b;
-#elif !defined(FOO) && !defined(BAR)
-int c;
-#else
-int d;
-#endif
-
-int
-main(void)
-{
- return c;
-}
--- /dev/null
+++ b/tests/scc/execute/0154-if-defined.c
@@ -1,0 +1,15 @@
+#if defined(FOO)
+int a;
+#elif !defined(FOO) && defined(BAR)
+int b;
+#elif !defined(FOO) && !defined(BAR)
+int c;
+#else
+int d;
+#endif
+
+int
+main(void)
+{
+ return c;
+}
--- a/tests/scc/execute/0172-hexa.c
+++ b/tests/scc/execute/0172-hexa.c
@@ -1,10 +1,13 @@
int
main(void)
{
- return 0xa == 0xA &&
- 0xb == 0xB &&
- 0xc == 0xC &&
- 0xd == 0xD &&
- 0xe == 0xE &&
- 0xf == 0xF;
+ if (0xa != 0xA ||
+ 0xb != 0xB ||
+ 0xc != 0xC ||
+ 0xd != 0xD ||
+ 0xe != 0xE ||
+ 0xf != 0xF) {
+ return 1;
+ }
+ return 0;
}
--- /dev/null
+++ b/tests/scc/execute/0179-sizeof.c
@@ -1,0 +1,7 @@
+
+int
+main(void)
+{
+ sizeof((int) 1);
+ return 0;
+}
--- /dev/null
+++ b/tests/scc/execute/0180-incomplete.c
@@ -1,0 +1,14 @@
+
+struct dummy;
+
+void *
+fun(struct dummy p[])
+{
+ return p;
+}
+
+int
+main()
+{
+ return fun(0) != 0;
+}
--- /dev/null
+++ b/tests/scc/execute/0181-stringize.c
@@ -1,0 +1,17 @@
+
+#define XSTR(x) #x
+#define STR(x) XSTR(x)
+#define S y = "str"
+
+int
+main()
+{
+ char *s, *t = STR(S);
+
+ for (s = "y = \"str\""; *s && *t; ++s, ++t) {
+ if (*s != *t)
+ return 1;
+ }
+
+ return 0;
+}
--- a/tests/scc/execute/Makefile
+++ b/tests/scc/execute/Makefile
@@ -1,9 +1,11 @@
.POSIX:
+ROOT=../../../rootdir
+
all: tests
tests:
- CFLAGS='' SCCPREFIX=../../rootdir/ PATH=../../rootdir/bin:$$PATH ./chktest.sh scc-tests.lst
+ @CFLAGS='' SCCPREFIX=$(ROOT) PATH=$(ROOT)/bin:$$PATH ./chktest.sh scc-tests.lst
clean:
rm -f *.as *.o *.ir *.qbe *core test.log
--- a/tests/scc/execute/chktest.sh
+++ b/tests/scc/execute/chktest.sh
@@ -1,20 +1,23 @@
#!/bin/sh
file=${1?' empty input file'}
-ttyflags=`stty -g`
-trap "stty $ttyflags;tabs -8;rm -f a.out" 0 1 2 3 15
-stty tabs
-tabs 40
+trap "rm -f a.out; exit" 0 1 2 3 15
ulimit -c 0
rm -f test.log
-cat $file |
+SYS=`uname | tr A-Z a-z`
+FORMAT=elf
+ABI=sysv
+ARCH=amd64
+
+export SYS FORMAT ABI ARCH
+
while read i state
do
echo $i >>test.log
- printf "%s\t" $i
- printf "%s" $state
rm -f a.out
- (scc -Isysinclude $CFLAGS "$i" && ./a.out) 2>test.log &&
- echo "[OK]" || echo "[FAILED]"
-done
+
+ (scc -Isysinclude $CFLAGS "$i" && ./a.out) 2>>test.log &&
+ printf '[PASS]' || printf '[FAIL]'
+ printf '%s: %s\n' "$state" "$i"
+done < $file
--- a/tests/scc/execute/scc-tests.lst
+++ b/tests/scc/execute/scc-tests.lst
@@ -125,24 +125,24 @@
0132-forward.c [TODO]
0133-ftn-ptr.c [TODO]
0134-arith.c [TODO]
-0135-unary.c [TODO]
-0136-if.c [TODO]
+0135-unary.c
+0136-if.c
0137-int-cast.c [TODO]
-0138-namespace.c [TODO]
+0138-namespace.c
0139-ptr-ary.c [TODO]
0140-int-fold.c [TODO]
0141-int-iden.c [TODO]
0142-char-const.c [TODO]
-0143-int-const.c [TODO]
-0144-long-const.c [TODO]
+0143-int-const.c
+0144-long-const.c
0145-llong-const.c [TODO]
-0146-ifdef.c [TODO]
-0147-intern-cpp.c [TODO]
-0148-cpp-string.c [TODO]
-0149-define.c [TODO]
-0150-define.c [TODO]
+0146-ifdef.c
+0147-intern-cpp.c
+0148-cpp-string.c
+0149-define.c
+0150-define.c
0151-vararg.c [TODO]
-0152-cat.c [TODO]
+0152-cat.c
0153-cpp-string.c [TODO]
0154-if-defined [TODO]
0155-struct-compl.c [TODO]
@@ -152,7 +152,7 @@
0159-typedef.c [TODO]
0160-cpp-if.c [TODO]
0161-struct.c [TODO]
-0162-array.c [TODO]
+0162-array.c
0163-array.c [TODO]
0164-struct.c [TODO]
0165-struct.c [TODO]
@@ -162,10 +162,13 @@
0169-string.c [TODO]
0170-line.c [TODO]
0171-macros.c [TODO]
-0172-hexa.c [TODO]
-0173-macro.c [TODO]
+0172-hexa.c
+0173-macro.c
0174-decay.c [TODO]
-0175-defined.c [TODO]
+0175-defined.c
0176-macro.c [TODO]
0177-literal.c [TODO]
0178-include.c [TODO]
+0179-sizeof.c [TODO]
+0180-incomplete.c
+0181-stringize.c [TODO]