summaryrefslogtreecommitdiff
path: root/includes/mipsdis.h
diff options
context:
space:
mode:
authorpixel <pixel>2004-01-03 15:04:46 +0000
committerpixel <pixel>2004-01-03 15:04:46 +0000
commita422d1dcda810b2f129a9a5213f3f4b440be4bbc (patch)
treea0735a7f3c61f398fc13a45466ded187904bbe21 /includes/mipsdis.h
parent24ae6e6865351db7d3a9e58340e5a2684912544f (diff)
Highly started work on mips disassembler + various little fixes.
Diffstat (limited to 'includes/mipsdis.h')
-rw-r--r--includes/mipsdis.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/includes/mipsdis.h b/includes/mipsdis.h
new file mode 100644
index 0000000..5ce2506
--- /dev/null
+++ b/includes/mipsdis.h
@@ -0,0 +1,54 @@
+#ifndef __MIPSDIS_H__
+#define __MIPSDIS_H__
+#include <Exceptions.h>
+#include <queue>
+#include "mipsmem.h"
+
+class TDis : public Base {
+ public:
+ TDis(mipsmem *);
+ virtual mipsmem * getmem();
+ virtual void add_branch(Uint32);
+ virtual void add_jump(Uint32);
+ virtual void add_function(Uint32);
+ virtual void SetTag(Uint32, int, bool);
+ virtual void Name(const String &);
+ virtual void PushGPReg(int);
+ virtual void PushCPReg(int);
+ virtual void PushImm(Uint32);
+ virtual void PushTarget(Uint32);
+ virtual void PushSa(Uint32);
+ virtual void PushOfB(int reg, Uint32, int);
+ virtual void PushOffset(Uint32);
+ virtual void PushFull(Uint32);
+ virtual void Invalid();
+ virtual void Suspect();
+ virtual void Comment(const String &);
+
+ virtual void reset();
+
+ bool invalid;
+ std::priority_queue<int, std::vector<int>, std::greater<int> > bheap;
+ std::priority_queue<int, std::vector<int>, std::greater<int> > jheap;
+ std::priority_queue<int, std::vector<int>, std::greater<int> > fheap;
+
+ Uint32 pc;
+ private:
+ mipsmem * mm;
+};
+
+class Disassembler : public Base {
+ public:
+ Disassembler(mipsmem *);
+ virtual ~Disassembler();
+ void mainloop();
+ void crawl_code(Uint32 = 0xffffffff);
+ private:
+ mipsmem * mm;
+ TDis * dis;
+ bool started;
+ bool infunction;
+};
+
+
+#endif