summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/mb86235/mb86235d.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/mb86235/mb86235d.c')
-rw-r--r--src/devices/cpu/mb86235/mb86235d.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/devices/cpu/mb86235/mb86235d.c b/src/devices/cpu/mb86235/mb86235d.c
new file mode 100644
index 00000000000..e77da1a0cad
--- /dev/null
+++ b/src/devices/cpu/mb86235/mb86235d.c
@@ -0,0 +1,144 @@
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese, ElSemi
+#include "emu.h"
+#include "debugger.h"
+#include "mb86235.h"
+
+static const char *const alu_opcode_string[] =
+{
+ "FADD",
+ "FADDZ",
+ "FSUB",
+ "FSUBZ",
+
+ "FCMP",
+ "FABS",
+ "FABC",
+ "ALUNOP",
+
+ "FEA",
+ "FES",
+ "FRCP",
+ "FRSQ",
+
+ "FLOG",
+ "CIF",
+ "CFI",
+ "CFIB",
+
+ "ADD",
+ "ADDZ",
+ "SUB",
+ "SUBZ",
+
+ "CMP",
+ "ABS",
+ "ATR",
+ "ATRZ",
+
+ "AND",
+ "OR",
+ "XOR",
+ "NOT",
+
+ "LSR",
+ "LSL",
+ "ASR",
+ "ASL"
+};
+
+static const char *const ctrl_opcode_string[] =
+{
+ "NOP",
+ "REP",
+ "SETL",
+ "CLRF",
+ "PUSH",
+ "POP",
+ "???",
+ "???",
+ "SETM",
+ "SETMCBSA",
+ "SETMCBSB",
+ "SETMRF",
+ "SETMRDY",
+ "SETMWAIT",
+ "???",
+ "???",
+ "DBcc", /* TODO */
+ "DBNcc", /* TODO */
+ "DJMP",
+ "DBLP",
+ "DBBC",
+ "DBBS",
+ "???",
+ "???",
+ "DCcc", /* TODO */
+ "DCNcc", /* TODO */
+ "DCALL",
+ "DRET",
+ "???",
+ "???",
+ "???",
+ "???"
+};
+
+static unsigned dasm_mb86235(char *buffer, UINT32 opcode, UINT32 opcode2)
+{
+ char *p = buffer;
+ UINT32 grp = ( opcode2 >> 29 ) & 0x7;
+ UINT32 aluop = (opcode2 >> (24)) & 0x1f;
+
+ switch(grp)
+ {
+ case 0: // ALU2
+
+ p += sprintf(p,"%s TRANS2_1",alu_opcode_string[aluop]);
+ break;
+ case 1: // ALU2
+ p += sprintf(p,"%s TRANS1_1",alu_opcode_string[aluop]);
+ break;
+ case 2: // ALU2 + CTRL
+ {
+ UINT32 ctrlop = (opcode >> (22)) & 0x1f;
+ //UINT32 ef1 = (opcode >> 16) & 0x3f;
+ //UINT32 ef2 = (opcode >> 0) & 0xffff;
+
+ p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]);
+ }
+ break;
+ case 4: // ALU1
+ p += sprintf(p,"%s TRANS2_2",alu_opcode_string[aluop]);
+ break;
+ case 5: // ALU1
+ p += sprintf(p,"%s TRANS1_2",alu_opcode_string[aluop]);
+ break;
+ case 6: // ALU1
+ {
+ UINT32 ctrlop = (opcode >> (22)) & 0x1f;
+ //UINT32 ef1 = (opcode >> 16) & 0x3f;
+ //UINT32 ef2 = (opcode >> 0) & 0xffff;
+
+ p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]);
+ break;
+ }
+ case 7:
+ p += sprintf(p,"TRANS1_3");
+ break;
+ default:
+ p += sprintf(p,"UNK ???");
+ break;
+ }
+
+ return (2 | DASMFLAG_SUPPORTED);
+}
+
+CPU_DISASSEMBLE( mb86235 )
+{
+ UINT32 op = *(UINT32 *)oprom;
+ UINT32 op2 = *(UINT32 *)(oprom + 4);
+ op = LITTLE_ENDIANIZE_INT32(op);
+ op2 = LITTLE_ENDIANIZE_INT32(op2);
+
+ return dasm_mb86235(buffer, op, op2);
+}