mirror of
https://github.com/trebonian/visual6502.git
synced 2024-12-23 03:30:03 +00:00
[dev]first (untidy) implementation of expert mode with tabular logging
This commit is contained in:
parent
653379e5d7
commit
f6f467787a
@ -65,11 +65,15 @@ Enter your own program into the array of RAM
|
|||||||
<a href ="javascript:resetChip()"><img class="navbutton" src="images/up.png"></a>
|
<a href ="javascript:resetChip()"><img class="navbutton" src="images/up.png"></a>
|
||||||
<a href ="javascript:stepBack()"><img class="navbutton" src="images/prev.png"></a>
|
<a href ="javascript:stepBack()"><img class="navbutton" src="images/prev.png"></a>
|
||||||
<a href ="javascript:stepForward()"><img class="navbutton" src="images/next.png"></a>
|
<a href ="javascript:stepForward()"><img class="navbutton" src="images/next.png"></a>
|
||||||
|
<div id="expertMode" style="float:left;">Expert:
|
||||||
|
<input type="checkbox" name="0" onchange="updateExpertMode(this.checked)" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="status" id="status">x: 0<br>y: 0</p>
|
<p class="status" id="status">x: 0<br>y: 0</p>
|
||||||
<table class="memtable" id="memtable"></table>
|
<table class="memtable" id="memtable"></table>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="controlPanel" style="visibility:hidden">
|
||||||
<div id="updateShow"> Show:
|
<div id="updateShow"> Show:
|
||||||
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" />(metal)
|
<input type="checkbox" name="0" id="updateShow0" onchange="updateShow(this.name,this.checked)" />(metal)
|
||||||
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(switched diffusion)
|
<input type="checkbox" name="1" id="updateShow1" onchange="updateShow(this.name,this.checked)" />(switched diffusion)
|
||||||
@ -79,6 +83,8 @@ Enter your own program into the array of RAM
|
|||||||
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(diode)
|
<input type="checkbox" name="2" id="updateShow2" onchange="updateShow(this.name,this.checked)" />(diode)
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
|
<table class="logstream" id="logstream"></table>
|
||||||
|
</div>
|
||||||
<br />
|
<br />
|
||||||
Source code is available on GitHub: <a href="http://github.com/trebonian/visual6502">http://github.com/trebonian/visual6502</a>
|
Source code is available on GitHub: <a href="http://github.com/trebonian/visual6502">http://github.com/trebonian/visual6502</a>
|
||||||
<br />
|
<br />
|
||||||
|
57
macros.js
57
macros.js
@ -26,6 +26,7 @@ var code = [0xa9, 0x00, 0x20, 0x10, 0x00, 0x4c, 0x02, 0x00,
|
|||||||
0xe8, 0x88, 0xe6, 0x40, 0x38, 0x69, 0x02, 0x60];
|
0xe8, 0x88, 0xe6, 0x40, 0x38, 0x69, 0x02, 0x60];
|
||||||
var cycle = 0;
|
var cycle = 0;
|
||||||
var trace = Array();
|
var trace = Array();
|
||||||
|
var logstream = Array();
|
||||||
var running = false;
|
var running = false;
|
||||||
|
|
||||||
function go(n){
|
function go(n){
|
||||||
@ -103,10 +104,13 @@ function initChip(){
|
|||||||
refresh();
|
refresh();
|
||||||
cycle = 0;
|
cycle = 0;
|
||||||
trace = Array();
|
trace = Array();
|
||||||
|
initLogbox(logThese);
|
||||||
chipStatus();
|
chipStatus();
|
||||||
if(ctrace)console.log('initChip done after', now()-start);
|
if(ctrace)console.log('initChip done after', now()-start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var logThese=['sync','irq','nmi','ab','db','rw','pc','a','x','y','s'];
|
||||||
|
|
||||||
function step(){
|
function step(){
|
||||||
trace[cycle]= {chip: stateString(), mem: getMem()};
|
trace[cycle]= {chip: stateString(), mem: getMem()};
|
||||||
halfStep();
|
halfStep();
|
||||||
@ -175,6 +179,24 @@ function readBits(name, n){
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hexBus(busname){
|
||||||
|
var nodenamelist=[];
|
||||||
|
// console.log('hexBus called: ' + busname);
|
||||||
|
for(i in nodenames){nodenamelist.push(i)};
|
||||||
|
if(busname=='pc')
|
||||||
|
return hexBus('pch') + hexBus('pcl');
|
||||||
|
var width=0;
|
||||||
|
for(var i in nodenamelist){
|
||||||
|
if(nodenamelist[i].search("^"+busname+"[0-9]")==0)
|
||||||
|
width++;
|
||||||
|
}
|
||||||
|
if(width==0)
|
||||||
|
return isNodeHigh(nodenames[busname])?1:0;
|
||||||
|
if(width>16)
|
||||||
|
return -1;
|
||||||
|
return (0x10000+readBits(busname,width)).toString(16).slice(-width/4);
|
||||||
|
}
|
||||||
|
|
||||||
function writeDataBus(x){
|
function writeDataBus(x){
|
||||||
var recalcs = Array();
|
var recalcs = Array();
|
||||||
for(var i=0;i<8;i++){
|
for(var i=0;i<8;i++){
|
||||||
@ -259,29 +281,48 @@ function chipStatus(){
|
|||||||
' Y:' + hexByte(readY()) +
|
' Y:' + hexByte(readY()) +
|
||||||
' SP:' + hexByte(readSP()) +
|
' SP:' + hexByte(readSP()) +
|
||||||
' ' + readPstring();
|
' ' + readPstring();
|
||||||
|
setStatus(machine1 + "<br>" + machine2);
|
||||||
|
if (loglevel>1) {
|
||||||
|
updateLogbox(logThese);
|
||||||
|
}
|
||||||
|
selectCell(ab);
|
||||||
|
}
|
||||||
|
|
||||||
|
function initLogbox(names){
|
||||||
|
logStream = [];
|
||||||
|
logStream.push("<td>" + names.join("</td><td>") + "</td>");
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateLogbox(names){
|
||||||
|
var logbox=document.getElementById('logstream');
|
||||||
|
var signals=[];
|
||||||
|
|
||||||
|
for(i in names){
|
||||||
|
signals.push(hexBus(names[i]));
|
||||||
|
}
|
||||||
|
logStream.push("<td>" + signals.join("</td><td>") + "</td>");
|
||||||
|
|
||||||
|
logbox.innerHTML = "<tr>"+logStream.join("</tr><tr>")+"</tr>";
|
||||||
|
|
||||||
|
|
||||||
var machine3 =
|
var machine3 =
|
||||||
' Sync:' + readBit('sync')
|
' Sync:' + readBit('sync') +
|
||||||
' IRQ:' + readBit('irq') +
|
' IRQ:' + readBit('irq') +
|
||||||
' NMI:' + readBit('nmi');
|
' NMI:' + readBit('nmi');
|
||||||
var machine4 =
|
var machine4 =
|
||||||
' IR:' + hexByte(255 - readBits('notir', 8)) +
|
' IR:' + hexByte(readBits('ir', 8)) +
|
||||||
' TCstate:' + readBit('clock1') + readBit('clock2') +
|
' TCstate:' + readBit('clock1') + readBit('clock2') +
|
||||||
readBit('t2') + readBit('t3') + readBit('t4') + readBit('t5');
|
readBit('t2') + readBit('t3') + readBit('t4') + readBit('t5');
|
||||||
var machine5 =
|
var machine5 =
|
||||||
' idl:' + hexByte(readBits('idl', 8)) +
|
' idl:' + hexByte(readBits('idl', 8)) +
|
||||||
' alu:' + hexByte(readBits('alu', 8)) +
|
' alu:' + hexByte(readBits('alu', 8)) +
|
||||||
' idb:' +hexByte(readBits('idb',8)) +
|
' idb:' + hexByte(readBits('idb',8)) +
|
||||||
' dor:' + hexByte(readBits('dor',8));
|
' dor:' + hexByte(readBits('dor',8));
|
||||||
var machine6 =
|
var machine6 =
|
||||||
' notRdy0:' + readBit('notRdy0') +
|
' notRdy0:' + readBit('notRdy0') +
|
||||||
' fetch:' + readBit('fetch') +
|
' fetch:' + readBit('fetch') +
|
||||||
' clearIR:' + readBit('clearIR') +
|
' clearIR:' + readBit('clearIR') +
|
||||||
' D1x1:' + readBit('D1x1');
|
' D1x1:' + readBit('D1x1');
|
||||||
setStatus(machine1 + "<br>" + machine2);
|
|
||||||
if (loglevel>2) {
|
|
||||||
console.log(machine1 + " " + machine2 + " " + machine3 + " " + machine4 + " " + machine5);
|
|
||||||
}
|
|
||||||
selectCell(ab);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMem(){
|
function getMem(){
|
||||||
|
@ -79,6 +79,12 @@ img.navstop{
|
|||||||
border: 0px;
|
border: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.logstream {
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
border-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
table.memtable {
|
table.memtable {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 78px;
|
top: 78px;
|
||||||
|
10
wires.js
10
wires.js
@ -319,6 +319,16 @@ function findNodeNumber(x,y){
|
|||||||
return (high<<8)+(mid<<4)+low;
|
return (high<<8)+(mid<<4)+low;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateExpertMode(on){
|
||||||
|
if(on){
|
||||||
|
document.getElementById('controlPanel').style.visibility = 'visible';
|
||||||
|
loglevel=4;
|
||||||
|
} else {
|
||||||
|
document.getElementById('controlPanel').style.visibility = 'hidden';
|
||||||
|
loglevel=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function updateShow(layer, on){
|
function updateShow(layer, on){
|
||||||
drawlayers[layer]=on;
|
drawlayers[layer]=on;
|
||||||
setupBackground();
|
setupBackground();
|
||||||
|
Loading…
Reference in New Issue
Block a user