1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8" /> 5 <link href="./_css/mirac.css" rel="stylesheet" type="text/css" media="all"> 6 <title> 7 MIRAC Emulator 8 </title> 9 10 <link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon-180x180.png"> 11 <link rel="icon" type="image/png" href="./favicon-192x192.png" sizes="192x192"> 12 <link rel="icon" type="image/png" href="./favicon-160x160.png" sizes="160x160"> 13 <link rel="icon" type="image/png" href="./favicon-96x96.png" sizes="96x96"> 14 <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16"> 15 <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32"> 16 17 <meta name="mobile-web-app-capable" content="yes" /> 18 </head> 19 <body> 20 <div id="centrificator"> 21 <div class="register"> 22 <h2>Program Ctr</h2> 23 <div id="r1" class="registerValue"></div> 24 </div><div class="register"> 25 <h2>Accumulator</h2> 26 <div id="r0" class="registerValue"></div> 27 </div><div class="register"> 28 <h2>Instruction</h2> 29 <div id="r2" class="registerValue"></div> 30 </div><div class="register"> 31 <h2>Argument Rg</h2> 32 <div id="r3" class="registerValue"></div> 33 </div><div class="register"> 34 <h2>ALU Operand</h2> 35 <div id="r4" class="registerValue"></div> 36 </div><div class="register"> 37 <h2>Address Bus</h2> 38 <div id="r5" class="registerValue"></div> 39 </div><div class="register"> 40 <h2>Data Bus In</h2> 41 <div id="r6" class="registerValue"></div> 42 </div><div class="register"> 43 <h2>DataBus Out</h2> 44 <div id="r7" class="registerValue"></div> 45 </div> 46 <br /> 47 <div id="moreRegistersPanel"> 48 <div class="register"> 49 <h2>StackPointr</h2> 50 <div id="r11" class="registerValue"></div> 51 </div><div class="register"> 52 <h2>Gen.Purpose</h2> 53 <div id="r100" class="registerValue" title="g0"></div> 54 <div id="r101" class="registerValue" title="g1"></div> 55 <div id="r102" class="registerValue" title="g2"></div> 56 <div id="r103" class="registerValue" title="g3"></div> 57 <div id="r104" class="registerValue" title="g4"></div> 58 <div id="r105" class="registerValue" title="g5"></div> 59 <div id="r106" class="registerValue" title="g6"></div> 60 <div id="r107" class="registerValue" title="g7"></div> 61 </div><div class="register"> 62 <h2>Device Addr</h2> 63 <div id="r8" class="registerValue"></div> 64 </div><div class="register"> 65 <h2>Device Din</h2> 66 <div id="r9" class="registerValue"></div> 67 </div><div class="register"> 68 <h2>Device Dout</h2> 69 <div id="r10" class="registerValue"></div> 70 </div> 71 </div><div id="about"> 72 <img src="./Mirac-Logo.svg" id="miracLogo" width="320" alt="MIRAC Emulator"/> 73 <br /> 74 <p> 75 This is a JavaScript emulation of the<br /> 76 Minecraft Redstone Automatic Computer. 77 </p> 78 <p> 79 Documentation about the architecture, instruction set, assembly language and other topics:<br /> 80 <a href="./docs/Mirac.pdf" target="_blank">Download</a> (pdf, 42k). 81 </p> 82 <p> 83 <a href="https://github.com/RolandR/MIRAC-Emulator" target="_blank">Github Repository</a>. Made by <a href="http://rolandrytz.ch" target="_blank">Roland Rytz</a>. 84 </p> 85 </div><div id="romInput" class="panel"> 86 <h2> 87 <abbr title="MIDAS - Mirac Direct Assembly">MIDAS</abbr> Assembly Input 88 <button id="loadProgramButton" onclick="Control.showPopup('exampleProgramsPopup');">Load example...</button> 89 <button id="biggerButton" onclick="Control.toggleEditorSize();"></button> 90 </h2> 91 <div id="#romLines"> 92 </div> 93 <div id="romTextContainer"><!--TextAreas are bugged--> 94 <textarea 95 id="romText" 96 spellcheck="false" 97 oninput="setTimeout(editor.onEdit)" 98 onkeydown="setTimeout(editor.onEdit);" 99 onkeyup="editor.onEdit();" 100 onpaste="setTimeout(editor.onEdit);" 101 onmouseup="editor.onEdit();" 102 onscroll="editor.onScroll();" 103 ></textarea> 104 </div> 105 <div id="romDisplay" contenteditable="true"></div> 106 <div id="romControls"> 107 <button id="loadRamButton" onclick="Control.loadToRam();"><span></span>Load to RAM</button> 108 <span id="atAddress">
108 starting at octal address </span> 109 <input id="loadToAddress" type="text" value="0"> 110 </div> 111 </div> 112 <br /> 113 <div id="leftpanel"><div id="ram" class="panel"> 114 <h2>Memory</h2> 115 <table id="ramtable" class="memtable"> 116 <tbody id="ramtbody"></tbody> 117 </table> 118 </div><br /><div id="octJoystick"><div id="octalDisplay" class="panel"> 119 <h2 title="Device Address: 020">Oct Display</h2> 120 <div class="displayContainer"> 121 <div class="displaySegment" id="displaySegment0"></div><div class="displaySegment" id="displaySegment1"></div><div class="displaySegment" id="displaySegment2"></div> 122 </div> 123 <span class="peripheryDocs" onclick="Control.showPopup('octalDisplayInfoPopup');">Docs</span> 124 </div><br /><!--div id="joystick" class="panel"> 125 <h2 title="Device Address: 050">Joystick</h2> 126 <div class="joystickContainer"> 127 <table> 128 <tr> 129 <td></td><td><button>^</button></td><td></td> 130 </tr> 131 <tr> 132 <td><button><</button></td><td><button>o</button></td><td><button>></button></td> 133 </tr> 134 <tr> 135 <td></td><td><button>v</button></td><td></td> 136 </tr> 137 </table> 138 </div> 139 <span class="peripheryDocs" onclick="Control.showPopup('dotMatrixInfoPopup');">Docs</span> 140 </div--></div><div id="dotMatrix" class="panel"> 141 <h2 title="Device Addresses: 030 - 034">Dot Matrix</h2> 142 <div class="dotMatrixContainer"> 143 <canvas id="dotMatrixCanvas" height="160" width="160"></canvas> 144 </div> 145 <span class="peripheryDocs" onclick="Control.showPopup('dotMatrixInfoPopup');">Docs</span> 146 </div><div id="asciiDisplay" class="panel"> 147 <h2 title="Device Address: 040">ASCII Display</h2> 148 <div class="asciiDisplayContainer"> 149 <span id="displayChar0"> 150 </span><span id="displayChar1"> 151 </span><span id="displayChar2"> 152 </span><span id="displayChar3"> 153 </span><span id="displayChar4"> 154 </span><span id="displayChar5"> 155 </span><span id="displayChar6"> 156 </span><span id="displayChar7"> 157 </span><span id="displayChar8"> 158 </span><span id="displayChar9"> 159 </span></div> 160 <span class="peripheryDocs" onclick="Control.showPopup('asciiDisplayInfoPopup');">Docs</span> 161 </div></div><div id="rightpanel"><div id="control" class="rightPanelDiv panel"> 162 <h2>Control</h2> 163 <button id="run" class="runButton" onclick="Control.toggleRun()"><span></span>Start</button><!-- Maaaaan, why does html interpret line breaks? Even for inline elements, that's somewhat silly. 164 --><button id="resetpc" onclick="Control.reset();" title="Clears registers and flags."><span></span>Reset to start</button><br /><!-- 165 --><button id="cycle" onclick="Control.cycle();" title="Single cycle step."><span></span>Step</button><!-- 166 --><button id="resetmem" onclick="Control.hardReset();" title="Clears memory and all registers and flags."><span></span>Hard reset</button><!-- 167 --><hr /><!-- 168 --><span class="controlValueLabel">Cycle interval: </span><!-- 169 --><input class="controlValue" id="cycleInterval" type="number" value="" /><!-- 170 --><button class="controlValueButton" id="cycleIntervalButton" onclick="Control.updateCycleInterval();">Apply</button><!-- 171 --><hr /><!-- 172 --><span class="controlValueLabel">Set PC (octal): </span><!-- 173 --><input class="controlValue" id="setPC" type="text" value="0" /><!-- 174 --><button class="controlValueButton" id="setPCButton" onclick="Control.setPC();">Apply</button><!-- 175 --><hr /><!-- 176 --><span class="controlValueLabel" id="frequencyLabel">Running at: </span><!-- 177 --><span class="controlValueLabel" id="frequency" title="Breathtaking speeds!">(Paused)</span><!-- 178 --><hr /><!-- 179 --><span class="controlValueLabel">Use animations: </span><!-- 180 --><input class="controlValue" id="useAnimations" type="checkbox" checked="true" onclick="Control.updateUseAnimations();" /><!-- 181 --><hr /><!-- 182 --><span class="controlValueLabel">Update values: </span><!-- 183 --><input class="controlValue" id="displayValues" type="checkbox" checked="true" onclick="Control.updateDisplayValues();" /> 184 185 186 </div><div id="flags" class="rightPanelDiv panel"> 187 <h2>Flags</h2> 188 <table id="flagtable"> 189 <tbody> 190 <tr> 191 <td>Carry</td> 192 <td>Zero</td> 193 <td>Overflow</td> 194 <td>Negative</td> 195 </tr> 196 <tr> 197 <td id="f0" class="">0</td> 198 <td id="f1" class="">0</td> 199 <td id="f2" class="">0</td> 200 <td id="f3" class="">0</td> 201 </tr> 202 </tbody> 203 </table> 204 </div><div id="stack" class="rightPanelDiv panel"> 205 <h2>Call Stack</h2> 206 <table id="stacktable" class="memtable"> 207 <tbody id="stacktbody"></tbody> 208 </table> 209 </div> 210 <div id="rdLogoContainer">
211 <a href="http://rolandrytz.ch"> 212 <img src="./RedstoneDigital-Logo.svg" id="rdLogo" width="320" alt="Redstone Digital"/> 213 </a> 214 </div> 215 </div> 216 </div> 217 <div id="popupOverlay"> 218 <div id="overlayContainer"> 219 <div class="popup" id="octalDisplayInfoPopup"> 220 <h2>Info: Octal Display <button class="popupCloseButton" onclick="Control.hidePopup(this.parentElement.parentElement.id);">x</button></h2> 221 <section> 222 <h3>Octal Number Display</h3> 223 <table> 224 <tr><th>Address</th><th>Mode</th></tr> 225 <tr><td>020</td><td>Display single byte</td></tr> 226 </table> 227 228 <h3>Description</h3> 229 230 The octal display can display a single byte in base 8.<br /> 231 Use is simple: Write a single bite to device address 020. 232 233 <h3>Examples</h3> 234 235 <code> 236 <span class="e-comment">// write octal 123 to display</span> 237 <br /> 238 <span class="e-valid-instruction" title="Opcode 101">PDAI</span> 239 <span class="e-octal" title="Binary: 00010000">020</span> 240 <span class="e-comment">// set device address</span> 241 <br /> 242 <span class="e-valid-instruction" title="Opcode 103">PDWI</span> 243 <span class="e-octal" title="Binary: 01010011">123</span> 244 <span class="e-comment">// write immediate byte</span> 245 </code> 246 247 <code> 248 <span class="e-comment">// write byte from memory address</span> 249 <br /> 250 <span class="e-valid-instruction" title="Opcode 101">PDAI</span> 251 <span class="e-octal" title="Binary: 00010000">020</span> 252 <span class="e-comment">// set device address</span> 253 <br /> 254 <span class="e-valid-instruction" title="Opcode 104">PDWM</span> 255 <span class="e-octal" title="Binary: 01000000">100</span> 256 <span class="e-comment">// write bite at memory location 100</span> 257 </code> 258 259 <code> 260 <span class="e-comment">// write byte from accumulator</span> 261 <br /> 262 <span class="e-comment">// we're going to use the result of an addition</span> 263 <br /> 264 <span class="e-valid-instruction" title="Opcode 002">LDAI</span> 265 <span class="e-decimal" title="Octal: 024">20.</span> 266 <span class="e-comment">// load decimal 20</span> 267 <br /> 268 <span class="e-valid-instruction" title="Opcode 005">OPRA</span> 269 <span class="e-comment">// write accumulator to operand register</span> 270 <br /> 271 <span class="e-valid-instruction" title="Opcode 002">LDAI</span> 272 <span class="e-decimal" title="Octal: 052">42.</span> 273 <span class="e-comment">// load decimal 42</span> 274 <br /> 275 <span class="e-valid-instruction" title="Opcode 006">ADDC</span> 276 <span class="e-comment">// perform addition</span> 277 <br /> 278 <span class="e-valid-instruction" title="Opcode 101">PDAI</span> 279 <span class="e-octal" title="Binary: 00010000">020</span> 280 <span class="e-comment">// set device address</span> 281 <br /> 282 <span class="e-valid-instruction" title="Opcode 105">PDWA</span> 283 <span class="e-comment">// write addition result to display</span> 284 </code> 285 286 287 288 </section> 289 </div> 290 <div class="popup" id="dotMatrixInfoPopup"> 291 <h2>Info: Dot Matrix <button class="popupCloseButton" onclick="Control.hidePopup(this.parentElement.parentElement.id);">x</button></h2> 292 <section> 293 <h3>Dot Matrix Display</h3> 294 <table> 295 <tr><th>Address</th><th>Mode</th></tr> 296 <tr><td>030</td><td>Flip pixel at coordinates YYYY XXXX</td></tr> 297 <tr><td>031</td><td>Turn on pixel at coordinates YYYY XXXX</td></tr> 298 <tr><td>032</td><td>Turn off pixel at coordinates YYYY XXXX</td></tr> 299 <tr><td>033</td><td>Push byte to dot matrix, each byte controlling a pixel.</td></tr> 300 <tr><td>034</td><td>Fill matrix with pattern in pdout</td></tr> 301 </table> 302 <h3>Description</h3> 303 A 16x16 pixel monochrome dot matrix display.<br /> 304 There are various modes for controlling it, including manipulating single pixels, badge feeding entire bytes and filling the screen with a single-byte pattern. 305 <h3>Examples</h3> 306 <code> 307 <span class="e-comment">// Flip a pixel somewhere in the middle</span> 308 <br />
309 <span class="e-valid-instruction" title="Opcode 101">PDAI</span> 310 <span class="e-octal" title="Binary: 00011000">030</span> 311 <br /> 312 <span class="e-valid-instruction" title="Opcode 103">PDWI</span> 313 <span class="e-binary" title="Octal: 131">#01011001</span> 314 <span class="e-comment">// y = 5, x = 9</span> 315 </code> 316 <code> 317 <span class="e-comment">// Turn on and then off the bottom left pixel</span> 318 <br /> 319 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 320 <span class="e-octal" title="Binary: 00011001">031</span> 321 <br /> 322 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 323 <span class="e-binary" title="Octal: 360">#11110000</span> 324 <span class="e-comment">// y = 15, x = 0</span> 325 <br /> 326 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 327 <span class="e-octal" title="Binary: 00011010">032</span> 328 <br /> 329 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 330 <span class="e-binary" title="Octal: 360">#11110000</span> 331 </code> 332 <code> 333 <span class="e-comment">// Fill in some pixels, starting from the top</span> 334 <br /> 335 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 336 <span class="e-octal" title="Binary: 00011011">033</span> 337 <br /> 338 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 339 <span class="e-binary" title="Octal: 210">#10001000</span> 340 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 341 <span class="e-binary" title="Octal: 210">#10001000</span> 342 <br /> 343 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 344 <span class="e-binary" title="Octal: 314">#11001100</span> 345 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 346 <span class="e-binary" title="Octal: 314">#11001100</span> 347 <br /> 348 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 349 <span class="e-binary" title="Octal: 252">#10101010</span> 350 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 351 <span class="e-binary" title="Octal: 252">#10101010</span> 352 <br /> 353 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 354 <span class="e-binary" title="Octal: 377">#11111111</span> 355 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 356 <span class="e-binary" title="Octal: 377">#11111111</span> 357 <br /> 358 <span class="e-comment">// Mode 033 is useful for displaying entire images</span> 359 </code> 360 <code> 361 <span class="e-comment">// Blank screen</span> 362 <br /> 363 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 364 <span class="e-octal" title="Binary: 00011100">034</span> 365 <br /> 366 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 367 <span class="e-binary" title="Octal: 000">#00000000</span> 368 </code> 369 </section> 370 </div> 371 <div class="popup" id="asciiDisplayInfoPopup"> 372 <h2>Info: ASCII Display <button class="popupCloseButton" onclick="Control.hidePopup(this.parentElement.parentElement.id);">x</button></h2> 373 <section> 374 <h3>ASCII Text Display</h3> 375 <table> 376 <tr><th>Address</th><th>Mode</th></tr> 377 <tr><td>040</td><td>Set or replace character right of caret</td></tr> 378 <tr><td>041</td><td>Set or replace character at caret</td></tr> 379 <tr><td>042</td><td>Clear and reset</td></tr> 380 </table> 381 <h3>Description</h3> 382 A 10-character ASCII text display.<br /> 383 The display has an internal caret (cursor).<br /> 384 It increments if characters are written in mode 040. It wraps around when it reaches the last position.<br /> 385 Reset (Mode 042) resets the caret to position 0.<br /> 386 <br /> 387 The character 127 (octal 177) acts as backspace.<br /> 388 It will clear the character at the caret, and decrement the caret position.<br /> 389 <h3>Examples</h3> 390 <code> 391 <span class="e-comment">// Write "Foo" at cursor</span> 392 <br />
393 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 394 <span class="e-octal" title="Binary: 00100000">040</span> 395 <br /> 396 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 397 <span class="e-valid-char" title="Octal: 70">'F'</span> 398 <br /> 399 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 400 <span class="e-valid-char" title="Octal: 111">'o'</span> 401 <br /> 402 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 403 <span class="e-valid-char" title="Octal: 112">'p'</span> 404 <br /> 405 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 406 <span class="e-decimal" title="Octal: 177">127.</span> 407 <span class="e-comment">//127 is backspace</span> 408 <br /> 409 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 410 <span class="e-valid-char" title="Octal: 111">'o'</span> 411 </code> 412 <code> 413 <span class="e-comment">// Clear and reset</span> 414 <br /> 415 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 416 <span class="e-octal" title="Binary: 00100010">042</span> 417 <br /> 418 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 419 <span class="e-octal" title="Binary: 00000000">000</span> 420 <span class="e-comment">// Could be any value</span> 421 </code> 422 <code> 423 <span class="e-comment">// Blinking cursor animation</span> 424 <br /> 425 <span class="e-valid-instruction" title="Opcode 101">pdai</span> 426 <span class="e-octal" title="Binary: 00100001">041</span> 427 <br /> 428 <span class="e-define-label">$loop:</span> 429 <br /> 430 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 431 <span class="e-valid-char" title="Octal: 32">' '</span> 432 <br /> 433 <span class="e-valid-instruction" title="Opcode 000">nope</span> 434 <span class="e-comment">// for timing, because jmpi takes one tick</span> 435 <br /> 436 <span class="e-valid-instruction" title="Opcode 103">pdwi</span> 437 <span class="e-valid-char" title="Octal: 95">'_'</span> 438 <br /> 439 <span class="e-valid-instruction" title="Opcode 004">jmpi</span> 440 <span class="e-label">$loop</span> 441 </code> 442 </section> 443 </div> 444 <div class="popup" id="exampleProgramsPopup"> 445 <h2>Example Programs <button class="popupCloseButton" onclick="Control.hidePopup(this.parentElement.parentElement.id);">x</button></h2> 446 <section> 447 <div class="sampleProgram"> 448 <button class="sampleProgramButton" onclick="Control.openSampleProgram('bouncing_ball.midas')">Open</button> 449 <h3>Bouncing Ball</h3> 450 Displays a bouncing ball on the dot matrix. 451 </div> 452 <div class="sampleProgram"> 453 <button class="sampleProgramButton" onclick="Control.openSampleProgram('show_picture.midas')">Open</button> 454 <h3>Show Picture</h3> 455 Displays a static image on the dot matrix. 456 </div> 457 <div class="sampleProgram"> 458 <button class="sampleProgramButton" onclick="Control.openSampleProgram('winking_owl.midas')">Open</button> 459 <h3>Winking Owl</h3> 460 Shows a way to display two alternating images. 461 </div> 462 <div class="sampleProgram"> 463 <button class="sampleProgramButton" onclick="Control.openSampleProgram('visual_quine.midas')">Open</button> 464 <h3>Visual Quine</h3> 465 This program draws a visual representation of itself. 466 </div> 467 <div class="sampleProgram"> 468 <button class="sampleProgramButton" onclick="Control.openSampleProgram('string_loader.midas')">Open</button> 469 <h3>String Loader</h3> 470 Displays a string of characters on the ASCII display. 471 </div> 472 <div class="sampleProgram"> 473 <button class="sampleProgramButton" onclick="Control.openSampleProgram('generic_sample_program.midas')">Open</button> 474 <h3>Stack demo</h3> 475 A simple example program with recursion. 476 </div> 477 </section> 478 </div> 479 <div class="popup" id="errorPopup"> 480 <h2>Error <button class="popupCloseButton" onclick="Control.hidePopup(this.parentElement.parentElement.id);">x</button></h2> 481 <section id="errors"> 482 483 </section> 484 </div> 485 </div> 486 </div> 487 488 489 490
490<script type="text/javascript" src="./_js/setZeroTimeout.js"></script>
490 491
491<script type="text/javascript" src="./_js/loadFile.js"></script>
491 492 493
493<script type="text/javascript" src="./_js/Config.js"></script>
493 494 495
495<script type="text/javascript" src="./_js/Conversions.js"></script>
495 496
496<script type="text/javascript" src="./_js/Register.js"></script>
496 497
497<script type="text/javascript" src="./_js/Flag.js"></script>
497 498
498<script type="text/javascript" src="./_js/Mem.js"></script>
498 499
499<script type="text/javascript" src="./_js/Mirac.js"></script>
499 500
500<script type="text/javascript" src="./_js/ALU.js"></script>
500 501 502
502<script type="text/javascript" src="./_js/OctalDisplay.js"></script>
502 503
503<script type="text/javascript" src="./_js/DotMatrix.js"></script>
503 504
504<script type="text/javascript" src="./_js/AsciiDisplay.js"></script>
504 505
505<script type="text/javascript" src="./_js/Devices.js"></script>
505 506 507
507<script type="text/javascript" src="./_js/Ins.js"></script>
507 508
508<script type="text/javascript" src="./_js/Opcode.js"></script>
508 509
509<script type="text/javascript" src="./_js/Opcodes.js"></script>
509 510 511
511<script type="text/javascript" src="./_js/Assembler.js"></script>
511 512
512<script type="text/javascript" src="./_js/Control.js"></script>
512 513
513<script type="text/javascript" src="./_js/Editor.js"></script>
513 514
514<script type="text/javascript" src="./_js/Emulator.js"></script>
514 515 </body> 516</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.