From 760356745051e574671c6254582dbcccfe14eb72 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 20 Mar 2020 12:58:16 -0400 Subject: Add TMP90C051 disassembler (only accessible through unidasm for now) --- src/devices/cpu/tlcs90/tlcs90d.cpp | 19 +++++++++++++++++++ src/devices/cpu/tlcs90/tlcs90d.h | 9 +++++++++ src/tools/unidasm.cpp | 1 + 3 files changed, 29 insertions(+) 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; } }, -- cgit v1.2.3