diff options
author | 2015-05-20 01:39:02 +0200 | |
---|---|---|
committer | 2015-05-20 01:39:02 +0200 | |
commit | 0ca552d593f3df8fc5bcd27813fc3af56f04eb34 (patch) | |
tree | cd4d5e6e5ab9153da1a8600f387be377652fc795 | |
parent | 9d2127ef321f2d743e1ceb4a655cece1444f321a (diff) |
added m58846 disasm
-rw-r--r-- | src/emu/cpu/melps4/melps4d.c | 83 | ||||
-rw-r--r-- | src/tools/unidasm.c | 2 |
2 files changed, 68 insertions, 17 deletions
diff --git a/src/emu/cpu/melps4/melps4d.c b/src/emu/cpu/melps4/melps4d.c index a4c439fd102..c38b4b54004 100644 --- a/src/emu/cpu/melps4/melps4d.c +++ b/src/emu/cpu/melps4/melps4d.c @@ -17,48 +17,48 @@ // opcode mnemonics enum e_mnemonics { + em_ILL, em_TAB, em_TBA, em_TAY, em_TYA, em_TEAB, em_TEPA, em_TXA, em_TAX, em_LXY, em_LZ, em_INY, em_DEY, em_LCPS, em_SADR, em_TAM, em_XAM, em_XAMD, em_XAMI, em_LA, em_AM, em_AMC, em_AMCS, em_A, em_SC, em_RC, em_SZC, em_CMA, em_SB, em_RB, em_SZB, em_SEAM, em_SEY, em_TLA, em_THA, em_TAJ, em_XAL, em_XAH, em_LC7, em_DEC, em_SHL, em_RHL, em_CPA, em_CPAS, em_CPAE, em_SZJ, - em_T1AB, em_TRAB, em_TAB1, em_TABR, em_TAB2, em_TVA, em_TWA, em_SNZ1, em_SNZ2, + em_T1AB, em_TRAB, em_T2AB, em_TAB1, em_TABR, em_TAB2, em_TVA, em_TWA, em_SNZ1, em_SNZ2, em_BA, em_SP, em_B, em_BM, em_RT, em_RTS, em_RTI, em_CLD, em_CLS, em_CLDS, em_SD, em_RD, em_SZD, em_OSAB, em_OSPA, em_OSE, em_IAS, em_OFA, em_IAF, em_OGA, em_IAK, em_SZK, em_SU, em_RU, - em_EI, em_DI, em_INTH, em_INTL, - em_NOP, em_ILL + em_EI, em_DI, em_INTH, em_INTL, em_NOP }; static const char *const em_name[] = { + "?", "TAB", "TBA", "TAY", "TYA", "TEAB", "TEPA", "TXA", "TAX", "LXY", "LZ", "INY", "DEY", "LCPS", "SADR", "TAM", "XAM", "XAMD", "XAMI", "LA", "AM", "AMC", "AMCS", "A", "SC", "RC", "SZC", "CMA", "SB", "RB", "SZB", "SEAM", "SEY", "TLA", "THA", "TAJ", "XAL", "XAH", "LC7", "DEC", "SHL", "RHL", "CPA", "CPAS", "CPAE", "SZJ", - "T1AB", "TRAB", "TAB1", "TABR", "TAB2", "TVA", "TWA", "SNZ1", "SNZ2", + "T1AB", "TRAB", "T2AB", "TAB1", "TABR", "TAB2", "TVA", "TWA", "SNZ1", "SNZ2", "BA", "SP", "B", "BM", "RT", "RTS", "RTI", "CLD", "CLS", "CLDS", "SD", "RD", "SZD", "OSAB", "OSPA", "OSE", "IAS", "OFA", "IAF", "OGA", "IAK", "SZK", "SU", "RU", - "EI", "DI", "INTH", "INTL", - "NOP", "?" + "EI", "DI", "INTH", "INTL", "NOP" }; // number of bits per opcode parameter -static const UINT8 s_bits[] = +static const UINT8 em_bits[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 1, 2, 2, 2, 2, 2, 4, 0, 0, 0, 4, 0, 0, 0, 0, 2, 2, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, - 0, 0 + 0, 0, 0, 0, 0 }; #define _OVER DASMFLAG_STEP_OVER @@ -66,27 +66,76 @@ static const UINT8 s_bits[] = static const UINT32 em_flags[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _OVER, _OUT, _OUT, _OUT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - 0, 0 + 0, 0, 0, 0, 0 }; +// M58846 disasm - - - +static const UINT8 m58846_opmap[0xc0] = +{ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F + em_NOP, em_BA, em_INY, em_DEY, em_DI, em_EI, em_RU, em_SU, 0, 0, em_AM, em_OSE, em_TYA, 0, 0, em_CMA, // 0x + em_CLS, em_CLDS, 0, em_CLD, em_RD, em_SD, em_TEPA, em_OSPA, 0, 0, em_TEAB, em_OSAB, em_TBA, em_TAY, em_TAB, 0, // 1x + em_SZB, em_SZB, em_SZB, em_SZB, 0, 0, em_SEAM, 0, 0, 0, 0, em_SZD, 0, 0, 0, em_SZC, // 2x + em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, em_SEY, // 3x + em_LCPS, em_LCPS, 0, em_AMC, em_RT, em_RTS, em_RTI, 0, em_RC, em_SC, em_LZ, em_LZ, em_SB, em_SB, em_SB, em_SB, // 4x + 0, 0, 0, em_AMCS, em_IAS, em_IAS, 0, em_IAK, em_SZK, em_SZK, em_SZK, em_SZK, em_RB, em_RB, em_RB, em_RB, // 5x + em_XAM, em_XAM, em_XAM, em_XAM, em_TAM, em_TAM, em_TAM, em_TAM, em_XAMD, em_XAMD, em_XAMD, em_XAMD, em_XAMI, em_XAMI, em_XAMI, em_XAMI, // 6x + em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, em_SP, // 7x + 0, em_OFA, em_SNZ1, em_SNZ2, em_OGA, em_T2AB, em_TVA, 0, 0, 0, em_TAB2, 0, em_IAF, 0, 0, 0, // 8x + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x + em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, em_A, // Ax + em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA, em_LA // Bx +}; CPU_DISASSEMBLE(m58846) { - return 1; + UINT16 op = (oprom[0] | oprom[1] << 8) & 0x1ff; + char *dst = buffer; + + // get opcode + UINT8 instr; + if (op >= 0x180) + instr = em_B; + else if (op >= 0x100) + instr = em_BM; + else if (op >= 0xc0) + instr = em_LXY; + else + instr = m58846_opmap[op]; + + dst += sprintf(dst, "%-6s", em_name[instr]); + + // get immediate param + UINT8 bits = em_bits[instr]; + + // special case for LXY x,y + if (instr == em_LXY) + { + UINT8 x = op >> 4 & 3; + UINT8 y = op & 0xf; + dst += sprintf(dst, " %d,%d", x, y); + } + else if (bits > 0) + { + UINT8 param = op & ((1 << bits) - 1); + if (bits > 4) + dst += sprintf(dst, " $%02X", param); + else + dst += sprintf(dst, " %d", param); + } + + return 1 | em_flags[instr] | DASMFLAG_SUPPORTED; } diff --git a/src/tools/unidasm.c b/src/tools/unidasm.c index a6e516b239d..55d27130631 100644 --- a/src/tools/unidasm.c +++ b/src/tools/unidasm.c @@ -113,6 +113,7 @@ CPU_DISASSEMBLE( jaguargpu ); CPU_DISASSEMBLE( konami ); CPU_DISASSEMBLE( lh5801 ); CPU_DISASSEMBLE( lr35902 ); +CPU_DISASSEMBLE( m58846 ); CPU_DISASSEMBLE( m37710_generic ); CPU_DISASSEMBLE( m6800 ); CPU_DISASSEMBLE( m68000 ); @@ -264,6 +265,7 @@ static const dasm_table_entry dasm_table[] = { "konami", _8bit, 0, CPU_DISASSEMBLE_NAME(konami) }, { "lh5801", _8bit, 0, CPU_DISASSEMBLE_NAME(lh5801) }, { "lr35902", _8bit, 0, CPU_DISASSEMBLE_NAME(lr35902) }, + { "m58846", _16le, -1, CPU_DISASSEMBLE_NAME(m58846) }, { "m37710", _8bit, 0, CPU_DISASSEMBLE_NAME(m37710_generic) }, { "m6800", _8bit, 0, CPU_DISASSEMBLE_NAME(m6800) }, { "m68000", _16be, 0, CPU_DISASSEMBLE_NAME(m68000) }, |