disasm: alpha version
[calu.git] / 3c_disasm / disasm.h
diff --git a/3c_disasm/disasm.h b/3c_disasm/disasm.h
new file mode 100644 (file)
index 0000000..908a3ee
--- /dev/null
@@ -0,0 +1,36 @@
+#include <iostream>
+#include <string>
+#include <map>
+
+#include "Iinstr.hpp"
+
+using namespace std;
+
+class disasm {
+
+       private:
+               std::map<short,Iinstr*> instrs;
+       class uint32_from_hex   // For use with boost::lexical_cast
+       {
+               typedef unsigned int uint32;
+               uint32 value;
+               public:
+                       operator uint32() const {
+                               return value;
+                       }
+                       friend std::istream& operator>>(std::istream& in, uint32_from_hex& outValue)
+                       {
+                               in >> std::hex >> outValue.value;
+                               return in;
+                       }
+       };
+
+       protected:
+               void decodeCondition(short);
+               Iinstr* decodeOpcode(short);
+
+       public:
+               disasm(std::map<short,Iinstr*> map) : instrs(map) {};
+               std::string decode(std::string);
+};
+