summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-03-20 12:58:16 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-03-20 13:00:27 -0400
commit760356745051e574671c6254582dbcccfe14eb72 (patch)
tree1bc98560b6b3d7745289617df93c8136c4b16690
parent1717a7c92966fa239d7a48c6c72da9d03cf7157f (diff)
Add TMP90C051 disassembler (only accessible through unidasm for now)
-rw-r--r--src/devices/cpu/tlcs90/tlcs90d.cpp19
-rw-r--r--src/devices/cpu/tlcs90/tlcs90d.h9
-rw-r--r--src/tools/unidasm.cpp1
3 files changed, 29 insertions, 0 deletions
diff --git a/src/devices/cpu/tlcs90/tlcs90d.cpp b/src/devices/cpu/tlcs90/tlcs90d.cpp
index c85fb26c861..e56bb02d59a 100644
--- a/src/devices/cpu/tlcs90/tlcs90d.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90d.cpp
@@ -64,6 +64,25 @@ tmp90844_disassembler::tmp90844_disassembler()
{
}
+const char *const tmp90c051_disassembler::ir_names[0x4c] = {
+ "P2", "P2CR", "P3", "P3CR",
+ "P3FR", "P4", "P5", "P45CR", "P45FR", "P6", "P6CR", "P6FR",
+ "TREG0", "TREG1", "TREG2", "TREG3", "T01MOD", "T23MOD", "TFFCR", "TRDC",
+ "TRUN", "IRF0", "IRF1", "IRF2", "INTE0", "INTE1", "INTE2", "DMAE",
+ "SCMOD0", "SCCR0", "SCBUF0", "BRGCR0", "SCMOD1", "SCCR1", "SCBUF1", "BRGCR1",
+ "REFCR", "MSAR", "MSAMR", "MACR", nullptr, "WDMOD", "WDCR", "P2FR",
+ "SECR", "MINR", "HOUR", "DAYR", "DATER", "MONTHR", "YEARR", "PAGER",
+ "RESTR", "TPHBUF", "TPHMOD", "TPHSCR", "BX", "BY", "CLLARL", "CLLARH",
+ "EXPA1L", "EXPA1H", "EXPA0L", "EXPA0H", nullptr, nullptr, "DMASB0", "DMADB0",
+ "DMAV0", "DMASB1", "DMADB1", "DMAV1", nullptr, nullptr, nullptr, nullptr
+};
+
+tmp90c051_disassembler::tmp90c051_disassembler()
+ : tlcs90_disassembler(0xffb4, ir_names) // I/O base is actually FF80H
+{
+ // TODO: recognize TMP90C051-original LDC instruction needed to access certain DMA registers
+}
+
const char *tlcs90_disassembler::internal_registers_names(uint16_t x) const
{
if (x >= m_iobase)
diff --git a/src/devices/cpu/tlcs90/tlcs90d.h b/src/devices/cpu/tlcs90/tlcs90d.h
index 4034717e272..2c71cd432d2 100644
--- a/src/devices/cpu/tlcs90/tlcs90d.h
+++ b/src/devices/cpu/tlcs90/tlcs90d.h
@@ -83,4 +83,13 @@ private:
static const char *const ir_names[];
};
+class tmp90c051_disassembler : public tlcs90_disassembler
+{
+public:
+ tmp90c051_disassembler();
+
+private:
+ static const char *const ir_names[];
+};
+
#endif
diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp
index fe2c65ead8b..d82d2cf5792 100644
--- a/src/tools/unidasm.cpp
+++ b/src/tools/unidasm.cpp
@@ -511,6 +511,7 @@ static const dasm_table_entry dasm_table[] =
{ "t11", le, 0, []() -> util::disasm_interface * { return new t11_disassembler; } },
{ "tlcs870", le, 0, []() -> util::disasm_interface * { return new tlcs870_disassembler; } },
{ "tlcs900", le, 0, []() -> util::disasm_interface * { return new tlcs900_disassembler; } },
+ { "tmp90c051", le, 0, []() -> util::disasm_interface * { return new tmp90c051_disassembler; } },
{ "tmp90840", le, 0, []() -> util::disasm_interface * { return new tmp90840_disassembler; } },
{ "tmp90844", le, 0, []() -> util::disasm_interface * { return new tmp90844_disassembler; } },
{ "tms0980", be, 0, []() -> util::disasm_interface * { return new tms0980_disassembler; } },