summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/ie15/ie15dasm.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-11-08 12:56:12 +0100
committer Miodrag Milanovic <mmicko@gmail.com>2015-11-08 12:56:12 +0100
commit7c19aac60e12d6f5ea301bdb34d7826a01e0b06f (patch)
treef310d86aa2c6bfc19d115307dedde4eb0cd52dad /src/devices/cpu/ie15/ie15dasm.cpp
parenta57b46ae933badd7441ce1644711dbb851e2b504 (diff)
Rename *.c -> *.cpp in our source (nw)
Diffstat (limited to 'src/devices/cpu/ie15/ie15dasm.cpp')
-rw-r--r--src/devices/cpu/ie15/ie15dasm.cpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/devices/cpu/ie15/ie15dasm.cpp b/src/devices/cpu/ie15/ie15dasm.cpp
new file mode 100644
index 00000000000..3f21fb977e0
--- /dev/null
+++ b/src/devices/cpu/ie15/ie15dasm.cpp
@@ -0,0 +1,126 @@
+// license:BSD-3-Clause
+// copyright-holders:Sergey Svishchev
+#include "emu.h"
+
+#define OP(A) oprom[(A) - PC]
+#define ARG(A) opram[(A) - PC]
+
+CPU_DISASSEMBLE( ie15 )
+{
+ UINT32 flags = 0;
+ UINT8 op;
+ unsigned PC = pc;
+
+ op = OP(pc++);
+ switch (op & 0xf0)
+ {
+ case 0x00:
+ sprintf (buffer,"add r%d", op & 0x0f);
+ break;
+ case 0x10:
+ sprintf (buffer,"jmp $%04x", (((op & 0x0f) << 8) | ARG(pc)) + 1);
+ pc+=1;
+ break;
+ case 0x20:
+ sprintf (buffer,"ldc r%d, #$%02x", (op & 0x0f), ARG(pc));
+ pc+=1;
+ break;
+ case 0x30: switch (op)
+ {
+ case 0x30:
+ sprintf (buffer,"lca #$%02x", ARG(pc));
+ pc+=1;
+ break;
+ case 0x33:
+ sprintf (buffer,"ral");
+ break;
+ case 0x35:
+ sprintf (buffer,"rar");
+ break;
+ default:
+ sprintf (buffer,"illegal");
+ break;
+ };
+ break;
+ case 0x40:
+ sprintf (buffer,"dsr r%d", op & 0x0f);
+ break;
+ case 0x50: switch (op)
+ {
+ case 0x50:
+ sprintf (buffer,"isn");
+ break;
+ case 0x51:
+ sprintf (buffer,"inc");
+ break;
+ case 0x52:
+ sprintf (buffer,"dsn");
+ break;
+ case 0x58:
+ sprintf (buffer,"ise");
+ break;
+ case 0x5a:
+ sprintf (buffer,"dse");
+ break;
+ case 0x5b:
+ sprintf (buffer,"dec");
+ break;
+ case 0x5d:
+ sprintf (buffer,"com");
+ break;
+ case 0x5f:
+ sprintf (buffer,"clr");
+ break;
+ default:
+ sprintf (buffer,"illegal");
+ break;
+ };
+ break;
+ case 0x60:
+ sprintf (buffer,"lla #$%02x", op & 0x0f);
+ break;
+ case 0x70:
+ sprintf (buffer,"jmi r%d", op & 0x0f);
+ break;
+ case 0x80: switch (op)
+ {
+ case 0x80: case 0x81: case 0x82: case 0x83:
+ case 0x84: case 0x85: case 0x86:
+ sprintf (buffer,"sfc #%d", op & 0x07);
+ break;
+ case 0x87:
+ sprintf (buffer,"skp");
+ break;
+ case 0x88: case 0x89: case 0x8a: case 0x8b:
+ case 0x8c: case 0x8d: case 0x8e:
+ sprintf (buffer,"sfs #%d", op & 0x07);
+ break;
+ case 0x8f:
+ sprintf (buffer,"nop");
+ break;
+ };
+ break;
+ case 0x90:
+ sprintf (buffer,"and r%d", op & 0x0f);
+ break;
+ case 0xa0:
+ sprintf (buffer,"xor r%d", op & 0x0f);
+ break;
+ case 0xb0:
+ sprintf (buffer,"cs r%d", op & 0x0f);
+ break;
+ case 0xc0:
+ sprintf (buffer,"%s #%d", BIT(op, 3) ? "sfl" : "cfl", op & 0x07);
+ break;
+ case 0xd0:
+ sprintf (buffer,"lda r%d", op & 0x0f);
+ break;
+ case 0xe0:
+ sprintf (buffer,"sta r%d", op & 0x0f);
+ break;
+ case 0xf0:
+ sprintf (buffer,"ota #$%02x", op & 0x0f);
+ break;
+ }
+ return (pc - PC) | flags | DASMFLAG_SUPPORTED;
+}