diff options
Diffstat (limited to 'ue4/doxygen/ccpu_8h-source.html')
| -rw-r--r-- | ue4/doxygen/ccpu_8h-source.html | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/ue4/doxygen/ccpu_8h-source.html b/ue4/doxygen/ccpu_8h-source.html new file mode 100644 index 0000000..32b8612 --- /dev/null +++ b/ue4/doxygen/ccpu_8h-source.html | |||
| @@ -0,0 +1,209 @@ | |||
| 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | ||
| 2 | <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> | ||
| 3 | <title>mycpu: mycpu/ccpu.h Source File</title> | ||
| 4 | <link href="doxygen.css" rel="stylesheet" type="text/css"> | ||
| 5 | <link href="tabs.css" rel="stylesheet" type="text/css"> | ||
| 6 | </head><body> | ||
| 7 | <!-- Generated by Doxygen 1.5.3 --> | ||
| 8 | <div class="tabs"> | ||
| 9 | <ul> | ||
| 10 | <li><a href="index.html"><span>Main Page</span></a></li> | ||
| 11 | <li><a href="annotated.html"><span>Classes</span></a></li> | ||
| 12 | <li class="current"><a href="files.html"><span>Files</span></a></li> | ||
| 13 | </ul> | ||
| 14 | </div> | ||
| 15 | <h1>mycpu/ccpu.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 | ||
| 16 | <a name="l00009"></a>00009 <span class="preprocessor">#ifndef CCPU_H</span> | ||
| 17 | <a name="l00010"></a>00010 <span class="preprocessor"></span><span class="preprocessor">#define CCPU_H 1</span> | ||
| 18 | <a name="l00011"></a>00011 <span class="preprocessor"></span> | ||
| 19 | <a name="l00012"></a>00012 <span class="preprocessor">#include <iostream></span> | ||
| 20 | <a name="l00013"></a>00013 <span class="preprocessor">#include <set></span> | ||
| 21 | <a name="l00014"></a>00014 <span class="preprocessor">#include <stdexcept></span> | ||
| 22 | <a name="l00015"></a>00015 <span class="preprocessor">#ifdef DEBUG</span> | ||
| 23 | <a name="l00016"></a>00016 <span class="preprocessor"></span><span class="preprocessor"># include <iostream></span> | ||
| 24 | <a name="l00017"></a>00017 <span class="preprocessor"># include <iomanip></span> | ||
| 25 | <a name="l00018"></a>00018 <span class="preprocessor">#endif</span> | ||
| 26 | <a name="l00019"></a>00019 <span class="preprocessor"></span> | ||
| 27 | <a name="l00025"></a><a class="code" href="classCCPUError.html">00025</a> <span class="keyword">class </span><a class="code" href="classCCPUError.html">CCPUError</a> | ||
| 28 | <a name="l00026"></a>00026 : <span class="keyword">public</span> std::invalid_argument | ||
| 29 | <a name="l00027"></a>00027 { | ||
| 30 | <a name="l00028"></a>00028 <span class="keyword">public</span>: | ||
| 31 | <a name="l00039"></a><a class="code" href="classCCPUError.html#2cf300664eaefd559dda94a07c58f1c9">00039</a> <a class="code" href="classCCPUError.html#2cf300664eaefd559dda94a07c58f1c9" title="Default exception ctor.">CCPUError</a>(<span class="keyword">const</span> std::string& what) | ||
| 32 | <a name="l00040"></a>00040 : std::invalid_argument(what) | ||
| 33 | <a name="l00041"></a>00041 {} | ||
| 34 | <a name="l00042"></a>00042 }; | ||
| 35 | <a name="l00043"></a>00043 | ||
| 36 | <a name="l00044"></a>00044 <span class="preprocessor">#include "cmem.h"</span> | ||
| 37 | <a name="l00045"></a>00045 <span class="preprocessor">#include "displays.h"</span> | ||
| 38 | <a name="l00046"></a>00046 <span class="preprocessor">#include "cprogram.h"</span> | ||
| 39 | <a name="l00047"></a>00047 | ||
| 40 | <a name="l00048"></a>00048 <span class="comment">/* forward declare CProgram */</span> | ||
| 41 | <a name="l00049"></a>00049 <span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 42 | <a name="l00050"></a>00050 <span class="keyword">class </span><a class="code" href="classCProgram.html">CProgram</a>; | ||
| 43 | <a name="l00051"></a>00051 | ||
| 44 | <a name="l00058"></a>00058 <span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 45 | <a name="l00059"></a><a class="code" href="classCCPU.html">00059</a> <span class="keyword">class </span><a class="code" href="classCCPU.html">CCPU</a> | ||
| 46 | <a name="l00060"></a>00060 { | ||
| 47 | <a name="l00061"></a>00061 <span class="keyword">typedef</span> <span class="keyword">typename</span> std::set<CDisplay<T> *>::iterator displayiterator; | ||
| 48 | <a name="l00062"></a>00062 | ||
| 49 | <a name="l00063"></a>00063 <span class="keyword">public</span>: | ||
| 50 | <a name="l00075"></a>00075 <a class="code" href="classCCPU.html#773b4cb42b0113336b7e7349c930c610" title="Default ctor.">CCPU</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> cnt, T& datatype); | ||
| 51 | <a name="l00076"></a>00076 | ||
| 52 | <a name="l00087"></a>00087 <a class="code" href="classCCPU.html#3c9708b021fa5e54f24a15414d62b044" title="Default dtor.">~CCPU</a>(); | ||
| 53 | <a name="l00088"></a>00088 | ||
| 54 | <a name="l00099"></a><a class="code" href="classCCPU.html#77eca5c67c741c8ff6c9bd298c5fe1b7">00099</a> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <a class="code" href="classCCPU.html#77eca5c67c741c8ff6c9bd298c5fe1b7" title="get number of registers">getRegisterCount</a>()<span class="keyword"> const</span> | ||
| 55 | <a name="l00100"></a>00100 <span class="keyword"> </span>{ | ||
| 56 | <a name="l00101"></a>00101 <span class="keywordflow">return</span> m_regcnt; | ||
| 57 | <a name="l00102"></a>00102 } | ||
| 58 | <a name="l00103"></a>00103 | ||
| 59 | <a name="l00114"></a><a class="code" href="classCCPU.html#8fde9e088a664b1c65d0f7d462d2bc83">00114</a> std::vector<T> &<a class="code" href="classCCPU.html#8fde9e088a664b1c65d0f7d462d2bc83" title="get reference to registers vector">getRegisters</a>() | ||
| 60 | <a name="l00115"></a>00115 { | ||
| 61 | <a name="l00116"></a>00116 <span class="keywordflow">return</span> m_registers; | ||
| 62 | <a name="l00117"></a>00117 } | ||
| 63 | <a name="l00118"></a>00118 | ||
| 64 | <a name="l00129"></a><a class="code" href="classCCPU.html#0aff50f5bf493aaa0e438de6541b9852">00129</a> <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#0aff50f5bf493aaa0e438de6541b9852" title="set memory of cpu">setMemory</a>(<a class="code" href="classCMem.html">CMem<T></a> *memory) | ||
| 65 | <a name="l00130"></a>00130 { | ||
| 66 | <a name="l00131"></a>00131 m_memory = memory; | ||
| 67 | <a name="l00132"></a>00132 } | ||
| 68 | <a name="l00133"></a>00133 | ||
| 69 | <a name="l00144"></a><a class="code" href="classCCPU.html#8fcad8b71caaf9874d2619783568a67c">00144</a> <a class="code" href="classCMem.html">CMem<T></a> *<a class="code" href="classCCPU.html#8fcad8b71caaf9874d2619783568a67c" title="get pointer to memory">getMemory</a>()<span class="keyword"> const</span> | ||
| 70 | <a name="l00145"></a>00145 <span class="keyword"> </span>{ | ||
| 71 | <a name="l00146"></a>00146 <span class="keywordflow">return</span> m_memory; | ||
| 72 | <a name="l00147"></a>00147 } | ||
| 73 | <a name="l00148"></a>00148 | ||
| 74 | <a name="l00159"></a><a class="code" href="classCCPU.html#043f4f8d38a21cf007a7c47a86564525">00159</a> <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#043f4f8d38a21cf007a7c47a86564525" title="set program to execute">setProgram</a>(<span class="keyword">const</span> <a class="code" href="classCProgram.html">CProgram<T></a> *program) | ||
| 75 | <a name="l00160"></a>00160 { | ||
| 76 | <a name="l00161"></a>00161 m_program = program; | ||
| 77 | <a name="l00162"></a>00162 } | ||
| 78 | <a name="l00163"></a>00163 | ||
| 79 | <a name="l00174"></a><a class="code" href="classCCPU.html#60a0a2350910afb24929152ed2ebd51b">00174</a> <span class="keyword">const</span> <a class="code" href="classCProgram.html">CProgram<T></a> *<a class="code" href="classCCPU.html#60a0a2350910afb24929152ed2ebd51b" title="get pointer to program">getProgram</a>() | ||
| 80 | <a name="l00175"></a>00175 { | ||
| 81 | <a name="l00176"></a>00176 <span class="keywordflow">return</span> m_program; | ||
| 82 | <a name="l00177"></a>00177 } | ||
| 83 | <a name="l00178"></a>00178 | ||
| 84 | <a name="l00189"></a><a class="code" href="classCCPU.html#7b4b09766e49b66ce0fc325b7ba86142">00189</a> <span class="keyword">const</span> std::set<CDisplay<T> *>& <a class="code" href="classCCPU.html#7b4b09766e49b66ce0fc325b7ba86142" title="get set of pointers to displays">getDisplays</a>() | ||
| 85 | <a name="l00190"></a>00190 { | ||
| 86 | <a name="l00191"></a>00191 <span class="keywordflow">return</span> m_displays; | ||
| 87 | <a name="l00192"></a>00192 } | ||
| 88 | <a name="l00193"></a>00193 | ||
| 89 | <a name="l00204"></a><a class="code" href="classCCPU.html#e3f54dc93c58891c8a1d8a78680fcc95">00204</a> <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#e3f54dc93c58891c8a1d8a78680fcc95" title="set zero flag">setFlagZero</a>(<span class="keyword">const</span> <span class="keywordtype">bool</span> value) | ||
| 90 | <a name="l00205"></a>00205 { | ||
| 91 | <a name="l00206"></a>00206 m_flagzero = value; | ||
| 92 | <a name="l00207"></a>00207 } | ||
| 93 | <a name="l00208"></a>00208 | ||
| 94 | <a name="l00219"></a><a class="code" href="classCCPU.html#5141a97f658340c1dc0c6b518044dfb8">00219</a> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classCCPU.html#5141a97f658340c1dc0c6b518044dfb8" title="get value of zero flag">getFlagZero</a>() | ||
| 95 | <a name="l00220"></a>00220 { | ||
| 96 | <a name="l00221"></a>00221 <span class="keywordflow">return</span> m_flagzero; | ||
| 97 | <a name="l00222"></a>00222 } | ||
| 98 | <a name="l00223"></a>00223 | ||
| 99 | <a name="l00234"></a><a class="code" href="classCCPU.html#2d6f448d0fb64f3b466b2f9fea621e81">00234</a> <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#2d6f448d0fb64f3b466b2f9fea621e81" title="set sign flag">setFlagSign</a>(<span class="keyword">const</span> <span class="keywordtype">bool</span> value) | ||
| 100 | <a name="l00235"></a>00235 { | ||
| 101 | <a name="l00236"></a>00236 m_flagsign = value; | ||
| 102 | <a name="l00237"></a>00237 } | ||
| 103 | <a name="l00238"></a>00238 | ||
| 104 | <a name="l00249"></a><a class="code" href="classCCPU.html#74092bf7b34a75b25870d3f79efab331">00249</a> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classCCPU.html#74092bf7b34a75b25870d3f79efab331" title="get value of sign flag">getFlagSign</a>() | ||
| 105 | <a name="l00250"></a>00250 { | ||
| 106 | <a name="l00251"></a>00251 <span class="keywordflow">return</span> m_flagsign; | ||
| 107 | <a name="l00252"></a>00252 } | ||
| 108 | <a name="l00253"></a>00253 | ||
| 109 | <a name="l00264"></a>00264 <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#e9ebd048bfd688ce1e59933481a680b9" title="execute current program">run</a>(); | ||
| 110 | <a name="l00265"></a>00265 | ||
| 111 | <a name="l00266"></a>00266 <span class="preprocessor">#if DEBUG</span> | ||
| 112 | <a name="l00267"></a>00267 <span class="preprocessor"></span> | ||
| 113 | <a name="l00277"></a>00277 <span class="keywordtype">void</span> dumpRegisters(std::ostream& out); | ||
| 114 | <a name="l00278"></a>00278 <span class="preprocessor">#endif</span> | ||
| 115 | <a name="l00279"></a>00279 <span class="preprocessor"></span> | ||
| 116 | <a name="l00280"></a>00280 <span class="keyword">private</span>: | ||
| 117 | <a name="l00281"></a>00281 <span class="comment">/* members */</span> | ||
| 118 | <a name="l00282"></a>00282 T m_datatype; | ||
| 119 | <a name="l00283"></a>00283 std::vector<T> m_registers; | ||
| 120 | <a name="l00284"></a>00284 <span class="keywordtype">unsigned</span> m_regcnt; | ||
| 121 | <a name="l00285"></a>00285 <a class="code" href="classCMem.html">CMem<T></a> *m_memory; | ||
| 122 | <a name="l00286"></a>00286 <span class="keyword">const</span> <a class="code" href="classCProgram.html">CProgram<T></a> *m_program; | ||
| 123 | <a name="l00287"></a>00287 std::set<CDisplay<T> *> m_displays; | ||
| 124 | <a name="l00288"></a>00288 <span class="keywordtype">bool</span> m_flagzero; | ||
| 125 | <a name="l00289"></a>00289 <span class="keywordtype">bool</span> m_flagsign; | ||
| 126 | <a name="l00290"></a>00290 }; | ||
| 127 | <a name="l00291"></a>00291 | ||
| 128 | <a name="l00292"></a>00292 <span class="comment">/*----------------------------------------------------------------------------*/</span> | ||
| 129 | <a name="l00293"></a>00293 | ||
| 130 | <a name="l00294"></a>00294 <span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 131 | <a name="l00295"></a><a class="code" href="classCCPU.html#773b4cb42b0113336b7e7349c930c610">00295</a> <a class="code" href="classCCPU.html#773b4cb42b0113336b7e7349c930c610" title="Default ctor.">CCPU<T>::CCPU</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> cnt, T& datatype) | ||
| 132 | <a name="l00296"></a>00296 : m_datatype(datatype), m_registers(cnt, T(m_datatype) = 0), m_regcnt(cnt), m_memory(NULL), m_program(NULL), m_flagzero(false), m_flagsign(false) | ||
| 133 | <a name="l00297"></a>00297 { | ||
| 134 | <a name="l00298"></a>00298 <span class="comment">/* create displays */</span> | ||
| 135 | <a name="l00299"></a>00299 m_displays.insert(<span class="keyword">new</span> <a class="code" href="classCDisplayWDEZ.html">CDisplayWDEZ<T></a>); | ||
| 136 | <a name="l00300"></a>00300 m_displays.insert(<span class="keyword">new</span> <a class="code" href="classCDisplayWHEX.html">CDisplayWHEX<T></a>); | ||
| 137 | <a name="l00301"></a>00301 } | ||
| 138 | <a name="l00302"></a>00302 | ||
| 139 | <a name="l00303"></a>00303 <span class="comment">/*----------------------------------------------------------------------------*/</span> | ||
| 140 | <a name="l00304"></a>00304 | ||
| 141 | <a name="l00305"></a>00305 <span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 142 | <a name="l00306"></a><a class="code" href="classCCPU.html#3c9708b021fa5e54f24a15414d62b044">00306</a> <a class="code" href="classCCPU.html#3c9708b021fa5e54f24a15414d62b044" title="Default dtor.">CCPU<T>::~CCPU</a>() | ||
| 143 | <a name="l00307"></a>00307 { | ||
| 144 | <a name="l00308"></a>00308 <span class="comment">/* delete displays */</span> | ||
| 145 | <a name="l00309"></a>00309 <span class="keywordflow">for</span> (displayiterator it = m_displays.begin() ; it != m_displays.end(); ++it) | ||
| 146 | <a name="l00310"></a>00310 <span class="keyword">delete</span> *it; | ||
| 147 | <a name="l00311"></a>00311 } | ||
| 148 | <a name="l00312"></a>00312 | ||
| 149 | <a name="l00313"></a>00313 <span class="comment">/*----------------------------------------------------------------------------*/</span> | ||
| 150 | <a name="l00314"></a>00314 | ||
| 151 | <a name="l00315"></a>00315 <span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 152 | <a name="l00316"></a><a class="code" href="classCCPU.html#e9ebd048bfd688ce1e59933481a680b9">00316</a> <span class="keywordtype">void</span> <a class="code" href="classCCPU.html#e9ebd048bfd688ce1e59933481a680b9" title="execute current program">CCPU<T>::run</a>() | ||
| 153 | <a name="l00317"></a>00317 { | ||
| 154 | <a name="l00318"></a>00318 <span class="keywordflow">if</span> (m_memory == NULL) | ||
| 155 | <a name="l00319"></a>00319 <span class="keywordflow">throw</span> <a class="code" href="classCCPUError.html">CCPUError</a>(<span class="stringliteral">"CPU has no memory"</span>); | ||
| 156 | <a name="l00320"></a>00320 <span class="keywordflow">if</span> (m_program == NULL) | ||
| 157 | <a name="l00321"></a>00321 <span class="keywordflow">throw</span> <a class="code" href="classCCPUError.html">CCPUError</a>(<span class="stringliteral">"CPU has no program to execute"</span>); | ||
| 158 | <a name="l00322"></a>00322 <span class="keywordflow">if</span> (m_regcnt == 0) | ||
| 159 | <a name="l00323"></a>00323 <span class="keywordflow">throw</span> <a class="code" href="classCCPUError.html">CCPUError</a>(<span class="stringliteral">"CPU has no registers"</span>); | ||
| 160 | <a name="l00324"></a>00324 | ||
| 161 | <a name="l00325"></a>00325 <span class="keywordtype">bool</span> <a class="code" href="classCCPU.html#e9ebd048bfd688ce1e59933481a680b9" title="execute current program">run</a> = <span class="keyword">true</span>; | ||
| 162 | <a name="l00326"></a>00326 <span class="keywordflow">while</span>(run) | ||
| 163 | <a name="l00327"></a>00327 { | ||
| 164 | <a name="l00328"></a>00328 <span class="keywordtype">unsigned</span> pc = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span><span class="keyword">></span>(m_registers[0]); | ||
| 165 | <a name="l00329"></a>00329 | ||
| 166 | <a name="l00330"></a>00330 <span class="comment">/* end of the program reached */</span> | ||
| 167 | <a name="l00331"></a>00331 <span class="keywordflow">if</span> (pc == m_program->size()) | ||
| 168 | <a name="l00332"></a>00332 <span class="keywordflow">break</span>; | ||
| 169 | <a name="l00333"></a>00333 | ||
| 170 | <a name="l00334"></a>00334 <span class="comment">/* pc is out of bound */</span> | ||
| 171 | <a name="l00335"></a>00335 <span class="keywordflow">if</span> (pc > m_program->size()) | ||
| 172 | <a name="l00336"></a>00336 <span class="keywordflow">throw</span> <a class="code" href="classCCPUError.html">CCPUError</a>(<span class="stringliteral">"Programcounter is out of bound"</span>); | ||
| 173 | <a name="l00337"></a>00337 | ||
| 174 | <a name="l00338"></a>00338 <span class="comment">/* execute instruction */</span> | ||
| 175 | <a name="l00339"></a>00339 <span class="keywordflow">try</span> | ||
| 176 | <a name="l00340"></a>00340 { | ||
| 177 | <a name="l00341"></a>00341 (*m_program->at(pc))(<span class="keyword">this</span>); | ||
| 178 | <a name="l00342"></a>00342 ++m_registers[0]; | ||
| 179 | <a name="l00343"></a>00343 } | ||
| 180 | <a name="l00344"></a>00344 <span class="keywordflow">catch</span>(<a class="code" href="classCInstructionError.html">CInstructionError</a>& ex) | ||
| 181 | <a name="l00345"></a>00345 { | ||
| 182 | <a name="l00346"></a>00346 <span class="keywordflow">throw</span> <a class="code" href="classCCPUError.html">CCPUError</a>(ex.what()); | ||
| 183 | <a name="l00347"></a>00347 } | ||
| 184 | <a name="l00348"></a>00348 } | ||
| 185 | <a name="l00349"></a>00349 } | ||
| 186 | <a name="l00350"></a>00350 | ||
| 187 | <a name="l00351"></a>00351 <span class="comment">/*----------------------------------------------------------------------------*/</span> | ||
| 188 | <a name="l00352"></a>00352 | ||
| 189 | <a name="l00353"></a>00353 <span class="preprocessor">#if DEBUG</span> | ||
| 190 | <a name="l00354"></a>00354 <span class="preprocessor"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> | ||
| 191 | <a name="l00355"></a>00355 <span class="keywordtype">void</span> <a class="code" href="classCCPU.html">CCPU<T>::dumpRegisters</a>(std::ostream& out) | ||
| 192 | <a name="l00356"></a>00356 { | ||
| 193 | <a name="l00357"></a>00357 out << <span class="stringliteral">"[REGISTER DUMP]"</span> << std::endl; | ||
| 194 | <a name="l00358"></a>00358 <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="classCCPU.html#77eca5c67c741c8ff6c9bd298c5fe1b7" title="get number of registers">getRegisterCount</a>(); ++i) | ||
| 195 | <a name="l00359"></a>00359 { | ||
| 196 | <a name="l00360"></a>00360 out << <span class="stringliteral">"["</span> << std::setw(4) << std::setfill(<span class="charliteral">'0'</span>) << i << <span class="stringliteral">"] "</span> | ||
| 197 | <a name="l00361"></a>00361 << m_registers[i] << std::endl; | ||
| 198 | <a name="l00362"></a>00362 } | ||
| 199 | <a name="l00363"></a>00363 } | ||
| 200 | <a name="l00364"></a>00364 <span class="preprocessor">#endif</span> | ||
| 201 | <a name="l00365"></a>00365 <span class="preprocessor"></span> | ||
| 202 | <a name="l00366"></a>00366 <span class="preprocessor">#endif</span> | ||
| 203 | <a name="l00367"></a>00367 <span class="preprocessor"></span> | ||
| 204 | <a name="l00368"></a>00368 <span class="comment">/* vim: set et sw=2 ts=2: */</span> | ||
| 205 | </pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Sat May 30 16:32:35 2009 for mycpu by | ||
| 206 | <a href="http://www.doxygen.org/index.html"> | ||
| 207 | <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address> | ||
| 208 | </body> | ||
| 209 | </html> | ||
