summaryrefslogtreecommitdiffstats
path: root/ue4/doxygen/ccpu_8h-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'ue4/doxygen/ccpu_8h-source.html')
-rw-r--r--ue4/doxygen/ccpu_8h-source.html209
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&nbsp;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 &lt;iostream&gt;</span>
20<a name="l00013"></a>00013 <span class="preprocessor">#include &lt;set&gt;</span>
21<a name="l00014"></a>00014 <span class="preprocessor">#include &lt;stdexcept&gt;</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 &lt;iostream&gt;</span>
24<a name="l00017"></a>00017 <span class="preprocessor"># include &lt;iomanip&gt;</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&amp; 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> &lt;<span class="keyword">class</span> T&gt;
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> &lt;<span class="keyword">class</span> T&gt;
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&lt;CDisplay&lt;T&gt; *&gt;::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&amp; 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&lt;T&gt; &amp;<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&lt;T&gt;</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&lt;T&gt;</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&lt;T&gt;</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&lt;T&gt;</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&lt;CDisplay&lt;T&gt; *&gt;&amp; <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&amp; 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&lt;T&gt; 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&lt;T&gt;</a> *m_memory;
122<a name="l00286"></a>00286 <span class="keyword">const</span> <a class="code" href="classCProgram.html">CProgram&lt;T&gt;</a> *m_program;
123<a name="l00287"></a>00287 std::set&lt;CDisplay&lt;T&gt; *&gt; 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> &lt;<span class="keyword">class</span> T&gt;
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&lt;T&gt;::CCPU</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> cnt, T&amp; 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&lt;T&gt;</a>);
136<a name="l00300"></a>00300 m_displays.insert(<span class="keyword">new</span> <a class="code" href="classCDisplayWHEX.html">CDisplayWHEX&lt;T&gt;</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> &lt;<span class="keyword">class</span> T&gt;
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&lt;T&gt;::~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> &lt;<span class="keyword">class</span> T&gt;
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&lt;T&gt;::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&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</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-&gt;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 &gt; m_program-&gt;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-&gt;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>&amp; 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> &lt;<span class="keyword">class</span> T&gt;
191<a name="l00355"></a>00355 <span class="keywordtype">void</span> <a class="code" href="classCCPU.html">CCPU&lt;T&gt;::dumpRegisters</a>(std::ostream&amp; out)
192<a name="l00356"></a>00356 {
193<a name="l00357"></a>00357 out &lt;&lt; <span class="stringliteral">"[REGISTER DUMP]"</span> &lt;&lt; std::endl;
194<a name="l00358"></a>00358 <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> i = 0; i &lt; <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 &lt;&lt; <span class="stringliteral">"["</span> &lt;&lt; std::setw(4) &lt;&lt; std::setfill(<span class="charliteral">'0'</span>) &lt;&lt; i &lt;&lt; <span class="stringliteral">"] "</span>
197<a name="l00361"></a>00361 &lt;&lt; m_registers[i] &lt;&lt; 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&nbsp;
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>