summaryrefslogtreecommitdiffstats
path: root/ue3/mycpu/cinstruction.h
diff options
context:
space:
mode:
Diffstat (limited to 'ue3/mycpu/cinstruction.h')
-rw-r--r--ue3/mycpu/cinstruction.h85
1 files changed, 46 insertions, 39 deletions
diff --git a/ue3/mycpu/cinstruction.h b/ue3/mycpu/cinstruction.h
index d393e09..7d929a5 100644
--- a/ue3/mycpu/cinstruction.h
+++ b/ue3/mycpu/cinstruction.h
@@ -30,8 +30,11 @@ class CInstruction
30{ 30{
31 public: 31 public:
32 32
33 33 CInstruction()
34 34 {}
35 CInstruction(std::map<std::string, unsigned int>& jumpaddr)
36 : m_jumpaddr(jumpaddr)
37 {}
35 38
36 /** 39 /**
37 * @method ~CInstruction 40 * @method ~CInstruction
@@ -48,7 +51,8 @@ class CInstruction
48 51
49 virtual void exec(CMem& mem, std::vector<std::string>& instr) = 0; 52 virtual void exec(CMem& mem, std::vector<std::string>& instr) = 0;
50 53
51 54 protected:
55 std::map<std::string, unsigned int> m_jumpaddr;
52 56
53 57
54}; 58};
@@ -59,12 +63,18 @@ class CInstruction
59class CFlagInstruction : public CInstruction 63class CFlagInstruction : public CInstruction
60{ 64{
61 public: 65 public:
66 public:
67 CFlagInstruction(bool& zero, bool& sign)
68 : f_zero(zero), f_sign(sign)
69 {}
70 CFlagInstruction(bool& zero, bool& sign, std::map<std::string, unsigned int>& jumpaddr)
71 : CInstruction::CInstruction(jumpaddr), f_zero(zero), f_sign(sign)
72 {}
73 virtual void exec(CMem& mem, std::vector<std::string>& instr) = 0;
62 74
63 void exec(CMem& mem, std::vector<std::string>& instr) 75 protected:
64 {} 76 bool &f_zero, &f_sign;
65 virtual void exec(CMem& mem, std::vector<std::string>& instr, bool& flag) = 0; 77
66
67
68}; 78};
69 79
70 80
@@ -72,14 +82,14 @@ class CFlagInstruction : public CInstruction
72class CInc : public CInstruction 82class CInc : public CInstruction
73{ 83{
74 public: 84 public:
75 virtual void exec(CMem& mem, std::vector<std::string>& instr); 85 void exec(CMem& mem, std::vector<std::string>& instr);
76}; 86};
77 87
78 88
79class CDec : public CInstruction 89class CDec : public CInstruction
80{ 90{
81 public: 91 public:
82 virtual void exec(CMem& mem, std::vector<std::string>& instr); 92 void exec(CMem& mem, std::vector<std::string>& instr);
83}; 93};
84 94
85 95
@@ -87,7 +97,7 @@ class CDec : public CInstruction
87class CAdd : public CInstruction 97class CAdd : public CInstruction
88{ 98{
89 public: 99 public:
90 virtual void exec(CMem& mem, std::vector<std::string>& instr); 100 void exec(CMem& mem, std::vector<std::string>& instr);
91}; 101};
92 102
93 103
@@ -95,7 +105,7 @@ class CAdd : public CInstruction
95class CSub : public CInstruction 105class CSub : public CInstruction
96{ 106{
97 public: 107 public:
98 virtual void exec(CMem& mem, std::vector<std::string>& instr); 108 void exec(CMem& mem, std::vector<std::string>& instr);
99}; 109};
100 110
101 111
@@ -103,7 +113,7 @@ class CSub : public CInstruction
103class CMul : public CInstruction 113class CMul : public CInstruction
104{ 114{
105 public: 115 public:
106 virtual void exec(CMem& mem, std::vector<std::string>& instr); 116 void exec(CMem& mem, std::vector<std::string>& instr);
107}; 117};
108 118
109 119
@@ -111,7 +121,7 @@ class CMul : public CInstruction
111class CDiv : public CInstruction 121class CDiv : public CInstruction
112{ 122{
113 public: 123 public:
114 virtual void exec(CMem& mem, std::vector<std::string>& instr); 124 void exec(CMem& mem, std::vector<std::string>& instr);
115}; 125};
116 126
117 127
@@ -119,7 +129,7 @@ class CDiv : public CInstruction
119class CLoad : public CInstruction 129class CLoad : public CInstruction
120{ 130{
121 public: 131 public:
122 virtual void exec(CMem& mem, std::vector<std::string>& instr); 132 void exec(CMem& mem, std::vector<std::string>& instr);
123}; 133};
124 134
125 135
@@ -127,16 +137,17 @@ class CLoad : public CInstruction
127class CStore : public CInstruction 137class CStore : public CInstruction
128{ 138{
129 public: 139 public:
130 virtual void exec(CMem& mem, std::vector<std::string>& instr); 140 void exec(CMem& mem, std::vector<std::string>& instr);
131}; 141};
132 142
133class CTest : public CFlagInstruction 143class CTest : public CFlagInstruction
134{ 144{
135 public: 145 public:
136 void exec(CMem& mem, std::vector<std::string>& instr, bool& flag) 146 CTest(bool& zero, bool& sign)
147 : CFlagInstruction::CFlagInstruction(zero, sign)
137 {} 148 {}
138 virtual void test(CMem& mem, std::vector<std::string>& instr, 149
139 bool& f_zero, bool& f_sign); 150 void exec(CMem& mem, std::vector<std::string>& instr);
140}; 151};
141 152
142 153
@@ -152,36 +163,32 @@ class CLabel : public CInstruction
152class CJumpa : public CInstruction 163class CJumpa : public CInstruction
153{ 164{
154 public: 165 public:
155 CJumpa(std::map<std::string, unsigned int>& jumpaddr) 166 CJumpa(std::map<std::string, unsigned int>& jumpaddr)
156 : m_jumpaddr(jumpaddr) 167 : CInstruction::CInstruction(jumpaddr)
157 {} 168 {}
158 virtual void exec(CMem& mem, std::vector<std::string>& instr); 169 void exec(CMem& mem, std::vector<std::string>& instr);
159 protected: 170
160 std::map<std::string, unsigned int> m_jumpaddr;
161}; 171};
162 172
163 173
164class CJumpz : public CFlagInstruction 174class CJumpz : public CFlagInstruction
165{ 175{
176
166 public: 177 public:
167 CJumpz(std::map<std::string, unsigned int>& jumpaddr) 178 CJumpz(bool& zero, bool& sign, std::map<std::string, unsigned int>& jumpaddr)
168 : m_jumpaddr(jumpaddr) 179 : CFlagInstruction::CFlagInstruction(zero, sign, jumpaddr)
169 {} 180 {}
170 virtual void exec(CMem& mem, std::vector<std::string>& instr, bool& f_zero); 181 void exec(CMem& mem, std::vector<std::string>& instr);
171 protected:
172 std::map<std::string, unsigned int> m_jumpaddr;
173}; 182};
174 183
175 184
176class CJumps : public CFlagInstruction 185class CJumps : public CFlagInstruction
177{ 186{
178 public: 187 public:
179 CJumps(std::map<std::string, unsigned int>& jumpaddr) 188 CJumps(bool& zero ,bool& sign, std::map<std::string, unsigned int>& jumpaddr)
180 : m_jumpaddr(jumpaddr) 189 : CFlagInstruction::CFlagInstruction(zero, sign, jumpaddr)
181 {} 190 {}
182 virtual void exec(CMem& mem, std::vector<std::string>& instr, bool& f_sign); 191 void exec(CMem& mem, std::vector<std::string>& instr);
183 protected:
184 std::map<std::string, unsigned int> m_jumpaddr;
185}; 192};
186 193
187 194
@@ -189,7 +196,7 @@ class CJumps : public CFlagInstruction
189class CWrite : public CInstruction 196class CWrite : public CInstruction
190{ 197{
191 public: 198 public:
192 virtual void exec(CMem& mem, std::vector<std::string>& instr); 199 void exec(CMem& mem, std::vector<std::string>& instr);
193}; 200};
194 201
195#endif 202#endif