mirror of
https://github.com/trebonian/visual6502.git
synced 2024-12-21 21:29:16 +00:00
371 lines
21 KiB
HTML
371 lines
21 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<head>
|
|
<title>Visual 6502 in JavaScript</title>
|
|
<style type="text/css">
|
|
/*
|
|
Copyright (c) 2010 Brian Silverman, Barry Silverman, Ed Spittles
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
*/
|
|
|
|
body {
|
|
background: white;
|
|
color: black;
|
|
font-family :Verdana, Arial, Helvetica, Sans-Serif;
|
|
font-size: 12px;
|
|
}
|
|
|
|
#title {
|
|
font-size: 30px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
div.frame {
|
|
margin-left: 10px;
|
|
min-width: 1120px; /* ugh - prevent memtable flowing underneath chip */
|
|
}
|
|
|
|
div.leftcolumn {
|
|
width: 804px; /* ugh - matches the div.chip width + border */
|
|
}
|
|
|
|
div.rightcolumn {
|
|
padding-left: 8px;
|
|
}
|
|
|
|
div.footer {
|
|
clear: both;
|
|
padding-top: 10px;
|
|
}
|
|
|
|
div.nochip {
|
|
display:none;
|
|
}
|
|
|
|
div#chipsurround {
|
|
height: 600px; /* matches the div.chip height */
|
|
}
|
|
|
|
div.chip {
|
|
background: lightgray;
|
|
border: 2px solid gray;
|
|
position: absolute; /* must be absolute to contain the canvas */
|
|
width: 800px;
|
|
height: 600px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
canvas.chip {
|
|
position: absolute;
|
|
width: 600px; /* square chip image same height as div.chip */
|
|
height: 600px; /* square */
|
|
}
|
|
|
|
div.twobuttons{
|
|
float:left;
|
|
}
|
|
|
|
div.morebuttons{
|
|
float:left;
|
|
}
|
|
|
|
div.buttons{
|
|
/* top: -5px; */
|
|
}
|
|
|
|
div.status {
|
|
clear: left;
|
|
padding-top: 10px;
|
|
padding-bottom: 10px;
|
|
font-family: monospace;
|
|
font-size: 12px;
|
|
}
|
|
|
|
img.navbutton {
|
|
border: 0px;
|
|
}
|
|
|
|
img.navplay {
|
|
margin-right: 5px;
|
|
border: 0px;
|
|
}
|
|
|
|
img.navstop {
|
|
position: absolute;
|
|
border: 0px;
|
|
}
|
|
|
|
span.expertcheckbox {
|
|
margin-left: 20px;
|
|
}
|
|
|
|
table.memtable {
|
|
font-family: monospace;
|
|
font-size: 12px;
|
|
border-spacing: 0px;
|
|
overflow: auto;
|
|
}
|
|
|
|
div#layoutControlPanel{
|
|
display:none;
|
|
margin-top: 2px;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
div#expertControlPanel{
|
|
display:none;
|
|
}
|
|
|
|
span.animatebox{
|
|
border:thin solid;
|
|
padding:2px;
|
|
border-color:gray;
|
|
}
|
|
|
|
a#linkHere{
|
|
padding:2px;
|
|
}
|
|
|
|
textarea#consolebox{
|
|
font-family:courier,monospace;
|
|
border: 1px solid gray;
|
|
margin: 2px;
|
|
padding: 2px;
|
|
width: 80em;
|
|
}
|
|
|
|
div#logstreamscroller{
|
|
overflow:auto;
|
|
}
|
|
|
|
table.logstream {
|
|
font-family: monospace;
|
|
font-size: 12px;
|
|
border-collapse: collapse;
|
|
text-align:center;
|
|
}
|
|
|
|
td {
|
|
padding-left: 3px;
|
|
padding-right: 3px;
|
|
}
|
|
|
|
td.header {
|
|
background-color: rgb(187, 204, 255); /* medium-dark blue */
|
|
}
|
|
|
|
td.oddcol {
|
|
background-color: rgb(227, 233, 255); /* light blue */
|
|
}
|
|
|
|
td.oddrow {
|
|
background-color: rgb(207, 218, 255); /* medium blue */
|
|
}
|
|
|
|
td.oddrowcol {
|
|
background-color: rgb(227, 233, 255); /* light blue */
|
|
}
|
|
|
|
/* Splitter */
|
|
#frame {
|
|
height: 750px;
|
|
}
|
|
|
|
div.leftcolumn, div.rightcolumn, {
|
|
overflow: auto;
|
|
}
|
|
|
|
div#righttopdiv, div#tracingdiv {
|
|
overflow: auto;
|
|
background-color: white;
|
|
}
|
|
|
|
div.rightcolumn {
|
|
background-color: white;
|
|
}
|
|
|
|
.vsplitbar {
|
|
width: 5px;
|
|
background: #aaa;
|
|
}
|
|
|
|
.vsplitbar {
|
|
width: 6px;
|
|
background: #669 url(data:image/gif;base64,R0lGODlhAgAgAOcAAHNxbb+8tuzr6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAACACAAAAgbAAMIHEiwYAABABIKRKjwYEIACx9GbGiwYsGAADs=) no-repeat center;
|
|
}
|
|
|
|
.vsplitbar:hover, .vsplitbar.active {
|
|
background: #c66 url(data:image/gif;base64,R0lGODlhAgAgAOcAAHNxbb+8tuzr6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAACACAAAAgbAAMIHEiwYAABABIKRKjwYEIACx9GbGiwYsGAADs=) no-repeat center;
|
|
opacity: 0.7;
|
|
filter: alpha(opacity=70); /* IE */
|
|
background: #c99;
|
|
}
|
|
|
|
.hsplitbar {
|
|
height: 6px;
|
|
background: #669 url(data:image/gif;base64,R0lGODlhIAACAOcAAHNxbb+8tuzr6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAgAAIAAAgfAAMIHChQAIAABhEeTJiQoMOHAgEclBiAosWDEAUGBAA7) no-repeat center;
|
|
}
|
|
|
|
.hsplitbar.active, .hsplitbar:hover {
|
|
background: #c66 url(data:image/gif;base64,R0lGODlhIAACAOcAAHNxbb+8tuzr6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAgAAIAAAgfAAMIHChQAIAABhEeTJiQoMOHAgEclBiAosWDEAUGBAA7) no-repeat center;
|
|
}
|
|
|
|
span#plain {
|
|
display: block;
|
|
margin-bottom: 4px;
|
|
}
|
|
</style>
|
|
<script src="expert-allinone.js"></script>
|
|
|
|
<script type="text/javascript">
|
|
function handleOnload() {
|
|
/MSIE (\d+\.\d+);/.test(navigator.appVersion);
|
|
IEVersion=Number(RegExp.$1);
|
|
if((navigator.appName == 'Microsoft Internet Explorer') && (IEVersion<9)){
|
|
document.getElementById('browsertrouble').innerHTML=
|
|
'<p>Sorry, '+navigator.appName+' not supported - showing you a picture instead!</p>';
|
|
document.getElementById('frame').innerHTML='<a href="browsertrouble.html"><img src="images/jssim2.png" style="border:10px"></a>';
|
|
}else{
|
|
setTimeout(setup,200);
|
|
}
|
|
};
|
|
|
|
// initialise splitter (built on jquery)
|
|
$().ready(function(){
|
|
$("#frame").splitter({
|
|
type: "v",
|
|
outline: true,
|
|
minLeft: 20,
|
|
sizeLeft: 810,
|
|
resizeToWidth: true,
|
|
anchorToWindow: true,
|
|
});
|
|
$("#rightcolumn").splitter({
|
|
type: "h",
|
|
outline: true,
|
|
sizeBottom: 180,
|
|
minTop: 100,
|
|
});
|
|
});
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body onload="handleOnload();">
|
|
<span id="plain">
|
|
<a href="http://www.visual6502.org/faq.html">FAQ</a>
|
|
<a href="http://blog.visual6502.org">Blog</a>
|
|
<a href="http://www.visual6502.org/links.html">Links</a>
|
|
<a href="http://github.com/trebonian/visual6502">Source</a>
|
|
<a href="http://www.6502asm.com/">6502asm assembler</a>
|
|
<a href="http://www.e-tradition.net/bytes/6502/disassembler.html">e-tradition disassembler</a>
|
|
</span>
|
|
<div class="frame" id="frame">
|
|
<div class="leftcolumn" id="leftcolumn">
|
|
<div id="chipsurround" tabindex="1">
|
|
<div class="chip" id="chip">
|
|
<span id="waiting">Please wait, graphics initialising...</span>
|
|
<canvas class="chip" id="chipbg"></canvas>
|
|
<canvas class="chip" id="overlay"></canvas>
|
|
<canvas class="chip" id="hilite"></canvas>
|
|
<canvas class="chip" id="hitbuffer"></canvas>
|
|
</div>
|
|
</div> <!-- chipsurround -->
|
|
<div class="nochip" id="nochip">
|
|
<form>
|
|
<input type="button" value="Show chip layout" onclick="updateChipLayoutVisibility(true)" />
|
|
</form>
|
|
</div>
|
|
<div id="layoutControlPanel">
|
|
Use 'z' or '>' to zoom in, 'x' or '<' to zoom out, click to probe signals and drag to pan.
|
|
<form id="updateShow"> Show:
|
|
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(diffusion)
|
|
<input type="checkbox" name="3" id="updateShow3" onchange="updateShow(this.name,this.checked)" />(grounded diffusion)
|
|
<input type="checkbox" name="4" id="updateShow4" onchange="updateShow(this.name,this.checked)" />(powered diffusion)
|
|
<input type="checkbox" name="5" id="updateShow5" onchange="updateShow(this.name,this.checked)" />(polysilicon)
|
|
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" />(metal)
|
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
|
</form>
|
|
<form action="javascript:hiliteNodeList();">
|
|
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
|
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
|
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
|
<span class="animatebox">
|
|
Animate during simulation:
|
|
<input type="checkbox" id="animateModeCheckbox" onchange="updateChipLayoutAnimation(this.checked)"
|
|
/></span>
|
|
</form>
|
|
<form>
|
|
<input type="button" value="Hide Chip Layout" onclick="updateChipLayoutVisibility(false)" />
|
|
<a href="" id="linkHere" >Link to this location</a>
|
|
</form>
|
|
</div>
|
|
</div> <!-- closing leftcolumn -->
|
|
<div class="rightcolumn" id="rightcolumn">
|
|
<div id="righttopdiv">
|
|
<div class = "buttons">
|
|
<div class="twobuttons">
|
|
<a href ="javascript:stopChip()" id="stop"><img class="navstop" src="data:image/png;base64,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" title="stop"></a>
|
|
<a href ="javascript:runChip()" id="start"><img class="navplay" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFMSURBVDhPxZXblURAEIY7AzIgBBnYDKQgBBmQARmQASHIgAzIgAx2P6f70PRlzNPW00x31Xfq1j/xa7N937uuy/P8R7OiKIZhsPpzKB4XIKqqCsNQOIwrHHB7BN5A8zzHcexC6OdJkuCssy4QF55ETDrOOkuBvqVILqx1XWVeCkSqbyoyfRjGBWJAVkoURW/ohKuMXA0uy7Lv+yAI/DiqOUB0x+UHCI9t27Is87PolGiaxg+SLWjb1pMaiyrYrjcgWMuypGlqdT4g70EytbquTdY/gTxdPxp99MlhcmrSpmnyrNU4joJ3/BEE0TN+HopaSHTH6kc85bgmdYagUwp0rJPNQHxca9KR2qQerWcJ/DtNm2+vnz+uAj0gQs5p3BTyK5ZOuUo7wWzDR51ELcyvwFP8IdI8KrdKHYeoj6n8lozO1CSRTTtNvzJ//wGssktlBFiR0wAAAABJRU5ErkJggg==" title="run"></a>
|
|
</div>
|
|
<div class="morebuttons">
|
|
<a href ="javascript:resetChip()"><img class="navbutton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADUSURBVHjaxNSxSkJRGMDx31UjKBDcmloKpKkafQTBqU3HnsShoSVw8QV8gyBoc7GXaEnBoZbmyLDbcg9IpF3vPeAH//UHB77zJWma2sW0cBkLq2KEYSzwGt/4wlVZ7BzvSLPmOC2KNfC0goUecVAEHP6BhW62xXpYbgA/0cmLXeB1Axaa4eQ/7BCTHFjoAXvrsASDLbBQfx3YxaIA+IH2b+wMbwWw0AuOA1bHuAQWusd+FbfZc8tOM/ueuVYkb8813OEoW+QyU8M0iX1gK7EvcXTwZwCOzI551u9wnQAAAABJRU5ErkJggg==" title="reset"></a>
|
|
<a href ="javascript:stepBack()"><img class="navbutton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADpSURBVHjarNQ/K4VRHMDxT1Kmm9dgv6UYlMkLoCuzlMHrsCgZlMHg2ikGq1KYvASDkomXQAb8LM9TpwePe55zv3WW0+nb+Xb+iAgRoQPreMF+7YgIOgh7OMAXAmepcDJzV30MsZjMfaQLJjJkG7huyH4yQnIPh1Xeb+MkJ3m2SlwYNaMteRM3ObK/kqdx1JKYlTyHY8zrSJq8hbsSWVP4ijeFpMLT6o7djksID1jGXvMFlJxyzRqec0+57R5eYAlXJclNHrGKHXyWJjcZ4Om/5Nz/cAaX4xTCFLbxXgnPS4U1K7jHbir8HgAtx8meSMRH3QAAAABJRU5ErkJggg==" title="back"></a>
|
|
<a href ="javascript:stepForward()"><img class="navbutton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAADsSURBVHjarNU9SgNRFMXxH0FIJdmIIGghuIYEswARLFJowC3YCGIRSJHCDVjEwloCSSrBwtZCCLHKEhQLddLMhPAwycw8L5ziffDnnMflPkmSyIQOZjhWsBaMANhHgl90sR0LvEuBmZ6wUwRY2XDvEEOcFM6+wuGyeuueIG/kUM/YjYkc1gFGOP2PyKFuUYuNHOoFezGRw9pPW6uVbcQC4RMf2WIrEjbGGd5iHX7jBvVlWFmHM1zg4a/DosAB2pisupA38g+u0FwHy9vYUxzlnQmbIj/iHO9lp8196uoLl6jGDthrvKJR9guYDwCRfOTGEZMQ+QAAAABJRU5ErkJggg==" title="forward"></a>
|
|
<a href ="javascript:goUntilSyncOrWrite()"><img class="navbutton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAAAAACo4kLRAAABBklEQVQYlW2QvUoDYRBFz11Xg0XwDfwNpoqmsFmIICjYKDa+gNailYUgKAGLBBsL6+BbCP4XUZRgYbALdiGdhQGFbPYbC9c1YKYZOFwuc0bG//GaJw0M2qdPGFxv3wHUppZfQ2fNmVyt4+xguGJmHtHV7osgqu9UndlXG/BQdLnXcqDH/Tr66cSse7Hx7DB3v3kbxlA4booNcNQP3wDwAQjPPwC61VScBLDw4R0g+vyDBp0WJB5evAfSvUaAEMEoQowl0DS4cgQmbz7o6VwtZwALjqd/oSiUsyDypbnEyF8/mxDYUiWQxccPLRbHBf5sKafY3U8vbGUFqcJaXjCZGQHU9/N9GN97qluZ9jH/GAAAAABJRU5ErkJggg==" title="step"></a>
|
|
<a href ="javascript:goFor()"><img class="navbutton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAAAAACo4kLRAAABCElEQVQYlXXQP0tCcRjF8e/z80JoDibZPzIj5xobegWBu4OSTQYhNERgLQqGQwQREZVTQWtBr6D34uxgISoW3dNw722RzvjhOXB4TEzHwcvrBOD9cUh0IZWz9xNfamba/R9JkpBKZJ5HvhrMtQe+JMmB0Wu9fcvo3zyNFNZLmFu4HTcwl6oPJckDQ+pdpr+QPh9ylQSGVAaI5QuA2cr1QIoQcoBhiasPub/FXUAwvusSoZECMEsd5wM0M9Z2MIP02X4iQInsxRaSJc9rcQvrttoqzoBl6tU44AGw2Cg6YPakGiNAsdwpGGK+eRgUPXDrp7sObOmo4izCze09D9g4qCUt3PfP56fzCzEeY2myljT2AAAAAElFTkSuQmCC" title="fastforward"></a>
|
|
</div>
|
|
<div style="float:right;">
|
|
<a href="http://visual6502.org/wiki/index.php?title=JssimUserHelp" target="_blank">User Guide</a>
|
|
|
|
</div>
|
|
</div> <!-- buttons -->
|
|
<div class="status" id="status"><p>x: 0<br>y: 0</p>
|
|
</div> <!-- status -->
|
|
|
|
<div id="memtablediv">
|
|
<table class="memtable" id="memtable" tabindex="2"></table>
|
|
</div>
|
|
</div> <!-- righttopdiv -->
|
|
|
|
<div id="tracingdiv">
|
|
<textarea id="consolebox">
|
|
click here and type if your program handles input
|
|
</textarea>
|
|
<div id="expertControlPanel" tabindex="3">
|
|
<form action="javascript:updateLogList()">
|
|
<input type="button" value="Trace more" onclick="updateLoglevel(++loglevel)" />
|
|
<input type="button" value="Trace less" onclick="updateLoglevel(--loglevel)" />
|
|
<input type="button" value="Trace these too:" onclick="updateLogList()" />
|
|
<input type="text" id="LogThese" name="LogThese" value="" />
|
|
<input type="button" value="Log Up/Down" onclick="updateLogDirection();" />
|
|
<input type="button" value="Clear Log" onclick="updateLoglevel(loglevel)" />
|
|
</form>
|
|
<br />
|
|
</div>
|
|
<div id="logstreamscroller">
|
|
<table class="logstream" id="logstream"></table>
|
|
</div>
|
|
</div>
|
|
</div> <!-- closing rightcolumn -->
|
|
</div> <!-- closing 'frame' div -->
|
|
</body>
|
|
</html>
|