summaryrefslogtreecommitdiff
path: root/dis.c
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2012-11-03 21:38:28 -0700
committerMike Pavone <pavone@retrodev.com>2012-11-03 21:38:28 -0700
commitc0b3f8d6a5c1361201539c9f48a76e8aa67fd79e (patch)
tree283e4b0f876464d001c094d1f74590b7ebdbe229 /dis.c
parent81558a718ba0e10a14c5a76fe64abd8e19a3a21c (diff)
Improve 68K instruction decoding. Add simple disassembler.
Diffstat (limited to 'dis.c')
-rw-r--r--dis.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/dis.c b/dis.c
new file mode 100644
index 0000000..d269059
--- /dev/null
+++ b/dis.c
@@ -0,0 +1,33 @@
+#include "68kinst.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char ** argv)
+{
+ long filesize;
+ unsigned short *filebuf;
+ char disbuf[1024];
+ m68kinst instbuf;
+ unsigned short * cur;
+ FILE * f = fopen(argv[1], "rb");
+ fseek(f, 0, SEEK_END);
+ filesize = ftell(f);
+ fseek(f, 0, SEEK_SET);
+ filebuf = malloc(filesize);
+ fread(filebuf, 2, filesize/2, f);
+ fclose(f);
+ for(cur = filebuf; cur - filebuf < (filesize/2); ++cur)
+ {
+ //printf("%x:", *cur);
+ *cur = (*cur >> 8) | (*cur << 8);
+ //printf("%x\n", *cur);
+ }
+ for(cur = filebuf; (cur - filebuf) < (filesize/2); ++cur)
+ {
+ printf("cur: %p: %x\n", cur, *cur);
+ cur = m68K_decode(cur, &instbuf);
+ m68k_disasm(&instbuf, disbuf);
+ puts(disbuf);
+ }
+ return 0;
+}