diff options
Diffstat (limited to 'src/devices/cpu/dsp56156/inst.h')
-rw-r--r-- | src/devices/cpu/dsp56156/inst.h | 845 |
1 files changed, 280 insertions, 565 deletions
diff --git a/src/devices/cpu/dsp56156/inst.h b/src/devices/cpu/dsp56156/inst.h index c471b492ecf..4fcf7f66bdb 100644 --- a/src/devices/cpu/dsp56156/inst.h +++ b/src/devices/cpu/dsp56156/inst.h @@ -1,7 +1,9 @@ // license:BSD-3-Clause // copyright-holders:Andrew Gardner -#ifndef DSP56156_INSTRUCTION_H -#define DSP56156_INSTRUCTION_H +#ifndef MAME_CPU_DSP56156_INST_H +#define MAME_CPU_DSP56156_INST_H + +#pragma once #include "opcode.h" #include "tables.h" @@ -13,8 +15,8 @@ // // An Instruction is the base class all regular ops inherit from. // -namespace DSP_56156 -{ +namespace DSP_56156 { + #define UNIMPLEMENTED_OPCODE() osd_printf_error("Unimplemented opcode: PC=%04x | %s;\n", PC, __PRETTY_FUNCTION__); class Opcode; @@ -30,8 +32,7 @@ public: virtual ~Instruction() {} virtual bool decode(const uint16_t word0, const uint16_t word1) = 0; - virtual void disassemble(std::string& retString) const = 0; - virtual void evaluate(dsp56156_core* cpustate) = 0; + virtual std::string disassemble() const = 0; virtual size_t size() const = 0; virtual size_t evalSize() const { return size(); } @@ -78,11 +79,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "abs " + regIdAsString(m_destination); + return "abs " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -101,11 +101,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "adc " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "adc " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -124,11 +123,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "add " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "add " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -151,11 +149,10 @@ public: // TODO: m_opcode = "add"; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = m_opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return m_opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -178,11 +175,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "and " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "and " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -202,14 +198,10 @@ public: decode_EE_table(BITSn(word0,0x0600), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x,%s", m_immediate, regIdAsString(m_destination).c_str()); - retString = "andi " + std::string(temp); - // NEW // sprintf(opcode_str, "and(i)"); + return util::string_format("andi #$%x,%s", m_immediate, regIdAsString(m_destination)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -230,11 +222,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "asl " + regIdAsString(m_destination); + return "asl " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -252,11 +243,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "asl4 " + regIdAsString(m_destination); + return "asl4 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -274,11 +264,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "asr " + regIdAsString(m_destination); + return "asr " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -296,11 +285,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "asr4 " + regIdAsString(m_destination); + return "asr4 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -318,11 +306,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "asr16 " + regIdAsString(m_destination); + return "asr16 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -372,14 +359,10 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x", m_iVal); - retString = m_opcode + " " + std::string(temp) + "," + dString; - // NEW // sprintf(temp, "#$%04x", iVal); + return util::string_format("%s #$%x,%s", m_opcode, m_iVal, dString); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } private: @@ -433,19 +416,10 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x", m_iVal); - std::string source = temp; - - sprintf(temp, "X:(%s)", regIdAsString(m_r).c_str()); - std::string destination = temp; - - retString = m_opcode + " " + source + "," + destination; - // NEW // sprintf(temp, "#$%04x", m_iVal); + return util::string_format("%s #$%x,X:(%s)", m_opcode, m_iVal, regIdAsString(m_r)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -499,16 +473,10 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x", m_iVal); - std::string source = temp; - - retString = m_opcode + " " + source + "," + regIdAsString(m_destination); - // NEW // sprintf(temp, "#$%04x", m_iVal); + return util::string_format("%s #$%x,%s", m_opcode, m_iVal, regIdAsString(m_destination)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -533,17 +501,10 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "b" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "b.%s", M); - - char temp[32]; - sprintf(temp, ">*+$%x", 2 + m_immediate); - // NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (int16_t)word1, (int16_t)word1); - retString = opcode + " " + std::string(temp); + return util::string_format("b%s >*+$%x", opMnemonicAsString(m_mnem), 2 + m_immediate); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -568,19 +529,13 @@ public: m_immediate = get_6_bit_signed_value(BITSn(word0,0x003f)); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "b" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "b.%s", M); - - char temp[32]; - if (m_immediate >= 0) sprintf(temp, "<*+$%x", m_immediate + 1); - else sprintf(temp, "<*-$%x", 1 - m_immediate - 2); - // NEW // sprintf(temp, "$%04x (%d)", pc + 1 + relativeInt, relativeInt); - - retString = opcode + " " + std::string(temp); + if (m_immediate >= 0) + return util::string_format("b%s <*+$%x", opMnemonicAsString(m_mnem), m_immediate + 1); + else + return util::string_format("b%s <*-$%x", opMnemonicAsString(m_mnem), 1 - m_immediate - 2); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -604,13 +559,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "b" + opMnemonicAsString(m_mnem); - retString = opcode + " " + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "b.%s", M); + return opcode + " " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -632,14 +585,10 @@ public: m_immediate = (int16_t)word1; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, ">*+$%x", 2 + m_immediate); - // NEW // sprintf(temp, "$%04x (%d)", pc + 2 + word1, (int16_t)word1); - retString = "bra " + std::string(temp); + return util::string_format("bra >*+$%x", 2 + m_immediate); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -661,15 +610,13 @@ public: m_immediate = (int8_t)BITSn(word0,0x00ff); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - if (m_immediate >= 0) sprintf(temp, "<*+$%x", 1 + m_immediate); - else sprintf(temp, "<*-$%x", 1 - m_immediate - 2); - // NEW // sprintf(temp, "$%04x (%d)", pc + 1 + iVal, iVal); - retString = "bra " + std::string(temp); + if (m_immediate >= 0) + return util::string_format("bra <*+$%x", 1 + m_immediate); + else + return util::string_format("bra <*-$%x", 1 - m_immediate - 2); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -690,11 +637,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "bra " + regIdAsString(m_destination); + return "bra " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -713,13 +659,10 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "brk" + opMnemonicAsString(m_mnem); - retString = opcode; - // NEW // sprintf(opcode_str, "brk.%s", M); + return "brk" + opMnemonicAsString(m_mnem); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -743,19 +686,13 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "bs" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "bs.%s", M); - - char temp[32]; - if (m_immediate >= 0) sprintf(temp, ">*+$%x", 2 + m_immediate); - else sprintf(temp, ">*-$%x", 1 - m_immediate - 1 - 2); - //sprintf(temp, ">*+$%x", 2 + m_immediate); - // NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (int16_t)word1, (int16_t)word1); - retString = opcode + " " + std::string(temp); + if (m_immediate >= 0) + return util::string_format("bs%s >*+$%x", opMnemonicAsString(m_mnem), 2 + m_immediate); + else + return util::string_format("bs%s >*-$%x", opMnemonicAsString(m_mnem), 1 - m_immediate - 1 - 2); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -780,13 +717,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "bs" + opMnemonicAsString(m_mnem); - retString = opcode + " " + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "bs.%s", M); + return opcode + " " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -809,15 +744,13 @@ public: m_immediate = (int16_t)word1; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - if (m_immediate >= 0) sprintf(temp, ">*+$%x", 2 + m_immediate); - else sprintf(temp, ">*-$%x", 1 - m_immediate - 1 - 2); - // NEW // sprintf(temp, "$%04x (%d)", pc + 2 + (int16_t)word1, (int16_t)word1); - retString = "bsr " + std::string(temp); + if (m_immediate >= 0) + return util::string_format("bsr >*+$%x", 2 + m_immediate); + else + return util::string_format("bsr >*-$%x", 1 - m_immediate - 1 - 2); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -839,11 +772,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "bsr " + regIdAsString(m_destination); + return "bsr " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -861,11 +793,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "chkaau"; + return "chkaau"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -883,11 +814,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "clr " + regIdAsString(m_destination); + return "clr " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -905,11 +835,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "clr24 " + regIdAsString(m_destination); + return "clr24 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -930,11 +859,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "cmp " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "cmp " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_NONE; } }; @@ -955,11 +883,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "cmpm " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "cmpm " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_NONE; } }; @@ -976,11 +903,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "debug"; + return "debug"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -999,13 +925,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "debug" + opMnemonicAsString(m_mnem); - retString = opcode; - // NEW // sprintf(opcode_str, "debug.%s", M); + return opcode; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1026,11 +950,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "dec " + regIdAsString(m_destination); + return "dec " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1048,11 +971,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "dec24 " + regIdAsString(m_destination); + return "dec24 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -1071,11 +993,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "div " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "div " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1099,16 +1020,14 @@ public: if (m_mnem == oINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "dmac" + opMnemonicAsString(m_mnem); - retString = opcode + " " + + return opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "dmac(%s)", A); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1132,19 +1051,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_source); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "*+$%x", 2 + m_immediate); - std::string destination = temp; - // NEW // sprintf(temp, "X:(R%d),$%02x", Rnum, pc + 2 + word1); - - sprintf(temp, "X:(%s)", regIdAsString(m_source).c_str()); - std::string source = temp; - - retString = "do " + source + "," + destination; + return util::string_format("do X:(%s),*+$%x", regIdAsString(m_source), 2 + m_immediate); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1168,14 +1078,10 @@ public: m_displacement = word1; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#<$%x,*+$%x", m_immediate, 2 + m_displacement); - // NEW // sprintf(temp, "#$%02x,$%04x", BITSn(word0,0x00ff), pc + 2 + word1); - retString = "do " + std::string(temp); + return util::string_format("do #<$%x,*+$%x", m_immediate, 2 + m_displacement); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1202,14 +1108,10 @@ public: if (m_source == iINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "*+$%x", 2 + m_displacement); - // NEW // sprintf(temp, "%s,$%04x", S1, pc + 2 + word1); - retString = "do " + regIdAsString(m_source) + "," + std::string(temp); + return util::string_format("do %s,*+$%x", regIdAsString(m_source), 2 + m_displacement); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1231,15 +1133,10 @@ public: m_displacement = word1; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "*+$%x", m_displacement + 2); - // NEW // sprintf(temp, "*+$%x", pc + word1); - // NEW // sprintf(temp, "$%04x", pc + 2 + word1); - retString = "do forever, " + std::string(temp); + return util::string_format("do forever, *+$%x", m_displacement + 2); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1259,11 +1156,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "enddo"; + return "enddo"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1282,11 +1178,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "eor " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "eor " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -1304,11 +1199,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "ext " + regIdAsString(m_destination); + return "ext " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1325,11 +1219,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "illegal"; + return "illegal"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1349,13 +1242,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "imac " + + return "imac " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1378,13 +1270,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "impy " + + return "impy " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1405,11 +1296,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "inc " + regIdAsString(m_destination); + return "inc " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -1427,11 +1317,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "inc24 " + regIdAsString(m_destination); + return "inc24 " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -1452,17 +1341,10 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "j" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "j.%s", M); - - char temp[32]; - sprintf(temp, ">$%x", m_displacement); - // NEW // sprintf(temp, "$%04x", word1); - retString = opcode + " " + std::string(temp); + return util::string_format("j%s >$%x", opMnemonicAsString(m_mnem), m_displacement); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1486,13 +1368,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "j" + opMnemonicAsString(m_mnem); - retString = opcode + " " + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "j.%s", M); + return opcode + " " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1514,19 +1394,9 @@ public: m_displacement = word1; return true; } - void disassemble(std::string& retString) const override - { - char temp[32]; - sprintf(temp, ">$%x", m_displacement); - // NEW // sprintf(temp, "$%04x", word1); - retString = "jmp " + std::string(temp); - } - void evaluate(dsp56156_core* cpustate) override + std::string disassemble() const override { - PC = m_displacement; - - /* S L E U N Z V C */ - /* - - - - - - - - */ + return util::string_format("jmp >$%x", m_displacement); } size_t size() const override { return 2; } size_t evalSize() const override { return 0; } @@ -1549,16 +1419,9 @@ public: decode_RR_table(BITSn(word0,0x0003), m_destination); return true; } - void disassemble(std::string& retString) const override - { - retString = "jmp " + regIdAsString(m_destination); - } - void evaluate(dsp56156_core* cpustate) override + std::string disassemble() const override { - PC = regValue16(cpustate, m_destination); - - /* S L E U N Z V C */ - /* - - - - - - - - */ + return "jmp " + regIdAsString(m_destination); } size_t size() const override { return 1; } size_t evalSize() const override { return 0; } @@ -1583,17 +1446,10 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "js" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "js.%s", M); - - char temp[32]; - sprintf(temp, ">$%x", m_displacement); - // NEW // sprintf(temp, "$%04x", word1); - retString = opcode + " " + std::string(temp); + return util::string_format("js%s >$%x", opMnemonicAsString(m_mnem), m_displacement); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -1618,13 +1474,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "js" + opMnemonicAsString(m_mnem); - retString = opcode + " " + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "js.%s", M); + return opcode + " " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -1647,14 +1501,10 @@ public: m_displacement = word1; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, ">$%x", m_displacement); - // NEW // sprintf(temp, "$%04x", word1); - retString = "jsr " + std::string(temp); + return util::string_format("jsr >$%x", m_displacement); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -1677,14 +1527,10 @@ public: m_bAddr = BITSn(word0,0x00ff); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "<$%x", m_bAddr); - // NEW // sprintf(temp, "#$%02x", BITSn(word0,0x00ff)); - retString = "jsr " + std::string(temp); + return util::string_format("jsr <$%x", m_bAddr); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -1706,11 +1552,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "jsr " + regIdAsString(m_destination); + return "jsr " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OVER; } @@ -1727,7 +1572,7 @@ public: } bool decode(const uint16_t word0, const uint16_t word1) override { - if ((word0 & 0x000c) == 0) return false; // NEW TODO // + if ((word0 & 0x000c) == 0) return false; decode_TT_table(BITSn(word0,0x0030), m_destination); @@ -1736,12 +1581,11 @@ public: return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { // HACK - retString = "lea " + m_ea + "," + regIdAsString(m_destination); + return "lea " + m_ea + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1759,7 +1603,7 @@ public: } bool decode(const uint16_t word0, const uint16_t word1) override { - if ((word0 & 0x000c) == 0) return false; // NEW TODO // + if ((word0 & 0x000c) == 0) return false; decode_NN_table(BITSn(word0,0x0030), m_destination); @@ -1768,12 +1612,11 @@ public: return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { // HACK - retString = "lea " + m_ea + "," + regIdAsString(m_destination); + return "lea " + m_ea + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1794,11 +1637,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "lsl " + regIdAsString(m_destination); + return "lsl " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -1816,11 +1658,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "lsr " + regIdAsString(m_destination); + return "lsr " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -1843,16 +1684,15 @@ public: decode_kSign_table(BITSn(word0,0x40), m_sign); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string ts = m_sign; if (ts.compare("-") != 0) ts = ""; - retString = "mac " + + return "mac " + ts + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1876,13 +1716,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "mac " + + return "mac " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1905,13 +1744,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "mac " + + return "mac " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1937,16 +1775,15 @@ public: decode_kSign_table(BITSn(word0,0x40), m_sign); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string ts = m_sign; if (ts.compare("-") != 0) ts = ""; - retString = "macr " + + return "macr " + ts + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -1970,13 +1807,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "macr " + + return "macr " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2003,16 +1839,14 @@ public: decode_s_table(BITSn(word0,0x0004), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "mac" + opMnemonicAsString(m_mnem); - retString = opcode + " " + + return opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "mac(%s)", A); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2048,14 +1882,13 @@ public: return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { if (m_isNop) - retString = "nop"; + return "nop"; else - retString = "move"; + return "move"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_NONE; } @@ -2082,11 +1915,10 @@ public: return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "move"; + return "move"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2109,14 +1941,13 @@ public: decode_HHH_table(BITSn(word1,0x0e00), m_SD); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_reg_from_W_table(m_W, 'X', m_SD, m_b, source, destination); - retString = "move " + source + "," + destination; + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2147,15 +1978,13 @@ public: if (m_SD == iINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "move " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(c)"); + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2186,15 +2015,13 @@ public: if (m_SD == iINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "move " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(c)"); + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2224,15 +2051,13 @@ public: if (m_SD == iINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "move " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(c)"); + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2268,48 +2093,16 @@ public: return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string ea; assemble_ea_from_t_table(m_t, m_value, ea); - retString = "move "; + std::string retString = "move "; if (m_W) retString += ea + "," + regIdAsString(m_sd); else retString += regIdAsString(m_sd) + "," + ea; - // NEW // sprintf(opcode_str, "move(c)"); - } - void evaluate(dsp56156_core* cpustate) override - { - if (m_W) - { - if (m_t) - { - setReg16(cpustate, m_value, m_sd); - } - else - { - //uint16_t memValue = memory_read_word_16le(cpustate->data, ADDRESS(m_value)); - //setReg16(cpustate, memValue, m_sd); - } - } - else - { - if (m_t) - { - osd_printf_error("DSP561xx|Movec_4: This sure seems like it can't happen."); - } - else - { - //uint16_t regValue = regValue16(cpustate, m_sd); - //memory_write_word_16le(cpustate->data, m_value, regValue); - } - } - /* S L E U N Z V C */ - /* * ? ? ? ? ? ? ? */ - // All ? bits - If SR is specified as a destination operand, set according to the corresponding - // bit of the source operand. If SR is not specified as a destination operand, L is set if data - // limiting occurred. All ? bits are not affected otherwise. + return retString; } size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2338,12 +2131,10 @@ public: if (m_source == iSSH && m_destination == iSSH) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "move " + regIdAsString(m_source) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "move(c)"); + return "move " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2367,15 +2158,13 @@ public: decode_DDDDD_table(BITSn(word1,0x03e0), m_SD); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_reg_from_W_table(m_W, 'X', m_SD, m_b, source, destination); - retString = "move " + source + "," + destination; - // NEW // opcode = "move(c)"; + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2401,18 +2190,13 @@ public: decode_DD_table(BITSn(word0,0x0300), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - if (m_immediate >= 0) sprintf(temp, "#<+$%x", m_immediate); - else sprintf(temp, "#<-$%x", 1 - m_immediate - 1); - // NEW // sprintf(temp, "#$%02x,%s", BITSn(word0,0x00ff), D1); - - retString = "move " + - std::string(temp) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "move(i)"); + if (m_immediate >= 0) + return util::string_format("move #<+$%x,%s", m_immediate, regIdAsString(m_destination)); + else + return util::string_format("move #<-$%x,%s", 1 - m_immediate - 1, regIdAsString(m_destination)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2440,15 +2224,13 @@ public: m_W = BITSn(word0,0x0100); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'P', m_SD, m_ea, source, destination); - retString = "move " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(m)"); + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2475,7 +2257,7 @@ public: assemble_eas_from_mm_table(BITSn(word0,0x000c), BITSn(word0,0x00c0), BITSn(word0,0x0003), m_ea, m_ea2); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; @@ -2489,10 +2271,8 @@ public: source = "P:" + m_ea; destination = "X:" + m_ea2; } - retString = "move " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(m)*"); + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2520,15 +2300,13 @@ public: decode_HHH_table(BITSn(word1,0x0007), m_SD); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_reg_from_W_table(m_W, 'P', m_SD, m_b, source, destination); - retString = "move " + source + "," + destination; - // NEW // opcode = "move(m)"; + return "move " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 2; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2560,15 +2338,13 @@ public: m_W = BITSn(word0,0x0100); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "movep " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(p)"); + return "movep " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2600,18 +2376,15 @@ public: m_W = BITSn(word0,0x0100); m_SD = "X:<<$" + fullAddy; - // NEW // sprintf(SD, "X:$%s", fullAddy); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "movep " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(p)*"); + return "movep " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2635,23 +2408,17 @@ public: bool decode(const uint16_t word0, const uint16_t word1) override { decode_HH_table(BITSn(word0,0x00c0), m_SD); - - char temp[32]; - sprintf(temp, "<$%x", BITSn(word0,0x001f)); - m_ea = temp; - + m_ea = util::string_format("<$%x", BITSn(word0,0x001f)); m_W = BITSn(word0,0x0100); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source; std::string destination; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source, destination); - retString = "moves " + source + "," + destination; - // NEW // sprintf(opcode_str, "move(s)"); + return "moves " + source + "," + destination; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2681,16 +2448,15 @@ public: decode_kSign_table(BITSn(word0,0x40), m_sign); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string ts = m_sign; if (ts.compare("-")!=0) ts = ""; - retString = "mpy " + + return "mpy " + ts + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2714,13 +2480,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "mpy " + + return "mpy " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2743,13 +2508,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "mpy " + + return "mpy " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2777,16 +2541,15 @@ public: decode_kSign_table(BITSn(word0,0x40), m_sign); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string ts = m_sign; if (ts.compare("-") != 0) ts = ""; - retString = "mpyr " + + return "mpyr " + ts + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2810,13 +2573,12 @@ public: m_source, m_source2, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "mpyr " + + return "mpyr " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2842,16 +2604,14 @@ public: decode_s_table(BITSn(word0,0x0004), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "mpy" + opMnemonicAsString(m_mnem); - retString = opcode + " " + + return opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "mpy(%s)", A); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -2873,11 +2633,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "neg " + regIdAsString(m_destination); + return "neg " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2895,11 +2654,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "negc " + regIdAsString(m_destination); + return "negc " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2916,11 +2674,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "nop"; + return "nop"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2940,11 +2697,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_source); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "norm " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "norm " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -2962,11 +2718,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "not " + regIdAsString(m_destination); + return "not " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -2985,11 +2740,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "or " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "or " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -3009,15 +2763,10 @@ public: decode_EE_table(BITSn(word0,0x0600), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x", m_immediate); - // NEW // sprintf(temp, "#$%02x", BITSn(word0,0x00ff)); - retString = "ori " + std::string(temp) + "," + regIdAsString(m_destination); - // NEW // sprintf(opcode_str, "or(i)"); + return util::string_format("ori #$%x,%s", m_immediate, regIdAsString(m_destination)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3038,13 +2787,10 @@ public: decode_RR_table(BITSn(word0,0x0003), m_source); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "X:(%s)", regIdAsString(m_source).c_str()); - retString = "rep " + std::string(temp); + return util::string_format("rep X:(%s)", regIdAsString(m_source)); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3063,14 +2809,10 @@ public: m_immediate = BITSn(word0,0x00ff); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - char temp[32]; - sprintf(temp, "#$%x", m_immediate); - // NEW // sprintf(temp, "#$%02x (%d)", BITSn(word0,0x00ff), BITSn(word0,0x00ff)); - retString = "rep " + std::string(temp); + return util::string_format("rep #$%x", m_immediate); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3092,11 +2834,10 @@ public: if (m_source == iINVALID) return false; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "rep " + regIdAsString(m_source); + return "rep " + regIdAsString(m_source); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3115,13 +2856,11 @@ public: decode_cccc_table(BITSn(word0,0x000f), m_mnem); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string opcode = "rep" + opMnemonicAsString(m_mnem); - retString = opcode; - // NEW // sprintf(opcode_str, "rep.%s", M); + return opcode; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3141,11 +2880,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "reset"; + return "reset"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3163,11 +2901,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "rnd " + regIdAsString(m_destination); + return "rnd " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3185,11 +2922,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "rol " + regIdAsString(m_destination); + return "rol " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -3207,11 +2943,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "ror " + regIdAsString(m_destination); + return "ror " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE; } }; @@ -3228,11 +2963,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "rti"; + return "rti"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OUT; } @@ -3250,11 +2984,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "rts"; + return "rts"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } size_t flags() const override { return util::disasm_interface::STEP_OUT; } @@ -3274,11 +3007,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "sbc " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "sbc " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3295,11 +3027,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "stop"; + return "stop"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3318,11 +3049,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "sub " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "sub " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3344,11 +3074,10 @@ public: // TODO // m_opcode = "sub"; return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = m_opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return m_opcode + " " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3379,11 +3108,10 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "subl " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "subl " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3401,11 +3129,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "swap " + regIdAsString(m_destination); + return "swap " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3422,11 +3149,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "swi"; + return "swi"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3456,19 +3182,17 @@ public: return false; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - std::string opcode = "t" + opMnemonicAsString(m_mnem); - // NEW // sprintf(opcode_str, "t.%s", M); - - retString = opcode; + std::string retString = "t" + opMnemonicAsString(m_mnem); if (m_source != m_destination) retString += std::string(" ") + regIdAsString(m_source) + "," + regIdAsString(m_destination); if (m_destination2 != iR0) retString += std::string(" R0,") + regIdAsString(m_destination2); + + return retString; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3491,11 +3215,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "tfr " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "tfr " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3514,11 +3237,10 @@ public: m_source, m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "tfr " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "tfr " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3537,11 +3259,10 @@ public: m_destination, m_source); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "tfr2 " + regIdAsString(m_source) + "," + regIdAsString(m_destination); + return "tfr2 " + regIdAsString(m_source) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3574,16 +3295,15 @@ public: m_W = BITSn(word0,0x0100); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { std::string source2; std::string destination2; assemble_arguments_from_W_table(m_W, 'X', m_SD, m_ea, source2, destination2); - retString = "tfr3 " + + return "tfr3 " + regIdAsString(m_source) + "," + regIdAsString(m_destination) + " " + source2 + "," + destination2; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3608,11 +3328,10 @@ public: decode_F_table(BITSn(word0,0x08), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "tst " + regIdAsString(m_destination); + return "tst " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_NONE; } }; @@ -3630,11 +3349,10 @@ public: decode_DD_table(BITSn(word0,0x0003), m_source); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "tst2 " + regIdAsString(m_source); + return "tst2 " + regIdAsString(m_source); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3651,11 +3369,10 @@ public: { return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "wait"; + return "wait"; } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3673,11 +3390,10 @@ public: decode_F_table(BITSn(word0,0x0008), m_destination); return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "zero " + regIdAsString(m_destination); + return "zero " + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } }; @@ -3712,13 +3428,12 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "shfl " + + return "shfl " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3756,13 +3471,12 @@ public: } return true; } - void disassemble(std::string& retString) const override + std::string disassemble() const override { - retString = "shfr " + + return "shfr " + regIdAsString(m_source) + "," + regIdAsString(m_source2) + "," + regIdAsString(m_destination); } - void evaluate(dsp56156_core* cpustate) override {} size_t size() const override { return 1; } size_t accumulatorBitsModified() const override { return BM_HIGH | BM_MIDDLE | BM_LOW; } @@ -3770,5 +3484,6 @@ private: reg_id m_source2; }; -} -#endif +} // namespace DSP_56156 + +#endif // MAME_CPU_DSP56156_INST_H |