mirror of
https://github.com/trebonian/visual6502.git
synced 2025-02-24 05:29:09 +00:00
attempt to get gh-pages into shape
This commit is contained in:
commit
a56ee40bd8
10
README
10
README
@ -1,10 +0,0 @@
|
|||||||
This is the javascript simulator from the visual5602.org project:
|
|
||||||
www.visual6502.org/JSSim
|
|
||||||
|
|
||||||
It includes a general purpose transistor-level simulator, layout browser,
|
|
||||||
and the data from a 6502 revD chip.
|
|
||||||
|
|
||||||
Note the various licenses and Copyright associated with each file.
|
|
||||||
|
|
||||||
Enjoy!
|
|
||||||
- The Visual 6502 Team
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>Visual 6502 in JavaScript</title>
|
<title>Visual 6502 in JavaScript</title>
|
||||||
<style type="text/css">@import "kiosk.css";</style>
|
<style type="text/css">@import "wires.css";</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
25
expert.css
25
expert.css
@ -153,31 +153,10 @@ div#logstreamscroller{
|
|||||||
table.logstream {
|
table.logstream {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
border-collapse: collapse;
|
border-spacing: 2px;
|
||||||
text-align:center;
|
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 */
|
/* Splitter */
|
||||||
#frame {
|
#frame {
|
||||||
height: 750px;
|
height: 750px;
|
||||||
@ -226,3 +205,5 @@ span#plain {
|
|||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
266
expert.html
266
expert.html
@ -2,237 +2,19 @@
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>Visual 6502 in JavaScript</title>
|
<title>Visual 6502 in JavaScript</title>
|
||||||
<style type="text/css">
|
<style type="text/css">@import "expert.css";</style>
|
||||||
/*
|
<script src="segdefs.js"></script>
|
||||||
Copyright (c) 2010 Brian Silverman, Barry Silverman, Ed Spittles
|
<script src="transdefs.js"></script>
|
||||||
|
<script src="nodenames.js"></script>
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
<script src="wires.js"></script>
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
<script src="expertWires.js"></script>
|
||||||
in the Software without restriction, including without limitation the rights
|
<script src="chipsim.js"></script>
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
<script src="memtable.js"></script>
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
<script src="macros.js"></script>
|
||||||
furnished to do so, subject to the following conditions:
|
<script src="testprogram.js"></script>
|
||||||
|
<script src="3rdparty/jquery-1.3.2.min.js"></script>
|
||||||
The above copyright notice and this permission notice shall be included in
|
<script src="3rdparty/jquery.cookie.js"></script>
|
||||||
all copies or substantial portions of the Software.
|
<script src="3rdparty/splitter.js"></script>
|
||||||
|
|
||||||
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">
|
<script type="text/javascript">
|
||||||
function handleOnload() {
|
function handleOnload() {
|
||||||
@ -294,7 +76,7 @@ $().ready(function(){
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div id="layoutControlPanel">
|
<div id="layoutControlPanel">
|
||||||
Use 'z' or '>' to zoom in, 'x' or '<' to zoom out, click to probe signals and drag to pan.
|
Use '>' to zoom in, '<' to zoom out, click to probe signals and drag to pan.
|
||||||
<form id="updateShow"> Show:
|
<form id="updateShow"> Show:
|
||||||
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(diffusion)
|
<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="3" id="updateShow3" onchange="updateShow(this.name,this.checked)" />(grounded diffusion)
|
||||||
@ -304,7 +86,7 @@ $().ready(function(){
|
|||||||
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(protection)
|
||||||
</form>
|
</form>
|
||||||
<form action="javascript:hiliteNodeList();">
|
<form action="javascript:hiliteNodeList();">
|
||||||
<input type="button" value="Find:" onclick="hiliteNodeList();" />
|
<input type="button" value="Highlight:" onclick="hiliteNodeList();" />
|
||||||
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
<input type="text" id="HighlightThese" name="HighlightThese" value="" />
|
||||||
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
<input type="button" value="Clear Highlighting" onclick="clearHighlight();" />
|
||||||
<span class="animatebox">
|
<span class="animatebox">
|
||||||
@ -322,19 +104,15 @@ $().ready(function(){
|
|||||||
<div id="righttopdiv">
|
<div id="righttopdiv">
|
||||||
<div class = "buttons">
|
<div class = "buttons">
|
||||||
<div class="twobuttons">
|
<div class="twobuttons">
|
||||||
<a href ="javascript:stopChip()" id="stop"><img class="navstop" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACHDwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZEsRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTsAIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQdli7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtFehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGXwzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNFhImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH554SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJVgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyCqbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiEj6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhGfDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFpB+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJyeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJCYVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQlnyfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48vvacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0CvpvfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15LWytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AAbWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0zllmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHWztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5sxybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPwYyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmRXVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNmWS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wlxqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33zaEb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2vTqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqbPhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavrXTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxSfNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAVhJREFUSEvdVtGxRTAQXeYVoANKUAIdKEEJStABJSiBDqiAAnwogQry9uRN7lxEguv+vDOTD2z2bDa7ZzmCQRZ0XUfTNMkFRFFEQRCQ7/u2rUQg0KFtW5GmKcgPF5OIsizFPM9HbsSOAMY2x1tSz/NEXddakhXBMAwiDENj1KYTZVm2I3kRIHJEYnJw5tuW5EXAF/excxXAe7okQVVVjzkHCS5fQRLgxZnjX7FB0ICDckRd61AUBfGlG2s9jmPtd+zr+55cJrA3yw0LrkhaluV7BIgJJO6N4C5t+QcEtiq5lI+NMRTX/RaBkvOfJEmINYhYi3bBjuN4+wCsyH970W15nj/ayRBNHk6ykyXBU0qqpAQBr7QID5CMK1pzZAtVfsdq4HyqqhhW2/G5G5mYanfUFYNGN5u1Qx+GyOOZCYeUIL1HcORNG9A0jRQtLFXK6B3UOUrc9uvyC1QWl/0IcPwQAAAAAElFTkSuQmCC" title="stop"></a>
|
<a href ="javascript:stopChip()" id="stop"><img class="navstop" src="images/stop.png" 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>
|
<a href ="javascript:runChip()" id="start"><img class="navplay" src="images/play.png" title="run"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="morebuttons">
|
<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:resetChip()"><img class="navbutton" src="images/up.png" 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:stepBack()"><img class="navbutton" src="images/prev.png" 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:stepForward()"><img class="navbutton" src="images/next.png" 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:goUntilSyncOrWrite()"><img class="navbutton" src="images/singlestep.png" 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>
|
<a href ="javascript:goFor()"><img class="navbutton" src="images/fastforward.png" 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>
|
||||||
</div> <!-- buttons -->
|
</div> <!-- buttons -->
|
||||||
<div class="status" id="status"><p>x: 0<br>y: 0</p>
|
<div class="status" id="status"><p>x: 0<br>y: 0</p>
|
||||||
|
186
expertWires.js
186
expertWires.js
@ -24,8 +24,6 @@ var centerx=300, centery=300;
|
|||||||
var zoom=1;
|
var zoom=1;
|
||||||
var dragMouseX, dragMouseY, moved;
|
var dragMouseX, dragMouseY, moved;
|
||||||
var statbox;
|
var statbox;
|
||||||
var findThese;
|
|
||||||
var labelThese=[];
|
|
||||||
|
|
||||||
// Some constants for the graphics presentation
|
// Some constants for the graphics presentation
|
||||||
// the canvas is embedded in an 800x600 clipping div
|
// the canvas is embedded in an 800x600 clipping div
|
||||||
@ -175,14 +173,6 @@ function setupParams(){
|
|||||||
} else if(name=="zoom" && parseInt(value)!=NaN){
|
} else if(name=="zoom" && parseInt(value)!=NaN){
|
||||||
zoom=parseInt(value);
|
zoom=parseInt(value);
|
||||||
} else
|
} else
|
||||||
// perform a search, highlight and zoom to object(s)
|
|
||||||
if(name=="find" && value.length>0){
|
|
||||||
findThese=value;
|
|
||||||
} else
|
|
||||||
// affix label with optional box to highlight an area of interest
|
|
||||||
if(name=="label" && value.length>0){
|
|
||||||
labelThese.push(value.split(","));
|
|
||||||
} else
|
|
||||||
// load a test program: Address, Data and Reset
|
// load a test program: Address, Data and Reset
|
||||||
if(name=="a" && parseInt(value,16)!=NaN){
|
if(name=="a" && parseInt(value,16)!=NaN){
|
||||||
userAddress=parseInt(value,16);
|
userAddress=parseInt(value,16);
|
||||||
@ -238,7 +228,7 @@ function updateChipLayoutAnimation(isOn){
|
|||||||
|
|
||||||
// these keyboard actions are primarily for the chip display
|
// these keyboard actions are primarily for the chip display
|
||||||
function handleKey(e){
|
function handleKey(e){
|
||||||
var c = e.charCode || e.keyCode;
|
var c = e.charCode;
|
||||||
c = String.fromCharCode(c);
|
c = String.fromCharCode(c);
|
||||||
if('<>?npZzx'.indexOf(c)==-1) return;
|
if('<>?npZzx'.indexOf(c)==-1) return;
|
||||||
if((c=='Z'||c=='x'||c=='<') && zoom>1) setZoom(zoom/1.2);
|
if((c=='Z'||c=='x'||c=='<') && zoom>1) setZoom(zoom/1.2);
|
||||||
@ -303,141 +293,35 @@ function recenter(){
|
|||||||
top: top+'px',
|
top: top+'px',
|
||||||
left: left+'px',
|
left: left+'px',
|
||||||
});
|
});
|
||||||
updateLinkHere();
|
document.getElementById('linkHere').href=location.pathname+"?"+whereAmIAsQuery();
|
||||||
}
|
|
||||||
|
|
||||||
function updateLinkHere(){
|
|
||||||
var target = location.pathname + "?nosim=t&";
|
|
||||||
var findlist = document.getElementById('HighlightThese').value.split(/[\s,]+/).join(",");
|
|
||||||
if (findlist != "")
|
|
||||||
target = target + "find=" + findlist + "&";
|
|
||||||
target = target + whereAmIAsQuery();
|
|
||||||
document.getElementById('linkHere').href=target;
|
|
||||||
}
|
|
||||||
|
|
||||||
// place a text label on the highlight layer
|
|
||||||
// with an optional box around an area of interest
|
|
||||||
// coordinates used are those reported by a click
|
|
||||||
// for example:
|
|
||||||
// boxLabel(['PD', 50, 8424, 3536, 9256, 2464])
|
|
||||||
// boxLabel(['IR', 50, 8432, 2332, 9124, 984])
|
|
||||||
// boxLabel(['PLA', 100, 1169, 2328, 8393, 934])
|
|
||||||
// boxLabel(['Y', 50, 2143, 8820, 2317, 5689])
|
|
||||||
// boxLabel(['X', 50, 2317, 8820, 2490, 5689])
|
|
||||||
// boxLabel(['S', 50, 2490, 8820, 2814, 5689])
|
|
||||||
// boxLabel(['ALU', 50, 2814, 8820, 4525, 5689])
|
|
||||||
// boxLabel(['DAdj', 40, 4525, 8820, 5040, 5689])
|
|
||||||
// boxLabel(['A', 50, 5040, 8820, 5328, 5689])
|
|
||||||
// boxLabel(['PC', 50, 5559, 8820, 6819, 5689])
|
|
||||||
// boxLabel(['ID', 50, 7365, 8820, 7676, 5689])
|
|
||||||
// boxLabel(['TimC', 40, 600, 1926, 1174, 604])
|
|
||||||
|
|
||||||
function flashBoxLabel(args) {
|
|
||||||
clearHighlight();
|
|
||||||
var callBack = function(){boxLabel(args);};
|
|
||||||
setTimeout(callBack, 400);
|
|
||||||
setTimeout(clearHighlight, 800);
|
|
||||||
setTimeout(callBack, 1200);
|
|
||||||
}
|
|
||||||
|
|
||||||
function boxLabel(args) {
|
|
||||||
var text = args[0];
|
|
||||||
var textsize = args[1];
|
|
||||||
var thickness = 1+ textsize / 20;
|
|
||||||
var boxXmin = args[2] * grCanvasSize / grChipSize;
|
|
||||||
var boxYmin = args[3] * grCanvasSize / grChipSize;
|
|
||||||
var boxXmax = args[4] * grCanvasSize / grChipSize;
|
|
||||||
var boxYmax = args[5] * grCanvasSize / grChipSize;
|
|
||||||
ctx.lineWidth = thickness;
|
|
||||||
ctx.font = textsize + 'px sans-serif';
|
|
||||||
ctx.fillStyle = '#ff0'; // yellow
|
|
||||||
ctx.fillStyle = '#f8f'; // magenta
|
|
||||||
ctx.fillStyle = '#fff'; // white
|
|
||||||
ctx.strokeStyle = '#fff'; // white
|
|
||||||
if(args.length>4){
|
|
||||||
ctxDrawBox(ctx, boxXmin, boxYmin, boxXmax, boxYmax);
|
|
||||||
// offset the text label to the interior of the box
|
|
||||||
boxYmin -= thickness * 2;
|
|
||||||
}
|
|
||||||
ctx.strokeStyle = '#fff'; // white
|
|
||||||
ctx.strokeStyle = '#000'; // black
|
|
||||||
ctx.lineWidth = thickness*2;
|
|
||||||
ctx.strokeText(text, boxXmin, boxYmin);
|
|
||||||
ctx.fillText(text, boxXmin, boxYmin);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var highlightThese;
|
var highlightThese;
|
||||||
|
|
||||||
// flash some set of nodes according to user input
|
// flash some set of nodes according to user input
|
||||||
// also zoom to fit those nodes (not presently optional)
|
|
||||||
function hiliteNodeList(){
|
function hiliteNodeList(){
|
||||||
var tmplist = document.getElementById('HighlightThese').value.split(/[\s,]+/);
|
var tmplist = document.getElementById('HighlightThese').value.split(/[\s,]+/);
|
||||||
if(tmplist.join("").length==0){
|
if(tmplist.length==0){
|
||||||
// request to highlight nothing, so switch off any signal highlighting
|
// request to highlight nothing, so switch off any signal highlighting
|
||||||
hiliteNode(-1);
|
hiliteNode(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
highlightThese = [];
|
highlightThese = [];
|
||||||
var seglist=[];
|
|
||||||
var report="";
|
|
||||||
for(var i=0;i<tmplist.length;i++){
|
for(var i=0;i<tmplist.length;i++){
|
||||||
// get a node number from a signal name or a node number
|
// get a node number from a signal name or a node number
|
||||||
var name = tmplist[i];
|
var name = tmplist[i];
|
||||||
var value = parseInt(tmplist[i]);
|
var value = parseInt(tmplist[i]);
|
||||||
if((value!=NaN) && (typeof nodes[value] != "undefined")) {
|
if((value!=NaN) && (typeof nodes[name] != "undefined")) {
|
||||||
highlightThese.push(value);
|
highlightThese.push(value);
|
||||||
report="node: " + value + ' ' + nodeName(value);
|
|
||||||
for(var s in nodes[value].segs)
|
|
||||||
seglist.push(nodes[value].segs[s]);
|
|
||||||
} else if(typeof nodenames[name] != "undefined") {
|
} else if(typeof nodenames[name] != "undefined") {
|
||||||
highlightThese.push(nodenames[name]);
|
highlightThese.push(nodenames[name]);
|
||||||
report="node: " + nodenames[name] + ' ' + name;
|
|
||||||
for(var s in nodes[nodenames[name]].segs)
|
|
||||||
seglist.push(nodes[nodenames[name]].segs[s]);
|
|
||||||
} else if(typeof transistors[name] != "undefined") {
|
|
||||||
// normally we push numbers: a non-number is a transistor name
|
|
||||||
highlightThese.push(name);
|
|
||||||
report="transistor: " + name;
|
|
||||||
seglist.push([
|
|
||||||
transistors[name].bb[0],transistors[name].bb[2],
|
|
||||||
transistors[name].bb[1],transistors[name].bb[3]
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
// allow match of underscore-delimited components, so
|
|
||||||
// SUMS and dpc17 both match the node dpc17_SUMS
|
|
||||||
for(var i in nodenames){
|
|
||||||
re=new RegExp("(^" + name + "_|_" + name + "$)");
|
|
||||||
if (re.test(i)){
|
|
||||||
value = nodenames[i];
|
|
||||||
highlightThese.push(value);
|
|
||||||
report="node: " + value + ' ' + nodeName(value);
|
|
||||||
for(var s in nodes[value].segs)
|
|
||||||
seglist.push(nodes[value].segs[s]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// invalid input: how to tell the user?
|
||||||
}
|
}
|
||||||
if(highlightThese.length==0){
|
if(highlightThese.length==0){
|
||||||
setStatus('Find: nothing found!','(Enter a list of nodenumbers, names or transistor names)');
|
// all input rejected: how to tell the user?
|
||||||
return;
|
return;
|
||||||
} else if (highlightThese.length==1){
|
|
||||||
setStatus('Find results:',report);
|
|
||||||
} else {
|
|
||||||
setStatus('Find: multiple objects found','(' + highlightThese.length + ' objects)');
|
|
||||||
}
|
}
|
||||||
var xmin=seglist[0][0], xmax=seglist[0][0];
|
|
||||||
var ymin=seglist[0][1], ymax=seglist[0][1];
|
|
||||||
for(var s in seglist){
|
|
||||||
for(var i=0;i<seglist[s].length;i+=2){
|
|
||||||
if(seglist[s][i]<xmin) xmin=seglist[s][i];
|
|
||||||
if(seglist[s][i]>xmax) xmax=seglist[s][i];
|
|
||||||
if(seglist[s][i+1]<ymin) ymin=seglist[s][i+1];
|
|
||||||
if(seglist[s][i+1]>ymax) ymax=seglist[s][i+1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
zoomToBox(xmin,xmax,ymin,ymax);
|
|
||||||
updateLinkHere();
|
|
||||||
clearHighlight(); // nullify the simulation overlay (orange/purple)
|
clearHighlight(); // nullify the simulation overlay (orange/purple)
|
||||||
hiliteNode(-1); // unhighlight all nodes
|
hiliteNode(-1); // unhighlight all nodes
|
||||||
setTimeout("hiliteNode(highlightThese);", 400);
|
setTimeout("hiliteNode(highlightThese);", 400);
|
||||||
@ -445,53 +329,22 @@ function hiliteNodeList(){
|
|||||||
setTimeout("hiliteNode(highlightThese);", 1200);
|
setTimeout("hiliteNode(highlightThese);", 1200);
|
||||||
}
|
}
|
||||||
|
|
||||||
// some notes on coordinates:
|
|
||||||
// the localx and localy functions return canvas coordinate offsets from the canvas window top left corner
|
|
||||||
// we divide the results by 'zoom' to get drawn coordinates useful in findNodeNumber
|
|
||||||
// to convert to reported user chip coordinates we multiply by grChipSize/600
|
|
||||||
// to compare to segdefs and transdefs coordinates we subtract 400 from x and subtract y from grChipSize
|
|
||||||
|
|
||||||
function handleClick(e){
|
function handleClick(e){
|
||||||
var x = localx(hilite, e.clientX)/zoom;
|
var x = localx(hilite, e.clientX)/zoom;
|
||||||
var y = localy(hilite, e.clientY)/zoom;
|
var y = localy(hilite, e.clientY)/zoom;
|
||||||
var w = findNodeNumber(x,y);
|
var w = findNodeNumber(x,y);
|
||||||
// convert to chip coordinates
|
if(e.shiftKey) hiliteNode(getNodeGroup(w));
|
||||||
|
else {var a=new Array(); a.push(w); hiliteNode(a);}
|
||||||
var cx = Math.round(x*grChipSize/600);
|
var cx = Math.round(x*grChipSize/600);
|
||||||
var cy = Math.round(y*grChipSize/600);
|
var cy = Math.round(y*grChipSize/600);
|
||||||
// prepare two lines of status report
|
|
||||||
var s1='x: ' + cx + ' y: ' + cy;
|
|
||||||
var s2='node: ' + w + ' ' + nodeName(w);
|
|
||||||
if(w==-1) {
|
if(w==-1) {
|
||||||
setStatus(s1); // no node found, so report only coordinates
|
setStatus('x: '+cx, 'y: '+cy);
|
||||||
return;
|
} else {
|
||||||
}
|
var s1='x: ' + cx + ' y: ' + cy;
|
||||||
// we have a node, but maybe we clicked over a transistor
|
var s2='node: ' + w + ' ' + nodeName(w);
|
||||||
var nodelist=[w];
|
|
||||||
// match the coordinate against transistor gate bounding boxes
|
|
||||||
x=cx-400;
|
|
||||||
y=grChipSize-cy;
|
|
||||||
for(var i=0;i<nodes[w].gates.length;i++){
|
|
||||||
var xmin=nodes[w].gates[i].bb[0], xmax=nodes[w].gates[i].bb[1];
|
|
||||||
var ymin=nodes[w].gates[i].bb[2], ymax=nodes[w].gates[i].bb[3];
|
|
||||||
if((x >= xmin) && (x <= xmax) && (y >= ymin) && (y <= ymax)){
|
|
||||||
// only one match at most, so we replace rather than push
|
|
||||||
nodelist=[nodes[w].gates[i].name];
|
|
||||||
s2='transistor: ' + nodes[w].gates[i].name + ' on ' + s2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if this is a shift-click, just find and highlight the pass-connected group
|
|
||||||
// and list the nodes (or nodenames, preferably)
|
|
||||||
if(e.shiftKey) {
|
|
||||||
getNodeGroup(w);
|
|
||||||
nodelist = group;
|
|
||||||
s2 = "nodegroup from " + s2 +
|
|
||||||
" (nodes: " +
|
|
||||||
group.map(function(x){return nodeName(x)?nodeName(x):x;}).join(",") +
|
|
||||||
")";
|
|
||||||
}
|
|
||||||
hiliteNode(nodelist);
|
|
||||||
setStatus(s1, s2);
|
setStatus(s1, s2);
|
||||||
if(ctrace) console.log(s1, s2);
|
if(ctrace) console.log(s1, s2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLoglevel(value){
|
function updateLoglevel(value){
|
||||||
@ -513,7 +366,7 @@ var consolebox;
|
|||||||
|
|
||||||
function setupConsole(){
|
function setupConsole(){
|
||||||
consolebox=document.getElementById('consolebox');
|
consolebox=document.getElementById('consolebox');
|
||||||
consolebox.onkeypress=function(e){consolegetc=e.charCode || e.keyCode;};
|
consolebox.onkeypress=function(e){consolegetc=e.charCode;};
|
||||||
}
|
}
|
||||||
|
|
||||||
var chipsurround;
|
var chipsurround;
|
||||||
@ -556,19 +409,8 @@ function setupChipLayoutGraphics(){
|
|||||||
refresh();
|
refresh();
|
||||||
document.getElementById('waiting').style.display = 'none';
|
document.getElementById('waiting').style.display = 'none';
|
||||||
setStatus('Ready!'); // would prefer chipStatus but it's not idempotent
|
setStatus('Ready!'); // would prefer chipStatus but it's not idempotent
|
||||||
// pre-fill the Find box if parameters supplied
|
|
||||||
if(typeof findThese != "undefined") {
|
|
||||||
document.getElementById('HighlightThese').value = findThese;
|
|
||||||
hiliteNodeList(); // will pan and zoom to fit
|
|
||||||
}
|
|
||||||
// pre-pan and zoom if requested (will override any zoom-to-fit by hiliteNodeList)
|
|
||||||
if(moveHereFirst!=null)
|
if(moveHereFirst!=null)
|
||||||
moveHere(moveHereFirst);
|
moveHere(moveHereFirst);
|
||||||
// draw any URL-requested labels and boxes
|
|
||||||
if(labelThese.length>0) {
|
|
||||||
for(var i=0;i<labelThese.length;i+=1)
|
|
||||||
flashBoxLabel(labelThese[i]);
|
|
||||||
}
|
|
||||||
// grant focus to the chip display to enable zoom keys
|
// grant focus to the chip display to enable zoom keys
|
||||||
chipsurround.focus();
|
chipsurround.focus();
|
||||||
chipsurround.onmousedown = function(e){mouseDown(e);};
|
chipsurround.onmousedown = function(e){mouseDown(e);};
|
||||||
|
@ -62,11 +62,11 @@ lots of RAM. If you have trouble, please <a href="browsertrouble.html">check com
|
|||||||
<br />
|
<br />
|
||||||
<span id="browsertrouble"></span>
|
<span id="browsertrouble"></span>
|
||||||
<br />
|
<br />
|
||||||
Keyboard controls: 'z' to zoom in, 'x' to zoom out, 'n' to step the simulation.
|
Hit '>' to zoom in, '<' to zoom out
|
||||||
<br />
|
<br />
|
||||||
Mouse controls: Left-click and drag to scroll around (when you're zoomed in.)
|
Left-click and drag to scroll around
|
||||||
<br />
|
<br />
|
||||||
More information in the <a href="http://visual6502.org/wiki/index.php?title=JssimUserHelp">User Guide<a>.
|
Enter your own program into the array of RAM
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
</span>
|
</span>
|
||||||
|
@ -88,7 +88,6 @@ function setup_part2(){
|
|||||||
|
|
||||||
function setup_part3(){
|
function setup_part3(){
|
||||||
loadProgram();
|
loadProgram();
|
||||||
writeTriggers={}; // kiosk mode does not handle I/O
|
|
||||||
initChip();
|
initChip();
|
||||||
document.getElementById('stop').style.visibility = 'hidden';
|
document.getElementById('stop').style.visibility = 'hidden';
|
||||||
go();
|
go();
|
||||||
@ -102,11 +101,11 @@ function setup_part3(){
|
|||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
function handleKey(e){
|
function handleKey(e){
|
||||||
var c = e.charCode || e.keyCode;
|
var c = e.charCode;
|
||||||
c = String.fromCharCode(c);
|
c = String.fromCharCode(c);
|
||||||
if('zx<>?np'.indexOf(c)==-1) return;
|
if('<>?np'.indexOf(c)==-1) return;
|
||||||
if((c=='x' || c=='<') && zoom>1) setZoom(zoom/1.2);
|
if(c=='<' && zoom>1) setZoom(zoom/1.2);
|
||||||
else if((c=='z' || c=='>') && zoom<grMaxZoom) setZoom(zoom*1.2);
|
else if(c=='>' && zoom<grMaxZoom) setZoom(zoom*1.2);
|
||||||
else if(c=='?') setZoom(1);
|
else if(c=='?') setZoom(1);
|
||||||
else if(c=='n') stepForward();
|
else if(c=='n') stepForward();
|
||||||
else if(c=='p') stepBack();
|
else if(c=='p') stepBack();
|
||||||
@ -169,10 +168,7 @@ function handleClick(e){
|
|||||||
var x = localx(hilite, e.clientX)/zoom;
|
var x = localx(hilite, e.clientX)/zoom;
|
||||||
var y = localy(hilite, e.clientY)/zoom;
|
var y = localy(hilite, e.clientY)/zoom;
|
||||||
var w = findNodeNumber(x,y);
|
var w = findNodeNumber(x,y);
|
||||||
if(e.shiftKey) {
|
if(e.shiftKey) hiliteNode(getNodeGroup(w));
|
||||||
getNodeGroup(w);
|
|
||||||
hiliteNode(group);
|
|
||||||
}
|
|
||||||
else {var a=new Array(); a.push(w); hiliteNode(a);}
|
else {var a=new Array(); a.push(w); hiliteNode(a);}
|
||||||
var cx = Math.round(x*grChipSize/600);
|
var cx = Math.round(x*grChipSize/600);
|
||||||
var cy = Math.round(y*grChipSize/600);
|
var cy = Math.round(y*grChipSize/600);
|
||||||
|
42
macros.js
42
macros.js
@ -262,7 +262,7 @@ function readPstring(){
|
|||||||
result = (isNodeHigh(nodenames['p7'])?'N':'n') +
|
result = (isNodeHigh(nodenames['p7'])?'N':'n') +
|
||||||
(isNodeHigh(nodenames['p6'])?'V':'v') +
|
(isNodeHigh(nodenames['p6'])?'V':'v') +
|
||||||
'‑' + // non-breaking hyphen
|
'‑' + // non-breaking hyphen
|
||||||
(isNodeHigh(nodenames['p4'])?'B':'b') +
|
(isNodeHigh(nodenames['p3'])?'B':'b') +
|
||||||
(isNodeHigh(nodenames['p3'])?'D':'d') +
|
(isNodeHigh(nodenames['p3'])?'D':'d') +
|
||||||
(isNodeHigh(nodenames['p2'])?'I':'i') +
|
(isNodeHigh(nodenames['p2'])?'I':'i') +
|
||||||
(isNodeHigh(nodenames['p1'])?'Z':'z') +
|
(isNodeHigh(nodenames['p1'])?'Z':'z') +
|
||||||
@ -328,9 +328,9 @@ function busToString(busname){
|
|||||||
if(busname=='State')
|
if(busname=='State')
|
||||||
return listActiveTCStates();
|
return listActiveTCStates();
|
||||||
if(busname=='Execute')
|
if(busname=='Execute')
|
||||||
return dis6502toHTML(readBits('ir',8));
|
return dis6502[readBits('ir',8)];
|
||||||
if(busname=='Fetch')
|
if(busname=='Fetch')
|
||||||
return isNodeHigh(nodenames['sync'])?dis6502toHTML(readDataBus()):"";
|
return isNodeHigh(nodenames['sync'])?dis6502[readDataBus()]:'';
|
||||||
if(busname=='plaOutputs')
|
if(busname=='plaOutputs')
|
||||||
// PLA outputs are mostly ^op- but some have a prefix too
|
// PLA outputs are mostly ^op- but some have a prefix too
|
||||||
// - we'll allow the x and xx prefix but ignore the #
|
// - we'll allow the x and xx prefix but ignore the #
|
||||||
@ -460,14 +460,12 @@ function chipStatus(){
|
|||||||
' SP:' + hexByte(readSP()) +
|
' SP:' + hexByte(readSP()) +
|
||||||
' ' + readPstring();
|
' ' + readPstring();
|
||||||
var machine3 =
|
var machine3 =
|
||||||
'Hz: ' + estimatedHz().toFixed(1);
|
'Hz: ' + estimatedHz().toFixed(1) +
|
||||||
if(typeof expertMode != "undefined") {
|
' Exec: ' + busToString('Execute') + '(' + busToString('State') + ')';
|
||||||
machine3 += ' Exec: ' + busToString('Execute') + '(' + busToString('State') + ')';
|
|
||||||
if(isNodeHigh(nodenames['sync']))
|
if(isNodeHigh(nodenames['sync']))
|
||||||
machine3 += ' (Fetch: ' + busToString('Fetch') + ')';
|
machine3 += ' (Fetch: ' + busToString('Fetch') + ')';
|
||||||
if(goldenChecksum != undefined)
|
if(goldenChecksum != undefined)
|
||||||
machine3 += " Chk:" + traceChecksum + ((traceChecksum==goldenChecksum)?" OK":" no match");
|
machine3 += " Chk:" + traceChecksum + ((traceChecksum==goldenChecksum)?" OK":" no match");
|
||||||
}
|
|
||||||
setStatus(machine1, machine2, machine3);
|
setStatus(machine1, machine2, machine3);
|
||||||
if (loglevel>0) {
|
if (loglevel>0) {
|
||||||
updateLogbox(logThese);
|
updateLogbox(logThese);
|
||||||
@ -554,7 +552,7 @@ function initLogbox(names){
|
|||||||
|
|
||||||
names=names.map(function(x){return x.replace(/^-/,'')});
|
names=names.map(function(x){return x.replace(/^-/,'')});
|
||||||
logStream = [];
|
logStream = [];
|
||||||
logStream.push("<td class=header>" + names.join("</td><td class=header>") + "</td>");
|
logStream.push("<td>" + names.join("</td><td>") + "</td>");
|
||||||
logbox.innerHTML = "<tr>"+logStream.join("</tr><tr>")+"</tr>";
|
logbox.innerHTML = "<tr>"+logStream.join("</tr><tr>")+"</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,26 +575,16 @@ function updateLogDirection(){
|
|||||||
// update the table of signal values, by prepending or appending
|
// update the table of signal values, by prepending or appending
|
||||||
function updateLogbox(names){
|
function updateLogbox(names){
|
||||||
var signals=[];
|
var signals=[];
|
||||||
var odd=true;
|
|
||||||
var bg;
|
|
||||||
var row;
|
|
||||||
|
|
||||||
for(var i in names){
|
for(i in names){
|
||||||
if(cycle % 4 < 2){
|
signals.push(busToString(names[i]));
|
||||||
bg = odd ? " class=oddcol":"";
|
|
||||||
} else {
|
|
||||||
bg = odd ? " class=oddrow":" class=oddrowcol";
|
|
||||||
}
|
}
|
||||||
signals.push("<td" + bg + ">" + busToString(names[i]) + "</td>");
|
|
||||||
odd =! odd;
|
|
||||||
}
|
|
||||||
row = "<tr>" + signals.join("") + "</tr>";
|
|
||||||
if(logboxAppend)
|
if(logboxAppend)
|
||||||
logStream.push(row);
|
logStream.push("<td>" + signals.join("</td><td>") + "</td>");
|
||||||
else
|
else
|
||||||
logStream.splice(1,0,row);
|
logStream.splice(1,0,"<td>" + signals.join("</td><td>") + "</td>");
|
||||||
|
|
||||||
logbox.innerHTML = logStream.join("");
|
logbox.innerHTML = "<tr>"+logStream.join("</tr><tr>")+"</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMem(){
|
function getMem(){
|
||||||
@ -622,14 +610,6 @@ function adler32(x){
|
|||||||
return (0x100000000+(b<<16)+a).toString(16).slice(-8);
|
return (0x100000000+(b<<16)+a).toString(16).slice(-8);
|
||||||
}
|
}
|
||||||
|
|
||||||
// sanitised opcode for HTML output
|
|
||||||
function dis6502toHTML(byte){
|
|
||||||
var opcode=dis6502[byte];
|
|
||||||
if(typeof opcode == "undefined")
|
|
||||||
return "unknown"
|
|
||||||
return opcode.replace(/ /,' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
// opcode lookup for 6502 - not quite a disassembly
|
// opcode lookup for 6502 - not quite a disassembly
|
||||||
// javascript derived from Debugger.java by Achim Breidenbach
|
// javascript derived from Debugger.java by Achim Breidenbach
|
||||||
var dis6502={
|
var dis6502={
|
||||||
|
279
nodenames.js
279
nodenames.js
@ -114,26 +114,14 @@ pchp4: 820,
|
|||||||
pchp5: 33,
|
pchp5: 33,
|
||||||
pchp6: 751,
|
pchp6: 751,
|
||||||
pchp7: 535,
|
pchp7: 535,
|
||||||
// machine state: status register (not the storage nodes)
|
p0: 687, // machine state: status register
|
||||||
p0: 32, // C bit of status register (storage node)
|
p1: 1444,
|
||||||
p1: 627, // Z bit of status register (storage node)
|
p2: 1421,
|
||||||
p2: 1553, // I bit of status register (storage node)
|
p3: 439,
|
||||||
p3: 348, // D bit of status register (storage node)
|
p4: 1119, // there is no bit4 in the status register!
|
||||||
p4: 1119, // there is no bit4 in the status register! (not a storage node)
|
p5: -1, // there is no bit5 in the status register!
|
||||||
p5: -1, // there is no bit5 in the status register! (not a storage node)
|
p6: 77,
|
||||||
p6: 77, // V bit of status register (storage node)
|
p7: 1370,
|
||||||
p7: 1370, // N bit of status register (storage node)
|
|
||||||
|
|
||||||
// internal bus: status register outputs for push P
|
|
||||||
Pout0: 687,
|
|
||||||
Pout1: 1444,
|
|
||||||
Pout2: 1421,
|
|
||||||
Pout3: 439,
|
|
||||||
Pout4: 1119, // there is no bit4 in the status register!
|
|
||||||
Pout5: -1, // there is no bit5 in the status register!
|
|
||||||
Pout6: 77,
|
|
||||||
Pout7: 1370,
|
|
||||||
|
|
||||||
s0: 1403, // machine state: stack pointer
|
s0: 1403, // machine state: stack pointer
|
||||||
s1: 183,
|
s1: 183,
|
||||||
s2: 81,
|
s2: 81,
|
||||||
@ -159,28 +147,12 @@ notir5: 1394,
|
|||||||
notir6: 895,
|
notir6: 895,
|
||||||
notir7: 1320,
|
notir7: 1320,
|
||||||
irline3: 996, // internal signal: PLA input - ir0 AND ir1
|
irline3: 996, // internal signal: PLA input - ir0 AND ir1
|
||||||
clock1: 1536, // internal state: timing control aka #T0
|
clock1: 1536, // internal state: timing control
|
||||||
clock2: 156, // internal state: timing control aka #T+
|
clock2: 156, // internal state: timing control
|
||||||
t2: 971, // internal state: timing control
|
t2: 971, // internal state: timing control
|
||||||
t3: 1567,
|
t3: 1567,
|
||||||
t4: 690,
|
t4: 690,
|
||||||
t5: 909,
|
t5: 909,
|
||||||
noty0: 1025, // datapath state: not Y register
|
|
||||||
noty1: 1138,
|
|
||||||
noty2: 1484,
|
|
||||||
noty3: 184,
|
|
||||||
noty4: 565,
|
|
||||||
noty5: 981,
|
|
||||||
noty6: 1439,
|
|
||||||
noty7: 1640,
|
|
||||||
notx0: 987, // datapath state: not X register
|
|
||||||
notx1: 1434,
|
|
||||||
notx2: 890,
|
|
||||||
notx3: 1521,
|
|
||||||
notx4: 485,
|
|
||||||
notx5: 1017,
|
|
||||||
notx6: 730,
|
|
||||||
notx7: 1561,
|
|
||||||
nots0: 418, // datapath state: not stack pointer
|
nots0: 418, // datapath state: not stack pointer
|
||||||
nots1: 1064,
|
nots1: 1064,
|
||||||
nots2: 752,
|
nots2: 752,
|
||||||
@ -213,7 +185,7 @@ sb4: 1405,
|
|||||||
sb5: 166,
|
sb5: 166,
|
||||||
sb6: 1336,
|
sb6: 1336,
|
||||||
sb7: 1001,
|
sb7: 1001,
|
||||||
notalu0: 394, // datapath state: alu output storage node (inverse) aka #ADD0
|
notalu0: 394, // datapath state: alu output storage node (inverse)
|
||||||
notalu1: 697,
|
notalu1: 697,
|
||||||
notalu2: 276,
|
notalu2: 276,
|
||||||
notalu3: 495,
|
notalu3: 495,
|
||||||
@ -221,7 +193,7 @@ notalu4: 1490,
|
|||||||
notalu5: 893,
|
notalu5: 893,
|
||||||
notalu6: 68,
|
notalu6: 68,
|
||||||
notalu7: 1123,
|
notalu7: 1123,
|
||||||
alu0: 401, // datapath signal: ALU output aka ADD0out
|
alu0: 401, // datapath signal: ALU output
|
||||||
alu1: 872,
|
alu1: 872,
|
||||||
alu2: 1637,
|
alu2: 1637,
|
||||||
alu3: 1414,
|
alu3: 1414,
|
||||||
@ -238,7 +210,7 @@ dasb4: 1405, // same node as sb4
|
|||||||
dasb5: 263,
|
dasb5: 263,
|
||||||
dasb6: 679,
|
dasb6: 679,
|
||||||
dasb7: 1494,
|
dasb7: 1494,
|
||||||
adl0: 413, // internal bus: address low
|
adl0: 413, // internal state: address latch low
|
||||||
adl1: 1282,
|
adl1: 1282,
|
||||||
adl2: 1242,
|
adl2: 1242,
|
||||||
adl3: 684,
|
adl3: 684,
|
||||||
@ -246,7 +218,7 @@ adl4: 1437,
|
|||||||
adl5: 1630,
|
adl5: 1630,
|
||||||
adl6: 121,
|
adl6: 121,
|
||||||
adl7: 1299,
|
adl7: 1299,
|
||||||
adh0: 407, // internal bus: address high
|
adh0: 407, // internal state: address latch high
|
||||||
adh1: 52,
|
adh1: 52,
|
||||||
adh2: 1651,
|
adh2: 1651,
|
||||||
adh3: 315,
|
adh3: 315,
|
||||||
@ -254,7 +226,7 @@ adh4: 1160,
|
|||||||
adh5: 483,
|
adh5: 483,
|
||||||
adh6: 13,
|
adh6: 13,
|
||||||
adh7: 1539,
|
adh7: 1539,
|
||||||
idb0: 1108, // internal bus: data bus
|
idb0: 1108, // internal state: data buffer
|
||||||
idb1: 991,
|
idb1: 991,
|
||||||
idb2: 1473,
|
idb2: 1473,
|
||||||
idb3: 1302,
|
idb3: 1302,
|
||||||
@ -294,63 +266,17 @@ pd4: 369,
|
|||||||
pd5: 829,
|
pd5: 829,
|
||||||
pd6: 1669,
|
pd6: 1669,
|
||||||
pd7: 1690,
|
pd7: 1690,
|
||||||
// internal signals: predecode latch partial decodes
|
|
||||||
"PD-xxxx10x0": 1019,
|
|
||||||
"PD-1xx000x0": 1294,
|
|
||||||
"PD-0xx0xx0x": 365,
|
|
||||||
"PD-xxx010x1": 302,
|
|
||||||
"PD-n-0xx0xx0x": 125,
|
|
||||||
"#TWOCYCLE": 851,
|
|
||||||
"#TWOCYCLE.phi1": 792,
|
|
||||||
"ONEBYTE": 778,
|
|
||||||
|
|
||||||
abl0: 1096, // internal bus: address bus low latched data out (inverse of inverted storage node)
|
|
||||||
abl1: 376,
|
|
||||||
abl2: 1502,
|
|
||||||
abl3: 1250,
|
|
||||||
abl4: 1232,
|
|
||||||
abl5: 234,
|
|
||||||
abl6: 178,
|
|
||||||
abl7: 178,
|
|
||||||
"#ABL0": 153, // internal state: address bus low latched data out (storage node, inverted)
|
|
||||||
"#ABL1": 107,
|
|
||||||
"#ABL2": 707,
|
|
||||||
"#ABL3": 825,
|
|
||||||
"#ABL4": 364,
|
|
||||||
"#ABL5": 1513,
|
|
||||||
"#ABL6": 1307,
|
|
||||||
"#ABL7": 28,
|
|
||||||
abh0: 1429, // internal bus: address bus high latched data out (inverse of inverted storage node)
|
|
||||||
abh1: 713,
|
|
||||||
abh2: 287,
|
|
||||||
abh3: 422,
|
|
||||||
abh4: 1143,
|
|
||||||
abh5: 775,
|
|
||||||
abh6: 997,
|
|
||||||
abh7: 489,
|
|
||||||
"#ABH0": 1062, // internal state: address bus high latched data out (storage node, inverted)
|
|
||||||
"#ABH1": 907,
|
|
||||||
"#ABH2": 768,
|
|
||||||
"#ABH3": 92,
|
|
||||||
"#ABH4": 668,
|
|
||||||
"#ABH5": 1128,
|
|
||||||
"#ABH6": 289,
|
|
||||||
"#ABH7": 429,
|
|
||||||
|
|
||||||
notRdy0: 248, // internal signal: global pipeline control
|
notRdy0: 248, // internal signal: global pipeline control
|
||||||
Reset0: 67, // internal signal: retimed reset from pin
|
Reset0: 67, // internal signal: retimed reset from pin
|
||||||
C1x5Reset: 926, // retimed and pipelined reset in progress
|
C1x5Reset: 926, // retimed and pipelined reset in progress
|
||||||
notRnWprepad: 187, // internal signal: to pad, yet to be inverted and retimed
|
notRnWprepad: 187, // internal signal: to pad, yet to be inverted and retimed
|
||||||
RnWstretched: 353, // internal signal: control datapad output drivers, aka TRISTATE
|
RnWstretched: 353, // internal signal: control datapad output drivers
|
||||||
"#DBE": 1035, // internal signal: formerly from DBE pad (6501)
|
|
||||||
cp1: 710, // internal signal: clock phase 1
|
cp1: 710, // internal signal: clock phase 1
|
||||||
cclk: 943, // unbonded pad: internal non-overlappying phi2
|
cclk: 943, // unbonded pad: internal non-overlappying phi2
|
||||||
fetch: 879, // internal signal
|
fetch: 879, // internal signal
|
||||||
clearIR: 1077, // internal signal
|
clearIR: 1077, // internal signal
|
||||||
D1x1: 827, // internal signal: interrupt handler related
|
D1x1: 827, // internal signal: interrupt handler related
|
||||||
H1x1: 1042, // internal signal: drive status byte onto databus
|
H1x1: 1042, // internal signal: drive status byte onto databus
|
||||||
"brk-done": 1382, // internal signal: interrupt handler related
|
|
||||||
INTG: 1350, // internal signal: interrupt handler related
|
|
||||||
|
|
||||||
// internal signal: pla outputs block 1 (west/left edge of die)
|
// internal signal: pla outputs block 1 (west/left edge of die)
|
||||||
// often 130 pla outputs are mentioned - we have 131 here
|
// often 130 pla outputs are mentioned - we have 131 here
|
||||||
@ -508,36 +434,11 @@ INTG: 1350, // internal signal: interrupt handler related
|
|||||||
"op-clv":1164, // pla129
|
"op-clv":1164, // pla129
|
||||||
"op-implied":1006, // pla130 // has extra pulldowns: pla121 and ir0
|
"op-implied":1006, // pla130 // has extra pulldowns: pla121 and ir0
|
||||||
|
|
||||||
// internal signals: derived from pla outputs
|
|
||||||
"#op-branch-done": 1048,
|
|
||||||
"op-ANDS": 1228,
|
|
||||||
"op-EORS": 1689,
|
|
||||||
"op-ORS": 522,
|
|
||||||
"op-SUMS": 1196,
|
|
||||||
"op-SRS": 934,
|
|
||||||
"#op-store": 925,
|
|
||||||
"#WR": 1352,
|
|
||||||
"op-rmw": 434,
|
|
||||||
"short-circuit-idx-add": 1185,
|
|
||||||
"#op-set-C": 252,
|
|
||||||
|
|
||||||
// internal signals: control signals
|
// internal signals: control signals
|
||||||
nnT2BR: 967, // doubly inverted
|
nnT2BR: 967, // doubly inverted
|
||||||
BRtaken: 1544, // aka #TAKEN
|
BRtaken: 1544,
|
||||||
|
|
||||||
// interrupt and vector related
|
|
||||||
NMIP: 1032,
|
|
||||||
VEC0: 1465,
|
|
||||||
VEC1: 1481,
|
|
||||||
"#VEC": 1134,
|
|
||||||
|
|
||||||
// internal state: misc pipeline state clocked by cclk (phi2)
|
// internal state: misc pipeline state clocked by cclk (phi2)
|
||||||
"pipe#VEC": 1431, // latched #VEC
|
|
||||||
"pipeT-SYNC": 537,
|
|
||||||
pipeT2out: 40,
|
|
||||||
pipeT3out: 706,
|
|
||||||
pipeT4out: 1373,
|
|
||||||
pipeT5out: 940,
|
|
||||||
pipeBRtaken: 832,
|
pipeBRtaken: 832,
|
||||||
pipeUNK01: 1530,
|
pipeUNK01: 1530,
|
||||||
pipeUNK02: 974,
|
pipeUNK02: 974,
|
||||||
@ -576,23 +477,20 @@ pipeUNK34: 56,
|
|||||||
pipeUNK35: 1713,
|
pipeUNK35: 1713,
|
||||||
pipeUNK36: 729,
|
pipeUNK36: 729,
|
||||||
pipeUNK37: 197,
|
pipeUNK37: 197,
|
||||||
"pipe#WR.phi2": 1131,
|
pipeUNK38: 1131,
|
||||||
pipeUNK39: 151,
|
pipeUNK39: 151,
|
||||||
pipeUNK40: 456,
|
pipeUNK40: 456,
|
||||||
pipeUNK41: 1438,
|
pipeUNK41: 1438,
|
||||||
pipeUNK42: 1104,
|
pipeUNK42: 1104,
|
||||||
"pipe#T0": 554, // aka #T0.phi2
|
pipeUNK43: 554,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// internal state: vector address pulldown control
|
// internal state: vector address pulldown control
|
||||||
pipeVectorA0: 357,
|
pipeVectorA0: 357,
|
||||||
pipeVectorA1: 170,
|
pipeVectorA1: 170,
|
||||||
pipeVectorA2: 45,
|
pipeVectorA2: 45,
|
||||||
|
|
||||||
// internal signals: vector address pulldown control
|
|
||||||
"0/ADL0": 217,
|
|
||||||
"0/ADL1": 686,
|
|
||||||
"0/ADL2": 1193,
|
|
||||||
|
|
||||||
// internal state: datapath control drivers
|
// internal state: datapath control drivers
|
||||||
pipedpc28: 683,
|
pipedpc28: 683,
|
||||||
|
|
||||||
@ -614,105 +512,17 @@ alub5: 1678,
|
|||||||
alub6: 235,
|
alub6: 235,
|
||||||
alub7: 1535,
|
alub7: 1535,
|
||||||
|
|
||||||
// alu carry chain and decimal mode
|
aluanorb0: 143,
|
||||||
C01: 1285,
|
aluanandb0: 1628,
|
||||||
C12: 505,
|
aluaorb0: 693,
|
||||||
C23: 1023,
|
notaluoutmux0: 957, // alu result latch input
|
||||||
C34: 78,
|
|
||||||
C45: 142,
|
|
||||||
C56: 500,
|
|
||||||
C67: 1314,
|
|
||||||
C78: 808,
|
|
||||||
"C78.phi2": 560,
|
|
||||||
DC34: 1372, // lower nibble decimal carry
|
|
||||||
DC78: 333, // carry for decimal mode
|
|
||||||
"DC78.phi2": 164,
|
|
||||||
"#C01": 1506,
|
|
||||||
"#C12": 1122,
|
|
||||||
"#C23": 1003,
|
|
||||||
"#C34": 1425,
|
|
||||||
"#C45": 1571,
|
|
||||||
"#C56": 427,
|
|
||||||
"#C67": 592,
|
|
||||||
"#C78": 1327,
|
|
||||||
"DA-C01": 623,
|
|
||||||
"DA-AB2": 216,
|
|
||||||
"DA-AxB2": 516,
|
|
||||||
"DA-C45": 1144,
|
|
||||||
"#DA-ADD1": 901,
|
|
||||||
"#DA-ADD2": 699,
|
|
||||||
|
|
||||||
// misc alu internals
|
aluanorb1: 155,
|
||||||
"#(AxBxC)0": 371,
|
aluanandb1: 841,
|
||||||
"#(AxBxC)1": 965,
|
aluaorb1: 1021,
|
||||||
"#(AxBxC)2": 22,
|
notaluoutmux1: 250, // alu result latch input
|
||||||
"#(AxBxC)3": 274,
|
|
||||||
"#(AxBxC)4": 651,
|
|
||||||
"#(AxBxC)5": 486,
|
|
||||||
"#(AxBxC)6": 1197,
|
|
||||||
"#(AxBxC)7": 532,
|
|
||||||
AxB1: 425,
|
|
||||||
AxB3: 640,
|
|
||||||
AxB5: 1220,
|
|
||||||
AxB7: 1241,
|
|
||||||
"#(AxB)0": 1525,
|
|
||||||
"#(AxB)2": 701,
|
|
||||||
"#(AxB)4": 308,
|
|
||||||
"#(AxB)6": 1459,
|
|
||||||
"(AxB)0.#C0in": 555,
|
|
||||||
"(AxB)2.#C12": 193,
|
|
||||||
"(AxB)4.#C34": 65,
|
|
||||||
"(AxB)6.#C56": 174,
|
|
||||||
"#(AxB1).C01": 295,
|
|
||||||
"#(AxB3).C23": 860,
|
|
||||||
"#(AxB5).C45": 817,
|
|
||||||
"#(AxB7).C67": 1217,
|
|
||||||
"#A.B0": 1628,
|
|
||||||
"#A.B1": 841,
|
|
||||||
"#A.B2": 681,
|
|
||||||
"#A.B3": 350,
|
|
||||||
"#A.B4": 1063,
|
|
||||||
"#A.B5": 477,
|
|
||||||
"#A.B6": 336,
|
|
||||||
"#A.B7": 1318,
|
|
||||||
"A+B0": 693,
|
|
||||||
"A+B1": 1021,
|
|
||||||
"A+B2": 110,
|
|
||||||
"A+B3": 1313,
|
|
||||||
"A+B4": 918,
|
|
||||||
"A+B5": 1236,
|
|
||||||
"A+B6": 803,
|
|
||||||
"A+B7": 117,
|
|
||||||
"#(A+B)0": 143,
|
|
||||||
"#(A+B)1": 155,
|
|
||||||
"#(A+B)2": 1691,
|
|
||||||
"#(A+B)3": 649,
|
|
||||||
"#(A+B)4": 404,
|
|
||||||
"#(A+B)5": 1632,
|
|
||||||
"#(A+B)6": 1084,
|
|
||||||
"#(A+B)7": 1398,
|
|
||||||
"#(AxB)0": 1525,
|
|
||||||
"#(AxB)2": 701,
|
|
||||||
"#(AxB)4": 308,
|
|
||||||
"#(AxB)6": 1459,
|
|
||||||
"#(AxB)1": 953,
|
|
||||||
"#(AxB)3": 884,
|
|
||||||
"#(AxB)5": 1469,
|
|
||||||
"#(AxB)7": 177,
|
|
||||||
"#aluresult0": 957, // alu result latch input
|
|
||||||
"#aluresult1": 250,
|
|
||||||
"#aluresult2": 740,
|
|
||||||
"#aluresult3": 1071,
|
|
||||||
"#aluresult4": 296,
|
|
||||||
"#aluresult5": 277,
|
|
||||||
"#aluresult6": 722,
|
|
||||||
"#aluresult7": 304,
|
|
||||||
|
|
||||||
// internal signals: datapath control signals
|
// internal signals: datapath control signals
|
||||||
|
|
||||||
"ADL/ABL": 639, // load ABL latches from ADL bus
|
|
||||||
"ADH/ABH": 821, // load ABH latches from ADH bus
|
|
||||||
|
|
||||||
dpc0_YSB: 801, // drive sb from y
|
dpc0_YSB: 801, // drive sb from y
|
||||||
dpc1_SBY: 325, // load y from sb
|
dpc1_SBY: 325, // load y from sb
|
||||||
dpc2_XSB: 1263, // drive sb from x
|
dpc2_XSB: 1263, // drive sb from x
|
||||||
@ -734,27 +544,21 @@ dpc16_EORS: 1666, // alu op: a xor b (?)
|
|||||||
dpc17_SUMS: 921, // alu op: a plus b (?)
|
dpc17_SUMS: 921, // alu op: a plus b (?)
|
||||||
alucin: 910, // alu carry in
|
alucin: 910, // alu carry in
|
||||||
notalucin: 1165,
|
notalucin: 1165,
|
||||||
"dpc18_#DAA": 1201, // decimal related (inverted)
|
dpc18_DAA: 1201, // decimal related
|
||||||
dpc19_ADDSB7: 214, // alu to sb bit 7 only
|
dpc19_ADDSB7: 214, // alu to sb bit 7 only
|
||||||
|
|
||||||
dpc20_ADDSB06: 129, // alu to sb bits 6-0 only
|
dpc20_ADDSB06: 129, // alu to sb bits 6-0 only
|
||||||
dpc21_ADDADL: 1015, // alu to adl
|
dpc21_ADDADL: 1015, // alu to adl
|
||||||
alurawcout: 808, // alu raw carry out (no decimal adjust)
|
alurawcout: 808, // alu raw carry out (no decimal adjust)
|
||||||
notalucout: 412, // alu carry out (inverted)
|
|
||||||
alucout: 1146, // alu carry out (latched by phi2)
|
alucout: 1146, // alu carry out (latched by phi2)
|
||||||
notaluvout: 1308, // alu overflow out
|
notaluvout: 1308, // alu overflow out
|
||||||
aluvout: 938, // alu overflow out (latched by phi2)
|
aluvout: 938, // alu overflow out (latched by phi2)
|
||||||
|
dpc22_DSA: 725, // decimal related/SBC only
|
||||||
"#DBZ": 1268, // internal signal: not (databus is zero)
|
|
||||||
DBZ: 744, // internal signal: databus is zero
|
|
||||||
DBNeg: 1200, // internal signal: databus is negative (top bit of db) aka P-#DB7in
|
|
||||||
|
|
||||||
"dpc22_#DSA": 725, // decimal related/SBC only (inverted)
|
|
||||||
dpc23_SBAC: 534, // (optionalls decimal-adjusted) sb to acc
|
dpc23_SBAC: 534, // (optionalls decimal-adjusted) sb to acc
|
||||||
dpc24_ACSB: 1698, // acc to sb
|
dpc24_ACSB: 1698, // acc to sb
|
||||||
dpc25_SBDB: 1060, // sb pass-connects to idb (bi-directionally)
|
dpc25_SBDB: 1060, // sb pass-connects to idb
|
||||||
dpc26_ACDB: 1331, // acc to idb
|
dpc26_ACDB: 1331, // acc to idb
|
||||||
dpc27_SBADH: 140, // sb pass-connects to adh (bi-directionally)
|
dpc27_SBADH: 140, // sb pass-connects to adh
|
||||||
dpc28_0ADH0: 229, // zero to adh0 bit0 only
|
dpc28_0ADH0: 229, // zero to adh0 bit0 only
|
||||||
dpc29_0ADH17: 203, // zero to adh bits 7-1 only
|
dpc29_0ADH17: 203, // zero to adh bits 7-1 only
|
||||||
|
|
||||||
@ -763,23 +567,14 @@ dpc31_PCHPCH: 741, // load pch from pch incremented
|
|||||||
dpc32_PCHADH: 1235, // drive adh from pch incremented
|
dpc32_PCHADH: 1235, // drive adh from pch incremented
|
||||||
dpc33_PCHDB: 247, // drive idb from pch incremented
|
dpc33_PCHDB: 247, // drive idb from pch incremented
|
||||||
dpc34_PCLC: 1704, // pch carry in and pcl FF detect?
|
dpc34_PCLC: 1704, // pch carry in and pcl FF detect?
|
||||||
dpc35_PCHC: 1334, // pcl 0x?F detect - half-carry
|
dpc35: 1334, // pcl 0x?F detect - half-carry
|
||||||
dpc36_IPC: 379, // pcl carry in
|
dpc36_IPC: 379, // pcl carry in
|
||||||
dpc37_PCLDB: 283, // drive idb from pcl incremented
|
dpc37_PCLDB: 283, // drive idb from pcl incremented
|
||||||
dpc38_PCLADL: 438, // drive adl from pcl incremented
|
dpc38_PCLADL: 438, // drive adl from pcl incremented
|
||||||
dpc39_PCLPCL: 898, // load pcl from pcl incremented
|
dpc39_PCLPCL: 898, // load pcl from pcl incremented
|
||||||
|
|
||||||
dpc40_ADLPCL: 414, // load pcl from adl
|
dpc40_ADLPCL: 414, // load pcl from adl
|
||||||
"dpc41_DL/ADL": 1564,// pass-connect adl to mux node driven by idl
|
dpc41: 1564, // pass-connect adl to mux node driven by idl
|
||||||
"dpc42_DL/ADH": 41, // pass-connect adh to mux node driven by idl
|
dpc42: 41, // pass-connect adh to mux node driven by idl
|
||||||
"dpc43_DL/DB": 863, // pass-connect idb to mux node driven by idl
|
dpc43: 863, // pass-connect idb to mux node driven by idl
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* many bus names taken from Donald F. Hanson's block diagram, found
|
|
||||||
* http://www.weihenstephan.org/~michaste/pagetable/6502/6502.jpg
|
|
||||||
* from his paper "A VHDL conversion tool for logic equations with embedded D latches"
|
|
||||||
* http://portal.acm.org/citation.cfm?id=1275143.1275151
|
|
||||||
* also available at
|
|
||||||
* http://www.ncsu.edu/wcae/WCAE1/hanson.pdf
|
|
||||||
*/
|
|
||||||
|
385
testprogram-apple1.js
Normal file
385
testprogram-apple1.js
Normal file
@ -0,0 +1,385 @@
|
|||||||
|
// This file testprogram.js can be substituted by one of several tests
|
||||||
|
// which may not be redistributable
|
||||||
|
// for example
|
||||||
|
// cbmbasic loaded at 0xa000 with entry point 0xe394
|
||||||
|
// test6502 (by Bird Computer) loaded at 0x8000 with entry point 0x8000
|
||||||
|
// apple1 ROM (monitor and basic?) loaded at 0xe000 with entry point 0xe000
|
||||||
|
// hardware accesses as follows:
|
||||||
|
// @E003 read D011, spin until negative (getc)
|
||||||
|
// @E008 read D010, getc
|
||||||
|
// @E3D5 read D0F2, spin until not negative
|
||||||
|
// @E3DA write D0F2, putc
|
||||||
|
// @E86F read D011, if negative print STOPPED AT
|
||||||
|
// instead of distinguishing STOP detection maybe read a different address for STOP
|
||||||
|
//
|
||||||
|
// hooks (from Michael Steil):
|
||||||
|
// getc port 0xD010 (mask 0xFF1F) - must set top bit, maybe CR/LF
|
||||||
|
// getcp port 0xD011 (mask 0xFF1F) - two cases, sensitive to PC 0xE006
|
||||||
|
// putc port 0xD012 (mask 0xFF1F) - must clear top bit, maybe CR/LF
|
||||||
|
// simpler hooks based on disassembly (Achim Breidenbach and Michael Mahon)
|
||||||
|
// getc E003 wait for D011 to be negative, read D010
|
||||||
|
// device D0F2 not known, spins until positive (while writing error strings from EB00)
|
||||||
|
//
|
||||||
|
// (can use xxd -i to convert binary into C include syntax, as a starting point)
|
||||||
|
//
|
||||||
|
testprogramAddress=0xe000;
|
||||||
|
|
||||||
|
// we want to auto-clear the console if any output is sent by the program
|
||||||
|
var consoleboxStream="";
|
||||||
|
|
||||||
|
// handling of putc including device status
|
||||||
|
writeTriggers[0xD0F2]="var t = d&0x7f;"+
|
||||||
|
"consoleboxStream+=String.fromCharCode(t);"+
|
||||||
|
"consolebox.innerHTML = consoleboxStream;"+
|
||||||
|
"logbox.innerHTML = logbox.innerHTML + '<br>write: 0x' + t.toString(16)"
|
||||||
|
readTriggers[0xD0F2]="(0)";
|
||||||
|
|
||||||
|
// handling of getc including device status
|
||||||
|
readTriggers[0xD011]="((consolegetc==undefined)?0:0xff)"; // return zero until we have a char
|
||||||
|
readTriggers[0xD010]="logbox.innerHTML = logbox.innerHTML + '<br>E003 reads: 0x' + consolegetc.toString(16);"+
|
||||||
|
"var c=consolegetc; consolegetc=undefined; (c | 0x80)";
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0x4c, 0xb0, 0xe2, 0xad, 0x11, 0xd0, 0x10, 0xfb, 0xad, 0x10, 0xd0, 0x60,
|
||||||
|
0x8a, 0x29, 0x20, 0xf0, 0x23, 0xa9, 0xa0, 0x85, 0xe4, 0x4c, 0xc9, 0xe3,
|
||||||
|
0xa9, 0x20, 0xc5, 0x24, 0xb0, 0x0c, 0xa9, 0x8d, 0xa0, 0x07, 0x20, 0xc9,
|
||||||
|
0xe3, 0xa9, 0xa0, 0x88, 0xd0, 0xf8, 0xa0, 0x00, 0xb1, 0xe2, 0xe6, 0xe2,
|
||||||
|
0xd0, 0x02, 0xe6, 0xe3, 0x60, 0x20, 0x15, 0xe7, 0x20, 0x76, 0xe5, 0xa5,
|
||||||
|
0xe2, 0xc5, 0xe6, 0xa5, 0xe3, 0xe5, 0xe7, 0xb0, 0xef, 0x20, 0x6d, 0xe0,
|
||||||
|
0x4c, 0x3b, 0xe0, 0xa5, 0xca, 0x85, 0xe2, 0xa5, 0xcb, 0x85, 0xe3, 0xa5,
|
||||||
|
0x4c, 0x85, 0xe6, 0xa5, 0x4d, 0x85, 0xe7, 0xd0, 0xde, 0x20, 0x15, 0xe7,
|
||||||
|
0x20, 0x6d, 0xe5, 0xa5, 0xe4, 0x85, 0xe2, 0xa5, 0xe5, 0x85, 0xe3, 0xb0,
|
||||||
|
0xc7, 0x86, 0xd8, 0xa9, 0xa0, 0x85, 0xfa, 0x20, 0x2a, 0xe0, 0x98, 0x85,
|
||||||
|
0xe4, 0x20, 0x2a, 0xe0, 0xaa, 0x20, 0x2a, 0xe0, 0x20, 0x1b, 0xe5, 0x20,
|
||||||
|
0x18, 0xe0, 0x84, 0xfa, 0xaa, 0x10, 0x18, 0x0a, 0x10, 0xe9, 0xa5, 0xe4,
|
||||||
|
0xd0, 0x03, 0x20, 0x11, 0xe0, 0x8a, 0x20, 0xc9, 0xe3, 0xa9, 0x25, 0x20,
|
||||||
|
0x1a, 0xe0, 0xaa, 0x30, 0xf5, 0x85, 0xe4, 0xc9, 0x01, 0xd0, 0x05, 0xa6,
|
||||||
|
0xd8, 0x4c, 0xcd, 0xe3, 0x48, 0x84, 0xce, 0xa2, 0xed, 0x86, 0xcf, 0xc9,
|
||||||
|
0x51, 0x90, 0x04, 0xc6, 0xcf, 0xe9, 0x50, 0x48, 0xb1, 0xce, 0xaa, 0x88,
|
||||||
|
0xb1, 0xce, 0x10, 0xfa, 0xe0, 0xc0, 0xb0, 0x04, 0xe0, 0x00, 0x30, 0xf2,
|
||||||
|
0xaa, 0x68, 0xe9, 0x01, 0xd0, 0xe9, 0x24, 0xe4, 0x30, 0x03, 0x20, 0xf8,
|
||||||
|
0xef, 0xb1, 0xce, 0x10, 0x10, 0xaa, 0x29, 0x3f, 0x85, 0xe4, 0x18, 0x69,
|
||||||
|
0xa0, 0x20, 0xc9, 0xe3, 0x88, 0xe0, 0xc0, 0x90, 0xec, 0x20, 0x0c, 0xe0,
|
||||||
|
0x68, 0xc9, 0x5d, 0xf0, 0xa4, 0xc9, 0x28, 0xd0, 0x8a, 0xf0, 0x9e, 0x20,
|
||||||
|
0x18, 0xe1, 0x95, 0x50, 0xd5, 0x78, 0x90, 0x11, 0xa0, 0x2b, 0x4c, 0xe0,
|
||||||
|
0xe3, 0x20, 0x34, 0xee, 0xd5, 0x50, 0x90, 0xf4, 0x20, 0xe4, 0xef, 0x95,
|
||||||
|
0x78, 0x4c, 0x23, 0xe8, 0x20, 0x34, 0xee, 0xf0, 0xe7, 0x38, 0xe9, 0x01,
|
||||||
|
0x60, 0x20, 0x18, 0xe1, 0x95, 0x50, 0x18, 0xf5, 0x78, 0x4c, 0x02, 0xe1,
|
||||||
|
0xa0, 0x14, 0xd0, 0xd6, 0x20, 0x18, 0xe1, 0xe8, 0xb5, 0x50, 0x85, 0xda,
|
||||||
|
0x65, 0xce, 0x48, 0xa8, 0xb5, 0x78, 0x85, 0xdb, 0x65, 0xcf, 0x48, 0xc4,
|
||||||
|
0xca, 0xe5, 0xcb, 0xb0, 0xe3, 0xa5, 0xda, 0x69, 0xfe, 0x85, 0xda, 0xa9,
|
||||||
|
0xff, 0xa8, 0x65, 0xdb, 0x85, 0xdb, 0xc8, 0xb1, 0xda, 0xd9, 0xcc, 0x00,
|
||||||
|
0xd0, 0x0f, 0x98, 0xf0, 0xf5, 0x68, 0x91, 0xda, 0x99, 0xcc, 0x00, 0x88,
|
||||||
|
0x10, 0xf7, 0xe8, 0x60, 0xea, 0xa0, 0x80, 0xd0, 0x95, 0xa9, 0x00, 0x20,
|
||||||
|
0x0a, 0xe7, 0xa0, 0x02, 0x94, 0x78, 0x20, 0x0a, 0xe7, 0xa9, 0xbf, 0x20,
|
||||||
|
0xc9, 0xe3, 0xa0, 0x00, 0x20, 0x9e, 0xe2, 0x94, 0x78, 0xea, 0xea, 0xea,
|
||||||
|
0xb5, 0x51, 0x85, 0xce, 0xb5, 0x79, 0x85, 0xcf, 0xe8, 0xe8, 0x20, 0xbc,
|
||||||
|
0xe1, 0xb5, 0x4e, 0xd5, 0x76, 0xb0, 0x15, 0xf6, 0x4e, 0xa8, 0xb1, 0xce,
|
||||||
|
0xb4, 0x50, 0xc4, 0xe4, 0x90, 0x04, 0xa0, 0x83, 0xd0, 0xc1, 0x91, 0xda,
|
||||||
|
0xf6, 0x50, 0x90, 0xe5, 0xb4, 0x50, 0x8a, 0x91, 0xda, 0xe8, 0xe8, 0x60,
|
||||||
|
0xb5, 0x51, 0x85, 0xda, 0x38, 0xe9, 0x02, 0x85, 0xe4, 0xb5, 0x79, 0x85,
|
||||||
|
0xdb, 0xe9, 0x00, 0x85, 0xe5, 0xa0, 0x00, 0xb1, 0xe4, 0x18, 0xe5, 0xda,
|
||||||
|
0x85, 0xe4, 0x60, 0xb5, 0x53, 0x85, 0xce, 0xb5, 0x7b, 0x85, 0xcf, 0xb5,
|
||||||
|
0x51, 0x85, 0xda, 0xb5, 0x79, 0x85, 0xdb, 0xe8, 0xe8, 0xe8, 0xa0, 0x00,
|
||||||
|
0x94, 0x78, 0x94, 0xa0, 0xc8, 0x94, 0x50, 0xb5, 0x4d, 0xd5, 0x75, 0x08,
|
||||||
|
0x48, 0xb5, 0x4f, 0xd5, 0x77, 0x90, 0x07, 0x68, 0x28, 0xb0, 0x02, 0x56,
|
||||||
|
0x50, 0x60, 0xa8, 0xb1, 0xce, 0x85, 0xe4, 0x68, 0xa8, 0x28, 0xb0, 0xf3,
|
||||||
|
0xb1, 0xda, 0xc5, 0xe4, 0xd0, 0xed, 0xf6, 0x4f, 0xf6, 0x4d, 0xb0, 0xd7,
|
||||||
|
0x20, 0xd7, 0xe1, 0x4c, 0x36, 0xe7, 0x20, 0x54, 0xe2, 0x06, 0xce, 0x26,
|
||||||
|
0xcf, 0x90, 0x0d, 0x18, 0xa5, 0xe6, 0x65, 0xda, 0x85, 0xe6, 0xa5, 0xe7,
|
||||||
|
0x65, 0xdb, 0x85, 0xe7, 0x88, 0xf0, 0x09, 0x06, 0xe6, 0x26, 0xe7, 0x10,
|
||||||
|
0xe4, 0x4c, 0x7e, 0xe7, 0xa5, 0xe6, 0x20, 0x08, 0xe7, 0xa5, 0xe7, 0x95,
|
||||||
|
0xa0, 0x06, 0xe5, 0x90, 0x28, 0x4c, 0x6f, 0xe7, 0xa9, 0x55, 0x85, 0xe5,
|
||||||
|
0x20, 0x5b, 0xe2, 0xa5, 0xce, 0x85, 0xda, 0xa5, 0xcf, 0x85, 0xdb, 0x20,
|
||||||
|
0x15, 0xe7, 0x84, 0xe6, 0x84, 0xe7, 0xa5, 0xcf, 0x10, 0x09, 0xca, 0x06,
|
||||||
|
0xe5, 0x20, 0x6f, 0xe7, 0x20, 0x15, 0xe7, 0xa0, 0x10, 0x60, 0x20, 0x6c,
|
||||||
|
0xee, 0xf0, 0xc5, 0xff, 0xc9, 0x84, 0xd0, 0x02, 0x46, 0xf8, 0xc9, 0xdf,
|
||||||
|
0xf0, 0x11, 0xc9, 0x9b, 0xf0, 0x06, 0x99, 0x00, 0x02, 0xc8, 0x10, 0x0a,
|
||||||
|
0xa0, 0x8b, 0x20, 0xc4, 0xe3, 0xa0, 0x01, 0x88, 0x30, 0xf6, 0x20, 0x03,
|
||||||
|
0xe0, 0xea, 0xea, 0x20, 0xc9, 0xe3, 0xc9, 0x8d, 0xd0, 0xd6, 0xa9, 0xdf,
|
||||||
|
0x99, 0x00, 0x02, 0x60, 0x20, 0xd3, 0xef, 0x20, 0xcd, 0xe3, 0x46, 0xd9,
|
||||||
|
0xa9, 0xbe, 0x20, 0xc9, 0xe3, 0xa0, 0x00, 0x84, 0xfa, 0x24, 0xf8, 0x10,
|
||||||
|
0x0c, 0xa6, 0xf6, 0xa5, 0xf7, 0x20, 0x1b, 0xe5, 0xa9, 0xa0, 0x20, 0xc9,
|
||||||
|
0xe3, 0xa2, 0xff, 0x9a, 0x20, 0x9e, 0xe2, 0x84, 0xf1, 0x8a, 0x85, 0xc8,
|
||||||
|
0xa2, 0x20, 0x20, 0x91, 0xe4, 0xa5, 0xc8, 0x69, 0x00, 0x85, 0xe0, 0xa9,
|
||||||
|
0x00, 0xaa, 0x69, 0x02, 0x85, 0xe1, 0xa1, 0xe0, 0x29, 0xf0, 0xc9, 0xb0,
|
||||||
|
0xf0, 0x03, 0x4c, 0x83, 0xe8, 0xa0, 0x02, 0xb1, 0xe0, 0x99, 0xcd, 0x00,
|
||||||
|
0x88, 0xd0, 0xf8, 0x20, 0x8a, 0xe3, 0xa5, 0xf1, 0xe5, 0xc8, 0xc9, 0x04,
|
||||||
|
0xf0, 0xa8, 0x91, 0xe0, 0xa5, 0xca, 0xf1, 0xe0, 0x85, 0xe4, 0xa5, 0xcb,
|
||||||
|
0xe9, 0x00, 0x85, 0xe5, 0xa5, 0xe4, 0xc5, 0xcc, 0xa5, 0xe5, 0xe5, 0xcd,
|
||||||
|
0x90, 0x45, 0xa5, 0xca, 0xf1, 0xe0, 0x85, 0xe6, 0xa5, 0xcb, 0xe9, 0x00,
|
||||||
|
0x85, 0xe7, 0xb1, 0xca, 0x91, 0xe6, 0xe6, 0xca, 0xd0, 0x02, 0xe6, 0xcb,
|
||||||
|
0xa5, 0xe2, 0xc5, 0xca, 0xa5, 0xe3, 0xe5, 0xcb, 0xb0, 0xe0, 0xb5, 0xe4,
|
||||||
|
0x95, 0xca, 0xca, 0x10, 0xf9, 0xb1, 0xe0, 0xa8, 0x88, 0xb1, 0xe0, 0x91,
|
||||||
|
0xe6, 0x98, 0xd0, 0xf8, 0x24, 0xf8, 0x10, 0x09, 0xb5, 0xf7, 0x75, 0xf5,
|
||||||
|
0x95, 0xf7, 0xe8, 0xf0, 0xf7, 0x10, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xa0,
|
||||||
|
0x14, 0xd0, 0x71, 0x20, 0x15, 0xe7, 0xa5, 0xe2, 0x85, 0xe6, 0xa5, 0xe3,
|
||||||
|
0x85, 0xe7, 0x20, 0x75, 0xe5, 0xa5, 0xe2, 0x85, 0xe4, 0xa5, 0xe3, 0x85,
|
||||||
|
0xe5, 0xd0, 0x0e, 0x20, 0x15, 0xe7, 0x20, 0x6d, 0xe5, 0xa5, 0xe6, 0x85,
|
||||||
|
0xe2, 0xa5, 0xe7, 0x85, 0xe3, 0xa0, 0x00, 0xa5, 0xca, 0xc5, 0xe4, 0xa5,
|
||||||
|
0xcb, 0xe5, 0xe5, 0xb0, 0x16, 0xa5, 0xe4, 0xd0, 0x02, 0xc6, 0xe5, 0xc6,
|
||||||
|
0xe4, 0xa5, 0xe6, 0xd0, 0x02, 0xc6, 0xe7, 0xc6, 0xe6, 0xb1, 0xe4, 0x91,
|
||||||
|
0xe6, 0x90, 0xe0, 0xa5, 0xe6, 0x85, 0xca, 0xa5, 0xe7, 0x85, 0xcb, 0x60,
|
||||||
|
0x20, 0xc9, 0xe3, 0xc8, 0xb9, 0x00, 0xeb, 0x30, 0xf7, 0xc9, 0x8d, 0xd0,
|
||||||
|
0x06, 0xa9, 0x00, 0x85, 0x24, 0xa9, 0x8d, 0xe6, 0x24, 0x2c, 0xf2, 0xd0,
|
||||||
|
0x30, 0xfb, 0x8d, 0xf2, 0xd0, 0x60, 0xa0, 0x06, 0x20, 0xd3, 0xee, 0x24,
|
||||||
|
0xd9, 0x30, 0x03, 0x4c, 0xb6, 0xe2, 0x4c, 0x9a, 0xeb, 0x2a, 0x69, 0xa0,
|
||||||
|
0xdd, 0x00, 0x02, 0xd0, 0x53, 0xb1, 0xfe, 0x0a, 0x30, 0x06, 0x88, 0xb1,
|
||||||
|
0xfe, 0x30, 0x29, 0xc8, 0x86, 0xc8, 0x98, 0x48, 0xa2, 0x00, 0xa1, 0xfe,
|
||||||
|
0xaa, 0x4a, 0x49, 0x48, 0x11, 0xfe, 0xc9, 0xc0, 0x90, 0x01, 0xe8, 0xc8,
|
||||||
|
0xd0, 0xf3, 0x68, 0xa8, 0x8a, 0x4c, 0xc0, 0xe4, 0xe6, 0xf1, 0xa6, 0xf1,
|
||||||
|
0xf0, 0xbc, 0x9d, 0x00, 0x02, 0x60, 0xa6, 0xc8, 0xa9, 0xa0, 0xe8, 0xdd,
|
||||||
|
0x00, 0x02, 0xb0, 0xfa, 0xb1, 0xfe, 0x29, 0x3f, 0x4a, 0xd0, 0xb6, 0xbd,
|
||||||
|
0x00, 0x02, 0xb0, 0x06, 0x69, 0x3f, 0xc9, 0x1a, 0x90, 0x6f, 0x69, 0x4f,
|
||||||
|
0xc9, 0x0a, 0x90, 0x69, 0xa6, 0xfd, 0xc8, 0xb1, 0xfe, 0x29, 0xe0, 0xc9,
|
||||||
|
0x20, 0xf0, 0x7a, 0xb5, 0xa8, 0x85, 0xc8, 0xb5, 0xd1, 0x85, 0xf1, 0x88,
|
||||||
|
0xb1, 0xfe, 0x0a, 0x10, 0xfa, 0x88, 0xb0, 0x38, 0x0a, 0x30, 0x35, 0xb4,
|
||||||
|
0x58, 0x84, 0xff, 0xb4, 0x80, 0xe8, 0x10, 0xda, 0xf0, 0xb3, 0xc9, 0x7e,
|
||||||
|
0xb0, 0x22, 0xca, 0x10, 0x04, 0xa0, 0x06, 0x10, 0x29, 0x94, 0x80, 0xa4,
|
||||||
|
0xff, 0x94, 0x58, 0xa4, 0xc8, 0x94, 0xa8, 0xa4, 0xf1, 0x94, 0xd1, 0x29,
|
||||||
|
0x1f, 0xa8, 0xb9, 0x20, 0xec, 0x0a, 0xa8, 0xa9, 0x76, 0x2a, 0x85, 0xff,
|
||||||
|
0xd0, 0x01, 0xc8, 0xc8, 0x86, 0xfd, 0xb1, 0xfe, 0x30, 0x84, 0xd0, 0x05,
|
||||||
|
0xa0, 0x0e, 0x4c, 0xe0, 0xe3, 0xc9, 0x03, 0xb0, 0xc3, 0x4a, 0xa6, 0xc8,
|
||||||
|
0xe8, 0xbd, 0x00, 0x02, 0x90, 0x04, 0xc9, 0xa2, 0xf0, 0x0a, 0xc9, 0xdf,
|
||||||
|
0xf0, 0x06, 0x86, 0xc8, 0x20, 0x1c, 0xe4, 0xc8, 0x88, 0xa6, 0xfd, 0xb1,
|
||||||
|
0xfe, 0x88, 0x0a, 0x10, 0xcf, 0xb4, 0x58, 0x84, 0xff, 0xb4, 0x80, 0xe8,
|
||||||
|
0xb1, 0xfe, 0x29, 0x9f, 0xd0, 0xed, 0x85, 0xf2, 0x85, 0xf3, 0x98, 0x48,
|
||||||
|
0x86, 0xfd, 0xb4, 0xd0, 0x84, 0xc9, 0x18, 0xa9, 0x0a, 0x85, 0xf9, 0xa2,
|
||||||
|
0x00, 0xc8, 0xb9, 0x00, 0x02, 0x29, 0x0f, 0x65, 0xf2, 0x48, 0x8a, 0x65,
|
||||||
|
0xf3, 0x30, 0x1c, 0xaa, 0x68, 0xc6, 0xf9, 0xd0, 0xf2, 0x85, 0xf2, 0x86,
|
||||||
|
0xf3, 0xc4, 0xf1, 0xd0, 0xde, 0xa4, 0xc9, 0xc8, 0x84, 0xf1, 0x20, 0x1c,
|
||||||
|
0xe4, 0x68, 0xa8, 0xa5, 0xf3, 0xb0, 0xa9, 0xa0, 0x00, 0x10, 0x8b, 0x85,
|
||||||
|
0xf3, 0x86, 0xf2, 0xa2, 0x04, 0x86, 0xc9, 0xa9, 0xb0, 0x85, 0xf9, 0xa5,
|
||||||
|
0xf2, 0xdd, 0x63, 0xe5, 0xa5, 0xf3, 0xfd, 0x68, 0xe5, 0x90, 0x0d, 0x85,
|
||||||
|
0xf3, 0xa5, 0xf2, 0xfd, 0x63, 0xe5, 0x85, 0xf2, 0xe6, 0xf9, 0xd0, 0xe7,
|
||||||
|
0xa5, 0xf9, 0xe8, 0xca, 0xf0, 0x0e, 0xc9, 0xb0, 0xf0, 0x02, 0x85, 0xc9,
|
||||||
|
0x24, 0xc9, 0x30, 0x04, 0xa5, 0xfa, 0xf0, 0x0b, 0x20, 0xc9, 0xe3, 0x24,
|
||||||
|
0xf8, 0x10, 0x04, 0x99, 0x00, 0x02, 0xc8, 0xca, 0x10, 0xc1, 0x60, 0x01,
|
||||||
|
0x0a, 0x64, 0xe8, 0x10, 0x00, 0x00, 0x00, 0x03, 0x27, 0xa5, 0xca, 0x85,
|
||||||
|
0xe6, 0xa5, 0xcb, 0x85, 0xe7, 0xe8, 0xa5, 0xe7, 0x85, 0xe5, 0xa5, 0xe6,
|
||||||
|
0x85, 0xe4, 0xc5, 0x4c, 0xa5, 0xe5, 0xe5, 0x4d, 0xb0, 0x26, 0xa0, 0x01,
|
||||||
|
0xb1, 0xe4, 0xe5, 0xce, 0xc8, 0xb1, 0xe4, 0xe5, 0xcf, 0xb0, 0x19, 0xa0,
|
||||||
|
0x00, 0xa5, 0xe6, 0x71, 0xe4, 0x85, 0xe6, 0x90, 0x03, 0xe6, 0xe7, 0x18,
|
||||||
|
0xc8, 0xa5, 0xce, 0xf1, 0xe4, 0xc8, 0xa5, 0xcf, 0xf1, 0xe4, 0xb0, 0xca,
|
||||||
|
0x60, 0x46, 0xf8, 0xa5, 0x4c, 0x85, 0xca, 0xa5, 0x4d, 0x85, 0xcb, 0xa5,
|
||||||
|
0x4a, 0x85, 0xcc, 0xa5, 0x4b, 0x85, 0xcd, 0xa9, 0x00, 0x85, 0xfb, 0x85,
|
||||||
|
0xfc, 0x85, 0xfe, 0xa9, 0x00, 0x85, 0x1d, 0x60, 0xa5, 0xd0, 0x69, 0x05,
|
||||||
|
0x85, 0xd2, 0xa5, 0xd1, 0x69, 0x00, 0x85, 0xd3, 0xa5, 0xd2, 0xc5, 0xca,
|
||||||
|
0xa5, 0xd3, 0xe5, 0xcb, 0x90, 0x03, 0x4c, 0x6b, 0xe3, 0xa5, 0xce, 0x91,
|
||||||
|
0xd0, 0xa5, 0xcf, 0xc8, 0x91, 0xd0, 0xa5, 0xd2, 0xc8, 0x91, 0xd0, 0xa5,
|
||||||
|
0xd3, 0xc8, 0x91, 0xd0, 0xa9, 0x00, 0xc8, 0x91, 0xd0, 0xc8, 0x91, 0xd0,
|
||||||
|
0xa5, 0xd2, 0x85, 0xcc, 0xa5, 0xd3, 0x85, 0xcd, 0xa5, 0xd0, 0x90, 0x43,
|
||||||
|
0x85, 0xce, 0x84, 0xcf, 0x20, 0xff, 0xe6, 0x30, 0x0e, 0xc9, 0x40, 0xf0,
|
||||||
|
0x0a, 0x4c, 0x28, 0xe6, 0x06, 0xc9, 0x49, 0xd0, 0x07, 0xa9, 0x49, 0x85,
|
||||||
|
0xcf, 0x20, 0xff, 0xe6, 0xa5, 0x4b, 0x85, 0xd1, 0xa5, 0x4a, 0x85, 0xd0,
|
||||||
|
0xc5, 0xcc, 0xa5, 0xd1, 0xe5, 0xcd, 0xb0, 0x94, 0xb1, 0xd0, 0xc8, 0xc5,
|
||||||
|
0xce, 0xd0, 0x06, 0xb1, 0xd0, 0xc5, 0xcf, 0xf0, 0x0e, 0xc8, 0xb1, 0xd0,
|
||||||
|
0x48, 0xc8, 0xb1, 0xd0, 0x85, 0xd1, 0x68, 0xa0, 0x00, 0xf0, 0xdb, 0xa5,
|
||||||
|
0xd0, 0x69, 0x03, 0x20, 0x0a, 0xe7, 0xa5, 0xd1, 0x69, 0x00, 0x95, 0x78,
|
||||||
|
0xa5, 0xcf, 0xc9, 0x40, 0xd0, 0x1c, 0x88, 0x98, 0x20, 0x0a, 0xe7, 0x88,
|
||||||
|
0x94, 0x78, 0xa0, 0x03, 0xf6, 0x78, 0xc8, 0xb1, 0xd0, 0x30, 0xf9, 0x10,
|
||||||
|
0x09, 0xa9, 0x00, 0x85, 0xd4, 0x85, 0xd5, 0xa2, 0x20, 0x48, 0xa0, 0x00,
|
||||||
|
0xb1, 0xe0, 0x10, 0x18, 0x0a, 0x30, 0x81, 0x20, 0xff, 0xe6, 0x20, 0x08,
|
||||||
|
0xe7, 0x20, 0xff, 0xe6, 0x95, 0xa0, 0x24, 0xd4, 0x10, 0x01, 0xca, 0x20,
|
||||||
|
0xff, 0xe6, 0xb0, 0xe6, 0xc9, 0x28, 0xd0, 0x1f, 0xa5, 0xe0, 0x20, 0x0a,
|
||||||
|
0xe7, 0xa5, 0xe1, 0x95, 0x78, 0x24, 0xd4, 0x30, 0x0b, 0xa9, 0x01, 0x20,
|
||||||
|
0x0a, 0xe7, 0xa9, 0x00, 0x95, 0x78, 0xf6, 0x78, 0x20, 0xff, 0xe6, 0x30,
|
||||||
|
0xf9, 0xb0, 0xd3, 0x24, 0xd4, 0x10, 0x06, 0xc9, 0x04, 0xb0, 0xd0, 0x46,
|
||||||
|
0xd4, 0xa8, 0x85, 0xd6, 0xb9, 0x98, 0xe9, 0x29, 0x55, 0x0a, 0x85, 0xd7,
|
||||||
|
0x68, 0xa8, 0xb9, 0x98, 0xe9, 0x29, 0xaa, 0xc5, 0xd7, 0xb0, 0x09, 0x98,
|
||||||
|
0x48, 0x20, 0xff, 0xe6, 0xa5, 0xd6, 0x90, 0x95, 0xb9, 0x10, 0xea, 0x85,
|
||||||
|
0xce, 0xb9, 0x88, 0xea, 0x85, 0xcf, 0x20, 0xfc, 0xe6, 0x4c, 0xd8, 0xe6,
|
||||||
|
0x6c, 0xce, 0x00, 0xe6, 0xe0, 0xd0, 0x02, 0xe6, 0xe1, 0xb1, 0xe0, 0x60,
|
||||||
|
0x94, 0x77, 0xca, 0x30, 0x03, 0x95, 0x50, 0x60, 0xa0, 0x66, 0x4c, 0xe0,
|
||||||
|
0xe3, 0xa0, 0x00, 0xb5, 0x50, 0x85, 0xce, 0xb5, 0xa0, 0x85, 0xcf, 0xb5,
|
||||||
|
0x78, 0xf0, 0x0e, 0x85, 0xcf, 0xb1, 0xce, 0x48, 0xc8, 0xb1, 0xce, 0x85,
|
||||||
|
0xcf, 0x68, 0x85, 0xce, 0x88, 0xe8, 0x60, 0x20, 0x4a, 0xe7, 0x20, 0x15,
|
||||||
|
0xe7, 0x98, 0x20, 0x08, 0xe7, 0x95, 0xa0, 0xc5, 0xce, 0xd0, 0x06, 0xc5,
|
||||||
|
0xcf, 0xd0, 0x02, 0xf6, 0x50, 0x60, 0x20, 0x82, 0xe7, 0x20, 0x59, 0xe7,
|
||||||
|
0x20, 0x15, 0xe7, 0x24, 0xcf, 0x30, 0x1b, 0xca, 0x60, 0x20, 0x15, 0xe7,
|
||||||
|
0xa5, 0xcf, 0xd0, 0x04, 0xa5, 0xce, 0xf0, 0xf3, 0xa9, 0xff, 0x20, 0x08,
|
||||||
|
0xe7, 0x95, 0xa0, 0x24, 0xcf, 0x30, 0xe9, 0x20, 0x15, 0xe7, 0x98, 0x38,
|
||||||
|
0xe5, 0xce, 0x20, 0x08, 0xe7, 0x98, 0xe5, 0xcf, 0x50, 0x23, 0xa0, 0x00,
|
||||||
|
0x10, 0x90, 0x20, 0x6f, 0xe7, 0x20, 0x15, 0xe7, 0xa5, 0xce, 0x85, 0xda,
|
||||||
|
0xa5, 0xcf, 0x85, 0xdb, 0x20, 0x15, 0xe7, 0x18, 0xa5, 0xce, 0x65, 0xda,
|
||||||
|
0x20, 0x08, 0xe7, 0xa5, 0xcf, 0x65, 0xdb, 0x70, 0xdd, 0x95, 0xa0, 0x60,
|
||||||
|
0x20, 0x15, 0xe7, 0xa4, 0xce, 0xf0, 0x05, 0x88, 0xa5, 0xcf, 0xf0, 0x0c,
|
||||||
|
0x60, 0xa5, 0x24, 0x09, 0x07, 0xa8, 0xc8, 0xa9, 0xa0, 0x20, 0xc9, 0xe3,
|
||||||
|
0xc4, 0x24, 0xb0, 0xf7, 0x60, 0x20, 0xb1, 0xe7, 0x20, 0x15, 0xe7, 0xa5,
|
||||||
|
0xcf, 0x10, 0x0a, 0xa9, 0xad, 0x20, 0xc9, 0xe3, 0x20, 0x72, 0xe7, 0x50,
|
||||||
|
0xef, 0x88, 0x84, 0xd5, 0x86, 0xcf, 0xa6, 0xce, 0x20, 0x1b, 0xe5, 0xa6,
|
||||||
|
0xcf, 0x60, 0x20, 0x15, 0xe7, 0xa5, 0xce, 0x85, 0xf6, 0xa5, 0xcf, 0x85,
|
||||||
|
0xf7, 0x88, 0x84, 0xf8, 0xc8, 0xa9, 0x0a, 0x85, 0xf4, 0x84, 0xf5, 0x60,
|
||||||
|
0x20, 0x15, 0xe7, 0xa5, 0xce, 0xa4, 0xcf, 0x10, 0xf2, 0x20, 0x15, 0xe7,
|
||||||
|
0xb5, 0x50, 0x85, 0xda, 0xb5, 0x78, 0x85, 0xdb, 0xa5, 0xce, 0x91, 0xda,
|
||||||
|
0xc8, 0xa5, 0xcf, 0x91, 0xda, 0xe8, 0x60, 0x68, 0x68, 0x24, 0xd5, 0x10,
|
||||||
|
0x05, 0x20, 0xcd, 0xe3, 0x46, 0xd5, 0x60, 0xa0, 0xff, 0x84, 0xd7, 0x60,
|
||||||
|
0x20, 0xcd, 0xef, 0xf0, 0x07, 0xa9, 0x25, 0x85, 0xd6, 0x88, 0x84, 0xd4,
|
||||||
|
0xe8, 0x60, 0xa5, 0xca, 0xa4, 0xcb, 0xd0, 0x5a, 0xa0, 0x41, 0xa5, 0xfc,
|
||||||
|
0xc9, 0x08, 0xb0, 0x5e, 0xa8, 0xe6, 0xfc, 0xa5, 0xe0, 0x99, 0x00, 0x01,
|
||||||
|
0xa5, 0xe1, 0x99, 0x08, 0x01, 0xa5, 0xdc, 0x99, 0x10, 0x01, 0xa5, 0xdd,
|
||||||
|
0x99, 0x18, 0x01, 0x20, 0x15, 0xe7, 0x20, 0x6d, 0xe5, 0x90, 0x04, 0xa0,
|
||||||
|
0x37, 0xd0, 0x3b, 0xa5, 0xe4, 0xa4, 0xe5, 0x85, 0xdc, 0x84, 0xdd, 0x2c,
|
||||||
|
0x11, 0xd0, 0x30, 0x4f, 0x18, 0x69, 0x03, 0x90, 0x01, 0xc8, 0xa2, 0xff,
|
||||||
|
0x86, 0xd9, 0x9a, 0x85, 0xe0, 0x84, 0xe1, 0x20, 0x79, 0xe6, 0x24, 0xd9,
|
||||||
|
0x10, 0x49, 0x18, 0xa0, 0x00, 0xa5, 0xdc, 0x71, 0xdc, 0xa4, 0xdd, 0x90,
|
||||||
|
0x01, 0xc8, 0xc5, 0x4c, 0xd0, 0xd1, 0xc4, 0x4d, 0xd0, 0xcd, 0xa0, 0x34,
|
||||||
|
0x46, 0xd9, 0x4c, 0xe0, 0xe3, 0xa0, 0x4a, 0xa5, 0xfc, 0xf0, 0xf7, 0xc6,
|
||||||
|
0xfc, 0xa8, 0xb9, 0x0f, 0x01, 0x85, 0xdc, 0xb9, 0x17, 0x01, 0x85, 0xdd,
|
||||||
|
0xbe, 0xff, 0x00, 0xb9, 0x07, 0x01, 0xa8, 0x8a, 0x4c, 0x7a, 0xe8, 0xa0,
|
||||||
|
0x63, 0x20, 0xc4, 0xe3, 0xa0, 0x01, 0xb1, 0xdc, 0xaa, 0xc8, 0xb1, 0xdc,
|
||||||
|
0x20, 0x1b, 0xe5, 0x4c, 0xb3, 0xe2, 0xc6, 0xfb, 0xa0, 0x5b, 0xa5, 0xfb,
|
||||||
|
0xf0, 0xc4, 0xa8, 0xb5, 0x50, 0xd9, 0x1f, 0x01, 0xd0, 0xf0, 0xb5, 0x78,
|
||||||
|
0xd9, 0x27, 0x01, 0xd0, 0xe9, 0xb9, 0x2f, 0x01, 0x85, 0xda, 0xb9, 0x37,
|
||||||
|
0x01, 0x85, 0xdb, 0x20, 0x15, 0xe7, 0xca, 0x20, 0x93, 0xe7, 0x20, 0x01,
|
||||||
|
0xe8, 0xca, 0xa4, 0xfb, 0xb9, 0x67, 0x01, 0x95, 0x9f, 0xb9, 0x5f, 0x01,
|
||||||
|
0xa0, 0x00, 0x20, 0x08, 0xe7, 0x20, 0x82, 0xe7, 0x20, 0x59, 0xe7, 0x20,
|
||||||
|
0x15, 0xe7, 0xa4, 0xfb, 0xa5, 0xce, 0xf0, 0x05, 0x59, 0x37, 0x01, 0x10,
|
||||||
|
0x12, 0xb9, 0x3f, 0x01, 0x85, 0xdc, 0xb9, 0x47, 0x01, 0x85, 0xdd, 0xbe,
|
||||||
|
0x4f, 0x01, 0xb9, 0x57, 0x01, 0xd0, 0x87, 0xc6, 0xfb, 0x60, 0xa0, 0x54,
|
||||||
|
0xa5, 0xfb, 0xc9, 0x08, 0xf0, 0x9a, 0xe6, 0xfb, 0xa8, 0xb5, 0x50, 0x99,
|
||||||
|
0x20, 0x01, 0xb5, 0x78, 0x99, 0x28, 0x01, 0x60, 0x20, 0x15, 0xe7, 0xa4,
|
||||||
|
0xfb, 0xa5, 0xce, 0x99, 0x5f, 0x01, 0xa5, 0xcf, 0x99, 0x67, 0x01, 0xa9,
|
||||||
|
0x01, 0x99, 0x2f, 0x01, 0xa9, 0x00, 0x99, 0x37, 0x01, 0xa5, 0xdc, 0x99,
|
||||||
|
0x3f, 0x01, 0xa5, 0xdd, 0x99, 0x47, 0x01, 0xa5, 0xe0, 0x99, 0x4f, 0x01,
|
||||||
|
0xa5, 0xe1, 0x99, 0x57, 0x01, 0x60, 0x20, 0x15, 0xe7, 0xa4, 0xfb, 0xa5,
|
||||||
|
0xce, 0x99, 0x2f, 0x01, 0xa5, 0xcf, 0x4c, 0x66, 0xe9, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab,
|
||||||
|
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||||
|
0x03, 0x03, 0x3f, 0x3f, 0xc0, 0xc0, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||||
|
0x3c, 0x30, 0x0f, 0xc0, 0xcc, 0xff, 0x55, 0x00, 0xab, 0xab, 0x03, 0x03,
|
||||||
|
0xff, 0xff, 0x55, 0xff, 0xff, 0x55, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xff,
|
||||||
|
0x55, 0xc3, 0xc3, 0xc3, 0x55, 0xf0, 0xf0, 0xcf, 0x56, 0x56, 0x56, 0x55,
|
||||||
|
0xff, 0xff, 0x55, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
|
||||||
|
0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||||
|
0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0xab, 0x03, 0x57, 0x03, 0x03, 0x03,
|
||||||
|
0x03, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||||
|
0x03, 0x03, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0xff, 0xff, 0x19,
|
||||||
|
0x5d, 0x35, 0x4b, 0xf2, 0xec, 0x87, 0x6f, 0xad, 0xb7, 0xe2, 0xf8, 0x54,
|
||||||
|
0x80, 0x96, 0x85, 0x82, 0x22, 0x10, 0x33, 0x4a, 0x13, 0x06, 0x0b, 0x4a,
|
||||||
|
0x01, 0x40, 0x47, 0x7a, 0x00, 0xff, 0x23, 0x09, 0x5b, 0x16, 0xb6, 0xcb,
|
||||||
|
0xff, 0xff, 0xfb, 0xff, 0xff, 0x24, 0xf6, 0x4e, 0x59, 0x50, 0x00, 0xff,
|
||||||
|
0x23, 0xa3, 0x6f, 0x36, 0x23, 0xd7, 0x1c, 0x22, 0xc2, 0xae, 0xba, 0x23,
|
||||||
|
0xff, 0xff, 0x21, 0x30, 0x1e, 0x03, 0xc4, 0x20, 0x00, 0xc1, 0xff, 0xff,
|
||||||
|
0xff, 0xa0, 0x30, 0x1e, 0xa4, 0xd3, 0xb6, 0xbc, 0xaa, 0x3a, 0x01, 0x50,
|
||||||
|
0x7e, 0xd8, 0xd8, 0xa5, 0x3c, 0xff, 0x16, 0x5b, 0x28, 0x03, 0xc4, 0x1d,
|
||||||
|
0x00, 0x0c, 0x4e, 0x00, 0x3e, 0x00, 0xa6, 0xb0, 0x00, 0xbc, 0xc6, 0x57,
|
||||||
|
0x8c, 0x01, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 0xff, 0xe8,
|
||||||
|
0xe0, 0xe0, 0xe0, 0xef, 0xef, 0xe3, 0xe3, 0xe5, 0xe5, 0xe7, 0xe7, 0xee,
|
||||||
|
0xef, 0xef, 0xe7, 0xe7, 0xe2, 0xef, 0xe7, 0xe7, 0xec, 0xec, 0xec, 0xe7,
|
||||||
|
0xec, 0xec, 0xec, 0xe2, 0x00, 0xff, 0xe8, 0xe1, 0xe8, 0xe8, 0xef, 0xeb,
|
||||||
|
0xff, 0xff, 0xe0, 0xff, 0xff, 0xef, 0xee, 0xef, 0xe7, 0xe7, 0x00, 0xff,
|
||||||
|
0xe8, 0xe7, 0xe7, 0xe7, 0xe8, 0xe1, 0xe2, 0xee, 0xee, 0xee, 0xee, 0xe8,
|
||||||
|
0xff, 0xff, 0xe1, 0xe1, 0xef, 0xee, 0xe7, 0xe8, 0xee, 0xe7, 0xff, 0xff,
|
||||||
|
0xff, 0xee, 0xe1, 0xef, 0xe7, 0xe8, 0xef, 0xef, 0xeb, 0xe9, 0xe8, 0xe9,
|
||||||
|
0xe9, 0xe8, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xee, 0xe7, 0xe8,
|
||||||
|
0xef, 0xef, 0xee, 0xef, 0xee, 0xef, 0xee, 0xee, 0xef, 0xee, 0xee, 0xee,
|
||||||
|
0xe1, 0xe8, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xb3, 0xb2, 0xb7,
|
||||||
|
0xb6, 0x37, 0xd4, 0xcf, 0xcf, 0xa0, 0xcc, 0xcf, 0xce, 0x47, 0xd3, 0xd9,
|
||||||
|
0xce, 0xd4, 0xc1, 0x58, 0xcd, 0xc5, 0xcd, 0xa0, 0xc6, 0xd5, 0xcc, 0x4c,
|
||||||
|
0xd4, 0xcf, 0xcf, 0xa0, 0xcd, 0xc1, 0xce, 0xd9, 0xa0, 0xd0, 0xc1, 0xd2,
|
||||||
|
0xc5, 0xce, 0x53, 0xd3, 0xd4, 0xd2, 0xc9, 0xce, 0x47, 0xce, 0xcf, 0xa0,
|
||||||
|
0xc5, 0xce, 0x44, 0xc2, 0xc1, 0xc4, 0xa0, 0xc2, 0xd2, 0xc1, 0xce, 0xc3,
|
||||||
|
0x48, 0xbe, 0xb8, 0xa0, 0xc7, 0xcf, 0xd3, 0xd5, 0xc2, 0x53, 0xc2, 0xc1,
|
||||||
|
0xc4, 0xa0, 0xd2, 0xc5, 0xd4, 0xd5, 0xd2, 0x4e, 0xbe, 0xb8, 0xa0, 0xc6,
|
||||||
|
0xcf, 0xd2, 0x53, 0xc2, 0xc1, 0xc4, 0xa0, 0xce, 0xc5, 0xd8, 0x54, 0xd3,
|
||||||
|
0xd4, 0xcf, 0xd0, 0xd0, 0xc5, 0xc4, 0xa0, 0xc1, 0xd4, 0x20, 0xaa, 0xaa,
|
||||||
|
0xaa, 0x20, 0xa0, 0xc5, 0xd2, 0xd2, 0x0d, 0xbe, 0xb2, 0xb5, 0x35, 0xd2,
|
||||||
|
0xc1, 0xce, 0xc7, 0x45, 0xc4, 0xc9, 0x4d, 0xd3, 0xd4, 0xd2, 0xa0, 0xcf,
|
||||||
|
0xd6, 0xc6, 0x4c, 0xdc, 0x0d, 0xd2, 0xc5, 0xd4, 0xd9, 0xd0, 0xc5, 0xa0,
|
||||||
|
0xcc, 0xc9, 0xce, 0xc5, 0x8d, 0x3f, 0x46, 0xd9, 0x90, 0x03, 0x4c, 0xc3,
|
||||||
|
0xe8, 0xa6, 0xcf, 0x9a, 0xa6, 0xce, 0xa0, 0x8d, 0xd0, 0x02, 0xa0, 0x99,
|
||||||
|
0x20, 0xc4, 0xe3, 0x86, 0xce, 0xba, 0x86, 0xcf, 0xa0, 0xfe, 0x84, 0xd9,
|
||||||
|
0xc8, 0x84, 0xc8, 0x20, 0x99, 0xe2, 0x84, 0xf1, 0xa2, 0x20, 0xa9, 0x30,
|
||||||
|
0x20, 0x91, 0xe4, 0xe6, 0xd9, 0xa6, 0xce, 0xa4, 0xc8, 0x0a, 0x85, 0xce,
|
||||||
|
0xc8, 0xb9, 0x00, 0x02, 0xc9, 0x74, 0xf0, 0xd2, 0x49, 0xb0, 0xc9, 0x0a,
|
||||||
|
0xb0, 0xf0, 0xc8, 0xc8, 0x84, 0xc8, 0xb9, 0x00, 0x02, 0x48, 0xb9, 0xff,
|
||||||
|
0x01, 0xa0, 0x00, 0x20, 0x08, 0xe7, 0x68, 0x95, 0xa0, 0xa5, 0xce, 0xc9,
|
||||||
|
0xc7, 0xd0, 0x03, 0x20, 0x6f, 0xe7, 0x4c, 0x01, 0xe8, 0xff, 0xff, 0xff,
|
||||||
|
0x50, 0x20, 0x13, 0xec, 0xd0, 0x15, 0x20, 0x0b, 0xec, 0xd0, 0x10, 0x20,
|
||||||
|
0x82, 0xe7, 0x20, 0x6f, 0xe7, 0x50, 0x03, 0x20, 0x82, 0xe7, 0x20, 0x59,
|
||||||
|
0xe7, 0x56, 0x50, 0x4c, 0x36, 0xe7, 0xff, 0xff, 0xc1, 0xff, 0x7f, 0xd1,
|
||||||
|
0xcc, 0xc7, 0xcf, 0xce, 0xc5, 0x9a, 0x98, 0x8b, 0x96, 0x95, 0x93, 0xbf,
|
||||||
|
0xb2, 0x32, 0x2d, 0x2b, 0xbc, 0xb0, 0xac, 0xbe, 0x35, 0x8e, 0x61, 0xff,
|
||||||
|
0xff, 0xff, 0xdd, 0xfb, 0x20, 0xc9, 0xef, 0x15, 0x4f, 0x10, 0x05, 0x20,
|
||||||
|
0xc9, 0xef, 0x35, 0x4f, 0x95, 0x50, 0x10, 0xcb, 0x4c, 0xc9, 0xef, 0x40,
|
||||||
|
0x60, 0x8d, 0x60, 0x8b, 0x00, 0x7e, 0x8c, 0x33, 0x00, 0x00, 0x60, 0x03,
|
||||||
|
0xbf, 0x12, 0x00, 0x40, 0x89, 0xc9, 0x47, 0x9d, 0x17, 0x68, 0x9d, 0x0a,
|
||||||
|
0x00, 0x40, 0x60, 0x8d, 0x60, 0x8b, 0x00, 0x7e, 0x8c, 0x3c, 0x00, 0x00,
|
||||||
|
0x60, 0x03, 0xbf, 0x1b, 0x4b, 0x67, 0xb4, 0xa1, 0x07, 0x8c, 0x07, 0xae,
|
||||||
|
0xa9, 0xac, 0xa8, 0x67, 0x8c, 0x07, 0xb4, 0xaf, 0xac, 0xb0, 0x67, 0x9d,
|
||||||
|
0xb2, 0xaf, 0xac, 0xaf, 0xa3, 0x67, 0x8c, 0x07, 0xa5, 0xab, 0xaf, 0xb0,
|
||||||
|
0xf4, 0xae, 0xa9, 0xb2, 0xb0, 0x7f, 0x0e, 0x27, 0xb4, 0xae, 0xa9, 0xb2,
|
||||||
|
0xb0, 0x7f, 0x0e, 0x28, 0xb4, 0xae, 0xa9, 0xb2, 0xb0, 0x64, 0x07, 0xa6,
|
||||||
|
0xa9, 0x67, 0xaf, 0xb4, 0xaf, 0xa7, 0x78, 0xb4, 0xa5, 0xac, 0x78, 0x7f,
|
||||||
|
0x02, 0xad, 0xa5, 0xb2, 0x67, 0xa2, 0xb5, 0xb3, 0xaf, 0xa7, 0xee, 0xb2,
|
||||||
|
0xb5, 0xb4, 0xa5, 0xb2, 0x7e, 0x8c, 0x39, 0xb4, 0xb8, 0xa5, 0xae, 0x67,
|
||||||
|
0xb0, 0xa5, 0xb4, 0xb3, 0x27, 0xaf, 0xb4, 0x07, 0x9d, 0x19, 0xb2, 0xaf,
|
||||||
|
0xa6, 0x7f, 0x05, 0x37, 0xb4, 0xb5, 0xb0, 0xae, 0xa9, 0x7f, 0x05, 0x28,
|
||||||
|
0xb4, 0xb5, 0xb0, 0xae, 0xa9, 0x7f, 0x05, 0x2a, 0xb4, 0xb5, 0xb0, 0xae,
|
||||||
|
0xa9, 0xe4, 0xae, 0xa5, 0x00, 0xff, 0xff, 0x47, 0xa2, 0xa1, 0xb4, 0x7f,
|
||||||
|
0x0d, 0x30, 0xad, 0xa9, 0xa4, 0x7f, 0x0d, 0x23, 0xad, 0xa9, 0xa4, 0x67,
|
||||||
|
0xac, 0xac, 0xa1, 0xa3, 0x00, 0x40, 0x80, 0xc0, 0xc1, 0x80, 0x00, 0x47,
|
||||||
|
0x8c, 0x68, 0x8c, 0xdb, 0x67, 0x9b, 0x68, 0x9b, 0x50, 0x8c, 0x63, 0x8c,
|
||||||
|
0x7f, 0x01, 0x51, 0x07, 0x88, 0x29, 0x84, 0x80, 0xc4, 0x80, 0x57, 0x71,
|
||||||
|
0x07, 0x88, 0x14, 0xed, 0xa5, 0xad, 0xaf, 0xac, 0xed, 0xa5, 0xad, 0xa9,
|
||||||
|
0xa8, 0xf2, 0xaf, 0xac, 0xaf, 0xa3, 0x71, 0x08, 0x88, 0xae, 0xa5, 0xac,
|
||||||
|
0x68, 0x83, 0x08, 0x68, 0x9d, 0x08, 0x71, 0x07, 0x88, 0x60, 0x76, 0xb4,
|
||||||
|
0xaf, 0xae, 0x76, 0x8d, 0x76, 0x8b, 0x51, 0x07, 0x88, 0x19, 0xb8, 0xa4,
|
||||||
|
0xae, 0xb2, 0xf2, 0xb3, 0xb5, 0xf3, 0xa2, 0xa1, 0xee, 0xa7, 0xb3, 0xe4,
|
||||||
|
0xae, 0xb2, 0xeb, 0xa5, 0xa5, 0xb0, 0x51, 0x07, 0x88, 0x39, 0x81, 0xc1,
|
||||||
|
0x4f, 0x7f, 0x0f, 0x2f, 0x00, 0x51, 0x06, 0x88, 0x29, 0xc2, 0x0c, 0x82,
|
||||||
|
0x57, 0x8c, 0x6a, 0x8c, 0x42, 0xae, 0xa5, 0xa8, 0xb4, 0x60, 0xae, 0xa5,
|
||||||
|
0xa8, 0xb4, 0x4f, 0x7e, 0x1e, 0x35, 0x8c, 0x27, 0x51, 0x07, 0x88, 0x09,
|
||||||
|
0x8b, 0xfe, 0xe4, 0xaf, 0xad, 0xf2, 0xaf, 0xe4, 0xae, 0xa1, 0xdc, 0xde,
|
||||||
|
0x9c, 0xdd, 0x9c, 0xde, 0xdd, 0x9e, 0xc3, 0xdd, 0xcf, 0xca, 0xcd, 0xcb,
|
||||||
|
0x00, 0x47, 0x9d, 0xad, 0xa5, 0xad, 0xaf, 0xac, 0x76, 0x9d, 0xad, 0xa5,
|
||||||
|
0xad, 0xa9, 0xa8, 0xe6, 0xa6, 0xaf, 0x60, 0x8c, 0x20, 0xaf, 0xb4, 0xb5,
|
||||||
|
0xa1, 0xf2, 0xac, 0xa3, 0xf2, 0xa3, 0xb3, 0x60, 0x8c, 0x20, 0xac, 0xa5,
|
||||||
|
0xa4, 0xee, 0xb5, 0xb2, 0x60, 0xae, 0xb5, 0xb2, 0xf4, 0xb3, 0xa9, 0xac,
|
||||||
|
0x60, 0x8c, 0x20, 0xb4, 0xb3, 0xa9, 0xac, 0x7a, 0x7e, 0x9a, 0x22, 0x20,
|
||||||
|
0x00, 0x60, 0x03, 0xbf, 0x60, 0x03, 0xbf, 0x1f, 0x20, 0xb1, 0xe7, 0xe8,
|
||||||
|
0xe8, 0xb5, 0x4f, 0x85, 0xda, 0xb5, 0x77, 0x85, 0xdb, 0xb4, 0x4e, 0x98,
|
||||||
|
0xd5, 0x76, 0xb0, 0x09, 0xb1, 0xda, 0x20, 0xc9, 0xe3, 0xc8, 0x4c, 0x0f,
|
||||||
|
0xee, 0xa9, 0xff, 0x85, 0xd5, 0x60, 0xe8, 0xa9, 0x00, 0x95, 0x78, 0x95,
|
||||||
|
0xa0, 0xb5, 0x77, 0x38, 0xf5, 0x4f, 0x95, 0x50, 0x4c, 0x23, 0xe8, 0xff,
|
||||||
|
0x20, 0x15, 0xe7, 0xa5, 0xcf, 0xd0, 0x28, 0xa5, 0xce, 0x60, 0x20, 0x34,
|
||||||
|
0xee, 0xa4, 0xc8, 0xc9, 0x30, 0xb0, 0x21, 0xc0, 0x28, 0xb0, 0x1d, 0x60,
|
||||||
|
0xea, 0xea, 0x20, 0x34, 0xee, 0x60, 0xea, 0x8a, 0xa2, 0x01, 0xb4, 0xce,
|
||||||
|
0x94, 0x4c, 0xb4, 0x48, 0x94, 0xca, 0xca, 0xf0, 0xf5, 0xaa, 0x60, 0xa0,
|
||||||
|
0x77, 0x4c, 0xe0, 0xe3, 0xa0, 0x7b, 0xd0, 0xf9, 0x20, 0x54, 0xe2, 0xa5,
|
||||||
|
0xda, 0xd0, 0x07, 0xa5, 0xdb, 0xd0, 0x03, 0x4c, 0x7e, 0xe7, 0x06, 0xce,
|
||||||
|
0x26, 0xcf, 0x26, 0xe6, 0x26, 0xe7, 0xa5, 0xe6, 0xc5, 0xda, 0xa5, 0xe7,
|
||||||
|
0xe5, 0xdb, 0x90, 0x0a, 0x85, 0xe7, 0xa5, 0xe6, 0xe5, 0xda, 0x85, 0xe6,
|
||||||
|
0xe6, 0xce, 0x88, 0xd0, 0xe1, 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x20, 0x15, 0xe7, 0x6c, 0xce, 0x00, 0xa5, 0x4c, 0xd0, 0x02, 0xc6, 0x4d,
|
||||||
|
0xc6, 0x4c, 0xa5, 0x48, 0xd0, 0x02, 0xc6, 0x49, 0xc6, 0x48, 0xa0, 0x00,
|
||||||
|
0xb1, 0x4c, 0x91, 0x48, 0xa5, 0xca, 0xc5, 0x4c, 0xa5, 0xcb, 0xe5, 0x4d,
|
||||||
|
0x90, 0xe0, 0x4c, 0x53, 0xee, 0xc9, 0x28, 0xb0, 0x9b, 0xa8, 0xa5, 0xc8,
|
||||||
|
0x60, 0xea, 0xea, 0x98, 0xaa, 0xa0, 0x6e, 0x20, 0xc4, 0xe3, 0x8a, 0xa8,
|
||||||
|
0x20, 0xc4, 0xe3, 0xa0, 0x72, 0x4c, 0xc4, 0xe3, 0x20, 0x15, 0xe7, 0x06,
|
||||||
|
0xce, 0x26, 0xcf, 0x30, 0xfa, 0xb0, 0xdc, 0xd0, 0x04, 0xc5, 0xce, 0xb0,
|
||||||
|
0xd6, 0x60, 0x20, 0x15, 0xe7, 0xb1, 0xce, 0x94, 0x9f, 0x4c, 0x08, 0xe7,
|
||||||
|
0x20, 0x34, 0xee, 0xa5, 0xce, 0x48, 0x20, 0x15, 0xe7, 0x68, 0x91, 0xce,
|
||||||
|
0x60, 0xff, 0xff, 0xff, 0x20, 0x6c, 0xee, 0xa5, 0xce, 0x85, 0xe6, 0xa5,
|
||||||
|
0xcf, 0x85, 0xe7, 0x4c, 0x44, 0xe2, 0x20, 0xe4, 0xee, 0x4c, 0x34, 0xe1,
|
||||||
|
0x20, 0xe4, 0xee, 0xb4, 0x78, 0xb5, 0x50, 0x69, 0xfe, 0xb0, 0x01, 0x88,
|
||||||
|
0x85, 0xda, 0x84, 0xdb, 0x18, 0x65, 0xce, 0x95, 0x50, 0x98, 0x65, 0xcf,
|
||||||
|
0x95, 0x78, 0xa0, 0x00, 0xb5, 0x50, 0xd1, 0xda, 0xc8, 0xb5, 0x78, 0xf1,
|
||||||
|
0xda, 0xb0, 0x80, 0x4c, 0x23, 0xe8, 0x20, 0x15, 0xe7, 0xa5, 0x4e, 0x20,
|
||||||
|
0x08, 0xe7, 0xa5, 0x4f, 0xd0, 0x04, 0xc5, 0x4e, 0x69, 0x00, 0x29, 0x7f,
|
||||||
|
0x85, 0x4f, 0x95, 0xa0, 0xa0, 0x11, 0xa5, 0x4f, 0x0a, 0x18, 0x69, 0x40,
|
||||||
|
0x0a, 0x26, 0x4e, 0x26, 0x4f, 0x88, 0xd0, 0xf2, 0xa5, 0xce, 0x20, 0x08,
|
||||||
|
0xe7, 0xa5, 0xcf, 0x95, 0xa0, 0x4c, 0x7a, 0xe2, 0x20, 0x15, 0xe7, 0xa4,
|
||||||
|
0xce, 0xc4, 0x4c, 0xa5, 0xcf, 0xe5, 0x4d, 0x90, 0x1f, 0x84, 0x48, 0xa5,
|
||||||
|
0xcf, 0x85, 0x49, 0x4c, 0xb6, 0xee, 0x20, 0x15, 0xe7, 0xa4, 0xce, 0xc4,
|
||||||
|
0xca, 0xa5, 0xcf, 0xe5, 0xcb, 0xb0, 0x09, 0x84, 0x4a, 0xa5, 0xcf, 0x85,
|
||||||
|
0x4b, 0x4c, 0xb7, 0xe5, 0x4c, 0xcb, 0xee, 0xea, 0xea, 0xea, 0xea, 0x20,
|
||||||
|
0xc9, 0xef, 0x20, 0x71, 0xe1, 0x4c, 0xbf, 0xef, 0x20, 0x03, 0xee, 0xa9,
|
||||||
|
0xff, 0x85, 0xc8, 0xa9, 0x74, 0x8d, 0x00, 0x02, 0x60, 0x20, 0x36, 0xe7,
|
||||||
|
0xe8, 0x20, 0x36, 0xe7, 0xb5, 0x50, 0x60, 0xa9, 0x00, 0x85, 0x4a, 0x85,
|
||||||
|
0x4c, 0xa9, 0x08, 0x85, 0x4b, 0xa9, 0x10, 0x85, 0x4d, 0x4c, 0xad, 0xe5,
|
||||||
|
0xd5, 0x78, 0xd0, 0x01, 0x18, 0x4c, 0x02, 0xe1, 0x20, 0xb7, 0xe5, 0x4c,
|
||||||
|
0x36, 0xe8, 0x20, 0xb7, 0xe5, 0x4c, 0x5b, 0xe8, 0xe0, 0x80, 0xd0, 0x01,
|
||||||
|
0x88, 0x4c, 0x0c, 0xe0
|
||||||
|
];
|
1478
testprogram-cbmbasic.js
Normal file
1478
testprogram-cbmbasic.js
Normal file
File diff suppressed because it is too large
Load Diff
160
testprogram-hmc-6502-AllSuiteA.js
Normal file
160
testprogram-hmc-6502-AllSuiteA.js
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
// This file testprogram.js can be substituted by one of several tests
|
||||||
|
// which may not be redistributable
|
||||||
|
// for example
|
||||||
|
// AllSuiteA from hmc-6502 project loaded at 0xf000 with entry point 0xf000
|
||||||
|
// success if 0210 contains FF (otherwise is a failure signature
|
||||||
|
// about halfcycle 2000 it goes wrong
|
||||||
|
// invoke with
|
||||||
|
// ?graphics=false&expert=true&steps=3948&r=f000&a=fffe&d=a4f5&loglevel=-1
|
||||||
|
//
|
||||||
|
// (can use xxd -i to convert binary into C include syntax, as a starting point)
|
||||||
|
//
|
||||||
|
testprogramAddress=0xf000;
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0xa9, 0x00, 0x8d, 0x10, 0x02, 0xa9, 0x55, 0x8d, 0x00, 0x02, 0xa9, 0xaa,
|
||||||
|
0x8d, 0x01, 0x02, 0xa9, 0xff, 0x8d, 0x02, 0x02, 0xa9, 0x6e, 0x8d, 0x03,
|
||||||
|
0x02, 0xa9, 0x42, 0x8d, 0x04, 0x02, 0xa9, 0x33, 0x8d, 0x05, 0x02, 0xa9,
|
||||||
|
0x9d, 0x8d, 0x06, 0x02, 0xa9, 0x7f, 0x8d, 0x07, 0x02, 0xa9, 0xa5, 0x8d,
|
||||||
|
0x08, 0x02, 0xa9, 0x1f, 0x8d, 0x09, 0x02, 0xa9, 0xce, 0x8d, 0x0a, 0x02,
|
||||||
|
0xa9, 0x29, 0x8d, 0x0b, 0x02, 0xa9, 0x42, 0x8d, 0x0c, 0x02, 0xa9, 0x6c,
|
||||||
|
0x8d, 0x0d, 0x02, 0xa9, 0x42, 0x8d, 0x0e, 0x02, 0xa9, 0x55, 0xa2, 0x2a,
|
||||||
|
0xa0, 0x73, 0x85, 0x81, 0xa9, 0x01, 0x85, 0x61, 0xa9, 0x7e, 0xa5, 0x81,
|
||||||
|
0x8d, 0x10, 0x09, 0xa9, 0x7e, 0xad, 0x10, 0x09, 0x95, 0x56, 0xa9, 0x7e,
|
||||||
|
0xb5, 0x56, 0x84, 0x60, 0x91, 0x60, 0xa9, 0x7e, 0xb1, 0x60, 0x9d, 0xff,
|
||||||
|
0x07, 0xa9, 0x7e, 0xbd, 0xff, 0x07, 0x99, 0xff, 0x07, 0xa9, 0x7e, 0xb9,
|
||||||
|
0xff, 0x07, 0x81, 0x36, 0xa9, 0x7e, 0xa1, 0x36, 0x86, 0x50, 0xa6, 0x60,
|
||||||
|
0xa4, 0x50, 0x8e, 0x13, 0x09, 0xa2, 0x22, 0xae, 0x13, 0x09, 0x8c, 0x14,
|
||||||
|
0x09, 0xa0, 0x99, 0xac, 0x14, 0x09, 0x94, 0x2d, 0x96, 0x77, 0xa0, 0x99,
|
||||||
|
0xb4, 0x2d, 0xa2, 0x22, 0xb6, 0x77, 0xa0, 0x99, 0xbc, 0xa0, 0x08, 0xa2,
|
||||||
|
0x22, 0xbe, 0xa1, 0x08, 0x9d, 0x00, 0x02, 0xad, 0x2a, 0x02, 0xcd, 0x00,
|
||||||
|
0x02, 0xf0, 0x03, 0x4c, 0xca, 0xf5, 0xa9, 0xfe, 0x8d, 0x10, 0x02, 0xa9,
|
||||||
|
0x55, 0x29, 0x53, 0x09, 0x38, 0x49, 0x11, 0x85, 0x99, 0xa9, 0xb9, 0x85,
|
||||||
|
0x10, 0xa9, 0xe7, 0x85, 0x11, 0xa9, 0x39, 0x85, 0x12, 0xa5, 0x99, 0x25,
|
||||||
|
0x10, 0x05, 0x11, 0x45, 0x12, 0xa2, 0x10, 0x85, 0x99, 0xa9, 0xbc, 0x85,
|
||||||
|
0x20, 0xa9, 0x31, 0x85, 0x21, 0xa9, 0x17, 0x85, 0x22, 0xa5, 0x99, 0x35,
|
||||||
|
0x10, 0x15, 0x11, 0x55, 0x12, 0x85, 0x99, 0xa9, 0x6f, 0x8d, 0x10, 0x01,
|
||||||
|
0xa9, 0x3c, 0x8d, 0x11, 0x01, 0xa9, 0x27, 0x8d, 0x12, 0x01, 0xa5, 0x99,
|
||||||
|
0x2d, 0x10, 0x01, 0x0d, 0x11, 0x01, 0x4d, 0x12, 0x01, 0x85, 0x99, 0xa9,
|
||||||
|
0x8a, 0x8d, 0x20, 0x01, 0xa9, 0x47, 0x8d, 0x21, 0x01, 0xa9, 0x8f, 0x8d,
|
||||||
|
0x22, 0x01, 0xa5, 0x99, 0x3d, 0x10, 0x01, 0x1d, 0x11, 0x01, 0x5d, 0x12,
|
||||||
|
0x01, 0xa0, 0x20, 0x85, 0x99, 0xa9, 0x73, 0x8d, 0x30, 0x01, 0xa9, 0x2a,
|
||||||
|
0x8d, 0x31, 0x01, 0xa9, 0xf1, 0x8d, 0x32, 0x01, 0xa5, 0x99, 0x39, 0x10,
|
||||||
|
0x01, 0x19, 0x11, 0x01, 0x59, 0x12, 0x01, 0x85, 0x99, 0xa9, 0x70, 0x85,
|
||||||
|
0x30, 0xa9, 0x01, 0x85, 0x31, 0xa9, 0x71, 0x85, 0x32, 0xa9, 0x01, 0x85,
|
||||||
|
0x33, 0xa9, 0x72, 0x85, 0x34, 0xa9, 0x01, 0x85, 0x35, 0xa9, 0xc5, 0x8d,
|
||||||
|
0x70, 0x01, 0xa9, 0x7c, 0x8d, 0x71, 0x01, 0xa9, 0xa1, 0x8d, 0x72, 0x01,
|
||||||
|
0xa5, 0x99, 0x21, 0x20, 0x01, 0x22, 0x41, 0x24, 0x85, 0x99, 0xa9, 0x60,
|
||||||
|
0x85, 0x40, 0xa9, 0x01, 0x85, 0x41, 0xa9, 0x61, 0x85, 0x42, 0xa9, 0x01,
|
||||||
|
0x85, 0x43, 0xa9, 0x62, 0x85, 0x44, 0xa9, 0x01, 0x85, 0x45, 0xa9, 0x37,
|
||||||
|
0x8d, 0x50, 0x02, 0xa9, 0x23, 0x8d, 0x51, 0x02, 0xa9, 0x9d, 0x8d, 0x52,
|
||||||
|
0x02, 0xa5, 0x99, 0xa0, 0xf0, 0x31, 0x40, 0x11, 0x42, 0x51, 0x44, 0x85,
|
||||||
|
0xa9, 0xa5, 0xa9, 0xcd, 0x01, 0x02, 0xf0, 0x08, 0xa9, 0x01, 0x8d, 0x10,
|
||||||
|
0x02, 0x4c, 0xca, 0xf5, 0xa9, 0xff, 0xa2, 0x00, 0x85, 0x90, 0xe6, 0x90,
|
||||||
|
0xe6, 0x90, 0xa5, 0x90, 0xa6, 0x90, 0x95, 0x90, 0xf6, 0x90, 0xb5, 0x90,
|
||||||
|
0xa6, 0x91, 0x9d, 0x90, 0x01, 0xee, 0x92, 0x01, 0xbd, 0x90, 0x01, 0xae,
|
||||||
|
0x92, 0x01, 0x9d, 0x90, 0x01, 0xfe, 0x90, 0x01, 0xbd, 0x90, 0x01, 0xae,
|
||||||
|
0x93, 0x01, 0x9d, 0x70, 0x01, 0xde, 0x70, 0x01, 0xbd, 0x70, 0x01, 0xae,
|
||||||
|
0x74, 0x01, 0x9d, 0x70, 0x01, 0xce, 0x73, 0x01, 0xbd, 0x70, 0x01, 0xae,
|
||||||
|
0x73, 0x01, 0x95, 0x70, 0xd6, 0x70, 0xb5, 0x70, 0xa6, 0x72, 0x95, 0x70,
|
||||||
|
0xc6, 0x71, 0xc6, 0x71, 0xa5, 0x71, 0xcd, 0x02, 0x02, 0xf0, 0x08, 0xa9,
|
||||||
|
0x02, 0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0xa9, 0x4b, 0x4a, 0x0a, 0x85,
|
||||||
|
0x50, 0x06, 0x50, 0x06, 0x50, 0x46, 0x50, 0xa5, 0x50, 0xa6, 0x50, 0x09,
|
||||||
|
0xc9, 0x85, 0x60, 0x16, 0x4c, 0x56, 0x4c, 0x56, 0x4c, 0xb5, 0x4c, 0xa6,
|
||||||
|
0x60, 0x09, 0x41, 0x8d, 0x2e, 0x01, 0x5e, 0x00, 0x01, 0x5e, 0x00, 0x01,
|
||||||
|
0x1e, 0x00, 0x01, 0xbd, 0x00, 0x01, 0xae, 0x2e, 0x01, 0x09, 0x81, 0x9d,
|
||||||
|
0x00, 0x01, 0x4e, 0x36, 0x01, 0x4e, 0x36, 0x01, 0x0e, 0x36, 0x01, 0xbd,
|
||||||
|
0x00, 0x01, 0x2a, 0x2a, 0x6a, 0x85, 0x70, 0xa6, 0x70, 0x09, 0x03, 0x95,
|
||||||
|
0x0c, 0x26, 0xc0, 0x66, 0xc0, 0x66, 0xc0, 0xb5, 0x0c, 0xa6, 0xc0, 0x85,
|
||||||
|
0xd0, 0x36, 0x75, 0x36, 0x75, 0x76, 0x75, 0xa5, 0xd0, 0xa6, 0xd0, 0x9d,
|
||||||
|
0x00, 0x01, 0x2e, 0xb7, 0x01, 0x2e, 0xb7, 0x01, 0x2e, 0xb7, 0x01, 0x6e,
|
||||||
|
0xb7, 0x01, 0xbd, 0x00, 0x01, 0xae, 0xb7, 0x01, 0x8d, 0xdd, 0x01, 0x3e,
|
||||||
|
0x00, 0x01, 0x7e, 0x00, 0x01, 0x7e, 0x00, 0x01, 0xad, 0xdd, 0x01, 0xcd,
|
||||||
|
0x03, 0x02, 0xf0, 0x08, 0xa9, 0x03, 0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5,
|
||||||
|
0xa9, 0xe8, 0x85, 0x20, 0xa9, 0xf2, 0x85, 0x21, 0xa9, 0x00, 0x09, 0x03,
|
||||||
|
0x4c, 0xd5, 0xf2, 0x09, 0xff, 0x09, 0x30, 0x20, 0xe1, 0xf2, 0x09, 0x42,
|
||||||
|
0x6c, 0x20, 0x00, 0x09, 0xff, 0x85, 0x30, 0xa6, 0x30, 0xa9, 0x00, 0x60,
|
||||||
|
0x95, 0x0d, 0xa5, 0x40, 0xcd, 0x04, 0x02, 0xf0, 0x08, 0xa9, 0x04, 0x8d,
|
||||||
|
0x10, 0x02, 0x4c, 0xca, 0xf5, 0xa9, 0x35, 0xaa, 0xca, 0xca, 0xe8, 0x8a,
|
||||||
|
0xa8, 0x88, 0x88, 0xc8, 0x98, 0xaa, 0xa9, 0x20, 0x9a, 0xa2, 0x10, 0xba,
|
||||||
|
0x8a, 0x85, 0x40, 0xa5, 0x40, 0xcd, 0x05, 0x02, 0xf0, 0x08, 0xa9, 0x05,
|
||||||
|
0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0x2a, 0xa9, 0x6a, 0x85, 0x50, 0xa9,
|
||||||
|
0x6b, 0x85, 0x51, 0xa9, 0xa1, 0x85, 0x60, 0xa9, 0xa2, 0x85, 0x61, 0xa9,
|
||||||
|
0xff, 0x69, 0xff, 0x69, 0xff, 0xe9, 0xae, 0x85, 0x40, 0xa6, 0x40, 0x75,
|
||||||
|
0x00, 0xf5, 0x01, 0x65, 0x60, 0xe5, 0x61, 0x8d, 0x20, 0x01, 0xa9, 0x4d,
|
||||||
|
0x8d, 0x21, 0x01, 0xa9, 0x23, 0x6d, 0x20, 0x01, 0xed, 0x21, 0x01, 0x85,
|
||||||
|
0xf0, 0xa6, 0xf0, 0xa9, 0x64, 0x8d, 0x24, 0x01, 0xa9, 0x62, 0x8d, 0x25,
|
||||||
|
0x01, 0xa9, 0x26, 0x7d, 0x00, 0x01, 0xfd, 0x01, 0x01, 0x85, 0xf1, 0xa4,
|
||||||
|
0xf1, 0xa9, 0xe5, 0x8d, 0x28, 0x01, 0xa9, 0xe9, 0x8d, 0x29, 0x01, 0xa9,
|
||||||
|
0x34, 0x79, 0x00, 0x01, 0xf9, 0x01, 0x01, 0x85, 0xf2, 0xa6, 0xf2, 0xa9,
|
||||||
|
0x20, 0x85, 0x70, 0xa9, 0x01, 0x85, 0x71, 0xa9, 0x24, 0x85, 0x72, 0xa9,
|
||||||
|
0x01, 0x85, 0x73, 0x61, 0x41, 0xe1, 0x3f, 0x85, 0xf3, 0xa4, 0xf3, 0xa9,
|
||||||
|
0xda, 0x85, 0x80, 0xa9, 0x00, 0x85, 0x81, 0xa9, 0xdc, 0x85, 0x82, 0xa9,
|
||||||
|
0x00, 0x85, 0x83, 0xa9, 0xaa, 0x71, 0x80, 0xf1, 0x82, 0x85, 0x30, 0xa5,
|
||||||
|
0x30, 0xcd, 0x06, 0x02, 0xf0, 0x08, 0xa9, 0x06, 0x8d, 0x10, 0x02, 0x4c,
|
||||||
|
0xca, 0xf5, 0xa9, 0x00, 0x85, 0x34, 0xa9, 0xff, 0x8d, 0x30, 0x01, 0xa9,
|
||||||
|
0x99, 0x8d, 0x9d, 0x01, 0xa9, 0xdb, 0x8d, 0x99, 0x01, 0xa9, 0x2f, 0x85,
|
||||||
|
0x32, 0xa9, 0x32, 0x85, 0x4f, 0xa9, 0x30, 0x85, 0x33, 0xa9, 0x70, 0x85,
|
||||||
|
0xaf, 0xa9, 0x18, 0x85, 0x30, 0xc9, 0x18, 0xf0, 0x02, 0x29, 0x00, 0x09,
|
||||||
|
0x01, 0xc5, 0x30, 0xd0, 0x02, 0x29, 0x00, 0xa2, 0x00, 0xcd, 0x30, 0x01,
|
||||||
|
0xf0, 0x04, 0x85, 0x40, 0xa6, 0x40, 0xd5, 0x27, 0xd0, 0x06, 0x09, 0x84,
|
||||||
|
0x85, 0x41, 0xa6, 0x41, 0x29, 0xdb, 0xdd, 0x00, 0x01, 0xf0, 0x02, 0x29,
|
||||||
|
0x00, 0x85, 0x42, 0xa4, 0x42, 0x29, 0x00, 0xd9, 0x00, 0x01, 0xd0, 0x02,
|
||||||
|
0x09, 0x0f, 0x85, 0x43, 0xa6, 0x43, 0x09, 0x24, 0xc1, 0x40, 0xf0, 0x02,
|
||||||
|
0x09, 0x7f, 0x85, 0x44, 0xa4, 0x44, 0x49, 0x0f, 0xd1, 0x33, 0xd0, 0x04,
|
||||||
|
0xa5, 0x44, 0x85, 0x15, 0xa5, 0x15, 0xcd, 0x07, 0x02, 0xf0, 0x08, 0xa9,
|
||||||
|
0x07, 0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0xa9, 0xa5, 0x85, 0x20, 0x8d,
|
||||||
|
0x20, 0x01, 0xa9, 0x5a, 0x85, 0x21, 0xa2, 0xa5, 0xe0, 0xa5, 0xf0, 0x02,
|
||||||
|
0xa2, 0x01, 0xe4, 0x20, 0xf0, 0x02, 0xa2, 0x02, 0xec, 0x20, 0x01, 0xf0,
|
||||||
|
0x02, 0xa2, 0x03, 0x86, 0x30, 0xa4, 0x30, 0xc0, 0xa5, 0xf0, 0x02, 0xa0,
|
||||||
|
0x04, 0xc4, 0x20, 0xf0, 0x02, 0xa0, 0x05, 0xcc, 0x20, 0x01, 0xf0, 0x02,
|
||||||
|
0xa0, 0x06, 0x84, 0x31, 0xa5, 0x31, 0x24, 0x20, 0xd0, 0x02, 0xa9, 0x07,
|
||||||
|
0x2c, 0x20, 0x01, 0xd0, 0x02, 0xa9, 0x08, 0x24, 0x21, 0xd0, 0x02, 0x85,
|
||||||
|
0x42, 0xa5, 0x42, 0xcd, 0x08, 0x02, 0xf0, 0x08, 0xa9, 0x08, 0x8d, 0x10,
|
||||||
|
0x02, 0x4c, 0xca, 0xf5, 0xa9, 0x54, 0x85, 0x32, 0xa9, 0xb3, 0x85, 0xa1,
|
||||||
|
0xa9, 0x87, 0x85, 0x43, 0xa2, 0xa1, 0x10, 0x02, 0xa2, 0x32, 0xb4, 0x00,
|
||||||
|
0x10, 0x04, 0xa9, 0x05, 0xa6, 0xa1, 0x30, 0x02, 0xe9, 0x03, 0x30, 0x02,
|
||||||
|
0xa9, 0x41, 0x49, 0x30, 0x85, 0x32, 0x75, 0x00, 0x50, 0x02, 0xa9, 0x03,
|
||||||
|
0x85, 0x54, 0xb6, 0x00, 0x75, 0x51, 0x50, 0x02, 0xa9, 0xe5, 0x75, 0x40,
|
||||||
|
0x70, 0x04, 0x99, 0x01, 0x00, 0x65, 0x55, 0x70, 0x02, 0xa9, 0x00, 0x69,
|
||||||
|
0xf0, 0x90, 0x04, 0x85, 0x60, 0x65, 0x43, 0x90, 0x02, 0xa9, 0xff, 0x65,
|
||||||
|
0x54, 0xb0, 0x04, 0x69, 0x87, 0xa6, 0x60, 0xb0, 0x02, 0xa9, 0x00, 0x95,
|
||||||
|
0x73, 0xa5, 0x80, 0xcd, 0x09, 0x02, 0xf0, 0x08, 0xa9, 0x09, 0x8d, 0x10,
|
||||||
|
0x02, 0x4c, 0xca, 0xf5, 0x69, 0x00, 0xa9, 0x99, 0x69, 0x87, 0x18, 0xea,
|
||||||
|
0x90, 0x04, 0x69, 0x60, 0x69, 0x93, 0x38, 0xea, 0x90, 0x01, 0xb8, 0x50,
|
||||||
|
0x02, 0xa9, 0x00, 0x69, 0xad, 0xea, 0x85, 0x30, 0xa5, 0x30, 0xcd, 0x0a,
|
||||||
|
0x02, 0xf0, 0x08, 0xa9, 0x0a, 0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0x69,
|
||||||
|
0x01, 0xa9, 0x27, 0x69, 0x01, 0x38, 0x08, 0x18, 0x28, 0x69, 0x00, 0x48,
|
||||||
|
0xa9, 0x00, 0x68, 0x85, 0x30, 0xa5, 0x30, 0xcd, 0x0b, 0x02, 0xf0, 0x08,
|
||||||
|
0xa9, 0x0b, 0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0x18, 0xa9, 0x42, 0x90,
|
||||||
|
0x04, 0x85, 0x33, 0xb0, 0x0a, 0xa9, 0xf5, 0x48, 0xa9, 0x61, 0x48, 0x38,
|
||||||
|
0x08, 0x18, 0x40, 0xa5, 0x33, 0xcd, 0x0c, 0x02, 0xf0, 0x08, 0xa9, 0x0c,
|
||||||
|
0x8d, 0x10, 0x02, 0x4c, 0xca, 0xf5, 0x69, 0x01, 0x78, 0xf8, 0x08, 0x68,
|
||||||
|
0x85, 0x20, 0x58, 0xd8, 0x08, 0x68, 0x65, 0x20, 0x85, 0x21, 0xa5, 0x21,
|
||||||
|
0xcd, 0x0d, 0x02, 0xf0, 0x08, 0xa9, 0x0d, 0x8d, 0x10, 0x02,
|
||||||
|
0x4c, 0xca, 0xf5, // JMP theend
|
||||||
|
// expect result: $60 = 0x42
|
||||||
|
// test14:
|
||||||
|
0x4c, 0xa9, 0xf5, // JMP pass_intrp -- skip the BRK handler
|
||||||
|
|
||||||
|
0xa9, 0x41, // LDA #$41 -- this is the BRK handler
|
||||||
|
0x85, 0x60, // STA $60
|
||||||
|
0x40, // RTI -- end of BRK handler
|
||||||
|
|
||||||
|
// pass_intrp:
|
||||||
|
0xa9, 0xff, // LDA #$FF
|
||||||
|
0x85, 0x60, // STA $60
|
||||||
|
0x00, 0x00, // BRK (two bytes) at 0xf5ad
|
||||||
|
0xe6, 0x60, // INC $60
|
||||||
|
0xa5, 0x60, 0xcd, 0x0e, 0x02, 0xf0, 0x08,
|
||||||
|
0xa9, 0x0e, 0x8d, 0x10, 0x02,
|
||||||
|
0x4c, 0xca, 0xf5,
|
||||||
|
0xa9, 0xfe,
|
||||||
|
0xcd, 0x10, 0x02
|
||||||
|
, 0xd0, 0x03, // BNE theend
|
||||||
|
0xee, 0x10, 0x02,
|
||||||
|
|
||||||
|
// theend:
|
||||||
|
0xad, 0x10, 0x02, // LDA $0210 (the result, should be 0xFF
|
||||||
|
0x4c, 0xca, 0xf5 // JMP theend
|
||||||
|
];
|
28
testprogram-minimal.js
Normal file
28
testprogram-minimal.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// This file testprogram.js can be substituted by one of several tests
|
||||||
|
// which may not be redistributable
|
||||||
|
// for example
|
||||||
|
// cbmbasic loaded at 0xa000 with entry point 0xe394
|
||||||
|
// test6502 (by Bird Computer) loaded at 0x8000 with entry point 0x8000
|
||||||
|
//
|
||||||
|
// (can use xxd -i to convert binary into C include syntax, as a starting point)
|
||||||
|
//
|
||||||
|
testprogramAddress=0x0000;
|
||||||
|
|
||||||
|
// demonstrate write hook
|
||||||
|
writeTriggers[0x000c]="consolebox.innerHTML = consolebox.innerHTML + String.fromCharCode(d);";
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0xa9, 0x00, // LDA #$00
|
||||||
|
0x20, 0x10, 0x00, // JSR $0010
|
||||||
|
0x4c, 0x02, 0x00, // JMP $0002
|
||||||
|
|
||||||
|
0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x40, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
0xe8, // INX
|
||||||
|
0x88, // DEY
|
||||||
|
0xe6, 0x0c, // INC $0C
|
||||||
|
0x38, // SEC
|
||||||
|
0x69, 0x02, // ADC #$02
|
||||||
|
0x60 // RTS
|
||||||
|
];
|
149
testprogram-test6502.js
Normal file
149
testprogram-test6502.js
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
// testprogram.js is intended to be substituted by one of several tests
|
||||||
|
// which may not be redistributable
|
||||||
|
// for example
|
||||||
|
// cbmbasic loaded at 0xa000 with entry point 0xe394
|
||||||
|
// test6502 (by Bird Computer) loaded at 0x8000 with entry point 0x8000
|
||||||
|
//
|
||||||
|
// (use xxd -i to convert binary into C include syntax, as a starting point)
|
||||||
|
//
|
||||||
|
testprogramAddress=0x8000;
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0xa9, 0x00, 0x20, 0x10, 0x00, 0x4c, 0x02, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xe8, 0x88, 0xe6, 0x40, 0x38, 0x69, 0x02, 0x60
|
||||||
|
];
|
||||||
|
|
||||||
|
testprogram = [
|
||||||
|
0x20, 0xed, 0x85, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x50,
|
||||||
|
0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x0d, 0x0a, 0x00, 0x78,
|
||||||
|
0x38, 0xb0, 0x0b, 0x20, 0xed, 0x85, 0x42, 0x43, 0x53, 0x3a, 0x46, 0x0d,
|
||||||
|
0x0a, 0x00, 0x18, 0x90, 0x0b, 0x20, 0xed, 0x85, 0x42, 0x43, 0x43, 0x3a,
|
||||||
|
0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x00, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x42,
|
||||||
|
0x45, 0x51, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x80, 0xd0, 0x0b, 0x20,
|
||||||
|
0xed, 0x85, 0x42, 0x4e, 0x45, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x09, 0x00,
|
||||||
|
0x30, 0x0b, 0x20, 0xed, 0x85, 0x42, 0x4d, 0x49, 0x3a, 0x46, 0x0d, 0x0a,
|
||||||
|
0x00, 0x49, 0x80, 0x10, 0x0b, 0x20, 0xed, 0x85, 0x42, 0x50, 0x4c, 0x3a,
|
||||||
|
0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x7f, 0x18, 0x69, 0x10, 0x70, 0x0b, 0x20,
|
||||||
|
0xed, 0x85, 0x42, 0x56, 0x53, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xb8, 0x50,
|
||||||
|
0x0b, 0x20, 0xed, 0x85, 0x42, 0x56, 0x43, 0x3a, 0x46, 0x0d, 0x0a, 0x00,
|
||||||
|
0xa9, 0x1b, 0x18, 0xc9, 0x1b, 0x90, 0x1a, 0xd0, 0x18, 0x30, 0x16, 0xa9,
|
||||||
|
0xa1, 0xc9, 0x14, 0x10, 0x10, 0x38, 0xa9, 0x0a, 0xc9, 0x14, 0xb0, 0x09,
|
||||||
|
0xb8, 0xa9, 0x80, 0xc9, 0x20, 0x70, 0x02, 0x50, 0x0b, 0x20, 0xed, 0x85,
|
||||||
|
0x43, 0x4d, 0x50, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa2, 0x1b, 0x18, 0xe0,
|
||||||
|
0x1b, 0x90, 0x19, 0xd0, 0x17, 0x30, 0x15, 0xa2, 0xa1, 0xe0, 0x14, 0x10,
|
||||||
|
0x0f, 0xa2, 0x0a, 0xe0, 0x14, 0xb0, 0x09, 0xb8, 0xa2, 0x80, 0xe0, 0x20,
|
||||||
|
0x70, 0x02, 0x50, 0x0b, 0x20, 0xed, 0x85, 0x43, 0x50, 0x58, 0x3a, 0x46,
|
||||||
|
0x0d, 0x0a, 0x00, 0xa0, 0x1b, 0x18, 0xc0, 0x1b, 0x90, 0x19, 0xd0, 0x17,
|
||||||
|
0x30, 0x15, 0xa0, 0xb0, 0xc0, 0x14, 0x10, 0x0f, 0xa0, 0x0a, 0xc0, 0x14,
|
||||||
|
0xb0, 0x09, 0xb8, 0xa0, 0x80, 0xc0, 0x20, 0x70, 0x02, 0x50, 0x0b, 0x20,
|
||||||
|
0xed, 0x85, 0x43, 0x50, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x18, 0xa9,
|
||||||
|
0x00, 0xd0, 0x3f, 0x30, 0x3d, 0xb0, 0x3b, 0xa9, 0x80, 0xf0, 0x37, 0x10,
|
||||||
|
0x35, 0xa9, 0x00, 0x8d, 0x00, 0x08, 0xd0, 0x2e, 0x30, 0x2c, 0xb0, 0x2a,
|
||||||
|
0xa9, 0xff, 0xad, 0x00, 0x08, 0xd0, 0x23, 0x30, 0x21, 0xb0, 0x1f, 0xc9,
|
||||||
|
0x00, 0xd0, 0x1b, 0x38, 0xa9, 0xff, 0x8d, 0x00, 0x08, 0xf0, 0x13, 0x10,
|
||||||
|
0x11, 0x90, 0x0f, 0xa9, 0x00, 0xad, 0x00, 0x08, 0xf0, 0x08, 0x10, 0x06,
|
||||||
|
0x90, 0x04, 0xc9, 0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x4c, 0x44, 0x41,
|
||||||
|
0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x18, 0xa9, 0x80, 0xa2, 0x00, 0xb0, 0x37,
|
||||||
|
0xd0, 0x35, 0x30, 0x33, 0x8e, 0x00, 0x08, 0xd0, 0x2e, 0x30, 0x2c, 0xb0,
|
||||||
|
0x2a, 0xa2, 0xff, 0xae, 0x00, 0x08, 0xd0, 0x23, 0x30, 0x21, 0xb0, 0x1f,
|
||||||
|
0xe0, 0x00, 0xd0, 0x1b, 0x38, 0xa2, 0xff, 0x8e, 0x00, 0x08, 0xf0, 0x13,
|
||||||
|
0x10, 0x11, 0x90, 0x0f, 0xa2, 0x00, 0xae, 0x00, 0x08, 0xf0, 0x08, 0x10,
|
||||||
|
0x06, 0x90, 0x04, 0xe0, 0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x4c, 0x44,
|
||||||
|
0x58, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x18, 0xa9, 0x80, 0xa0, 0x00, 0xb0,
|
||||||
|
0x37, 0xd0, 0x35, 0x30, 0x33, 0x8c, 0x00, 0x08, 0xd0, 0x2e, 0x30, 0x2c,
|
||||||
|
0xb0, 0x2a, 0xa0, 0xff, 0xac, 0x00, 0x08, 0xd0, 0x23, 0x30, 0x21, 0xb0,
|
||||||
|
0x1f, 0xc0, 0x00, 0xd0, 0x1b, 0x38, 0xa0, 0xff, 0x8c, 0x00, 0x08, 0xf0,
|
||||||
|
0x13, 0x10, 0x11, 0x90, 0x0f, 0xa0, 0x00, 0xac, 0x00, 0x08, 0xf0, 0x08,
|
||||||
|
0x10, 0x06, 0x90, 0x04, 0xc0, 0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x4c,
|
||||||
|
0x44, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x18, 0xa9, 0x00, 0xa2, 0x80,
|
||||||
|
0xaa, 0xb0, 0x18, 0x30, 0x16, 0xd0, 0x14, 0x8a, 0xd0, 0x11, 0xa9, 0xff,
|
||||||
|
0x38, 0xa2, 0x00, 0xaa, 0x90, 0x09, 0x10, 0x07, 0xf0, 0x05, 0x8a, 0xc9,
|
||||||
|
0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x54, 0x41, 0x58, 0x3a, 0x46, 0x0d,
|
||||||
|
0x0a, 0x00, 0x18, 0xa9, 0x00, 0xa0, 0x80, 0xa8, 0xb0, 0x18, 0x30, 0x16,
|
||||||
|
0xd0, 0x14, 0x98, 0xd0, 0x11, 0xa9, 0xff, 0x38, 0xa0, 0x00, 0xa8, 0x90,
|
||||||
|
0x09, 0x10, 0x07, 0xf0, 0x05, 0x98, 0xc9, 0xff, 0xf0, 0x0b, 0x20, 0xed,
|
||||||
|
0x85, 0x54, 0x41, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa2, 0x0f, 0x9a,
|
||||||
|
0xa2, 0x57, 0xba, 0xe0, 0x0f, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x54, 0x53,
|
||||||
|
0x58, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa2, 0x57, 0x8a, 0xc9, 0x57, 0xf0,
|
||||||
|
0x0b, 0x20, 0xed, 0x85, 0x54, 0x58, 0x41, 0x3a, 0x46, 0x0d, 0x0a, 0x00,
|
||||||
|
0xa8, 0xc0, 0x57, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x54, 0x41, 0x59, 0x3a,
|
||||||
|
0x46, 0x0d, 0x0a, 0x00, 0x98, 0xf0, 0x06, 0x30, 0x04, 0xc9, 0x57, 0xf0,
|
||||||
|
0x0b, 0x20, 0xed, 0x85, 0x54, 0x59, 0x41, 0x3a, 0x46, 0x0d, 0x0a, 0x00,
|
||||||
|
0xa2, 0xfe, 0x18, 0xa9, 0x00, 0xe8, 0xb0, 0x24, 0xf0, 0x22, 0x10, 0x20,
|
||||||
|
0xe0, 0xff, 0xd0, 0x1c, 0x38, 0xa9, 0x80, 0xe8, 0x90, 0x16, 0xd0, 0x14,
|
||||||
|
0x30, 0x12, 0xe0, 0x00, 0xd0, 0x0e, 0x18, 0xe8, 0xb0, 0x0a, 0xd0, 0xfb,
|
||||||
|
0x38, 0xe8, 0x90, 0x04, 0xd0, 0xfb, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x49,
|
||||||
|
0x4e, 0x58, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa2, 0x02, 0x18, 0xa9, 0x00,
|
||||||
|
0xca, 0xb0, 0x2f, 0xf0, 0x2d, 0x30, 0x2b, 0xe0, 0x01, 0xd0, 0x27, 0x38,
|
||||||
|
0xa9, 0x80, 0xca, 0x90, 0x21, 0xd0, 0x1f, 0x30, 0x1d, 0xe0, 0x00, 0xd0,
|
||||||
|
0x19, 0xa9, 0x00, 0xca, 0xf0, 0x14, 0x10, 0x12, 0xe0, 0xff, 0xd0, 0x0e,
|
||||||
|
0x18, 0xca, 0xb0, 0x0a, 0xd0, 0xfb, 0x38, 0xca, 0x90, 0x04, 0xd0, 0xfb,
|
||||||
|
0xf0, 0x0b, 0x20, 0xed, 0x85, 0x44, 0x45, 0x58, 0x3a, 0x46, 0x0d, 0x0a,
|
||||||
|
0x00, 0x20, 0xed, 0x85, 0x44, 0x45, 0x58, 0x0d, 0x0a, 0x00, 0xa0, 0xfe,
|
||||||
|
0x18, 0x69, 0x00, 0xc8, 0xb0, 0x24, 0xf0, 0x22, 0x10, 0x20, 0xc0, 0xff,
|
||||||
|
0xd0, 0x1c, 0x38, 0xa9, 0x80, 0xc8, 0x90, 0x16, 0xd0, 0x14, 0x30, 0x12,
|
||||||
|
0xc0, 0x00, 0xd0, 0x0e, 0x18, 0xc8, 0xb0, 0x0a, 0xd0, 0xfb, 0x38, 0xc8,
|
||||||
|
0x90, 0x04, 0xd0, 0xfb, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x49, 0x4e, 0x59,
|
||||||
|
0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa0, 0x02, 0x18, 0xa9, 0x00, 0x88, 0xb0,
|
||||||
|
0x2f, 0xf0, 0x2d, 0x30, 0x2b, 0xc0, 0x01, 0xd0, 0x27, 0x38, 0xa9, 0x80,
|
||||||
|
0x88, 0x90, 0x21, 0xd0, 0x1f, 0x30, 0x1d, 0xc0, 0x00, 0xd0, 0x19, 0xa9,
|
||||||
|
0x00, 0x88, 0xf0, 0x14, 0x10, 0x12, 0xc0, 0xff, 0xd0, 0x0e, 0x18, 0x88,
|
||||||
|
0xb0, 0x0a, 0xd0, 0xfb, 0x38, 0x88, 0x90, 0x04, 0xd0, 0xfb, 0xf0, 0x0b,
|
||||||
|
0x20, 0xed, 0x85, 0x44, 0x45, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9,
|
||||||
|
0x00, 0x18, 0x85, 0x00, 0xd0, 0x15, 0x30, 0x13, 0xb0, 0x11, 0xa5, 0x00,
|
||||||
|
0xd0, 0x0d, 0xa9, 0xff, 0x38, 0x85, 0x00, 0xf0, 0x06, 0x10, 0x04, 0x90,
|
||||||
|
0x02, 0xb0, 0x0b, 0x20, 0xed, 0x85, 0x53, 0x54, 0x41, 0x3a, 0x46, 0x0d,
|
||||||
|
0x0a, 0x00, 0xa2, 0x00, 0x18, 0x86, 0x00, 0xd0, 0x15, 0x30, 0x13, 0xb0,
|
||||||
|
0x11, 0xa6, 0x00, 0xd0, 0x0d, 0xa2, 0xff, 0x38, 0x86, 0x00, 0xf0, 0x06,
|
||||||
|
0x10, 0x04, 0x90, 0x02, 0xb0, 0x0b, 0x20, 0xed, 0x85, 0x53, 0x54, 0x58,
|
||||||
|
0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa0, 0x00, 0x18, 0x84, 0x00, 0xd0, 0x15,
|
||||||
|
0x30, 0x13, 0xb0, 0x11, 0xa4, 0x00, 0xd0, 0x0d, 0xa0, 0xff, 0x38, 0x84,
|
||||||
|
0x00, 0xf0, 0x06, 0x10, 0x04, 0x90, 0x02, 0xb0, 0x0b, 0x20, 0xed, 0x85,
|
||||||
|
0x53, 0x54, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0xaa, 0x49, 0x55,
|
||||||
|
0xc9, 0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x49, 0x4d, 0x4d, 0x3a, 0x46,
|
||||||
|
0x0d, 0x0a, 0x00, 0xad, 0x1d, 0x86, 0x4d, 0x1e, 0x86, 0x18, 0x69, 0x01,
|
||||||
|
0xf0, 0x0b, 0x20, 0xed, 0x85, 0x41, 0x42, 0x53, 0x3a, 0x46, 0x0d, 0x0a,
|
||||||
|
0x00, 0xa2, 0x02, 0xbd, 0x1d, 0x86, 0xc9, 0x0c, 0xf0, 0x0d, 0x20, 0xed,
|
||||||
|
0x85, 0x41, 0x42, 0x53, 0x2c, 0x58, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa0,
|
||||||
|
0x03, 0xb9, 0x1d, 0x86, 0xc9, 0x22, 0xf0, 0x0d, 0x20, 0xed, 0x85, 0x41,
|
||||||
|
0x42, 0x53, 0x2c, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x21, 0x85,
|
||||||
|
0x08, 0xa2, 0x00, 0xa6, 0x08, 0xe0, 0x21, 0xf0, 0x0a, 0x20, 0xed, 0x85,
|
||||||
|
0x5a, 0x50, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x2c, 0x85, 0x29, 0xb5,
|
||||||
|
0x08, 0xc9, 0x2c, 0xf0, 0x0c, 0x20, 0xed, 0x85, 0x5a, 0x50, 0x2c, 0x58,
|
||||||
|
0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x12, 0x8d, 0x01, 0x02, 0xa9, 0x01,
|
||||||
|
0x85, 0x08, 0xa9, 0x02, 0x85, 0x09, 0xa2, 0x05, 0xa1, 0x03, 0xc9, 0x12,
|
||||||
|
0xf0, 0x0e, 0x20, 0xed, 0x85, 0x28, 0x5a, 0x50, 0x2c, 0x58, 0x29, 0x3a,
|
||||||
|
0x46, 0x0d, 0x0a, 0x00, 0xa9, 0xfe, 0x85, 0x08, 0xa9, 0x01, 0x85, 0x09,
|
||||||
|
0xa0, 0x03, 0xb1, 0x08, 0xc9, 0x12, 0xf0, 0x0e, 0x20, 0xed, 0x85, 0x28,
|
||||||
|
0x5a, 0x50, 0x29, 0x2c, 0x79, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa0, 0x0f,
|
||||||
|
0xbe, 0xf9, 0xff, 0xe0, 0xfe, 0xf0, 0x0c, 0x20, 0xed, 0x85, 0x5a, 0x50,
|
||||||
|
0x2c, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa0, 0xff, 0xc8, 0xc0, 0x00,
|
||||||
|
0xf0, 0x0b, 0x20, 0xed, 0x85, 0x49, 0x4e, 0x59, 0x3a, 0x46, 0x0d, 0x0a,
|
||||||
|
0x00, 0xa0, 0x0a, 0x88, 0xc0, 0x09, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x44,
|
||||||
|
0x45, 0x59, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa2, 0x80, 0xe8, 0xe0, 0x81,
|
||||||
|
0xf0, 0x0b, 0x20, 0xed, 0x85, 0x49, 0x4e, 0x58, 0x3a, 0x46, 0x0d, 0x0a,
|
||||||
|
0x00, 0xa2, 0x00, 0xca, 0xe0, 0xff, 0xf0, 0x0b, 0x20, 0xed, 0x85, 0x44,
|
||||||
|
0x45, 0x58, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0xa9, 0x01, 0x0a, 0x0a, 0x0a,
|
||||||
|
0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x08, 0xf0, 0x06, 0xb0, 0x04, 0xc9, 0x80,
|
||||||
|
0xf0, 0x0c, 0x20, 0xed, 0x85, 0x41, 0x53, 0x4c, 0x41, 0x3a, 0x46, 0x0d,
|
||||||
|
0x0a, 0x00, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x30, 0x06, 0xf0,
|
||||||
|
0x04, 0xb0, 0x02, 0x90, 0x0c, 0x20, 0xed, 0x85, 0x4c, 0x53, 0x52, 0x41,
|
||||||
|
0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x18, 0xa9, 0x01, 0x2a, 0x2a, 0x2a, 0x2a,
|
||||||
|
0x2a, 0x2a, 0x2a, 0x10, 0x1b, 0xf0, 0x19, 0xb0, 0x17, 0xc9, 0x80, 0xd0,
|
||||||
|
0x13, 0x18, 0x2a, 0x90, 0x0f, 0xd0, 0x0d, 0x30, 0x0b, 0x2a, 0xb0, 0x08,
|
||||||
|
0x30, 0x06, 0xf0, 0x04, 0xc9, 0x01, 0xf0, 0x0f, 0x20, 0xed, 0x85, 0x52,
|
||||||
|
0x4f, 0x4c, 0x41, 0x3a, 0x46, 0x0d, 0x0a, 0x00, 0x4c, 0x93, 0x85, 0x18,
|
||||||
|
0xa9, 0x80, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x30, 0x1d, 0xf0,
|
||||||
|
0x1b, 0xb0, 0x19, 0xc9, 0x01, 0xd0, 0x15, 0x18, 0x6a, 0x90, 0x11, 0xd0,
|
||||||
|
0x0f, 0x30, 0x0d, 0x6a, 0xb0, 0x0a, 0x10, 0x08, 0xf0, 0x06, 0xc9, 0x80,
|
||||||
|
0xf0, 0x0e, 0xd0, 0x00, 0x20, 0xed, 0x85, 0x52, 0x4f, 0x52, 0x41, 0x3a,
|
||||||
|
0x46, 0x0d, 0x0a, 0x00, 0x20, 0xed, 0x85, 0x53, 0x48, 0x0d, 0x0a, 0x00,
|
||||||
|
0xa9, 0xee, 0x48, 0xa9, 0x00, 0x18, 0x68, 0x30, 0x06, 0xd0, 0x04, 0xb0,
|
||||||
|
0x02, 0x90, 0x0b, 0x20, 0xed, 0x85, 0x50, 0x4c, 0x41, 0x3a, 0x46, 0x0d,
|
||||||
|
0x0a, 0x00, 0x6c, 0xfc, 0xff, 0x68, 0x85, 0x08, 0x68, 0x85, 0x09, 0xa0,
|
||||||
|
0x01, 0xb1, 0x08, 0xe6, 0x08, 0xd0, 0x02, 0xe6, 0x09, 0x09, 0x00, 0xf0,
|
||||||
|
0x06, 0x20, 0x10, 0x86, 0x4c, 0xf3, 0x85, 0xe6, 0x08, 0xd0, 0x02, 0xe6,
|
||||||
|
0x09, 0x6c, 0x08, 0x00, 0x48, 0xad, 0x01, 0xdf, 0x29, 0x08, 0xd0, 0xf9,
|
||||||
|
0x68, 0x8d, 0x00, 0xdf, 0x60, 0x55, 0xaa, 0x0c, 0x22
|
||||||
|
];
|
@ -12,7 +12,7 @@ testprogramAddress=0x0000;
|
|||||||
var consoleboxStream="";
|
var consoleboxStream="";
|
||||||
|
|
||||||
// demonstrate write hook
|
// demonstrate write hook
|
||||||
writeTriggers[0x000F]="consoleboxStream += String.fromCharCode(d);"+
|
writeTriggers[0x000c]="consoleboxStream += String.fromCharCode(d);"+
|
||||||
"consolebox.innerHTML = consoleboxStream;";
|
"consolebox.innerHTML = consoleboxStream;";
|
||||||
|
|
||||||
// demonstrate read hook (not used by this test program)
|
// demonstrate read hook (not used by this test program)
|
||||||
@ -25,11 +25,11 @@ testprogram = [
|
|||||||
0x4c, 0x02, 0x00, // JMP $0002
|
0x4c, 0x02, 0x00, // JMP $0002
|
||||||
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x40,
|
0x40, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
0xe8, // INX
|
0xe8, // INX
|
||||||
0x88, // DEY
|
0x88, // DEY
|
||||||
0xe6, 0x0F, // INC $0F
|
0xe6, 0x0c, // INC $0C
|
||||||
0x38, // SEC
|
0x38, // SEC
|
||||||
0x69, 0x02, // ADC #$02
|
0x69, 0x02, // ADC #$02
|
||||||
0x60 // RTS
|
0x60 // RTS
|
||||||
|
7031
transdefs.js
7031
transdefs.js
File diff suppressed because it is too large
Load Diff
52
wires.js
52
wires.js
@ -50,10 +50,9 @@ function setupTransistors(){
|
|||||||
var gate = tdef[1];
|
var gate = tdef[1];
|
||||||
var c1 = tdef[2];
|
var c1 = tdef[2];
|
||||||
var c2 = tdef[3];
|
var c2 = tdef[3];
|
||||||
var bb = tdef[4];
|
|
||||||
if(c1==ngnd) {c1=c2;c2=ngnd;}
|
if(c1==ngnd) {c1=c2;c2=ngnd;}
|
||||||
if(c1==npwr) {c1=c2;c2=npwr;}
|
if(c1==npwr) {c1=c2;c2=npwr;}
|
||||||
var trans = {name: name, on: false, gate: gate, c1: c1, c2: c2, bb: bb};
|
var trans = {name: name, on: false, gate: gate, c1: c1, c2: c2};
|
||||||
nodes[gate].gates.push(trans);
|
nodes[gate].gates.push(trans);
|
||||||
nodes[c1].c1c2s.push(trans);
|
nodes[c1].c1c2s.push(trans);
|
||||||
nodes[c2].c1c2s.push(trans);
|
nodes[c2].c1c2s.push(trans);
|
||||||
@ -150,63 +149,20 @@ function overlayNode(w){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// originally to highlight using a list of node numbers
|
|
||||||
// but can now include transistor names
|
|
||||||
function hiliteNode(n){
|
function hiliteNode(n){
|
||||||
var ctx = hilite.getContext('2d');
|
var ctx = hilite.getContext('2d');
|
||||||
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
ctx.clearRect(0,0,grCanvasSize,grCanvasSize);
|
||||||
|
ctx.fillStyle = 'rgba(255,255,255,0.7)';
|
||||||
if(n==-1) return;
|
if(n==-1) return;
|
||||||
|
if(isNodeHigh(n[0]))
|
||||||
|
ctx.fillStyle = 'rgba(255,0,0,0.7)';
|
||||||
|
|
||||||
for(var i in n){
|
for(var i in n){
|
||||||
if(typeof n[i] != "number") {
|
|
||||||
hiliteTrans([n[i]]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(isNodeHigh(n[i])) {
|
|
||||||
ctx.fillStyle = 'rgba(255,0,0,0.7)';
|
|
||||||
} else {
|
|
||||||
ctx.fillStyle = 'rgba(255,255,255,0.7)';
|
|
||||||
}
|
|
||||||
var segs = nodes[n[i]].segs;
|
var segs = nodes[n[i]].segs;
|
||||||
for(var s in segs){drawSeg(ctx, segs[s]); ctx.fill();}
|
for(var s in segs){drawSeg(ctx, segs[s]); ctx.fill();}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// highlight a single transistor (additively - does not clear highlighting)
|
|
||||||
function hiliteTrans(n){
|
|
||||||
var ctx = hilite.getContext('2d');
|
|
||||||
ctx.strokeStyle = 'rgba(255,255,255,0.7)';
|
|
||||||
ctx.lineWidth = 4
|
|
||||||
for(var t in n){
|
|
||||||
var bb = transistors[n[t]].bb
|
|
||||||
var segs = [[bb[0], bb[2], bb[1], bb[2], bb[1], bb[3], bb[0], bb[3]]]
|
|
||||||
for(var s in segs){drawSeg(ctx, segs[s]); ctx.stroke();}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ctxDrawBox(ctx, xMin, yMin, xMax, yMax){
|
|
||||||
var cap=ctx.lineCap;
|
|
||||||
ctx.lineCap="square";
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.moveTo(xMin, yMin);
|
|
||||||
ctx.lineTo(xMin, yMax);
|
|
||||||
ctx.lineTo(xMax, yMax);
|
|
||||||
ctx.lineTo(xMax, yMin);
|
|
||||||
ctx.lineTo(xMin, yMin);
|
|
||||||
ctx.stroke();
|
|
||||||
ctx.lineCap=cap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// takes a bounding box in chip coords and centres the display over it
|
|
||||||
function zoomToBox(xmin,xmax,ymin,ymax){
|
|
||||||
var xmid=(xmin+xmax)/2;
|
|
||||||
var ymid=(ymin+ymax)/2;
|
|
||||||
var x=(xmid+400)/grChipSize*600;
|
|
||||||
var y=600-ymid/grChipSize*600;
|
|
||||||
var zoom=5; // pending a more careful calculation
|
|
||||||
moveHere([x,y,zoom]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawSeg(ctx, seg){
|
function drawSeg(ctx, seg){
|
||||||
var dx = 400;
|
var dx = 400;
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user