shithub: scc

Download patch

ref: e03e4140667f946d8f849adfb330a058008d331c
parent: aa911418f7dfb7fa7f5026d8cd3f52b03e86fc7e
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Thu May 17 10:22:48 EDT 2018

[as/i286] Add Makefile support to build as-286

This is only a skeleton, but after this commit make all generates
a i286 binary.

--- a/as/Makefile
+++ b/as/Makefile
@@ -7,11 +7,8 @@
 OBJ = main.o symbol.o ins.o parser.o expr.o myro.o
 MOREFLAGS = -I$(PROJECTDIR)/inc/$(STD) $(AS_CFLAGS)
 
-all: as-amd64 as-i386 as-z80
+all: as-amd64 as-i386 as-i286 as-z80
 
-as: $(OBJ)
-	$(CC) $(SCC_LDFLAGS) $(OBJ) -lscc -o $@
-
 dep:
 	$(PROJECTDIR)/mkdep.sh
 
@@ -24,6 +21,7 @@
 
 include target/amd64.mk
 include target/i386.mk
+include target/i286.mk
 include target/z80.mk
 
 #deps
--- /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
+
+as-i286: $(I286_OBJ) $(LIBDIR)/libscc.a
+	$(CC) $(SCC_LDFLAGS) $(I286_OBJ) -lscc -o $@
--- a/as/target/x86/8086-test.s
+++ /dev/null
@@ -1,45 +1,0 @@
-					/ Look in http://www.mlsite.net/8086/
-					/ Look in http://www.srmuniv.ac.in/sites/default/files/2017/15CS205J-unitII.pdf
-/addb reg8,reg8
-	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
-
-	ADDB	%AL,%CL			/ 00 C1
-	ADDB	%CL,%CL			/ 00 C1
-	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
-
-	ADDB	%AL,%DL			/ 00 C2
-	ADDB	%CL,%DL			/ 00 C2
-	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 reg16,reg16
-	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,(%AX)		/ 02
-	ADDW	%AX,(%AX)		/ 03
-	ADDB	64,%AL			/ 04 40
-	ADDW	32,%AX			/ 05 20
--- /dev/null
+++ b/as/target/x86/i286-test.s
@@ -1,0 +1,45 @@
+					/ Look in http://www.mlsite.net/8086/
+					/ Look in http://www.srmuniv.ac.in/sites/default/files/2017/15CS205J-unitII.pdf
+/addb reg8,reg8
+	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
+
+	ADDB	%AL,%CL			/ 00 C1
+	ADDB	%CL,%CL			/ 00 C1
+	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
+
+	ADDB	%AL,%DL			/ 00 C2
+	ADDB	%CL,%DL			/ 00 C2
+	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 reg16,reg16
+	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,(%AX)		/ 02
+	ADDW	%AX,(%AX)		/ 03
+	ADDB	64,%AL			/ 04 40
+	ADDW	32,%AX			/ 05 20
--- /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,
+
+		"BC", 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;
+	}
+}