commit 2c9648de71212c62369e9e8089201ec56fdd38b8
parent 261a2458d2047696e1309260e57edf5f4a2b7b17
Author: Brian Swetland <swetland@frotz.net>
Date:   Sat,  7 Apr 2012 16:55:11 -0700
cleanup: improve Makefile, split emulator core from dcpu program
Diffstat:
| M | Makefile | | | 17 | ++++++++++++----- | 
| A | dcpu.c | | | 86 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | 
| M | emulator.c | | | 62 | +------------------------------------------------------------- | 
| A | emulator.h | | | 47 | +++++++++++++++++++++++++++++++++++++++++++++++ | 
4 files changed, 146 insertions(+), 66 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,11 +1,18 @@
 
+CFLAGS := -Wall -g
+
 all: dcpu a16
 
-dcpu: emulator.c disassemble.c
-	gcc -Wall -o dcpu emulator.c disassemble.c
+DCPU_OBJS := dcpu.o emulator.o disassemble.o
+dcpu: $(DCPU_OBJS)
+	$(CC) -o dcpu $(DCPU_OBJS)
+
+A16_OBJS := assembler.o disassemble.o
+a16: $(A16_OBJS)
+	$(CC) -o a16 $(A16_OBJS)
 
-a16: assembler.c disassemble.c
-	gcc -Wall -o a16 assembler.c disassemble.c
+dcpu.c: emulator.h
+emulator.c: emulator.h
 
 clean:
-	rm -f dcpu a16
+	rm -f dcpu a16 *.o
diff --git a/dcpu.c b/dcpu.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2012, Brian Swetland
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   Redistributions of source code must retain the above copyright notice, 
+ *   this list of conditions and the following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "emulator.h"
+
+extern u16 *disassemble(u16 *pc, char *out);
+
+void dumpheader(void) {
+	fprintf(stderr,
+		"PC   SP   OV   A    B    C    X    Y    Z    I    J    Instruction\n"
+		"---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -----------\n");
+}
+
+void dumpstate(struct dcpu *d) {
+	char out[128];
+	disassemble(d->m + d->pc, out);
+	fprintf(stderr,
+		"%04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %s\n",
+		d->pc, d->sp, d->ov,
+		d->r[0], d->r[1], d->r[2], d->r[3],
+		d->r[4], d->r[5], d->r[6], d->r[7],
+		out);
+}
+
+void load(struct dcpu *d, const char *fn) {
+	FILE *fp;
+	char buf[128];
+	u16 n = 0;
+	if (!(fp = fopen(fn, "r"))) {
+		fprintf(stderr, "cannot open: %s\n", fn);
+		exit(1);
+	}	
+	while (!feof(fp) && fgets(buf, 128, fp)) {
+		if (!isalnum(buf[0]))
+			continue;
+		d->m[n++] = strtoul(buf, 0, 16);
+	}
+	fprintf(stderr,"< LOADED %d WORDS >\n", n);
+	fclose(fp);
+}
+	
+int main(int argc, char **argv) {
+	struct dcpu d;
+	memset(&d, 0, sizeof(d));
+
+	load(&d, argc > 1 ? argv[1] : "out.hex");
+
+	dumpheader();
+	for (;;) {
+		dumpstate(&d);
+		dcpu_step(&d);
+	}		
+	return 0;
+}
+
diff --git a/emulator.c b/emulator.c
@@ -37,21 +37,10 @@
 #include <string.h>
 #include <ctype.h>
 
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
+#include "emulator.h"
 
 extern u16 *disassemble(u16 *pc, char *out);
 
-struct dcpu {
-	u16 r[8];
-	u16 pc;
-	u16 sp;
-	u16 ov;
-	u16 unused;
-	u16 m[65536];
-};
-
 static u16 lit[0x20] = {
 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
@@ -149,52 +138,3 @@ extended:
 		exit(0);
 	}
 }
-
-void dumpheader(void) {
-	fprintf(stderr,
-		"PC   SP   OV   A    B    C    X    Y    Z    I    J    Instruction\n"
-		"---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -----------\n");
-}
-
-void dumpstate(struct dcpu *d) {
-	char out[128];
-	disassemble(d->m + d->pc, out);
-	fprintf(stderr,
-		"%04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %s\n",
-		d->pc, d->sp, d->ov,
-		d->r[0], d->r[1], d->r[2], d->r[3],
-		d->r[4], d->r[5], d->r[6], d->r[7],
-		out);
-}
-
-void load(struct dcpu *d, const char *fn) {
-	FILE *fp;
-	char buf[128];
-	u16 n = 0;
-	if (!(fp = fopen(fn, "r"))) {
-		fprintf(stderr, "cannot open: %s\n", fn);
-		exit(1);
-	}	
-	while (!feof(fp) && fgets(buf, 128, fp)) {
-		if (!isalnum(buf[0]))
-			continue;
-		d->m[n++] = strtoul(buf, 0, 16);
-	}
-	fprintf(stderr,"< LOADED %d WORDS >\n", n);
-	fclose(fp);
-}
-	
-int main(int argc, char **argv) {
-	struct dcpu d;
-	memset(&d, 0, sizeof(d));
-
-	load(&d, argc > 1 ? argv[1] : "out.hex");
-
-	dumpheader();
-	for (;;) {
-		dumpstate(&d);
-		dcpu_step(&d);
-	}		
-	return 0;
-}
-
diff --git a/emulator.h b/emulator.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2012, Brian Swetland
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   Redistributions of source code must retain the above copyright notice, 
+ *   this list of conditions and the following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef _DCPU_H_
+#define _DCPU_H_
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+
+struct dcpu {
+	u16 r[8];
+	u16 pc;
+	u16 sp;
+	u16 ov;
+	u16 unused;
+	u16 m[65536];
+};
+
+void dcpu_step(struct dcpu *d);
+
+#endif