Advertisement
pareeohnos

HTML output

Mar 30th, 2012
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 98.49 KB | None | 0 0
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta name="generator" content="HTML Tidy for Linux (vers 6 November 2007), see www.w3.org" />
  6. <title>Paste</title>
  7. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  8. <meta name="viewport" content="width=device-width, minimum-scale=0.1, maximum-scale=2.0" />
  9. <meta name="apple-mobile-web-app-capable" content="NO" />
  10. <script type="text/javascript" src="jQuery-1.4.2.js">
  11. </script>
  12. <script type="text/javascript" src="shCore.js">
  13. </script>
  14. <script type="text/javascript" src="shBrushJava.js">
  15. </script>
  16. <link href="shCore.css" rel="stylesheet" type="text/css" />
  17. <link href="shThemeDefault.css" rel="stylesheet" type="text/css" />
  18. </head>
  19. <body>
  20. <div class="syntaxhighlighter nogutter java" id="highlighter_266142">
  21. <table border="0" cellpadding="0" cellspacing="0">
  22. <tbody>
  23. <tr>
  24. <td class="code">
  25. <div class="container">
  26. <div class="line number1 index0 alt2"><code class="java keyword">package</code> <code class="java plain">dcpu;</code></div>
  27. <div class="line number2 index1 alt1"> </div>
  28. <div class="line number3 index2 alt2"><code class="java preprocessor">/**</code></div>
  29. <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>
  30. <div class="line number5 index4 alt2"><code class="java spaces"> </code><code class="java preprocessor">*</code></div>
  31. <div class="line number6 index5 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Created by IntelliJ IDEA.</code></div>
  32. <div class="line number7 index6 alt2"><code class="java spaces"> </code><code class="java preprocessor">* User: aimozg</code></div>
  33. <div class="line number8 index7 alt1"><code class="java spaces"> </code><code class="java preprocessor">* Date: 28.03.12</code></div>
  34. <div class="line number9 index8 alt2"><code class="java spaces"> </code><code class="java preprocessor">* Time: 19:15</code></div>
  35. <div class="line number10 index9 alt1"><code class="java spaces"> </code><code class="java preprocessor">*/</code></div>
  36. <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>
  37. <div class="line number12 index11 alt1"> </div>
  38. <div class="line number13 index12 alt2"><code class="java spaces">    </code><code class="java comments">////////////////</code></div>
  39. <div class="line number14 index13 alt1"><code class="java spaces">    </code><code class="java comments">// NOTES</code></div>
  40. <div class="line number15 index14 alt2"><code class="java spaces">    </code><code class="java comments">////////////////</code></div>
  41. <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>
  42. <div class="line number17 index16 alt2"><code class="java spaces">    </code><code class="java comments">//   mem cell and put something into another)</code></div>
  43. <div class="line number18 index17 alt1"><code class="java spaces">    </code><code class="java comments">// * Register O stores following values:</code></div>
  44. <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>
  45. <div class="line number20 index19 alt1"><code class="java spaces">    </code><code class="java comments">//   * In MUL : high word</code></div>
  46. <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>
  47. <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>
  48. <div class="line number23 index22 alt2"><code class="java spaces">    </code><code class="java comments">//   * In SHR : rightmost 'b' bits of 'a'</code></div>
  49. <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>
  50. <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>
  51. <div class="line number26 index25 alt1"> </div>
  52. <div class="line number27 index26 alt2"><code class="java spaces">    </code><code class="java comments">////////////////</code></div>
  53. <div class="line number28 index27 alt1"><code class="java spaces">    </code><code class="java comments">/// CONSTANTS</code></div>
  54. <div class="line number29 index28 alt2"><code class="java spaces">    </code><code class="java comments">////////////////</code></div>
  55. <div class="line number30 index29 alt1"> </div>
  56. <div class="line number31 index30 alt2"><code class="java spaces">    </code><code class="java comments">//////</code></div>
  57. <div class="line number32 index31 alt1"><code class="java spaces">    </code><code class="java comments">// Opcode constants</code></div>
  58. <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>
  59. <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>
  60. <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>
  61. <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>
  62. <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>
  63. <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>
  64. <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>
  65. <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>
  66. <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>
  67. <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>
  68. <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>
  69. <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>
  70. <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>
  71. <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>
  72. <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>
  73. <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>
  74. <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>
  75. <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>
  76. <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>
  77. <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>
  78. <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>
  79. <div class="line number54 index53 alt1"><code class="java spaces">    </code><code class="java plain">};</code></div>
  80. <div class="line number55 index54 alt2"><code class="java spaces">    </code><code class="java comments">// Register constants</code></div>
  81. <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>
  82. <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>
  83. <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>
  84. <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>
  85. <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>
  86. <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>
  87. <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>
  88. <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>
  89. <div class="line number64 index63 alt1"><code class="java spaces">    </code><code class="java comments">// Command parts (opcode, A, B)</code></div>
  90. <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>
  91. <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>
  92. <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>
  93. <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>
  94. <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>
  95. <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>
  96. <div class="line number71 index70 alt2"><code class="java spaces">    </code><code class="java comments">//   Plain register</code></div>
  97. <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>
  98. <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>
  99. <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>
  100. <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>
  101. <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>
  102. <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>
  103. <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>
  104. <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>
  105. <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>
  106. <div class="line number81 index80 alt2"><code class="java spaces">    </code><code class="java comments">//   (Register)</code></div>
  107. <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>
  108. <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>
  109. <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>
  110. <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>
  111. <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>
  112. <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>
  113. <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>
  114. <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>
  115. <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>
  116. <div class="line number91 index90 alt2"><code class="java spaces">    </code><code class="java comments">//  (Register+NW)</code></div>
  117. <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>
  118. <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>
  119. <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>
  120. <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>
  121. <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>
  122. <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>
  123. <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>
  124. <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>
  125. <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>
  126. <div class="line number101 index100 alt2"><code class="java spaces">    </code><code class="java comments">//   Special registers and stack</code></div>
  127. <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>
  128. <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>
  129. <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>
  130. <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>
  131. <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>
  132. <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>
  133. <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>
  134. <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>
  135. <div class="line number110 index109 alt1"><code class="java spaces">    </code><code class="java comments">//  Constant values</code></div>
  136. <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>
  137. <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>
  138. <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>
  139. <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>
  140. <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>
  141. <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>
  142. <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>
  143. <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>
  144. <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>
  145. <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>
  146. <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>
  147. <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>
  148. <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>
  149. <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>
  150. <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>
  151. <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>
  152. <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>
  153. <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>
  154. <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>
  155. <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>
  156. <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>
  157. <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>
  158. <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>
  159. <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>
  160. <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>
  161. <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>
  162. <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>
  163. <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>
  164. <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>
  165. <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>
  166. <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>
  167. <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>
  168. <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>
  169. <div class="line number144 index143 alt1"> </div>
  170. <div class="line number145 index144 alt2"><code class="java spaces">    </code><code class="java comments">//////</code></div>
  171. <div class="line number146 index145 alt1"><code class="java spaces">    </code><code class="java comments">// Register addresses</code></div>
  172. <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>
  173. <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>
  174. <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>
  175. <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>
  176. <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>
  177. <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>
  178. <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>
  179. <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>
  180. <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>
  181. <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>
  182. <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>
  183. <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>
  184. <div class="line number159 index158 alt2"><code class="java spaces">    </code><code class="java comments">// Memory cell names</code></div>
  185. <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>
  186. <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>
  187. <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>
  188. <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>
  189. <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>
  190. <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>
  191. <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>
  192. <div class="line number167 index166 alt2"><code class="java spaces">    </code><code class="java plain">};</code></div>
  193. <div class="line number168 index167 alt1"> </div>
  194. <div class="line number169 index168 alt2"><code class="java spaces">    </code><code class="java comments">///////////////////////////////////////////////////////////////</code></div>
  195. <div class="line number170 index169 alt1"><code class="java spaces">    </code><code class="java comments">// CORE CPU FUNCTIONS</code></div>
  196. <div class="line number171 index170 alt2"><code class="java spaces">    </code><code class="java comments">///////////////////////////////////////////////////////////////</code></div>
  197. <div class="line number172 index171 alt1"> </div>
  198. <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>
  199. <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>
  200. <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>
  201. <div class="line number176 index175 alt1"> </div>
  202. <div class="line number177 index176 alt2"><code class="java spaces">    </code><code class="java preprocessor">/**</code></div>
  203. <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>
  204. <div class="line number179 index178 alt2"><code class="java spaces">     </code><code class="java preprocessor">*/</code></div>
  205. <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>
  206. <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>
  207. <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]++)&amp;</code><code class="java value">0xffff</code><code class="java plain">];</code> <code class="java comments">// command value</code></div>
  208. <div class="line number183 index182 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">opcode = cmd&amp; C_O_MASK;</code></div>
  209. <div class="line number184 index183 alt1"><code class="java spaces">        </code><code class="java comments">// a,b: raw codes, addresses, values</code></div>
  210. <div class="line number185 index184 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">a = (cmd&amp; C_A_MASK)&gt;&gt; C_A_SHIFT;</code></div>
  211. <div class="line number186 index185 alt1"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">b = (cmd&amp; C_B_MASK)&gt;&gt; C_B_SHIFT;</code></div>
  212. <div class="line number187 index186 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">aa = getaddr(a)&amp;</code><code class="java value">0x1ffff</code><code class="java plain">;</code></div>
  213. <div class="line number188 index187 alt1"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">ba = getaddr(b)&amp;</code><code class="java value">0x1ffff</code><code class="java plain">;</code></div>
  214. <div class="line number189 index188 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">av = mem[aa]&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  215. <div class="line number190 index189 alt1"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">bv = mem[ba]&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  216. <div class="line number191 index190 alt2"><code class="java spaces">        </code><code class="java comments">// debug</code></div>
  217. <div class="line number192 index191 alt1"><code class="java spaces">        </code><code class="java plain">_dstep(skip, opcode, aa, ba, av, bv);</code></div>
  218. <div class="line number193 index192 alt2"><code class="java spaces">        </code><code class="java keyword">if</code> <code class="java plain">(skip){</code></div>
  219. <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>
  220. <div class="line number195 index194 alt2"><code class="java spaces">            </code><code class="java keyword">return</code><code class="java plain">;</code></div>
  221. <div class="line number196 index195 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
  222. <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>
  223. <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>
  224. <div class="line number199 index198 alt2"><code class="java spaces">        </code><code class="java keyword">switch</code><code class="java plain">(opcode){</code></div>
  225. <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>
  226. <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>
  227. <div class="line number202 index201 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  228. <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>
  229. <div class="line number204 index203 alt1"><code class="java spaces">                </code><code class="java plain">r = mem[ba];</code></div>
  230. <div class="line number205 index204 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  231. <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>
  232. <div class="line number207 index206 alt2"><code class="java spaces">                </code><code class="java plain">r =  av+bv;</code></div>
  233. <div class="line number208 index207 alt1"><code class="java spaces">                </code><code class="java plain">o = (r&gt;</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>
  234. <div class="line number209 index208 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  235. <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>
  236. <div class="line number211 index210 alt2"><code class="java spaces">                </code><code class="java plain">r = av-bv;</code></div>
  237. <div class="line number212 index211 alt1"><code class="java spaces">                </code><code class="java plain">o = (r&lt;</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>
  238. <div class="line number213 index212 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  239. <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>
  240. <div class="line number215 index214 alt2"><code class="java spaces">                </code><code class="java plain">r = av*bv;</code></div>
  241. <div class="line number216 index215 alt1"><code class="java spaces">                </code><code class="java plain">o = r&gt;&gt;</code><code class="java value">16</code><code class="java plain">;</code></div>
  242. <div class="line number217 index216 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  243. <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>
  244. <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>
  245. <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>
  246. <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>
  247. <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>
  248. <div class="line number223 index222 alt2"><code class="java spaces">                </code><code class="java plain">}</code></div>
  249. <div class="line number224 index223 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  250. <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>
  251. <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>
  252. <div class="line number227 index226 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  253. <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>
  254. <div class="line number229 index228 alt2"><code class="java spaces">                </code><code class="java plain">r = av&lt;&lt;bv;</code></div>
  255. <div class="line number230 index229 alt1"><code class="java spaces">                </code><code class="java plain">o = r&gt;&gt;</code><code class="java value">16</code><code class="java plain">;</code></div>
  256. <div class="line number231 index230 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  257. <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>
  258. <div class="line number233 index232 alt2"><code class="java spaces">                </code><code class="java plain">r = av&gt;&gt;bv;</code></div>
  259. <div class="line number234 index233 alt1"><code class="java spaces">                </code><code class="java plain">o = av-(r&lt;&lt;bv);</code></div>
  260. <div class="line number235 index234 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  261. <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>
  262. <div class="line number237 index236 alt2"><code class="java spaces">                </code><code class="java plain">r = av&amp;bv;</code></div>
  263. <div class="line number238 index237 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  264. <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>
  265. <div class="line number240 index239 alt1"><code class="java spaces">                </code><code class="java plain">r = av|bv;</code></div>
  266. <div class="line number241 index240 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  267. <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>
  268. <div class="line number243 index242 alt2"><code class="java spaces">                </code><code class="java plain">r = av^bv;</code></div>
  269. <div class="line number244 index243 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  270. <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>
  271. <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>
  272. <div class="line number247 index246 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  273. <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>
  274. <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>
  275. <div class="line number250 index249 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  276. <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>
  277. <div class="line number252 index251 alt1"><code class="java spaces">                </code><code class="java keyword">if</code> <code class="java plain">(av &lt;= bv) step(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
  278. <div class="line number253 index252 alt2"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  279. <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>
  280. <div class="line number255 index254 alt2"><code class="java spaces">                </code><code class="java keyword">if</code> <code class="java plain">((av &amp; 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>
  281. <div class="line number256 index255 alt1"><code class="java spaces">                </code><code class="java keyword">break</code><code class="java plain">;</code></div>
  282. <div class="line number257 index256 alt2"><code class="java spaces">        </code><code class="java plain">}</code></div>
  283. <div class="line number258 index257 alt1"><code class="java spaces">        </code><code class="java comments">// overwrite 'a' unless it is constant</code></div>
  284. <div class="line number259 index258 alt2"><code class="java spaces">        </code><code class="java keyword">if</code> <code class="java plain">(aa&lt;M_CV) mem[aa] = (</code><code class="java keyword">short</code><code class="java plain">)r;</code></div>
  285. <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>
  286. <div class="line number261 index260 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
  287. <div class="line number262 index261 alt1"> </div>
  288. <div class="line number263 index262 alt2"> </div>
  289. <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>
  290. <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>
  291. <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&lt;</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>
  292. <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&lt;</code><code class="java value">32</code><code class="java plain">; i++){</code></div>
  293. <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>
  294. <div class="line number269 index268 alt2"><code class="java spaces">        </code><code class="java plain">}</code></div>
  295. <div class="line number270 index269 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
  296. <div class="line number271 index270 alt2"> </div>
  297. <div class="line number272 index271 alt1"><code class="java spaces">    </code><code class="java keyword">public</code> <code class="java plain">NotchDcpu() {</code></div>
  298. <div class="line number273 index272 alt2"><code class="java spaces">        </code><code class="java plain">reset();</code></div>
  299. <div class="line number274 index273 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
  300. <div class="line number275 index274 alt2"> </div>
  301. <div class="line number276 index275 alt1"><code class="java spaces">    </code><code class="java comments">////////////////////////////////////////////</code></div>
  302. <div class="line number277 index276 alt2"><code class="java spaces">    </code><code class="java comments">// UTILITY, DEBUG, AND INTERNAL FUNCTIONS</code></div>
  303. <div class="line number278 index277 alt1"> </div>
  304. <div class="line number279 index278 alt2"><code class="java spaces">    </code><code class="java preprocessor">/**</code></div>
  305. <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>
  306. <div class="line number281 index280 alt2"><code class="java spaces">     </code><code class="java preprocessor">*</code></div>
  307. <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>
  308. <div class="line number283 index282 alt2"><code class="java spaces">     </code><code class="java preprocessor">*/</code></div>
  309. <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>
  310. <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&lt;&lt;C_A_SHIFT | b&lt;&lt;C_B_SHIFT);</code></div>
  311. <div class="line number286 index285 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
  312. <div class="line number287 index286 alt2"> </div>
  313. <div class="line number288 index287 alt1"><code class="java spaces">    </code><code class="java comments">// debug</code></div>
  314. <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>
  315. <div class="line number290 index289 alt1"><code class="java spaces">        </code><code class="java plain">System.out.printf(ln, args);</code></div>
  316. <div class="line number291 index290 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
  317. <div class="line number292 index291 alt1"> </div>
  318. <div class="line number293 index292 alt2"><code class="java spaces">    </code><code class="java preprocessor">/**</code></div>
  319. <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>
  320. <div class="line number295 index294 alt2"><code class="java spaces">     </code><code class="java preprocessor">*/</code></div>
  321. <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>
  322. <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>
  323. <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>
  324. <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>
  325. <div class="line number300 index299 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
  326. <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>
  327. <div class="line number302 index301 alt1"><code class="java spaces">        </code><code class="java keyword">return</code> <code class="java plain">(addr&lt;M_A)?String.format(</code><code class="java string">"(%04x)"</code><code class="java plain">,addr):MEM_NAMES[addr-M_A];</code></div>
  328. <div class="line number303 index302 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
  329. <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>
  330. <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">"&gt; "</code><code class="java plain">,OPCODE_NAMES[opcode],_dmem(aa),av,_dmem(ba),bv);</code></div>
  331. <div class="line number306 index305 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
  332. <div class="line number307 index306 alt2"> </div>
  333. <div class="line number308 index307 alt1"><code class="java spaces">    </code><code class="java preprocessor">/**</code></div>
  334. <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>
  335. <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>
  336. <div class="line number311 index310 alt2"><code class="java spaces">     </code><code class="java preprocessor">*/</code></div>
  337. <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>
  338. <div class="line number313 index312 alt2"><code class="java spaces">        </code><code class="java keyword">if</code> <code class="java plain">(cmd&lt;=</code><code class="java value">7</code><code class="java plain">){</code></div>
  339. <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>
  340. <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&lt;=</code><code class="java value">15</code><code class="java plain">){</code></div>
  341. <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">]&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  342. <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&lt;=</code><code class="java value">23</code><code class="java plain">){</code></div>
  343. <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]++])&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  344. <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&gt;=</code><code class="java value">32</code><code class="java plain">){</code></div>
  345. <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>
  346. <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>
  347. <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>
  348. <div class="line number323 index322 alt2"><code class="java spaces">                </code><code class="java keyword">return</code> <code class="java plain">(mem[M_SP]++)&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  349. <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>
  350. <div class="line number325 index324 alt2"><code class="java spaces">                </code><code class="java keyword">return</code> <code class="java plain">mem[M_SP]&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  351. <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>
  352. <div class="line number327 index326 alt2"><code class="java spaces">                </code><code class="java keyword">return</code> <code class="java plain">(--mem[M_SP])&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  353. <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>
  354. <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>
  355. <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>
  356. <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>
  357. <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>
  358. <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>
  359. <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>
  360. <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]++]&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  361. <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>
  362. <div class="line number337 index336 alt2"><code class="java spaces">                </code><code class="java keyword">return</code> <code class="java plain">mem[M_PC]++&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  363. <div class="line number338 index337 alt1"><code class="java spaces">            </code><code class="java keyword">default</code><code class="java plain">:</code></div>
  364. <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>
  365. <div class="line number340 index339 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
  366. <div class="line number341 index340 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
  367. <div class="line number342 index341 alt1"> </div>
  368. <div class="line number343 index342 alt2"><code class="java spaces">    </code><code class="java comments">////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</code></div>
  369. <div class="line number344 index343 alt1"> </div>
  370. <div class="line number345 index344 alt2"><code class="java spaces">    </code><code class="java preprocessor">/**</code></div>
  371. <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>
  372. <div class="line number347 index346 alt2"><code class="java spaces">     </code><code class="java preprocessor">*</code></div>
  373. <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>
  374. <div class="line number349 index348 alt2"><code class="java spaces">     </code><code class="java preprocessor">*/</code></div>
  375. <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>
  376. <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>
  377. <div class="line number352 index351 alt1"> </div>
  378. <div class="line number353 index352 alt2"><code class="java spaces">        </code><code class="java comments">///////////</code></div>
  379. <div class="line number354 index353 alt1"><code class="java spaces">        </code><code class="java comments">// LOAD PROGRAM</code></div>
  380. <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>
  381. <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>
  382. <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>
  383. <div class="line number358 index357 alt1"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">i_video = video&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  384. <div class="line number359 index358 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">i_data = data&amp;</code><code class="java value">0xffff</code><code class="java plain">;</code></div>
  385. <div class="line number360 index359 alt1"> </div>
  386. <div class="line number361 index360 alt2"><code class="java spaces">        </code><code class="java comments">//set a, 0xbeef</code></div>
  387. <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>
  388. <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>
  389. <div class="line number364 index363 alt1"><code class="java spaces">        </code><code class="java comments">// set (0x1000), a</code></div>
  390. <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>
  391. <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>
  392. <div class="line number367 index366 alt2"><code class="java spaces">        </code><code class="java comments">// ifn a, (0x1000)</code></div>
  393. <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>
  394. <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>
  395. <div class="line number370 index369 alt1"><code class="java spaces">        </code><code class="java comments">// set PC, end</code></div>
  396. <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>
  397. <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>
  398. <div class="line number373 index372 alt2"><code class="java spaces">        </code><code class="java comments">// set i, 0</code></div>
  399. <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>
  400. <div class="line number375 index374 alt2"><code class="java spaces">        </code><code class="java comments">//:nextchar</code></div>
  401. <div class="line number376 index375 alt1"><code class="java spaces">        </code><code class="java comments">// ife (data+i), 0</code></div>
  402. <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>
  403. <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>
  404. <div class="line number379 index378 alt2"><code class="java spaces">        </code><code class="java comments">// set PC, end</code></div>
  405. <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>
  406. <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>
  407. <div class="line number382 index381 alt1"><code class="java spaces">        </code><code class="java comments">// set (video+i), (data+i)</code></div>
  408. <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>
  409. <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>
  410. <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>
  411. <div class="line number386 index385 alt1"><code class="java spaces">        </code><code class="java comments">// add i, 1</code></div>
  412. <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>
  413. <div class="line number388 index387 alt1"><code class="java spaces">        </code><code class="java comments">// set PC, nextchar</code></div>
  414. <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>
  415. <div class="line number390 index389 alt1"> </div>
  416. <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>
  417. <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>
  418. <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>
  419. <div class="line number394 index393 alt1"><code class="java spaces">            </code><code class="java plain">i++;</code></div>
  420. <div class="line number395 index394 alt2"><code class="java spaces">        </code><code class="java plain">}</code></div>
  421. <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>
  422. <div class="line number397 index396 alt2"> </div>
  423. <div class="line number398 index397 alt1"><code class="java spaces">        </code><code class="java comments">///////////</code></div>
  424. <div class="line number399 index398 alt2"><code class="java spaces">        </code><code class="java comments">// LAUNCH</code></div>
  425. <div class="line number400 index399 alt1"><code class="java spaces">        </code><code class="java plain">cpu.reset();</code></div>
  426. <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>
  427. <div class="line number402 index401 alt1"><code class="java spaces">            </code><code class="java plain">System.out.println(cpu._dregs());</code></div>
  428. <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>
  429. <div class="line number404 index403 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
  430. <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>
  431. <div class="line number406 index405 alt1"><code class="java spaces">        </code><code class="java comments">/////////</code></div>
  432. <div class="line number407 index406 alt2"><code class="java spaces">        </code><code class="java comments">// OUTPUT VIDEO MEMORY</code></div>
  433. <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>
  434. <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&lt;</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>
  435. <div class="line number410 index409 alt1"><code class="java spaces">        </code><code class="java plain">System.out.println();</code></div>
  436. <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&lt;</code><code class="java value">25</code><code class="java plain">; i++){</code></div>
  437. <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>
  438. <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&lt;</code><code class="java value">80</code><code class="java plain">; j++){</code></div>
  439. <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>
  440. <div class="line number415 index414 alt2"><code class="java spaces">                </code><code class="java plain">System.out.print((m&gt;=</code><code class="java value">0x20</code> <code class="java plain">&amp;&amp; m&lt;=</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>
  441. <div class="line number416 index415 alt1"><code class="java spaces">            </code><code class="java plain">}</code></div>
  442. <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>
  443. <div class="line number418 index417 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
  444. <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&lt;</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>
  445. <div class="line number420 index419 alt1"><code class="java spaces">        </code><code class="java plain">System.out.println();</code></div>
  446. <div class="line number421 index420 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
  447. <div class="line number422 index421 alt1"><code class="java plain">}</code></div>
  448. </div>
  449. </td>
  450. </tr>
  451. </tbody>
  452. </table>
  453. </div>
  454. <script type="text/javascript">
  455. //<![CDATA[
  456. SyntaxHighlighter.defaults['gutter'] = false;SyntaxHighlighter.defaults['toolbar'] = false;SyntaxHighlighter.all();
  457. //]]>
  458. </script>
  459. </body>
  460. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement