From 43f06031b0e03769a6262e0a11b465839bd3f7e9 Mon Sep 17 00:00:00 2001 From: BigEd Date: Tue, 5 Oct 2010 17:51:48 +0000 Subject: [PATCH 1/7] [dev]alternate zoom keys --- wires.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wires.js b/wires.js index 8d58ba1..ce51539 100644 --- a/wires.js +++ b/wires.js @@ -313,9 +313,9 @@ function drawSeg(ctx, seg){ function handleKey(e){ var c = e.charCode; c = String.fromCharCode(c); - if('<>?np'.indexOf(c)==-1) return; - if(c=='<' && zoom>1) setZoom(zoom/1.2); - else if(c=='>' && zoom?npZzx'.indexOf(c)==-1) return; + if((c=='Z'||c=='x'||c=='<') && zoom>1) setZoom(zoom/1.2); + else if((c=='z'||c=='>') && zoom Date: Tue, 5 Oct 2010 18:12:44 +0000 Subject: [PATCH 2/7] [bug]fixup output of tstate and P --- macros.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/macros.js b/macros.js index 9996c43..7fb3c6e 100644 --- a/macros.js +++ b/macros.js @@ -179,7 +179,7 @@ function readPstring(){ var result; result = (isNodeHigh(nodenames['p7'])?'N':'n') + (isNodeHigh(nodenames['p6'])?'V':'v') + - '-' + + '‑' + // non-breaking hyphen (isNodeHigh(nodenames['p3'])?'B':'b') + (isNodeHigh(nodenames['p3'])?'D':'d') + (isNodeHigh(nodenames['p2'])?'I':'i') + @@ -214,8 +214,7 @@ function busToString(busname){ if(busname=='p') return readPstring(); if(busname=='tcstate') - return busToHex('clock1') + busToHex('clock2') + - busToHex('t2') + busToHex('t3') + busToHex('t4') + busToHex('t5'); + return ['clock1','clock2','t2','t3','t4','t5'].map(busToHex).join(""); return busToHex(busname); } From ee196947e3b81480b2bf8f10f42af4c71734e857 Mon Sep 17 00:00:00 2001 From: BigEd Date: Tue, 5 Oct 2010 19:14:08 +0000 Subject: [PATCH 3/7] [dev]add trace checksum for self-checking tests --- macros.js | 24 ++++++++++++++++++++++-- wires.js | 20 +++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/macros.js b/macros.js index 7fb3c6e..293f004 100644 --- a/macros.js +++ b/macros.js @@ -139,9 +139,16 @@ function signalSet(n){ return signals; } +var traceChecksum=''; +var goldenChecksum; + // simulate a single clock phase, updating trace and highlighting layout function step(){ - trace[cycle]= {chip: stateString(), mem: getMem()}; + var s=stateString(); + var m=getMem(); + trace[cycle]= {chip: s, mem: m}; + if(goldenChecksum != undefined) + traceChecksum=adler32(traceChecksum+s+m.slice(0,511).toString(16)); halfStep(); if(animateChipLayout) refresh(); @@ -340,7 +347,10 @@ function chipStatus(){ ' Y:' + hexByte(readY()) + ' SP:' + hexByte(readSP()) + ' ' + readPstring(); - setStatus(machine1, machine2, "Hz: " + estimatedHz().toFixed(1)); + var chk=''; + if(goldenChecksum != undefined) + chk=" Chk:" + traceChecksum + ((traceChecksum==goldenChecksum)?" OK":" no match"); + setStatus(machine1, machine2, "Hz: " + estimatedHz().toFixed(1) + chk); if (loglevel>0) { updateLogbox(signalSet(loglevel)); } @@ -400,3 +410,13 @@ function setMem(arr){ function hexWord(n){return (0x10000+n).toString(16).substring(1)} function hexByte(n){return (0x100+n).toString(16).substring(1)} + +function adler32(x){ + var a=1; + var b=0; + for(var i=0;i0){ updateLoglevel(value); } else if(name=="expert" && value.indexOf("t")==0){ updateExpertMode(true); } else if(name=="graphics" && value.indexOf("f")==0){ updateChipLayoutVisibility(false); - } else if(name=="panx" && parseInt(value)!=NaN){ + } else + // place the graphics window at a point of interest + if(name=="panx" && parseInt(value)!=NaN){ panx=parseInt(value); } else if(name=="pany" && parseInt(value)!=NaN){ pany=parseInt(value); } else if(name=="zoom" && parseInt(value)!=NaN){ zoom=parseInt(value); - } else if(name=="steps" && parseInt(value)!=NaN){ - userSteps=parseInt(value); - running=true; - } else if(name=="a" && parseInt(value,16)!=NaN){ + } else + // load a test program: Address, Data and Reset + if(name=="a" && parseInt(value,16)!=NaN){ userAddress=parseInt(value,16); } else if(name=="d" && value.match(/[0-9a-fA-F]*/)[0].length==value.length){ for(var j=0;j>8)%256; + } else + // run a test program, and optionally check against a golden checksum + if(name=="steps" && parseInt(value)!=NaN){ + userSteps=parseInt(value); + running=true; + } else if(name=="checksum" && parseInt(value,16)!=NaN){ + goldenChecksum=(0x100000000+parseInt(value,16)).toString(16).slice(-8); } else { if(loglevel>0) console.log('unrecognised parameters:',params); From 0773a9e7cfe4c43dc34d265064134e7c1deb51f9 Mon Sep 17 00:00:00 2001 From: BigEd Date: Wed, 6 Oct 2010 19:48:30 +0000 Subject: [PATCH 4/7] [dev](commented out)performance tweak, 1.2x gain --- chipsim.js | 1 + 1 file changed, 1 insertion(+) diff --git a/chipsim.js b/chipsim.js index 12d7956..f73867b 100644 --- a/chipsim.js +++ b/chipsim.js @@ -58,6 +58,7 @@ function recalcNode(node, recalclist){ console.log('recalc', node, group); for(var i in group){ var n = nodes[group[i]]; +// if(n.state==newv) continue; // performance tweak: idea due to Michael Steil if(n.state!=newv && ctrace && (traceTheseNodes.indexOf(n)!=-1)) console.log(group[i], n.state, newv); n.state = newv; From 971bbd03e3b089117a50d042e732ba154d62b09b Mon Sep 17 00:00:00 2001 From: BigEd Date: Wed, 6 Oct 2010 19:51:57 +0000 Subject: [PATCH 5/7] [dev]externalise testprogram --- index.html | 1 + macros.js | 25 ++++++++++++++++--------- testprogram.js | 15 +++++++++++++++ 3 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 testprogram.js diff --git a/index.html b/index.html index 33a9f13..3b678f3 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,7 @@ +