#include "ccpu.hpp"
+class disasm;
+
+#include "disasm.h"
+
/* concept from https://groups.google.com/group/comp.arch.embedded/msg/9d430b6d3da12c8f */
#define to_HEX__(x) 0x##x##LU
CDat m_imm;
short m_cond;
boost::dynamic_bitset<> argbits;
- Iinstr() : opcode(0), name(""), m_ra(0), m_rb(0), m_rd(0), m_c(0), m_d(0), m_hl(0), m_f(0), m_s(0), m_imm(0), m_cond(ALWAYS), argbits(32) {}
+ CDat hexdump;
+ Iinstr() : opcode(0), name(""), m_ra(0), m_rb(0), m_rd(0), m_c(0), m_d(0), m_hl(0), m_f(0), m_s(0), m_imm(0), m_cond(ALWAYS), argbits(32), hexdump(0) {}
CDat generate16ImmFill(const CDat value) const {
CDat i = value;
}
static CCpu* m_cpu;
+ static disasm* m_disasm;
public:
static void setCPU(CCpu* cpu) { m_cpu = cpu; }
+ static void setDisasm(disasm* dasm) { m_disasm = dasm; }
virtual ~Iinstr() {}
virtual short getOpcode() { return this->opcode; }
virtual std::string getName() { return this->name; }
- virtual void loadBits(boost::dynamic_bitset<> bits) { argbits = bits; }
+ virtual void loadBits(boost::dynamic_bitset<> bits) { argbits = bits; this->constructHex(); }
virtual void evalInstr() = 0;
virtual void execInstr() = 0;
virtual std::string toString() = 0;
virtual Iinstr* getNew() = 0;
-
+
+ unsigned long toNum() { return this->hexdump; }
+
short getCondition() {
return m_cond;
}
protected:
+ void constructHex()
+ {
+ hexdump = this->m_cond;
+ hexdump <<= 5;
+ hexdump += this->opcode;
+ hexdump <<= 23;
+ hexdump += this->argbits.to_ulong();
+ }
+
std::string getConditionFlag()
{
stringstream cond;