Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta name="generator" content="HTML Tidy for Linux (vers 6 November 2007), see www.w3.org" />
- <title>Paste</title>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, minimum-scale=0.1, maximum-scale=2.0" />
- <meta name="apple-mobile-web-app-capable" content="NO" />
- <script type="text/javascript" src="jQuery-1.4.2.js">
- </script>
- <script type="text/javascript" src="shCore.js">
- </script>
- <script type="text/javascript" src="shBrushJava.js">
- </script>
- <link href="shCore.css" rel="stylesheet" type="text/css" />
- <link href="shThemeDefault.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <div class="syntaxhighlighter nogutter java" id="highlighter_266142">
- <table border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="code">
- <div class="container">
- <div class="line number1 index0 alt2"><code class="java keyword">package</code> <code class="java plain">dcpu;</code></div>
- <div class="line number2 index1 alt1"> </div>
- <div class="line number3 index2 alt2"><code class="java preprocessor">/**</code></div>
- <div class="line number4 index3 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Notch's DCPU(tm)(c)(R)(ftw) specs v3 implementation.</code></div>
- <div class="line number5 index4 alt2"><code class="java spaces"> </code><code class="java preprocessor">*</code></div>
- <div class="line number6 index5 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Created by IntelliJ IDEA.</code></div>
- <div class="line number7 index6 alt2"><code class="java spaces"> </code><code class="java preprocessor">* User: aimozg</code></div>
- <div class="line number8 index7 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Date: 28.03.12</code></div>
- <div class="line number9 index8 alt2"><code class="java spaces"> </code><code class="java preprocessor">* Time: 19:15</code></div>
- <div class="line number10 index9 alt1"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number11 index10 alt2"><code class="java keyword">public</code> <code class="java keyword">class</code> <code class="java plain">NotchDcpu {</code></div>
- <div class="line number12 index11 alt1"> </div>
- <div class="line number13 index12 alt2"><code class="java spaces"> </code><code class="java comments">////////////////</code></div>
- <div class="line number14 index13 alt1"><code class="java spaces"> </code><code class="java comments">// NOTES</code></div>
- <div class="line number15 index14 alt2"><code class="java spaces"> </code><code class="java comments">////////////////</code></div>
- <div class="line number16 index15 alt1"><code class="java spaces"> </code><code class="java comments">// * Registers are mapped to memory after addressable space for convenience (so operations take something from one</code></div>
- <div class="line number17 index16 alt2"><code class="java spaces"> </code><code class="java comments">// mem cell and put something into another)</code></div>
- <div class="line number18 index17 alt1"><code class="java spaces"> </code><code class="java comments">// * Register O stores following values:</code></div>
- <div class="line number19 index18 alt2"><code class="java spaces"> </code><code class="java comments">// * In ADD and SUB: 1 if were over/under-flow</code></div>
- <div class="line number20 index19 alt1"><code class="java spaces"> </code><code class="java comments">// * In MUL : high word</code></div>
- <div class="line number21 index20 alt2"><code class="java spaces"> </code><code class="java comments">// * In DIV : 1 if div by zero ('a' not modified)</code></div>
- <div class="line number22 index21 alt1"><code class="java spaces"> </code><code class="java comments">// * In SHL : high word, leftmost 'b' bits of 'a'</code></div>
- <div class="line number23 index22 alt2"><code class="java spaces"> </code><code class="java comments">// * In SHR : rightmost 'b' bits of 'a'</code></div>
- <div class="line number24 index23 alt1"><code class="java spaces"> </code><code class="java comments">// * NW is commonly used for 'Next Word in ram'</code></div>
- <div class="line number25 index24 alt2"><code class="java spaces"> </code><code class="java comments">// * Most interesting functions are step, getaddr, and main :)</code></div>
- <div class="line number26 index25 alt1"> </div>
- <div class="line number27 index26 alt2"><code class="java spaces"> </code><code class="java comments">////////////////</code></div>
- <div class="line number28 index27 alt1"><code class="java spaces"> </code><code class="java comments">/// CONSTANTS</code></div>
- <div class="line number29 index28 alt2"><code class="java spaces"> </code><code class="java comments">////////////////</code></div>
- <div class="line number30 index29 alt1"> </div>
- <div class="line number31 index30 alt2"><code class="java spaces"> </code><code class="java comments">//////</code></div>
- <div class="line number32 index31 alt1"><code class="java spaces"> </code><code class="java comments">// Opcode constants</code></div>
- <div class="line number33 index32 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_RESERVED =</code> <code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number34 index33 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_SET =</code> <code class="java value">1</code><code class="java plain">;</code></div>
- <div class="line number35 index34 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_ADD =</code> <code class="java value">2</code><code class="java plain">;</code></div>
- <div class="line number36 index35 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_SUB =</code> <code class="java value">3</code><code class="java plain">;</code></div>
- <div class="line number37 index36 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_MUL =</code> <code class="java value">4</code><code class="java plain">;</code></div>
- <div class="line number38 index37 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_DIV =</code> <code class="java value">5</code><code class="java plain">;</code></div>
- <div class="line number39 index38 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_MOD =</code> <code class="java value">6</code><code class="java plain">;</code></div>
- <div class="line number40 index39 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_SHL =</code> <code class="java value">7</code><code class="java plain">;</code></div>
- <div class="line number41 index40 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_SHR =</code> <code class="java value">8</code><code class="java plain">;</code></div>
- <div class="line number42 index41 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_AND =</code> <code class="java value">9</code><code class="java plain">;</code></div>
- <div class="line number43 index42 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_BOR =</code> <code class="java value">10</code><code class="java plain">;</code></div>
- <div class="line number44 index43 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_XOR =</code> <code class="java value">11</code><code class="java plain">;</code></div>
- <div class="line number45 index44 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_IFE =</code> <code class="java value">12</code><code class="java plain">;</code></div>
- <div class="line number46 index45 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_IFN =</code> <code class="java value">13</code><code class="java plain">;</code></div>
- <div class="line number47 index46 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_IFG =</code> <code class="java value">14</code><code class="java plain">;</code></div>
- <div class="line number48 index47 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">O_IFB =</code> <code class="java value">15</code><code class="java plain">;</code></div>
- <div class="line number49 index48 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java plain">String[] OPCODE_NAMES = {</code></div>
- <div class="line number50 index49 alt1"><code class="java spaces"> </code><code class="java string">"???"</code><code class="java plain">,</code><code class="java string">"SET"</code><code class="java plain">,</code><code class="java string">"ADD"</code><code class="java plain">,</code><code class="java string">"SUB"</code><code class="java plain">,</code></div>
- <div class="line number51 index50 alt2"><code class="java spaces"> </code><code class="java string">"MUL"</code><code class="java plain">,</code><code class="java string">"DIV"</code><code class="java plain">,</code><code class="java string">"MOD"</code><code class="java plain">,</code><code class="java string">"SHL"</code><code class="java plain">,</code></div>
- <div class="line number52 index51 alt1"><code class="java spaces"> </code><code class="java string">"SHR"</code><code class="java plain">,</code><code class="java string">"AND"</code><code class="java plain">,</code><code class="java string">"BOR"</code><code class="java plain">,</code><code class="java string">"XOR"</code><code class="java plain">,</code></div>
- <div class="line number53 index52 alt2"><code class="java spaces"> </code><code class="java string">"IFE"</code><code class="java plain">,</code><code class="java string">"IFN"</code><code class="java plain">,</code><code class="java string">"IFG"</code><code class="java plain">,</code><code class="java string">"IFB"</code></div>
- <div class="line number54 index53 alt1"><code class="java spaces"> </code><code class="java plain">};</code></div>
- <div class="line number55 index54 alt2"><code class="java spaces"> </code><code class="java comments">// Register constants</code></div>
- <div class="line number56 index55 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_A =</code> <code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number57 index56 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_B =</code> <code class="java value">1</code><code class="java plain">;</code></div>
- <div class="line number58 index57 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_C =</code> <code class="java value">2</code><code class="java plain">;</code></div>
- <div class="line number59 index58 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_X =</code> <code class="java value">3</code><code class="java plain">;</code></div>
- <div class="line number60 index59 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_Y =</code> <code class="java value">4</code><code class="java plain">;</code></div>
- <div class="line number61 index60 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_Z =</code> <code class="java value">5</code><code class="java plain">;</code></div>
- <div class="line number62 index61 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_I =</code> <code class="java value">6</code><code class="java plain">;</code></div>
- <div class="line number63 index62 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">REG_J =</code> <code class="java value">7</code><code class="java plain">;</code></div>
- <div class="line number64 index63 alt1"><code class="java spaces"> </code><code class="java comments">// Command parts (opcode, A, B)</code></div>
- <div class="line number65 index64 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">C_O_MASK =</code> <code class="java value">0x000F</code><code class="java plain">;</code></div>
- <div class="line number66 index65 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">C_A_MASK =</code> <code class="java value">0x03F0</code><code class="java plain">;</code></div>
- <div class="line number67 index66 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">C_B_MASK =</code> <code class="java value">0xFC00</code><code class="java plain">;</code></div>
- <div class="line number68 index67 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">C_A_SHIFT =</code> <code class="java value">4</code><code class="java plain">;</code></div>
- <div class="line number69 index68 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">C_B_SHIFT =</code> <code class="java value">10</code><code class="java plain">;</code></div>
- <div class="line number70 index69 alt1"><code class="java spaces"> </code><code class="java comments">// Command address types (take one and shift with C_x_SHIFT)</code></div>
- <div class="line number71 index70 alt2"><code class="java spaces"> </code><code class="java comments">// Plain register</code></div>
- <div class="line number72 index71 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_REG =</code> <code class="java value">0</code><code class="java plain">;</code><code class="java comments">// | with REG_x</code></div>
- <div class="line number73 index72 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_A = A_REG | REG_A;</code></div>
- <div class="line number74 index73 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_B = A_REG | REG_B;</code></div>
- <div class="line number75 index74 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_C = A_REG | REG_C;</code></div>
- <div class="line number76 index75 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_X = A_REG | REG_X;</code></div>
- <div class="line number77 index76 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_Y = A_REG | REG_Y;</code></div>
- <div class="line number78 index77 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_Z = A_REG | REG_Z;</code></div>
- <div class="line number79 index78 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_I = A_REG | REG_I;</code></div>
- <div class="line number80 index79 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_J = A_REG | REG_J;</code></div>
- <div class="line number81 index80 alt2"><code class="java spaces"> </code><code class="java comments">// (Register)</code></div>
- <div class="line number82 index81 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_REG =</code> <code class="java value">8</code><code class="java plain">;</code> <code class="java comments">// or with REG_x</code></div>
- <div class="line number83 index82 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_A = A_M_REG | REG_A;</code></div>
- <div class="line number84 index83 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_B = A_M_REG | REG_B;</code></div>
- <div class="line number85 index84 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_C = A_M_REG | REG_C;</code></div>
- <div class="line number86 index85 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_X = A_M_REG | REG_X;</code></div>
- <div class="line number87 index86 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_Y = A_M_REG | REG_Y;</code></div>
- <div class="line number88 index87 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_Z = A_M_REG | REG_Z;</code></div>
- <div class="line number89 index88 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_I = A_M_REG | REG_I;</code></div>
- <div class="line number90 index89 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_J = A_M_REG | REG_J;</code></div>
- <div class="line number91 index90 alt2"><code class="java spaces"> </code><code class="java comments">// (Register+NW)</code></div>
- <div class="line number92 index91 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_REG =</code> <code class="java value">16</code><code class="java plain">;</code> <code class="java comments">// or with REG_x</code></div>
- <div class="line number93 index92 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_A = A_M_NW_REG | REG_A;</code></div>
- <div class="line number94 index93 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_B = A_M_NW_REG | REG_B;</code></div>
- <div class="line number95 index94 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_C = A_M_NW_REG | REG_C;</code></div>
- <div class="line number96 index95 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_X = A_M_NW_REG | REG_X;</code></div>
- <div class="line number97 index96 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_Y = A_M_NW_REG | REG_Y;</code></div>
- <div class="line number98 index97 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_Z = A_M_NW_REG | REG_Z;</code></div>
- <div class="line number99 index98 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_I = A_M_NW_REG | REG_I;</code></div>
- <div class="line number100 index99 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW_J = A_M_NW_REG | REG_J;</code></div>
- <div class="line number101 index100 alt2"><code class="java spaces"> </code><code class="java comments">// Special registers and stack</code></div>
- <div class="line number102 index101 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_POP =</code> <code class="java value">24</code><code class="java plain">;</code></div>
- <div class="line number103 index102 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_PEEK =</code> <code class="java value">25</code><code class="java plain">;</code></div>
- <div class="line number104 index103 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_PUSH =</code> <code class="java value">26</code><code class="java plain">;</code></div>
- <div class="line number105 index104 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_SP =</code> <code class="java value">27</code><code class="java plain">;</code></div>
- <div class="line number106 index105 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_PC =</code> <code class="java value">28</code><code class="java plain">;</code></div>
- <div class="line number107 index106 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_O =</code> <code class="java value">29</code><code class="java plain">;</code></div>
- <div class="line number108 index107 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_M_NW =</code> <code class="java value">30</code><code class="java plain">;</code> <code class="java comments">// (NW)</code></div>
- <div class="line number109 index108 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_NW =</code> <code class="java value">31</code><code class="java plain">;</code> <code class="java comments">// NW</code></div>
- <div class="line number110 index109 alt1"><code class="java spaces"> </code><code class="java comments">// Constant values</code></div>
- <div class="line number111 index110 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_CONST =</code> <code class="java value">32</code><code class="java plain">;</code> <code class="java comments">// + with const</code></div>
- <div class="line number112 index111 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_0 = A_CONST+</code><code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number113 index112 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_1 = A_CONST+</code><code class="java value">1</code><code class="java plain">;</code></div>
- <div class="line number114 index113 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_2 = A_CONST+</code><code class="java value">2</code><code class="java plain">;</code></div>
- <div class="line number115 index114 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_3 = A_CONST+</code><code class="java value">3</code><code class="java plain">;</code></div>
- <div class="line number116 index115 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_4 = A_CONST+</code><code class="java value">4</code><code class="java plain">;</code></div>
- <div class="line number117 index116 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_5 = A_CONST+</code><code class="java value">5</code><code class="java plain">;</code></div>
- <div class="line number118 index117 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_6 = A_CONST+</code><code class="java value">6</code><code class="java plain">;</code></div>
- <div class="line number119 index118 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_7 = A_CONST+</code><code class="java value">7</code><code class="java plain">;</code></div>
- <div class="line number120 index119 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_8 = A_CONST+</code><code class="java value">8</code><code class="java plain">;</code></div>
- <div class="line number121 index120 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_9 = A_CONST+</code><code class="java value">9</code><code class="java plain">;</code></div>
- <div class="line number122 index121 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_10 = A_CONST+</code><code class="java value">10</code><code class="java plain">;</code></div>
- <div class="line number123 index122 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_11 = A_CONST+</code><code class="java value">11</code><code class="java plain">;</code></div>
- <div class="line number124 index123 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_12 = A_CONST+</code><code class="java value">12</code><code class="java plain">;</code></div>
- <div class="line number125 index124 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_13 = A_CONST+</code><code class="java value">13</code><code class="java plain">;</code></div>
- <div class="line number126 index125 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_14 = A_CONST+</code><code class="java value">14</code><code class="java plain">;</code></div>
- <div class="line number127 index126 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_15 = A_CONST+</code><code class="java value">15</code><code class="java plain">;</code></div>
- <div class="line number128 index127 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_16 = A_CONST+</code><code class="java value">16</code><code class="java plain">;</code></div>
- <div class="line number129 index128 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_17 = A_CONST+</code><code class="java value">17</code><code class="java plain">;</code></div>
- <div class="line number130 index129 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_18 = A_CONST+</code><code class="java value">18</code><code class="java plain">;</code></div>
- <div class="line number131 index130 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_19 = A_CONST+</code><code class="java value">19</code><code class="java plain">;</code></div>
- <div class="line number132 index131 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_20 = A_CONST+</code><code class="java value">20</code><code class="java plain">;</code></div>
- <div class="line number133 index132 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_21 = A_CONST+</code><code class="java value">21</code><code class="java plain">;</code></div>
- <div class="line number134 index133 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_22 = A_CONST+</code><code class="java value">22</code><code class="java plain">;</code></div>
- <div class="line number135 index134 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_23 = A_CONST+</code><code class="java value">23</code><code class="java plain">;</code></div>
- <div class="line number136 index135 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_24 = A_CONST+</code><code class="java value">24</code><code class="java plain">;</code></div>
- <div class="line number137 index136 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_25 = A_CONST+</code><code class="java value">25</code><code class="java plain">;</code></div>
- <div class="line number138 index137 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_26 = A_CONST+</code><code class="java value">26</code><code class="java plain">;</code></div>
- <div class="line number139 index138 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_27 = A_CONST+</code><code class="java value">27</code><code class="java plain">;</code></div>
- <div class="line number140 index139 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_28 = A_CONST+</code><code class="java value">28</code><code class="java plain">;</code></div>
- <div class="line number141 index140 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_29 = A_CONST+</code><code class="java value">29</code><code class="java plain">;</code></div>
- <div class="line number142 index141 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_30 = A_CONST+</code><code class="java value">30</code><code class="java plain">;</code></div>
- <div class="line number143 index142 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">A_31 = A_CONST+</code><code class="java value">31</code><code class="java plain">;</code></div>
- <div class="line number144 index143 alt1"> </div>
- <div class="line number145 index144 alt2"><code class="java spaces"> </code><code class="java comments">//////</code></div>
- <div class="line number146 index145 alt1"><code class="java spaces"> </code><code class="java comments">// Register addresses</code></div>
- <div class="line number147 index146 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_A =</code> <code class="java value">0x10000</code><code class="java plain">;</code></div>
- <div class="line number148 index147 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_B =</code> <code class="java value">0x10001</code><code class="java plain">;</code></div>
- <div class="line number149 index148 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_C =</code> <code class="java value">0x10002</code><code class="java plain">;</code></div>
- <div class="line number150 index149 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_X =</code> <code class="java value">0x10003</code><code class="java plain">;</code></div>
- <div class="line number151 index150 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_Y =</code> <code class="java value">0x10004</code><code class="java plain">;</code></div>
- <div class="line number152 index151 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_Z =</code> <code class="java value">0x10005</code><code class="java plain">;</code></div>
- <div class="line number153 index152 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_I =</code> <code class="java value">0x10006</code><code class="java plain">;</code></div>
- <div class="line number154 index153 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_J =</code> <code class="java value">0x10007</code><code class="java plain">;</code></div>
- <div class="line number155 index154 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_PC=</code> <code class="java value">0x10008</code><code class="java plain">;</code></div>
- <div class="line number156 index155 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_SP=</code> <code class="java value">0x10009</code><code class="java plain">;</code></div>
- <div class="line number157 index156 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_O =</code> <code class="java value">0x1000a</code><code class="java plain">;</code></div>
- <div class="line number158 index157 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java keyword">int</code> <code class="java plain">M_CV=</code> <code class="java value">0x1000b</code><code class="java plain">;</code> <code class="java comments">// constant value</code></div>
- <div class="line number159 index158 alt2"><code class="java spaces"> </code><code class="java comments">// Memory cell names</code></div>
- <div class="line number160 index159 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">final</code> <code class="java plain">String[] MEM_NAMES = {</code></div>
- <div class="line number161 index160 alt2"><code class="java spaces"> </code><code class="java string">"A"</code><code class="java plain">,</code><code class="java string">"B"</code><code class="java plain">,</code><code class="java string">"C"</code><code class="java plain">,</code><code class="java string">"X"</code><code class="java plain">,</code><code class="java string">"Y"</code><code class="java plain">,</code><code class="java string">"Z"</code><code class="java plain">,</code><code class="java string">"I"</code><code class="java plain">,</code><code class="java string">"J"</code><code class="java plain">,</code></div>
- <div class="line number162 index161 alt1"><code class="java spaces"> </code><code class="java string">"PC"</code><code class="java plain">,</code><code class="java string">"SP"</code><code class="java plain">,</code><code class="java string">"O"</code><code class="java plain">,</code></div>
- <div class="line number163 index162 alt2"><code class="java spaces"> </code><code class="java string">"0"</code><code class="java plain">,</code><code class="java string">"1"</code><code class="java plain">,</code><code class="java string">"2"</code><code class="java plain">,</code><code class="java string">"3"</code><code class="java plain">,</code><code class="java string">"4"</code><code class="java plain">,</code><code class="java string">"5"</code><code class="java plain">,</code><code class="java string">"6"</code><code class="java plain">,</code><code class="java string">"7"</code><code class="java plain">,</code></div>
- <div class="line number164 index163 alt1"><code class="java spaces"> </code><code class="java string">"8"</code><code class="java plain">,</code><code class="java string">"9"</code><code class="java plain">,</code><code class="java string">"10"</code><code class="java plain">,</code><code class="java string">"11"</code><code class="java plain">,</code><code class="java string">"12"</code><code class="java plain">,</code><code class="java string">"13"</code><code class="java plain">,</code><code class="java string">"14"</code><code class="java plain">,</code><code class="java string">"15"</code><code class="java plain">,</code></div>
- <div class="line number165 index164 alt2"><code class="java spaces"> </code><code class="java string">"16"</code><code class="java plain">,</code><code class="java string">"17"</code><code class="java plain">,</code><code class="java string">"18"</code><code class="java plain">,</code><code class="java string">"19"</code><code class="java plain">,</code><code class="java string">"20"</code><code class="java plain">,</code><code class="java string">"21"</code><code class="java plain">,</code><code class="java string">"22"</code><code class="java plain">,</code><code class="java string">"23"</code><code class="java plain">,</code></div>
- <div class="line number166 index165 alt1"><code class="java spaces"> </code><code class="java string">"24"</code><code class="java plain">,</code><code class="java string">"25"</code><code class="java plain">,</code><code class="java string">"26"</code><code class="java plain">,</code><code class="java string">"27"</code><code class="java plain">,</code><code class="java string">"28"</code><code class="java plain">,</code><code class="java string">"29"</code><code class="java plain">,</code><code class="java string">"30"</code><code class="java plain">,</code><code class="java string">"31"</code></div>
- <div class="line number167 index166 alt2"><code class="java spaces"> </code><code class="java plain">};</code></div>
- <div class="line number168 index167 alt1"> </div>
- <div class="line number169 index168 alt2"><code class="java spaces"> </code><code class="java comments">///////////////////////////////////////////////////////////////</code></div>
- <div class="line number170 index169 alt1"><code class="java spaces"> </code><code class="java comments">// CORE CPU FUNCTIONS</code></div>
- <div class="line number171 index170 alt2"><code class="java spaces"> </code><code class="java comments">///////////////////////////////////////////////////////////////</code></div>
- <div class="line number172 index171 alt1"> </div>
- <div class="line number173 index172 alt2"><code class="java spaces"> </code><code class="java comments">// Memory cells: 64k RAM + 8 general-purpose regs + SP + PC + O + 32 constants</code></div>
- <div class="line number174 index173 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">final</code> <code class="java keyword">short</code><code class="java plain">[] mem =</code> <code class="java keyword">new</code> <code class="java keyword">short</code><code class="java plain">[</code><code class="java value">0x10000</code><code class="java plain">+</code><code class="java value">8</code><code class="java plain">+</code><code class="java value">3</code><code class="java plain">+</code><code class="java value">32</code><code class="java plain">];</code></div>
- <div class="line number175 index174 alt2"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">boolean</code> <code class="java plain">reserved =</code> <code class="java keyword">false</code><code class="java plain">;</code> <code class="java comments">// true if operation 0 executed</code></div>
- <div class="line number176 index175 alt1"> </div>
- <div class="line number177 index176 alt2"><code class="java spaces"> </code><code class="java preprocessor">/**</code></div>
- <div class="line number178 index177 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Execute one operation (skip = false) or skip one operation.</code></div>
- <div class="line number179 index178 alt2"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number180 index179 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">step(</code><code class="java keyword">boolean</code> <code class="java plain">skip){</code></div>
- <div class="line number181 index180 alt2"><code class="java spaces"> </code><code class="java keyword">short</code> <code class="java plain">sp0 = mem[M_SP];</code> <code class="java comments">// save SP</code></div>
- <div class="line number182 index181 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">cmd = mem[(mem[M_PC]++)&</code><code class="java value">0xffff</code><code class="java plain">];</code> <code class="java comments">// command value</code></div>
- <div class="line number183 index182 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">opcode = cmd& C_O_MASK;</code></div>
- <div class="line number184 index183 alt1"><code class="java spaces"> </code><code class="java comments">// a,b: raw codes, addresses, values</code></div>
- <div class="line number185 index184 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">a = (cmd& C_A_MASK)>> C_A_SHIFT;</code></div>
- <div class="line number186 index185 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">b = (cmd& C_B_MASK)>> C_B_SHIFT;</code></div>
- <div class="line number187 index186 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">aa = getaddr(a)&</code><code class="java value">0x1ffff</code><code class="java plain">;</code></div>
- <div class="line number188 index187 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">ba = getaddr(b)&</code><code class="java value">0x1ffff</code><code class="java plain">;</code></div>
- <div class="line number189 index188 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">av = mem[aa]&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number190 index189 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">bv = mem[ba]&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number191 index190 alt2"><code class="java spaces"> </code><code class="java comments">// debug</code></div>
- <div class="line number192 index191 alt1"><code class="java spaces"> </code><code class="java plain">_dstep(skip, opcode, aa, ba, av, bv);</code></div>
- <div class="line number193 index192 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(skip){</code></div>
- <div class="line number194 index193 alt1"><code class="java spaces"> </code><code class="java plain">mem[M_SP] = sp0;</code> <code class="java comments">// restore SP that could be modified in getaddr()</code></div>
- <div class="line number195 index194 alt2"><code class="java spaces"> </code><code class="java keyword">return</code><code class="java plain">;</code></div>
- <div class="line number196 index195 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number197 index196 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">r = mem[aa];</code> <code class="java comments">// new 'a' value</code></div>
- <div class="line number198 index197 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">o = mem[M_O];</code> <code class="java comments">// new 'O' value</code></div>
- <div class="line number199 index198 alt2"><code class="java spaces"> </code><code class="java keyword">switch</code><code class="java plain">(opcode){</code></div>
- <div class="line number200 index199 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_RESERVED:</code></div>
- <div class="line number201 index200 alt2"><code class="java spaces"> </code><code class="java plain">reserved =</code> <code class="java keyword">true</code><code class="java plain">;</code></div>
- <div class="line number202 index201 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number203 index202 alt2"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_SET:</code></div>
- <div class="line number204 index203 alt1"><code class="java spaces"> </code><code class="java plain">r = mem[ba];</code></div>
- <div class="line number205 index204 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number206 index205 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_ADD:</code></div>
- <div class="line number207 index206 alt2"><code class="java spaces"> </code><code class="java plain">r = av+bv;</code></div>
- <div class="line number208 index207 alt1"><code class="java spaces"> </code><code class="java plain">o = (r></code><code class="java value">0xffff</code><code class="java plain">)?</code><code class="java value">1</code><code class="java plain">:</code><code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number209 index208 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number210 index209 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_SUB:</code></div>
- <div class="line number211 index210 alt2"><code class="java spaces"> </code><code class="java plain">r = av-bv;</code></div>
- <div class="line number212 index211 alt1"><code class="java spaces"> </code><code class="java plain">o = (r<</code><code class="java value">0</code><code class="java plain">)?</code><code class="java value">1</code><code class="java plain">:</code><code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number213 index212 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number214 index213 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_MUL:</code></div>
- <div class="line number215 index214 alt2"><code class="java spaces"> </code><code class="java plain">r = av*bv;</code></div>
- <div class="line number216 index215 alt1"><code class="java spaces"> </code><code class="java plain">o = r>></code><code class="java value">16</code><code class="java plain">;</code></div>
- <div class="line number217 index216 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number218 index217 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_DIV:</code></div>
- <div class="line number219 index218 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(bv ==</code> <code class="java value">0</code><code class="java plain">){</code></div>
- <div class="line number220 index219 alt1"><code class="java spaces"> </code><code class="java plain">o =</code> <code class="java value">1</code><code class="java plain">;</code></div>
- <div class="line number221 index220 alt2"><code class="java spaces"> </code><code class="java plain">}</code> <code class="java keyword">else</code> <code class="java plain">{</code></div>
- <div class="line number222 index221 alt1"><code class="java spaces"> </code><code class="java plain">r = (</code><code class="java keyword">short</code><code class="java plain">) (av/bv);</code></div>
- <div class="line number223 index222 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number224 index223 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number225 index224 alt2"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_MOD:</code></div>
- <div class="line number226 index225 alt1"><code class="java spaces"> </code><code class="java plain">r = (</code><code class="java keyword">short</code><code class="java plain">) (av%bv);</code></div>
- <div class="line number227 index226 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number228 index227 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_SHL:</code></div>
- <div class="line number229 index228 alt2"><code class="java spaces"> </code><code class="java plain">r = av<<bv;</code></div>
- <div class="line number230 index229 alt1"><code class="java spaces"> </code><code class="java plain">o = r>></code><code class="java value">16</code><code class="java plain">;</code></div>
- <div class="line number231 index230 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number232 index231 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_SHR:</code></div>
- <div class="line number233 index232 alt2"><code class="java spaces"> </code><code class="java plain">r = av>>bv;</code></div>
- <div class="line number234 index233 alt1"><code class="java spaces"> </code><code class="java plain">o = av-(r<<bv);</code></div>
- <div class="line number235 index234 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number236 index235 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_AND:</code></div>
- <div class="line number237 index236 alt2"><code class="java spaces"> </code><code class="java plain">r = av&bv;</code></div>
- <div class="line number238 index237 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number239 index238 alt2"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_BOR:</code></div>
- <div class="line number240 index239 alt1"><code class="java spaces"> </code><code class="java plain">r = av|bv;</code></div>
- <div class="line number241 index240 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number242 index241 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_XOR:</code></div>
- <div class="line number243 index242 alt2"><code class="java spaces"> </code><code class="java plain">r = av^bv;</code></div>
- <div class="line number244 index243 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number245 index244 alt2"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_IFE:</code></div>
- <div class="line number246 index245 alt1"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(av != bv) step(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
- <div class="line number247 index246 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number248 index247 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_IFN:</code></div>
- <div class="line number249 index248 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(av == bv) step(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
- <div class="line number250 index249 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number251 index250 alt2"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_IFG:</code></div>
- <div class="line number252 index251 alt1"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(av <= bv) step(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
- <div class="line number253 index252 alt2"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number254 index253 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java plain">O_IFB:</code></div>
- <div class="line number255 index254 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">((av & bv)==</code><code class="java value">0</code><code class="java plain">) step(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
- <div class="line number256 index255 alt1"><code class="java spaces"> </code><code class="java keyword">break</code><code class="java plain">;</code></div>
- <div class="line number257 index256 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number258 index257 alt1"><code class="java spaces"> </code><code class="java comments">// overwrite 'a' unless it is constant</code></div>
- <div class="line number259 index258 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(aa<M_CV) mem[aa] = (</code><code class="java keyword">short</code><code class="java plain">)r;</code></div>
- <div class="line number260 index259 alt1"><code class="java spaces"> </code><code class="java plain">mem[M_O] = (</code><code class="java keyword">short</code><code class="java plain">) o;</code></div>
- <div class="line number261 index260 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number262 index261 alt1"> </div>
- <div class="line number263 index262 alt2"> </div>
- <div class="line number264 index263 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">reset(){</code></div>
- <div class="line number265 index264 alt2"><code class="java spaces"> </code><code class="java plain">reserved =</code> <code class="java keyword">false</code><code class="java plain">;</code></div>
- <div class="line number266 index265 alt1"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">i =</code> <code class="java value">0</code><code class="java plain">; i<</code><code class="java value">8</code><code class="java plain">+</code><code class="java value">3</code><code class="java plain">; i++) mem[M_A+i] =</code> <code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number267 index266 alt2"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">i =</code> <code class="java value">0</code><code class="java plain">; i<</code><code class="java value">32</code><code class="java plain">; i++){</code></div>
- <div class="line number268 index267 alt1"><code class="java spaces"> </code><code class="java plain">mem[M_CV+i]=(</code><code class="java keyword">short</code><code class="java plain">)i;</code></div>
- <div class="line number269 index268 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number270 index269 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number271 index270 alt2"> </div>
- <div class="line number272 index271 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java plain">NotchDcpu() {</code></div>
- <div class="line number273 index272 alt2"><code class="java spaces"> </code><code class="java plain">reset();</code></div>
- <div class="line number274 index273 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number275 index274 alt2"> </div>
- <div class="line number276 index275 alt1"><code class="java spaces"> </code><code class="java comments">////////////////////////////////////////////</code></div>
- <div class="line number277 index276 alt2"><code class="java spaces"> </code><code class="java comments">// UTILITY, DEBUG, AND INTERNAL FUNCTIONS</code></div>
- <div class="line number278 index277 alt1"> </div>
- <div class="line number279 index278 alt2"><code class="java spaces"> </code><code class="java preprocessor">/**</code></div>
- <div class="line number280 index279 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Generates command code for specified opcode, 'a', and 'b'.</code></div>
- <div class="line number281 index280 alt2"><code class="java spaces"> </code><code class="java preprocessor">*</code></div>
- <div class="line number282 index281 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Example: gencmd(O_SET, A_PC, A_NW) for "set PC, next_word_of_ram"</code></div>
- <div class="line number283 index282 alt2"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number284 index283 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">short</code> <code class="java plain">gencmd(</code><code class="java keyword">int</code> <code class="java plain">opcode,</code><code class="java keyword">int</code> <code class="java plain">a,</code><code class="java keyword">int</code> <code class="java plain">b){</code></div>
- <div class="line number285 index284 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">(</code><code class="java keyword">short</code><code class="java plain">) (opcode | a<<C_A_SHIFT | b<<C_B_SHIFT);</code></div>
- <div class="line number286 index285 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number287 index286 alt2"> </div>
- <div class="line number288 index287 alt1"><code class="java spaces"> </code><code class="java comments">// debug</code></div>
- <div class="line number289 index288 alt2"><code class="java spaces"> </code><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">_d(String ln,Object... args){</code></div>
- <div class="line number290 index289 alt1"><code class="java spaces"> </code><code class="java plain">System.out.printf(ln, args);</code></div>
- <div class="line number291 index290 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number292 index291 alt1"> </div>
- <div class="line number293 index292 alt2"><code class="java spaces"> </code><code class="java preprocessor">/**</code></div>
- <div class="line number294 index293 alt1"><code class="java spaces"> </code><code class="java preprocessor">* List of all registers with their hex values</code></div>
- <div class="line number295 index294 alt2"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number296 index295 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java plain">String _dregs(){</code></div>
- <div class="line number297 index296 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">String.format(</code><code class="java string">"R A=%04x B=%04x C=%04x X=%04x Y=%04x Z=%04x I=%04x J=%04x PC=%04x SP=%04x O=%04x"</code><code class="java plain">,</code></div>
- <div class="line number298 index297 alt1"><code class="java spaces"> </code><code class="java plain">mem[M_A], mem[M_B], mem[M_C], mem[M_X], mem[M_Y], mem[M_Z], mem[M_I], mem[M_J],</code></div>
- <div class="line number299 index298 alt2"><code class="java spaces"> </code><code class="java plain">mem[M_PC], mem[M_SP], mem[M_O]);</code></div>
- <div class="line number300 index299 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number301 index300 alt2"><code class="java spaces"> </code><code class="java keyword">private</code> <code class="java plain">String _dmem(</code><code class="java keyword">int</code> <code class="java plain">addr){</code></div>
- <div class="line number302 index301 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">(addr<M_A)?String.format(</code><code class="java string">"(%04x)"</code><code class="java plain">,addr):MEM_NAMES[addr-M_A];</code></div>
- <div class="line number303 index302 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number304 index303 alt1"><code class="java spaces"> </code><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">_dstep(</code><code class="java keyword">boolean</code> <code class="java plain">skip,</code> <code class="java keyword">int</code> <code class="java plain">opcode,</code> <code class="java keyword">int</code> <code class="java plain">aa,</code> <code class="java keyword">int</code> <code class="java plain">ba,</code> <code class="java keyword">int</code> <code class="java plain">av,</code> <code class="java keyword">int</code> <code class="java plain">bv) {</code></div>
- <div class="line number305 index304 alt2"><code class="java spaces"> </code><code class="java plain">_d(</code><code class="java string">"%s%s %s=%04x %s=%04x\n"</code><code class="java plain">,skip?</code><code class="java string">"; "</code><code class="java plain">:</code><code class="java string">"> "</code><code class="java plain">,OPCODE_NAMES[opcode],_dmem(aa),av,_dmem(ba),bv);</code></div>
- <div class="line number306 index305 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number307 index306 alt2"> </div>
- <div class="line number308 index307 alt1"><code class="java spaces"> </code><code class="java preprocessor">/**</code></div>
- <div class="line number309 index308 alt2"><code class="java spaces"> </code><code class="java preprocessor">* Returns memory address for operand code. 0 returns address of register A and so on.</code></div>
- <div class="line number310 index309 alt1"><code class="java spaces"> </code><code class="java preprocessor">* May modify values of PC (in case of "next word of ram") and SP (when PUSH, POP)</code></div>
- <div class="line number311 index310 alt2"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number312 index311 alt1"><code class="java spaces"> </code><code class="java keyword">private</code> <code class="java keyword">int</code> <code class="java plain">getaddr(</code><code class="java keyword">int</code> <code class="java plain">cmd){</code></div>
- <div class="line number313 index312 alt2"><code class="java spaces"> </code><code class="java keyword">if</code> <code class="java plain">(cmd<=</code><code class="java value">7</code><code class="java plain">){</code></div>
- <div class="line number314 index313 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">M_A+cmd;</code></div>
- <div class="line number315 index314 alt2"><code class="java spaces"> </code><code class="java plain">}</code> <code class="java keyword">else</code> <code class="java keyword">if</code> <code class="java plain">(cmd<=</code><code class="java value">15</code><code class="java plain">){</code></div>
- <div class="line number316 index315 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">mem[M_A+cmd-</code><code class="java value">8</code><code class="java plain">]&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number317 index316 alt2"><code class="java spaces"> </code><code class="java plain">}</code> <code class="java keyword">else</code> <code class="java keyword">if</code> <code class="java plain">(cmd<=</code><code class="java value">23</code><code class="java plain">){</code></div>
- <div class="line number318 index317 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">(mem[M_A+cmd-</code><code class="java value">16</code><code class="java plain">]+mem[mem[M_PC]++])&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number319 index318 alt2"><code class="java spaces"> </code><code class="java plain">}</code> <code class="java keyword">else</code> <code class="java keyword">if</code> <code class="java plain">(cmd>=</code><code class="java value">32</code><code class="java plain">){</code></div>
- <div class="line number320 index319 alt1"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">M_CV+cmd-</code><code class="java value">32</code><code class="java plain">;</code></div>
- <div class="line number321 index320 alt2"><code class="java spaces"> </code><code class="java plain">}</code> <code class="java keyword">else</code> <code class="java keyword">switch</code> <code class="java plain">(cmd){</code></div>
- <div class="line number322 index321 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">24</code><code class="java plain">:</code></div>
- <div class="line number323 index322 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">(mem[M_SP]++)&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number324 index323 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">25</code><code class="java plain">:</code></div>
- <div class="line number325 index324 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">mem[M_SP]&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number326 index325 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">26</code><code class="java plain">:</code></div>
- <div class="line number327 index326 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">(--mem[M_SP])&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number328 index327 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">27</code><code class="java plain">:</code></div>
- <div class="line number329 index328 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">M_SP;</code></div>
- <div class="line number330 index329 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">28</code><code class="java plain">:</code></div>
- <div class="line number331 index330 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">M_PC;</code></div>
- <div class="line number332 index331 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">29</code><code class="java plain">:</code></div>
- <div class="line number333 index332 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">M_O;</code></div>
- <div class="line number334 index333 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">30</code><code class="java plain">:</code></div>
- <div class="line number335 index334 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">mem[mem[M_PC]++]&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number336 index335 alt1"><code class="java spaces"> </code><code class="java keyword">case</code> <code class="java value">31</code><code class="java plain">:</code></div>
- <div class="line number337 index336 alt2"><code class="java spaces"> </code><code class="java keyword">return</code> <code class="java plain">mem[M_PC]++&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number338 index337 alt1"><code class="java spaces"> </code><code class="java keyword">default</code><code class="java plain">:</code></div>
- <div class="line number339 index338 alt2"><code class="java spaces"> </code><code class="java keyword">throw</code> <code class="java keyword">new</code> <code class="java plain">RuntimeException(</code><code class="java string">"THIS SHOULD NEVER HAPPEN"</code><code class="java plain">);</code></div>
- <div class="line number340 index339 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number341 index340 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number342 index341 alt1"> </div>
- <div class="line number343 index342 alt2"><code class="java spaces"> </code><code class="java comments">////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</code></div>
- <div class="line number344 index343 alt1"> </div>
- <div class="line number345 index344 alt2"><code class="java spaces"> </code><code class="java preprocessor">/**</code></div>
- <div class="line number346 index345 alt1"><code class="java spaces"> </code><code class="java preprocessor">* First demo program that copies "Hello_world!" to video memory.</code></div>
- <div class="line number347 index346 alt2"><code class="java spaces"> </code><code class="java preprocessor">*</code></div>
- <div class="line number348 index347 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Video memory starts at 0x8000 and is buffer of 80x25 characters. High bytes ignored</code></div>
- <div class="line number349 index348 alt2"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
- <div class="line number350 index349 alt1"><code class="java spaces"> </code><code class="java keyword">public</code> <code class="java keyword">static</code> <code class="java keyword">void</code> <code class="java plain">main(String[] args) {</code></div>
- <div class="line number351 index350 alt2"><code class="java spaces"> </code><code class="java plain">NotchDcpu cpu =</code> <code class="java keyword">new</code> <code class="java plain">NotchDcpu();</code></div>
- <div class="line number352 index351 alt1"> </div>
- <div class="line number353 index352 alt2"><code class="java spaces"> </code><code class="java comments">///////////</code></div>
- <div class="line number354 index353 alt1"><code class="java spaces"> </code><code class="java comments">// LOAD PROGRAM</code></div>
- <div class="line number355 index354 alt2"><code class="java spaces"> </code><code class="java keyword">short</code> <code class="java plain">end = (</code><code class="java keyword">short</code><code class="java plain">)</code> <code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number356 index355 alt1"><code class="java spaces"> </code><code class="java keyword">short</code> <code class="java plain">data = (</code><code class="java keyword">short</code><code class="java plain">)</code> <code class="java value">0x2000</code><code class="java plain">;</code></div>
- <div class="line number357 index356 alt2"><code class="java spaces"> </code><code class="java keyword">short</code> <code class="java plain">video = (</code><code class="java keyword">short</code><code class="java plain">)</code><code class="java value">0x8000</code><code class="java plain">;</code></div>
- <div class="line number358 index357 alt1"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">i_video = video&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number359 index358 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">i_data = data&</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
- <div class="line number360 index359 alt1"> </div>
- <div class="line number361 index360 alt2"><code class="java spaces"> </code><code class="java comments">//set a, 0xbeef</code></div>
- <div class="line number362 index361 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">0</code><code class="java plain">] = gencmd(O_SET,A_A,A_NW);</code></div>
- <div class="line number363 index362 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">1</code><code class="java plain">] = (</code><code class="java keyword">short</code><code class="java plain">)</code> <code class="java value">0xbeef</code><code class="java plain">;</code></div>
- <div class="line number364 index363 alt1"><code class="java spaces"> </code><code class="java comments">// set (0x1000), a</code></div>
- <div class="line number365 index364 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">2</code><code class="java plain">] = gencmd(O_SET,A_M_NW,A_A);</code></div>
- <div class="line number366 index365 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">3</code><code class="java plain">] = (</code><code class="java keyword">short</code><code class="java plain">)</code> <code class="java value">0x1000</code><code class="java plain">;</code></div>
- <div class="line number367 index366 alt2"><code class="java spaces"> </code><code class="java comments">// ifn a, (0x1000)</code></div>
- <div class="line number368 index367 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">4</code><code class="java plain">] = gencmd(O_IFN,A_A,A_M_NW);</code></div>
- <div class="line number369 index368 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">5</code><code class="java plain">] = (</code><code class="java keyword">short</code><code class="java plain">)</code> <code class="java value">0x1000</code><code class="java plain">;</code></div>
- <div class="line number370 index369 alt1"><code class="java spaces"> </code><code class="java comments">// set PC, end</code></div>
- <div class="line number371 index370 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">6</code><code class="java plain">] = gencmd(O_SET,A_PC,A_NW);</code></div>
- <div class="line number372 index371 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">7</code><code class="java plain">] = end;</code></div>
- <div class="line number373 index372 alt2"><code class="java spaces"> </code><code class="java comments">// set i, 0</code></div>
- <div class="line number374 index373 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">8</code><code class="java plain">] = gencmd(O_SET,A_I,A_0);</code></div>
- <div class="line number375 index374 alt2"><code class="java spaces"> </code><code class="java comments">//:nextchar</code></div>
- <div class="line number376 index375 alt1"><code class="java spaces"> </code><code class="java comments">// ife (data+i), 0</code></div>
- <div class="line number377 index376 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">9</code><code class="java plain">] = gencmd(O_IFE,A_M_NW_I,A_0);</code></div>
- <div class="line number378 index377 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">10</code><code class="java plain">]= data;</code></div>
- <div class="line number379 index378 alt2"><code class="java spaces"> </code><code class="java comments">// set PC, end</code></div>
- <div class="line number380 index379 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">11</code><code class="java plain">]= gencmd(O_SET,A_PC,A_NW);</code></div>
- <div class="line number381 index380 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">12</code><code class="java plain">]= end;</code></div>
- <div class="line number382 index381 alt1"><code class="java spaces"> </code><code class="java comments">// set (video+i), (data+i)</code></div>
- <div class="line number383 index382 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">13</code><code class="java plain">] = gencmd(O_SET,A_M_NW_I,A_M_NW_I);</code></div>
- <div class="line number384 index383 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">14</code><code class="java plain">] = video;</code></div>
- <div class="line number385 index384 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">15</code><code class="java plain">] = data;</code></div>
- <div class="line number386 index385 alt1"><code class="java spaces"> </code><code class="java comments">// add i, 1</code></div>
- <div class="line number387 index386 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">16</code><code class="java plain">] = gencmd(O_ADD,A_I,A_1);</code></div>
- <div class="line number388 index387 alt1"><code class="java spaces"> </code><code class="java comments">// set PC, nextchar</code></div>
- <div class="line number389 index388 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[</code><code class="java value">17</code><code class="java plain">] = gencmd(O_SET,A_PC,A_9);</code></div>
- <div class="line number390 index389 alt1"> </div>
- <div class="line number391 index390 alt2"><code class="java spaces"> </code><code class="java keyword">int</code> <code class="java plain">i = i_data;</code></div>
- <div class="line number392 index391 alt1"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(</code><code class="java keyword">char</code> <code class="java plain">c :</code> <code class="java string">"Hello_world!"</code><code class="java plain">.toCharArray()){</code> <code class="java comments">// copy to data</code></div>
- <div class="line number393 index392 alt2"><code class="java spaces"> </code><code class="java plain">cpu.mem[i] = (</code><code class="java keyword">short</code><code class="java plain">) c;</code></div>
- <div class="line number394 index393 alt1"><code class="java spaces"> </code><code class="java plain">i++;</code></div>
- <div class="line number395 index394 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number396 index395 alt1"><code class="java spaces"> </code><code class="java plain">cpu.mem[i] =</code> <code class="java value">0</code><code class="java plain">;</code></div>
- <div class="line number397 index396 alt2"> </div>
- <div class="line number398 index397 alt1"><code class="java spaces"> </code><code class="java comments">///////////</code></div>
- <div class="line number399 index398 alt2"><code class="java spaces"> </code><code class="java comments">// LAUNCH</code></div>
- <div class="line number400 index399 alt1"><code class="java spaces"> </code><code class="java plain">cpu.reset();</code></div>
- <div class="line number401 index400 alt2"><code class="java spaces"> </code><code class="java keyword">while</code> <code class="java plain">(!cpu.reserved){</code> <code class="java comments">// until we hit operation 0</code></div>
- <div class="line number402 index401 alt1"><code class="java spaces"> </code><code class="java plain">System.out.println(cpu._dregs());</code></div>
- <div class="line number403 index402 alt2"><code class="java spaces"> </code><code class="java plain">cpu.step(</code><code class="java keyword">false</code><code class="java plain">);</code></div>
- <div class="line number404 index403 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number405 index404 alt2"><code class="java spaces"> </code><code class="java plain">System.out.println(</code><code class="java string">"\n\nExecution completed\n\n"</code><code class="java plain">);</code></div>
- <div class="line number406 index405 alt1"><code class="java spaces"> </code><code class="java comments">/////////</code></div>
- <div class="line number407 index406 alt2"><code class="java spaces"> </code><code class="java comments">// OUTPUT VIDEO MEMORY</code></div>
- <div class="line number408 index407 alt1"><code class="java spaces"> </code><code class="java plain">System.out.println(</code><code class="java string">"Video memory:"</code><code class="java plain">);</code></div>
- <div class="line number409 index408 alt2"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(i =</code> <code class="java value">0</code><code class="java plain">; i<</code><code class="java value">82</code><code class="java plain">; i++) System.out.print(</code><code class="java string">"#"</code><code class="java plain">);</code></div>
- <div class="line number410 index409 alt1"><code class="java spaces"> </code><code class="java plain">System.out.println();</code></div>
- <div class="line number411 index410 alt2"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(i =</code> <code class="java value">0</code><code class="java plain">; i<</code><code class="java value">25</code><code class="java plain">; i++){</code></div>
- <div class="line number412 index411 alt1"><code class="java spaces"> </code><code class="java plain">System.out.print(</code><code class="java string">"#"</code><code class="java plain">);</code></div>
- <div class="line number413 index412 alt2"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">j =</code> <code class="java value">0</code><code class="java plain">; j<</code><code class="java value">80</code><code class="java plain">; j++){</code></div>
- <div class="line number414 index413 alt1"><code class="java spaces"> </code><code class="java keyword">short</code> <code class="java plain">m = cpu.mem[i_video+i*</code><code class="java value">80</code><code class="java plain">+j];</code></div>
- <div class="line number415 index414 alt2"><code class="java spaces"> </code><code class="java plain">System.out.print((m>=</code><code class="java value">0x20</code> <code class="java plain">&& m<=</code><code class="java value">0x80</code><code class="java plain">)?(</code><code class="java keyword">char</code><code class="java plain">)m :</code> <code class="java string">' '</code><code class="java plain">);</code></div>
- <div class="line number416 index415 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number417 index416 alt2"><code class="java spaces"> </code><code class="java plain">System.out.println(</code><code class="java string">"#"</code><code class="java plain">);</code></div>
- <div class="line number418 index417 alt1"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number419 index418 alt2"><code class="java spaces"> </code><code class="java keyword">for</code> <code class="java plain">(i =</code> <code class="java value">0</code><code class="java plain">; i<</code><code class="java value">82</code><code class="java plain">; i++) System.out.print(</code><code class="java string">"#"</code><code class="java plain">);</code></div>
- <div class="line number420 index419 alt1"><code class="java spaces"> </code><code class="java plain">System.out.println();</code></div>
- <div class="line number421 index420 alt2"><code class="java spaces"> </code><code class="java plain">}</code></div>
- <div class="line number422 index421 alt1"><code class="java plain">}</code></div>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <script type="text/javascript">
- //<![CDATA[
- SyntaxHighlighter.defaults['gutter'] = false;SyntaxHighlighter.defaults['toolbar'] = false;SyntaxHighlighter.all();
- //]]>
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement