More 8080 opcodes
This commit is contained in:
parent
4173aaca31
commit
978d59efbf
7 changed files with 498 additions and 283 deletions
|
|
@ -1,168 +1,171 @@
|
|||
(function(){var g;function da(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function q(a){return"0x"+n(a,4)}function ea(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function fa(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||
function ka(a,b){return-1!==a.indexOf(b,a.length-b.length)}var la={"&":"&","<":"<",">":">",'"':""","'":"'"};function ma(a){return a.replace(/[&<>"']/g,function(a){return la[a]})}function ra(a,b){return(a+" ").slice(0,b)}function sa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
function ta(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var k=d+e>>1,h;h=c(b,a[k]);0<h?d=k+1:(e=k,f=!h)}return f?d:~d}var ua=Date.now||function(){return+new Date};function va(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function ka(a,b){return-1!==a.indexOf(b,a.length-b.length)}var la={"&":"&","<":"<",">":">",'"':""","'":"'"};function ma(a){return a.replace(/[&<>"']/g,function(a){return la[a]})}function na(a,b){return(a+" ").slice(0,b)}function oa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
function pa(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var k=d+e>>1,h;h=c(b,a[k]);0<h?d=k+1:(e=k,f=!h)}return f?d:~d}var ua=Date.now||function(){return+new Date};function va(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function wa(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
|
||||
function u(a,b,c,d){var e=0,f=null,k=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),k;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
typeof b){var l="",m;for(m in b)b.hasOwnProperty(m)&&(l&&(l+="&"),l+=m+"="+encodeURIComponent(b[m]));l=l.replace(/%20/g,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(l)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(f=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,f,e),k=[f,e]);return k}function xa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
function ya(){return window?window.navigator.userAgent:""}function v(a){window&&window.alert(a)}function za(a){var b=!1;window&&(b=window.confirm(a));return b}var Aa=null;function Ea(){if(null==Aa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Aa=a}return Aa}
|
||||
function Ha(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function Ia(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ja(a){if(window){var b=ya();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ka(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||
function La(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var Ma={init:[],show:[],exit:[]},Na=!1,Oa=!0;function Pa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Qa(a){Ma.init.push(a)}
|
||||
function Ra(a){if(Oa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){v("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Sa(a){!Oa&&a?(Oa=!0,Na&&Ta("init")):Oa=a}function Ta(a){Ma[a]&&Ra(Ma[a])}Pa("onload",function(){Na=!0;Ra(Ma.init)});Pa("onpageshow",function(){Ra(Ma.show)});Pa(Ja("Opera")||Ja("iOS")?"onunload":"onbeforeunload",function(){Ra(Ma.exit)});
|
||||
function x(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.vb=b.comment;this.Kb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.zb=this.id.substr(0,b),this.Wa=this.id.substr(b+1)):this.Wa=this.id;this[a]=c;this.j={Ka:!1,Ha:!1,ob:!1,W:!1,Ja:!1};this.lb=null;this.j.Ja=!1;this.G={};this.B=null;this.Y=d||0;y.push(this)}var Ua=void 0,Va={};
|
||||
function ya(){return window?window.navigator.userAgent:""}function v(a){window&&window.alert(a)}function za(a){var b=!1;window&&(b=window.confirm(a));return b}var Aa=null;function Ba(){if(null==Aa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}Aa=a}return Aa}
|
||||
function Ca(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function Da(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ea(a){if(window){var b=ya();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Fa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||
function Ga(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var Ka={init:[],show:[],exit:[]},Na=!1,Oa=!0;function Pa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Qa(a){Ka.init.push(a)}
|
||||
function Ra(a){if(Oa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){v("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Sa(a){!Oa&&a?(Oa=!0,Na&&Ta("init")):Oa=a}function Ta(a){Ka[a]&&Ra(Ka[a])}Pa("onload",function(){Na=!0;Ra(Ka.init)});Pa("onpageshow",function(){Ra(Ka.show)});Pa(Ea("Opera")||Ea("iOS")?"onunload":"onbeforeunload",function(){Ra(Ka.exit)});
|
||||
function x(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.wb=b.comment;this.Lb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ab=this.id.substr(0,b),this.Xa=this.id.substr(b+1)):this.Xa=this.id;this[a]=c;this.j={La:!1,Ia:!1,ob:!1,W:!1,Ka:!1};this.lb=null;this.j.Ka=!1;this.H={};this.C=null;this.Z=d||0;y.push(this)}var Ua=void 0,Va={};
|
||||
if(window){Ua||(Ua=window.location.search.substr(1));for(var Wa,Xa=/\+/g,Ya=/([^&=]+)=?([^&]*)/g;Wa=Ya.exec(Ua);)Va[decodeURIComponent(Wa[1].replace(Xa," "))]=decodeURIComponent(Wa[2].replace(Xa," "))}function Za(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function z(a,b){b||(b=x);a.prototype=Za(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var y=[],$a={};function ab(a,b,c){$a[a]&&b&&($a[a][b]=c)}function C(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<y.length;b++){var d=y[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function lb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<y.length;d++)if(c)c==y[d]&&(c=null);else if(!(a!=y[d].type||b&&y[d].id.indexOf(b)))return y[d]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){v(c.message+" ("+a+")")}return b}
|
||||
function mb(a,b){for(var c=F(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var k=e[f];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "pc8080-binding":(h=E(k))&&h.binding&&a.ha(h.type,h.binding,k,h.value),m=l.length}}}}
|
||||
function bb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<y.length;d++)if(c)c==y[d]&&(c=null);else if(!(a!=y[d].type||b&&y[d].id.indexOf(b)))return y[d]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){v(c.message+" ("+a+")")}return b}
|
||||
function cb(a,b){for(var c=F(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var k=e[f];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "pc8080-binding":(h=E(k))&&h.binding&&a.ka(h.type,h.binding,k,h.value),m=l.length}}}}
|
||||
function F(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
|
||||
x.prototype={constructor:x,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ha:function(a,b,c){switch(b){case "clear":return this.G[b]||(this.G[b]=c,c.onclick=function(a){return function(){a.G.print&&(a.G.print.value="")}}(this)),!0;case "print":return this.G[b]||(this.ya=this.G[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.da=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Wa+": "+a)},da:function(a,b){b||v(a)},sa:function(){return this.j.W=!0},ra:function(a,b){b&&(this.j.W=!1);return!0}};function nb(a,b,c){a.B&&(!0===c||ob(a,c|0))&&a.B.message(b,void 0)}function ob(a,b){if(a.B){a===a.B?b|=0:b=b||a.Y;var c=a.B.Y&b;return!!b&&c===b||!!(c&a.B.Rb)}return!1}
|
||||
function pb(a,b){if(a.j.ob)return a.j.Ha&&(a.j.Ha=!1),a.j.ob=!1;if(a.j.Ja)return a.g(a.toString()+" error"),!1;a.j.Ha=b;return a.j.Ha}function qb(a,b){a.j.Ha&&(b?a.j.ob=!0:void 0===b&&a.g(a.toString()+" busy"));return a.j.Ha}function G(a){if(!a.j.Ja&&(a.j.Ka=!0,a.j.Ka)){var b=a.lb;a.lb=null;b&&b()}}function rb(a,b){b&&(a.j.Ka?b():a.lb=b);return a.j.Ka}function sb(a,b){a.j.Ja=!0;a.da(b)}
|
||||
x.prototype={constructor:x,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ka:function(a,b,c){switch(b){case "clear":return this.H[b]||(this.H[b]=c,c.onclick=function(a){return function(){a.H.print&&(a.H.print.value="")}}(this)),!0;case "print":return this.H[b]||(this.ya=this.H[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.fa=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Xa+": "+a)},fa:function(a,b){b||v(a)},sa:function(){return this.j.W=!0},ra:function(a,b){b&&(this.j.W=!1);return!0}};function db(a,b,c){a.C&&(!0===c||eb(a,c|0))&&a.C.message(b,void 0)}function eb(a,b){if(a.C){a===a.C?b|=0:b=b||a.Z;var c=a.C.Z&b;return!!b&&c===b||!!(c&a.C.Sb)}return!1}
|
||||
function fb(a,b){if(a.j.ob)return a.j.Ia&&(a.j.Ia=!1),a.j.ob=!1;if(a.j.Ka)return a.g(a.toString()+" error"),!1;a.j.Ia=b;return a.j.Ia}function gb(a,b){a.j.Ia&&(b?a.j.ob=!0:void 0===b&&a.g(a.toString()+" busy"));return a.j.Ia}function G(a){if(!a.j.Ka&&(a.j.La=!0,a.j.La)){var b=a.lb;a.lb=null;b&&b()}}function rb(a,b){b&&(a.j.La?b():a.lb=b);return a.j.La}function sb(a,b){a.j.Ka=!0;a.fa(b)}
|
||||
var tb="undefined"!==typeof ArrayBuffer,ub=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function vb(a){x.call(this,"Panel",a,vb)}z(vb);g=vb.prototype;g.ha=function(a,b,c,d){return this.s&&this.s.ha(a,b,c,d)||this.b&&this.b.ha(a,b,c,d)||this.w&&this.w.ha(a,b,c,d)||this.B&&this.B.ha(a,b,c,d)?!0:this.parent.ha.call(this,a,b,c,d)};g.La=function(a,b,c,d){this.s=a;this.A=b;this.b=c;this.B=d;this.w=wb(a,"Keyboard")};g.sa=function(a,b){b||xb();return!0};g.ra=function(){return!0};g.ka=function(){};
|
||||
function xb(){for(var a=!1,b=F(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=E(d),f;a:{f=e.id;if(void 0!==f)for(var k=void 0,k=0;k<y.length;k++)if(y[k].id===f){f=y[k];break a}f=null}f||(a=!0,f=new vb(e));mb(f,d);a&&G(f)}}Qa(xb);
|
||||
function yb(a,b,c){x.call(this,"Bus",a,yb);this.b=b;this.B=c;this.K=a.buswidth||16;this.N=Math.pow(2,this.K);this.w=this.N-1|0;this.P=20>=this.K?12:24>=this.K?14:15;this.Z=1<<this.P;this.R=this.Z>>2;this.s=this.Z-1;this.J=this.N/this.Z|0;this.L=this.J-1;this.C=[];this.D=[];this.F=this.H=!1;this.T=[];this.V=[];a=new H;zb(a,this.B);this.A=Array(this.J);for(b=0;b<this.J;b++)this.A[b]=a;a=this.b;b=this.A;c=this.P;var d=this.w;a.ia=b;a.P=c;a.Z=1<<a.P;a.H=a.Z-1;a.T=b.length;a.R=a.T-1;a.K=d;G(this)}z(yb);
|
||||
yb.prototype.reset=function(){};yb.prototype.sa=function(a,b){b||this.reset();return!0};function Ab(a,b,c,d){for(var e=b>>>a.P;0<c&&e<a.A.length;){var f=a.A[e],k=e*a.Z,h=c>a.Z?a.Z:c;if(f&&f.size){if(f.type==d){if(b+c<=f.u)return f.gb+=f.u-b,f.u=b,!0;if(b>=f.u+f.gb){h=f.size-(b-k);h>c&&(h=c);f.gb=b-f.u+h;c-=h;b=k+a.Z;continue}}return Bb(1,b,c)}f=a.A[e];b=new H(b,h,a.Z,d);zb(b,a.B,f);a.A[e++]=b;b=k+a.Z;c-=h}return 0>=c?!0:Bb(2,b,c)}function Cb(a,b){return a.A[(b&a.w)>>>a.P].eb(b&a.s,b)}
|
||||
function Db(a,b){if(void 0===b)return a.F=!a.F,a.F;void 0===a.C[b]&&(a.C[b]=[null,!1]);a.C[b][1]=!a.C[b][1];return a.C[b][1]}function Eb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.D[b]&&(a.D[b]=[null,!1]);a.D[b][1]=!a.D[b][1];return a.D[b][1]}function Bb(a,b,c){v("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Fb;if(tb){var Gb=new ArrayBuffer(2);(new DataView(Gb)).setUint16(0,256,!0);Fb=256===(new Uint16Array(Gb))[0]}else Fb=!1;var Hb=Fb;
|
||||
function H(a,b,c,d){this.id=Ib+=2;this.b=null;this.u=a;this.gb=b;this.size=c||0;this.type=d||Jb;this.F=d==Wb;zb(this);this.ua=this.Ub=!1;if(c)if(tb)this.C=new ArrayBuffer(c),this.D=new DataView(this.C,0,c),this.G=new Uint8Array(this.C,0,c),this.H=new Uint16Array(this.C,0,c>>1),this.b=new Int32Array(this.C,0,c>>2),Xb(this,Hb?Yb:Zb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Xb(this,$b)}else Xb(this)}var Jb=0,Wb=2,ac=["NONE","RAM","ROM","VIDEO","H/W"],Ib=0;
|
||||
H.prototype={constructor:H,parent:null,save:function(){var a,b;if(tb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.D.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(tb)for(b=0;b<a.length;b++)this.D.setInt32(b<<2,a[b],!0);else this.b=a;return this.ua=!0}return!1},xa:function(a,b){b?0===this.s++&&bc(this,cc,!1):0===this.A++&&dc(this,cc,!1)},J:function(){this.B&&ob(this.B,129)&&this.B.message("attempt to read invalid block %"+n(this.u),!0);
|
||||
return 255},w:function(a,b){this.B&&ob(this.B,129)&&this.B.message("attempt to write "+q(b)+" to invalid block %"+n(this.u),!0)},K:function(a,b){return this.Sa(a++,b++)|this.Sa(a,b)<<8},Wa:function(a,b,c){this.hb(a++,b&255,c++);this.hb(a,b>>8,c)},T:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ma:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},wa:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.ua=!0},jb:function(a,
|
||||
b){var c=a>>2,d=(a&3)<<3;24>d?this.b[c]=this.b[c]&~(65535<<d)|b<<d:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.ua=!0},N:function(a,b){if(this.B&&null!=this.u){var c=this.B;ec(c,this.u+a,1,c.R)&&c.U(!0)}return this.eb(a,b)},ca:function(a,b){if(this.B&&null!=this.u){var c=this.B;ec(c,this.u+a,2,c.R)&&c.U(!0)}return this.tb(a,b)},pa:function(a,b,c){if(this.B&&null!=this.u){var d=this.B;ec(d,this.u+a,1,d.F)&&d.U(!0)}this.F?this.w(a,b,c):this.Ua(a,b,c)},Va:function(a,b,
|
||||
c){if(this.B&&null!=this.u){var d=this.B;ec(d,this.u+a,2,d.F)&&d.U(!0)}this.F?this.w(a,b,c):this.Ob(a,b,c)},L:function(a){return this.G[a]},R:function(a){return this.G[a]},V:function(a){return this.D.getUint16(a,!0)},ga:function(a){return a&1?this.G[a]|this.G[a+1]<<8:this.H[a>>1]},na:function(a,b){this.G[a]=b;this.ua=!0},va:function(a,b){this.G[a]=b;this.ua=!0},Ga:function(a,b){this.D.setUint16(a,b,!0);this.ua=!0},Xa:function(a,b){a&1?(this.G[a]=b,this.G[a+1]=b>>8):this.H[a>>1]=b;this.ua=!0}};
|
||||
function zb(a,b,c){a.B=b;a.A=a.s=0;c&&((a.A=c.A)&&dc(a,cc,!1),(a.s=c.s)&&bc(a,cc,!1))}function fc(a,b){b?0===--a.s&&(a.hb=a.F?a.w:a.Ua):0===--a.A&&(a.Sa=a.eb,a.Lb=a.tb)}function bc(a,b,c){c&&a.s||(a.hb=!a.F&&b[2]||a.w);if(c||void 0===c)a.Ua=b[2]||a.w,a.Ob=b[3]||a.Wa}function dc(a,b,c){c&&a.A||(a.Sa=b[0]||a.J,a.Lb=b[1]||a.K);if(c||void 0===c)a.eb=b[0]||a.J,a.tb=b[1]||a.K}function Xb(a,b){b||(b=gc);dc(a,b,void 0);bc(a,b,void 0)}
|
||||
var gc=[],$b=[H.prototype.T,H.prototype.ma,H.prototype.wa,H.prototype.jb],cc=[H.prototype.N,H.prototype.ca,H.prototype.pa,H.prototype.Va];if(tb)var Zb=[H.prototype.L,H.prototype.V,H.prototype.na,H.prototype.Ga],Yb=[H.prototype.R,H.prototype.ga,H.prototype.va,H.prototype.Xa];
|
||||
function hc(a,b){x.call(this,"CPU",a,hc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.Ra=c;this.i.Ca=d;this.i.qb=Math.round(this.i.Ra/1E4)/100;this.i.Aa=this.i.qb*this.i.Ca;this.j.X=!1;this.j.pb=!1;this.j.Db=a.autoStart;this.j.Eb=!1;this.j.Ia=!1;this.i.Ya=this.i.Oa=0;this.i.Za=a.csStart;this.i.Na=a.csInterval;this.i.Pa=a.csStop;this.ga=this.Fa.bind(this);G(this)}z(hc);var ic=["power","reset"];g=hc.prototype;
|
||||
g.La=function(a,b,c,d){this.s=a;this.A=b;this.B=d;for(b=0;b<ic.length;b++)(c=this.G[ic[b]])&&this.s.ha(null,ic[b],c);wb(a,"FPU");this.w=wb(a,"ChipSet");a=jc(a,"autoStart");null!=a&&(this.j.Db="true"==a?!0:"false"==a?!1:!!a);G(this)};g.reset=function(){};g.save=function(){return null};g.restore=function(){return!1};
|
||||
g.sa=function(a,b){if(!b){if(a&&this.restore){kc(this);if(!this.restore(a))return!1;lc(this)}else this.reset();if(this.B){var c=this.B;c.g("Type ? for help with PC8080 Debugger commands");c.ka();if(c.Xa){var d=c.Xa;c.Xa=null;mc(c,d)}}else this.g("No debugger detected")}I(this);return!0};g.ra=function(a){return a?this.save():!0};function nc(a){(a.j.Db||!a.B&&void 0===a.G.run)&&a.Fa(!0)}g.Fb=function(){return 0};
|
||||
function lc(a){void 0===a.i.Za&&(a.i.Za=0);void 0===a.i.Na&&(a.i.Na=-1);void 0===a.i.Pa&&(a.i.Pa=-1);a.j.Ia=0<=a.i.Za&&0<a.i.Na;a.j.Ia&&(a.i.Ya=0,a.i.Oa=a.i.Za-a.J)}function oc(a,b){if(a.j.Ia){var c=!1;a.i.Ya=a.i.Ya+a.Fb()|0;a.i.Oa-=b;0>=a.i.Oa&&(a.i.Oa+=a.i.Na,c=!0);0<=a.i.Pa&&a.i.Pa<=pc(a)&&(a.i.Na=a.i.Pa=-1,lc(a),a.U(),c=!0);c&&a.g(pc(a)+" cycles: checksum="+n(a.i.Ya))}}
|
||||
g.ha=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.G[b]=c;a=!0;break;case "run":this.G[b]=c;c.onclick=function(){var a;if(a=d.s)if(a=d.s,a.j.W)a=!0;else{var b=null,c,h=C(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.j.Ka);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.j.W);c++);c==h.length&&(b=a);v("The "+b.type+" component ("+b.id+") is not "+(b.j.Ka?"powered yet":"ready yet"+(b.lb?" (waiting for notification)":""))+".");a=!1}a&&(d.j.X?d.U(!0):d.Fa(!0))};a=!0;break;
|
||||
case "speed":this.G[b]=c;a=!0;break;case "setSpeed":this.G[b]=c,c.onclick=function(){qc(d,d.i.Ca<<1,!0)},c.textContent=this.i.Aa.toFixed(2)+"Mhz",a=!0}return a};function rc(a,b,c){a.J+=b;c&&(a.D=a.b=0)}
|
||||
function sc(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.i.Ca&&a.i.za&&(d=a.i.za/a.i.qb);a.i.Hb=Math.round(1E3/30);a.i.Yb=Math.floor(a.i.Ra/c*d);a.i.rb=Math.floor(a.i.Ra/30*d);a.i.Jb=Math.floor(a.i.Ra/60*d);a.i.Ib=Math.floor(a.i.Ra/2*d);b||(a.i.Qa=a.i.rb,a.i.ab=a.i.Jb,a.i.$a=a.i.Ib);a.i.sb=0}function pc(a){return a.J+a.F+a.D-a.b}function kc(a){a.i.za=0;a.J=a.F=a.D=a.b=0;lc(a);qc(a,1)}
|
||||
function qc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.za/a.i.Aa?b=1:d=!0;a.i.Ca=b;b=a.i.qb*a.i.Ca;if(a.i.Aa!=b){a.i.Aa=b;b=a.i.Aa.toFixed(2)+"Mhz";var e=a.G.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.s&&a.s.fb()}rc(a,a.F);a.F=0;a.i.Ma=ua();a.i.Ba=0;sc(a);return d}
|
||||
g.Fa=function(a){if(pb(this,!0)){if(!this.j.X){qc(this);this.s&&this.s.start(this.i.Ma,pc(this));this.j.X=!0;this.j.pb=!0;this.w&&this.w.Zb();var b=this.G.run;b&&(b.textContent="Halt");this.s&&(this.s.ka(!0),a&&this.s.fb(!0))}this.i.sb>=this.i.Ra&&sc(this,!0);this.i.bb=0;this.i.mb=ua();this.i.Ba&&(a=this.i.mb-this.i.Ba,a>this.i.Hb&&(this.i.Ma+=a,this.i.Ma>this.i.mb&&(this.i.Ma=this.i.mb)));try{do{var c=this.j.Ia?1:this.i.Yb;this.w&&(this.w.Nb(),c=this.w.ac(0,c),c=this.w.$b(c));try{this.Ta(c)}catch(e){if("number"!=
|
||||
typeof e)throw e;}var d=this.D-this.b;this.F+=d;this.i.bb+=d;rc(this,0,!0);oc(this,d);this.i.ab-=d;0>=this.i.ab&&(this.i.ab+=this.i.Jb);this.i.$a-=d;0>=this.i.$a&&(this.i.$a+=this.i.Ib,this.s&&this.s.ka());this.i.Qa-=d;if(0>=this.i.Qa){this.i.Qa+=this.i.rb;break}}while(this.j.X)}catch(e){this.U();I(this);this.s&&this.s.stop(ua(),pc(this));pb(this,!1);sb(this,e.stack||e.message);return}c=setTimeout;d=this.ga;this.i.Ba=ua();a=this.i.Hb;this.i.bb&&(a=Math.round(a*this.i.bb/this.i.rb));a-=this.i.Ba-this.i.mb;
|
||||
if(b=this.i.Ba-this.i.Ma)this.i.za=Math.round(this.F/(10*b))/100,864E5<=b&&(this.J=0,this.w&&this.w.Nb(!0),qc(this));if(0>a||this.i.za<this.i.Aa)a=0;this.i.sb+=this.i.bb;this.i.Ba+=a;c(d,a)}else I(this),this.s&&this.s.stop(ua(),pc(this))};g.Ta=function(){return 0};g.U=function(a){qb(this,!0);this.D-=this.b;this.b=0;rc(this,this.F);this.F=0;if(this.j.X){this.j.X=!1;this.w&&this.w.Zb();var b=this.G.run;b&&(b.textContent="Run")}this.j.kb=a};function I(a,b){a.s&&a.s.ka(b)}
|
||||
function tc(a){this.Gb=a.model||8080;hc.call(this,a,1E6);this.ca=uc;kc(this);this.j.kb=this.j.Tb=!1;this.V=0;this.ia=[];this.P=this.Z=this.H=this.T=this.R=this.K=0;vc(this)}z(tc,hc);g=tc.prototype;g.reset=function(){this.j.X&&this.U();vc(this);kc(this);this.j.Ja=!1};function vc(a){a.S=0;a.aa=0;a.ea=0;a.ba=0;a.fa=0;a.ja=0;a.la=0;a.Ea=0;a.O=0;wc(a,0);a.N=0}g.Fb=function(){var a=this.S+this.aa+this.ea+this.ba+this.fa+this.ja+this.la|0;return a=a+this.Ea+this.O+xc(this)|0};
|
||||
g.save=function(){var a=new J(this);M(a,0,[this.S,this.aa,this.ea,this.ba,this.fa,this.ja,this.la,this.Ea,this.O,xc(this)]);M(a,1,[this.L,this.N,this.J,this.i.Ca]);for(var b=this.A,c=0,d=[],e=0;e<b.J;e++){var f=b.A[e];if(f.ua||f.Ub){d[c++]=e;var k=c++;a:if(f=f.save()){for(var h=0,l=0,m=[];h<f.length;){for(var p=f[h],r=h+1;r<f.length&&f[r]===p;)r++;m[l++]=r-h;m[l++]=p;h=r}if(m.length<f.length){f=m;break a}}d[k]=f}}M(a,2,d);return a.data()};
|
||||
g.restore=function(a){var b=a[0];this.S=b[0];this.aa=b[1];this.ea=b[2];this.ba=b[3];this.fa=b[4];this.ja=b[5];this.la=b[6];this.Ea=b[7]&65535;this.O=b[8]&65535;wc(this,b[9]);b=a[1];this.L=b[0];this.N=b[1];this.J=b[2];qc(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.R){for(var f=0,k=Array(b.R),h=0;h<e.length-1;)for(var l=e[h++],m=e[h++];l--;)k[f++]=m;e=k}f=b.A[d];if(!f||!f.restore(e)){v("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
g.ha=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "D":case "E":case "H":case "L":case "SP":case "PC":case "F":case "SF":case "ZF":case "AF":case "PF":case "CF":this.G[b]=c;this.V++;d=!0;break;default:d=this.parent.ha.call(this,a,b,c)}return d};function yc(a){return a.aa<<8|a.ea}function zc(a,b){a.aa=b>>8&255;a.ea=b&255}function Zc(a){return a.ba<<8|a.fa}function $c(a,b){a.ba=b>>8&255;a.fa=b&255}
|
||||
function xc(a){return a.Da&-214|(a.M&128?128:0)|(a.I&255?0:64)|((a.M^a.C)&16?16:0)|(ub[a.M&255]?4:0)|(a.I&256?1:0)}function wc(a,b){a.I=a.M=a.C=0;b&1&&(a.I|=256);b&4||(a.M|=1);b&16&&(a.C|=16);b&64||(a.I|=255);b&128&&(a.M^=192);a.Da=a.Da&-513|b&512|2}function ad(a,b){a.C=b;b=(a.M=b+1)&255;a.I=a.I&-256|b;return b}function bd(a,b){a.C=b;b=(a.M=b-1)&255;a.I=a.I&-256|b;return b}function cd(a,b){return a.ia[(b&a.K)>>>a.P].Sa(b&a.H,b)}function dd(a){var b=cd(a,a.O);a.O=a.O+1&65535;return b}
|
||||
function ed(a){var b;b=a.O;var c=b&a.H,d=(b&a.K)>>>a.P;c<a.H?b=a.ia[d].Lb(c,b):(c=a.ia[d].Sa(c,b),b=c|=a.ia[d+1&a.R].Sa(0,b+1)<<8);a.O=a.O+2&65535;return b}function N(a,b,c,d){d=d||2;a.G[b]&&(void 0===c&&(sb(a,"Value for "+b+" is invalid"),a.U()),c=!a.j.X||a.j.Eb?n(c,d):"--------".substr(0,d),a.G[b].textContent!=c&&(a.G[b].textContent=c))}
|
||||
g.ka=function(a){this.V&&(a||!this.j.X||this.j.Eb)&&(N(this,"A",this.S),N(this,"B",this.aa),N(this,"C",this.ea),N(this,"D",this.ba),N(this,"E",this.fa),N(this,"H",this.ja),N(this,"L",this.la),N(this,"SP",this.Ea,4),N(this,"PC",this.O,4),a=xc(this),N(this,"F",a,2),N(this,"SF",a&128,1),N(this,"ZF",a&64,1),N(this,"AF",a&16,1),N(this,"PF",a&4,1),N(this,"CF",a&1,1));if(a=this.G.speed)a.textContent=this.j.X&&this.i.za?this.i.za.toFixed(2)+"Mhz":"Stopped"};
|
||||
g.Ta=function(a){this.j.kb=!0;var b=this.j.Tb=this.B&&fd(this.B),c=a?this.j.pb?0:1:-1;this.j.pb=!1;this.D=this.b=a;this.w&&!a&&this.w.Nb();a||(this.L|=4);do{if(this.N&&this.N&4){this.L=this.b=0;break}if(b){if(gd(this.B,this.O,c)){this.U();break}c=1}this.L=0;this.ca[dd(this)].call(this)}while(0<this.b);return this.j.kb?this.D-this.b:void 0===this.j.kb?0:-1};Qa(function(){for(var a=F(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new tc(d);mb(d,c)}});function hd(){this.b-=4}
|
||||
function O(){this.O=this.O-1&65535;nb(this,"unimplemented opcode",!0);this.U()}
|
||||
var uc=[hd,function(){zc(this,ed(this));this.b-=10},function(){var a=yc(this);this.ia[(a&this.K)>>>this.P].hb(a&this.H,this.S&255,a);this.b-=7},function(){zc(this,yc(this)+1);this.b-=5},function(){this.aa=ad(this,this.aa);this.b-=5},function(){this.aa=bd(this,this.aa);this.b-=5},function(){this.aa=dd(this);this.b-=7},function(){var a=this.S<<1;this.S=a&255|a>>8;this.I=this.I&255|a&256;this.b-=4},hd,function(){var a,b=a=(this.ja<<8|this.la)+yc(this);this.ja=b>>8&255;this.la=b&255;this.I=this.I&255|
|
||||
a>>8&256;this.b-=10},function(){this.S=cd(this,yc(this));this.b-=7},function(){zc(this,yc(this)-1);this.b-=5},function(){this.ea=ad(this,this.ea);this.b-=5},function(){this.ea=bd(this,this.ea);this.b-=5},function(){this.ea=dd(this);this.b-=7},function(){var a=this.S<<8&256;this.S=(a|this.S)>>1;this.I=this.I&255|a;this.b-=4},hd,function(){$c(this,ed(this));this.b-=10},function(){var a=Zc(this);this.ia[(a&this.K)>>>this.P].hb(a&this.H,this.S&255,a);this.b-=7},function(){$c(this,Zc(this)+1);this.b-=
|
||||
5},function(){this.ba=ad(this,this.ba);this.b-=5},function(){this.ba=bd(this,this.ba);this.b-=5},function(){this.ba=dd(this);this.b-=7},function(){var a=this.S<<1;this.S=a&255|this.I>>8;this.I=this.I&255|a&256;this.b-=4},hd,function(){var a,b=a=(this.ja<<8|this.la)+Zc(this);this.ja=b>>8&255;this.la=b&255;this.I=this.I&255|a>>8&256;this.b-=10},function(){this.S=cd(this,Zc(this));this.b-=7},function(){$c(this,Zc(this)-1);this.b-=5},function(){this.fa=ad(this,this.fa);this.b-=5},function(){this.fa=bd(this,
|
||||
this.fa);this.b-=5},function(){this.fa=dd(this);this.b-=7},function(){var a=this.S<<8&256;this.S=(this.I&256|this.S)>>1;this.I=this.I&255|a;this.b-=4},O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,
|
||||
O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O];function id(a){x.call(this,"ROM",a,id);this.s=null;this.F=a.addr;this.w=a.size;this.C=a.alias;this.D=a.file;this.H=ea(this.D);if(this.D){a=this.D;var b=fa(this.H);"json"!=b&&"hex"!=b&&(a=xa()+"/api/v1/dump?file="+this.D+"&format=bytes&decimal=true");var c=this;u(a,null,!0,function(a,b,f){jd(c,a,b,f)})}}z(id);id.prototype.La=function(a,b,c,d){this.A=b;this.b=c;this.B=d;kd(this)};
|
||||
id.prototype.sa=function(){if(this.qa){if(this.B){var a=this.B,b=this.id,c=this.F,d=this.w,e=this.qa,f=[],k;for(k in e){var h=e[k];"number"==typeof h&&(e[k]=h={o:h});var l=h.o,m=h.a;if(void 0!==l){var p=f,l=[l>>>0,k],r=ta(p,l,a.wb);0>r&&p.splice(-(r+1),0,l)}m&&(h.a=m.replace(/''/g,'"'))}a.H.push({bc:b,u:c,Xb:d,qa:e,xb:f})}delete this.qa}return!0};id.prototype.ra=function(){return!0};
|
||||
function jd(a,b,c,d){if(d)a.da("Unable to load system ROM (error "+d+": "+b+")");else{ab(a.zb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,k=e.data;if(f)a.s=f;else if(k)for(a.s=Array(4*k.length),d=c=0;c<k.length;c++)a.s[d++]=k[c]&255,a.s[d++]=k[c]>>8&255,a.s[d++]=k[c]>>16&255,a.s[d++]=k[c]>>24&255;else a.s=e;a.qa=e.symbols;if(!a.s.length){v("Empty ROM: "+b);return}if(1==a.s.length){v(a.s[0]);return}}catch(h){a.da("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.s=Array(b.length),e=0;e<b.length;e++)a.s[e]=da(b[e],16);kd(a)}}
|
||||
function kd(a){if(!rb(a))if(!a.D)G(a);else if(a.s&&a.A){if(a.s.length!=a.w)sb(a,"ROM size (0x"+n(a.s.length)+") does not match specified size ("+("0x"+n(a.w))+")");else{var b;b=a.F;if(Ab(a.A,b,a.w,Wb)){for(var c=0;c<a.s.length;c++){var d=a.A,e=b+c;d.A[(e&d.w)>>>d.P].Ua(e&d.s,a.s[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.C?b.push(a.C):null!=a.C&&a.C.length&&(b=a.C);for(c=0;c<b.length;c++){for(var f=a,d=b[c],e=f.A,k=f.w,h=[],l=f.F>>>e.P;0<k&&l<e.A.length;)h.push(e.A[l++]),k-=e.Z;e=f.A;
|
||||
f=f.w;k=0;for(d>>>=e.P;0<f&&d<e.A.length;){l=h[k++];if(!l)break;e.A[d++]=l;f-=e.Z}}delete a.s}}G(a)}}Qa(function(){for(var a=F(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new id(d);mb(d,c)}});function ld(a){x.call(this,"RAM",a,ld);this.C=a.addr;this.w=a.size;this.s=!1}z(ld);g=ld.prototype;g.La=function(a,b,c,d){this.A=b;this.b=c;this.B=d;G(this)};g.sa=function(a,b){b||this.reset();return!0};g.ra=function(a){return a?this.save():!0};
|
||||
g.reset=function(){!this.s&&this.w&&Ab(this.A,this.C,this.w,1)&&(this.s=!0,this.status(Math.floor(this.w/1024)+"Kb allocated"));this.s||v("No RAM allocated")};g.save=function(){return null};g.restore=function(){return!0};Qa(function(){for(var a=F(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new ld(d);mb(d,c)}});function md(a){x.call(this,"Keyboard",a,md,65536);G(this)}z(md);
|
||||
Qa(function(){for(var a=F(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new md(d);mb(d,c)}});function nd(a){x.call(this,"Video",a,nd,262144);G(this)}z(nd);
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function vb(a){x.call(this,"Panel",a,vb)}z(vb);g=vb.prototype;g.ka=function(a,b,c,d){return this.s&&this.s.ka(a,b,c,d)||this.b&&this.b.ka(a,b,c,d)||this.w&&this.w.ka(a,b,c,d)||this.C&&this.C.ka(a,b,c,d)?!0:this.parent.ka.call(this,a,b,c,d)};g.Ma=function(a,b,c,d){this.s=a;this.A=b;this.b=c;this.C=d;this.w=wb(a,"Keyboard")};g.sa=function(a,b){b||xb();return!0};g.ra=function(){return!0};g.la=function(){};
|
||||
function xb(){for(var a=!1,b=F(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=E(d),f;a:{f=e.id;if(void 0!==f)for(var k=void 0,k=0;k<y.length;k++)if(y[k].id===f){f=y[k];break a}f=null}f||(a=!0,f=new vb(e));cb(f,d);a&&G(f)}}Qa(xb);
|
||||
function yb(a,b,c){x.call(this,"Bus",a,yb);this.b=b;this.C=c;this.K=a.buswidth||16;this.N=Math.pow(2,this.K);this.w=this.N-1|0;this.P=20>=this.K?12:24>=this.K?14:15;this.aa=1<<this.P;this.S=this.aa>>2;this.s=this.aa-1;this.J=this.N/this.aa|0;this.M=this.J-1;this.B=[];this.D=[];this.F=this.I=!1;this.T=[];this.V=[];a=new H;zb(a,this.C);this.A=Array(this.J);for(b=0;b<this.J;b++)this.A[b]=a;a=this.b;b=this.A;c=this.P;var d=this.w;a.Y=b;a.P=c;a.aa=1<<a.P;a.D=a.aa-1;a.T=b.length;a.S=a.T-1;a.K=d;G(this)}
|
||||
z(yb);yb.prototype.reset=function(){};yb.prototype.sa=function(a,b){b||this.reset();return!0};function Ab(a,b,c,d){for(var e=b>>>a.P;0<c&&e<a.A.length;){var f=a.A[e],k=e*a.aa,h=c>a.aa?a.aa:c;if(f&&f.size){if(f.type==d){if(b+c<=f.u)return f.hb+=f.u-b,f.u=b,!0;if(b>=f.u+f.hb){h=f.size-(b-k);h>c&&(h=c);f.hb=b-f.u+h;c-=h;b=k+a.aa;continue}}return Bb(1,b,c)}f=a.A[e];b=new H(b,h,a.aa,d);zb(b,a.C,f);a.A[e++]=b;b=k+a.aa;c-=h}return 0>=c?!0:Bb(2,b,c)}
|
||||
function Cb(a,b){return a.A[(b&a.w)>>>a.P].fb(b&a.s,b)}function Db(a,b){if(void 0===b)return a.F=!a.F,a.F;void 0===a.B[b]&&(a.B[b]=[null,!1]);a.B[b][1]=!a.B[b][1];return a.B[b][1]}function Eb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.D[b]&&(a.D[b]=[null,!1]);a.D[b][1]=!a.D[b][1];return a.D[b][1]}function Bb(a,b,c){v("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Fb;
|
||||
if(tb){var Gb=new ArrayBuffer(2);(new DataView(Gb)).setUint16(0,256,!0);Fb=256===(new Uint16Array(Gb))[0]}else Fb=!1;var Hb=Fb;
|
||||
function H(a,b,c,d){this.id=Ib+=2;this.b=null;this.u=a;this.hb=b;this.size=c||0;this.type=d||Jb;this.A=d==Kb;zb(this);this.ua=this.Vb=!1;if(c)if(tb)this.D=new ArrayBuffer(c),this.F=new DataView(this.D,0,c),this.H=new Uint8Array(this.D,0,c),this.J=new Uint16Array(this.D,0,c>>1),this.b=new Int32Array(this.D,0,c>>2),Lb(this,Hb?Mb:Zb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Lb(this,$b)}else Lb(this)}var Jb=0,Kb=2,ac=["NONE","RAM","ROM","VIDEO","H/W"],Ib=0;
|
||||
H.prototype={constructor:H,parent:null,save:function(){var a,b;if(tb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.F.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(tb)for(b=0;b<a.length;b++)this.F.setInt32(b<<2,a[b],!0);else this.b=a;return this.ua=!0}return!1},xa:function(a,b){b?0===this.w++&&bc(this,cc,!1):0===this.s++&&dc(this,cc,!1)},K:function(){this.C&&eb(this.C,129)&&this.C.message("attempt to read invalid block %"+n(this.u),!0);
|
||||
return 255},B:function(a,b){this.C&&eb(this.C,129)&&this.C.message("attempt to write "+q(b)+" to invalid block %"+n(this.u),!0)},M:function(a,b){return this.Ta(a++,b++)|this.Ta(a,b)<<8},I:function(a,b,c){this.Ga(a++,b&255,c++);this.Ga(a,b>>8,c)},V:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},na:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},Ha:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.ua=!0},jb:function(a,
|
||||
b){var c=a>>2,d=(a&3)<<3;24>d?this.b[c]=this.b[c]&~(65535<<d)|b<<d:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.ua=!0},S:function(a,b){if(this.C&&null!=this.u){var c=this.C;ec(c,this.u+a,1,c.S)&&c.U(!0)}return this.fb(a,b)},ja:function(a,b){if(this.C&&null!=this.u){var c=this.C;ec(c,this.u+a,2,c.S)&&c.U(!0)}return this.tb(a,b)},va:function(a,b,c){if(this.C&&null!=this.u){var d=this.C;ec(d,this.u+a,1,d.F)&&d.U(!0)}this.A?this.B(a,b,c):this.Va(a,b,c)},Xa:function(a,b,
|
||||
c){if(this.C&&null!=this.u){var d=this.C;ec(d,this.u+a,2,d.F)&&d.U(!0)}this.A?this.B(a,b,c):this.ub(a,b,c)},N:function(a){return this.H[a]},T:function(a){return this.H[a]},ea:function(a){return this.F.getUint16(a,!0)},ma:function(a){return a&1?this.H[a]|this.H[a+1]<<8:this.J[a>>1]},pa:function(a,b){this.H[a]=b;this.ua=!0},wa:function(a,b){this.H[a]=b;this.ua=!0},Wa:function(a,b){this.F.setUint16(a,b,!0);this.ua=!0},Ya:function(a,b){a&1?(this.H[a]=b,this.H[a+1]=b>>8):this.J[a>>1]=b;this.ua=!0}};
|
||||
function zb(a,b,c){a.C=b;a.s=a.w=0;c&&((a.s=c.s)&&dc(a,cc,!1),(a.w=c.w)&&bc(a,cc,!1))}function fc(a,b){b?0===--a.w&&(a.Ga=a.A?a.B:a.Va,a.Pb=a.A?a.I:a.ub):0===--a.s&&(a.Ta=a.fb,a.Mb=a.tb)}function bc(a,b,c){c&&a.w||(a.Ga=!a.A&&b[2]||a.B,a.Pb=!a.A&&b[3]||a.I);if(c||void 0===c)a.Va=b[2]||a.B,a.ub=b[3]||a.I}function dc(a,b,c){c&&a.s||(a.Ta=b[0]||a.K,a.Mb=b[1]||a.M);if(c||void 0===c)a.fb=b[0]||a.K,a.tb=b[1]||a.M}function Lb(a,b){b||(b=gc);dc(a,b,void 0);bc(a,b,void 0)}
|
||||
var gc=[],$b=[H.prototype.V,H.prototype.na,H.prototype.Ha,H.prototype.jb],cc=[H.prototype.S,H.prototype.ja,H.prototype.va,H.prototype.Xa];if(tb)var Zb=[H.prototype.N,H.prototype.ea,H.prototype.pa,H.prototype.Wa],Mb=[H.prototype.T,H.prototype.ma,H.prototype.wa,H.prototype.Ya];
|
||||
function hc(a,b){x.call(this,"CPU",a,hc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.Sa=c;this.i.Ca=d;this.i.qb=Math.round(this.i.Sa/1E4)/100;this.i.Aa=this.i.qb*this.i.Ca;this.j.X=!1;this.j.pb=!1;this.j.Eb=a.autoStart;this.j.Fb=!1;this.j.Ja=!1;this.i.Za=this.i.Pa=0;this.i.$a=a.csStart;this.i.Oa=a.csInterval;this.i.Qa=a.csStop;this.ja=this.Fa.bind(this);G(this)}z(hc);var ic=["power","reset"];g=hc.prototype;
|
||||
g.Ma=function(a,b,c,d){this.s=a;this.A=b;this.C=d;for(b=0;b<ic.length;b++)(c=this.H[ic[b]])&&this.s.ka(null,ic[b],c);wb(a,"FPU");this.w=wb(a,"ChipSet");a=jc(a,"autoStart");null!=a&&(this.j.Eb="true"==a?!0:"false"==a?!1:!!a);G(this)};g.reset=function(){};g.save=function(){return null};g.restore=function(){return!1};
|
||||
g.sa=function(a,b){if(!b){if(a&&this.restore){kc(this);if(!this.restore(a))return!1;lc(this)}else this.reset();if(this.C){var c=this.C;c.g("Type ? for help with PC8080 Debugger commands");c.la();if(c.Ya){var d=c.Ya;c.Ya=null;mc(c,d)}}else this.g("No debugger detected")}I(this);return!0};g.ra=function(a){return a?this.save():!0};function nc(a){(a.j.Eb||!a.C&&void 0===a.H.run)&&a.Fa(!0)}g.Gb=function(){return 0};
|
||||
function lc(a){void 0===a.i.$a&&(a.i.$a=0);void 0===a.i.Oa&&(a.i.Oa=-1);void 0===a.i.Qa&&(a.i.Qa=-1);a.j.Ja=0<=a.i.$a&&0<a.i.Oa;a.j.Ja&&(a.i.Za=0,a.i.Pa=a.i.$a-a.J)}function oc(a,b){if(a.j.Ja){var c=!1;a.i.Za=a.i.Za+a.Gb()|0;a.i.Pa-=b;0>=a.i.Pa&&(a.i.Pa+=a.i.Oa,c=!0);0<=a.i.Qa&&a.i.Qa<=pc(a)&&(a.i.Oa=a.i.Qa=-1,lc(a),a.U(),c=!0);c&&a.g(pc(a)+" cycles: checksum="+n(a.i.Za))}}
|
||||
g.ka=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.H[b]=c;a=!0;break;case "run":this.H[b]=c;c.onclick=function(){var a;if(a=d.s)if(a=d.s,a.j.W)a=!0;else{var b=null,c,h=C(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.j.La);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.j.W);c++);c==h.length&&(b=a);v("The "+b.type+" component ("+b.id+") is not "+(b.j.La?"powered yet":"ready yet"+(b.lb?" (waiting for notification)":""))+".");a=!1}a&&(d.j.X?d.U(!0):d.Fa(!0))};a=!0;break;
|
||||
case "speed":this.H[b]=c;a=!0;break;case "setSpeed":this.H[b]=c,c.onclick=function(){qc(d,d.i.Ca<<1,!0)},c.textContent=this.i.Aa.toFixed(2)+"Mhz",a=!0}return a};function rc(a,b,c){a.J+=b;c&&(a.F=a.b=0)}
|
||||
function sc(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.i.Ca&&a.i.za&&(d=a.i.za/a.i.qb);a.i.Ib=Math.round(1E3/30);a.i.Zb=Math.floor(a.i.Sa/c*d);a.i.rb=Math.floor(a.i.Sa/30*d);a.i.Kb=Math.floor(a.i.Sa/60*d);a.i.Jb=Math.floor(a.i.Sa/2*d);b||(a.i.Ra=a.i.rb,a.i.bb=a.i.Kb,a.i.ab=a.i.Jb);a.i.sb=0}function pc(a){return a.J+a.I+a.F-a.b}function kc(a){a.i.za=0;a.J=a.I=a.F=a.b=0;lc(a);qc(a,1)}
|
||||
function qc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.za/a.i.Aa?b=1:d=!0;a.i.Ca=b;b=a.i.qb*a.i.Ca;if(a.i.Aa!=b){a.i.Aa=b;b=a.i.Aa.toFixed(2)+"Mhz";var e=a.H.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.s&&a.s.gb()}rc(a,a.I);a.I=0;a.i.Na=ua();a.i.Ba=0;sc(a);return d}
|
||||
g.Fa=function(a){if(fb(this,!0)){if(!this.j.X){qc(this);this.s&&this.s.start(this.i.Na,pc(this));this.j.X=!0;this.j.pb=!0;this.w&&this.w.$b();var b=this.H.run;b&&(b.textContent="Halt");this.s&&(this.s.la(!0),a&&this.s.gb(!0))}this.i.sb>=this.i.Sa&&sc(this,!0);this.i.cb=0;this.i.mb=ua();this.i.Ba&&(a=this.i.mb-this.i.Ba,a>this.i.Ib&&(this.i.Na+=a,this.i.Na>this.i.mb&&(this.i.Na=this.i.mb)));try{do{var c=this.j.Ja?1:this.i.Zb;this.w&&(this.w.Ob(),c=this.w.bc(0,c),c=this.w.ac(c));try{this.Ua(c)}catch(e){if("number"!=
|
||||
typeof e)throw e;}var d=this.F-this.b;this.I+=d;this.i.cb+=d;rc(this,0,!0);oc(this,d);this.i.bb-=d;0>=this.i.bb&&(this.i.bb+=this.i.Kb);this.i.ab-=d;0>=this.i.ab&&(this.i.ab+=this.i.Jb,this.s&&this.s.la());this.i.Ra-=d;if(0>=this.i.Ra){this.i.Ra+=this.i.rb;break}}while(this.j.X)}catch(e){this.U();I(this);this.s&&this.s.stop(ua(),pc(this));fb(this,!1);sb(this,e.stack||e.message);return}c=setTimeout;d=this.ja;this.i.Ba=ua();a=this.i.Ib;this.i.cb&&(a=Math.round(a*this.i.cb/this.i.rb));a-=this.i.Ba-this.i.mb;
|
||||
if(b=this.i.Ba-this.i.Na)this.i.za=Math.round(this.I/(10*b))/100,864E5<=b&&(this.J=0,this.w&&this.w.Ob(!0),qc(this));if(0>a||this.i.za<this.i.Aa)a=0;this.i.sb+=this.i.cb;this.i.Ba+=a;c(d,a)}else I(this),this.s&&this.s.stop(ua(),pc(this))};g.Ua=function(){return 0};g.U=function(a){gb(this,!0);this.F-=this.b;this.b=0;rc(this,this.I);this.I=0;if(this.j.X){this.j.X=!1;this.w&&this.w.$b();var b=this.H.run;b&&(b.textContent="Run")}this.j.kb=a};function I(a,b){a.s&&a.s.la(b)}
|
||||
function tc(a){this.Hb=a.model||8080;hc.call(this,a,1E6);this.ea=uc;kc(this);this.j.kb=this.j.Ub=!1;this.V=0;this.Y=[];this.P=this.aa=this.D=this.T=this.S=this.K=0;vc(this)}z(tc,hc);g=tc.prototype;g.reset=function(){this.j.X&&this.U();vc(this);kc(this);this.j.Ka=!1};function vc(a){a.O=0;a.ba=0;a.ga=0;a.ca=0;a.ha=0;a.da=0;a.ia=0;a.Ea=0;a.R=0;wc(a,0);a.N=0}g.Gb=function(){var a=this.O+this.ba+this.ga+this.ca+this.ha+this.da+this.ia|0;return a=a+this.Ea+this.R+xc(this)|0};
|
||||
g.save=function(){var a=new J(this);M(a,0,[this.O,this.ba,this.ga,this.ca,this.ha,this.da,this.ia,this.Ea,this.R,xc(this)]);M(a,1,[this.M,this.N,this.J,this.i.Ca]);for(var b=this.A,c=0,d=[],e=0;e<b.J;e++){var f=b.A[e];if(f.ua||f.Vb){d[c++]=e;var k=c++;a:if(f=f.save()){for(var h=0,l=0,m=[];h<f.length;){for(var p=f[h],r=h+1;r<f.length&&f[r]===p;)r++;m[l++]=r-h;m[l++]=p;h=r}if(m.length<f.length){f=m;break a}}d[k]=f}}M(a,2,d);return a.data()};
|
||||
g.restore=function(a){var b=a[0];this.O=b[0];this.ba=b[1];this.ga=b[2];this.ca=b[3];this.ha=b[4];this.da=b[5];this.ia=b[6];this.Ea=b[7]&65535;this.R=b[8]&65535;wc(this,b[9]);b=a[1];this.M=b[0];this.N=b[1];this.J=b[2];qc(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.S){for(var f=0,k=Array(b.S),h=0;h<e.length-1;)for(var l=e[h++],m=e[h++];l--;)k[f++]=m;e=k}f=b.A[d];if(!f||!f.restore(e)){v("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
g.ka=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "D":case "E":case "H":case "L":case "SP":case "PC":case "F":case "SF":case "ZF":case "AF":case "PF":case "CF":this.H[b]=c;this.V++;d=!0;break;default:d=this.parent.ka.call(this,a,b,c)}return d};function yc(a){return a.ba<<8|a.ga}function zc(a,b){a.ba=b>>8&255;a.ga=b&255}function Ac(a){return a.ca<<8|a.ha}function Bc(a,b){a.ca=b>>8&255;a.ha=b&255}function Cc(a){return a.da<<8|a.ia}function Dc(a,b){a.da=b>>8&255;a.ia=b&255}
|
||||
function cd(a){return(a.L^a.B)&16?16:0}function xc(a){return a.Da&-214|(a.L&128?128:0)|(a.G&255?0:64)|cd(a)|(ub[a.L&255]?4:0)|(a.G&256?1:0)}function wc(a,b){a.G=a.L=a.B=0;b&1&&(a.G|=256);b&4||(a.L|=1);b&16&&(a.B|=16);b&64||(a.G|=255);b&128&&(a.L^=192);a.Da=a.Da&-513|b&512|2}function dd(a,b){a.B=b;b=(a.L=b+1)&255;a.G=a.G&-256|b;return b}function ed(a,b){a.B=b;b=(a.L=b-1)&255;a.G=a.G&-256|b;return b}function fd(a,b){return a.Y[(b&a.K)>>>a.P].Ta(b&a.D,b)}
|
||||
function gd(a,b){var c=b&a.D,d=(b&a.K)>>>a.P;if(c<a.D)return a.Y[d].Mb(c,b);c=a.Y[d].Ta(c,b);return c|=a.Y[d+1&a.S].Ta(0,b+1)<<8}function hd(a){var b=fd(a,a.R);a.R=a.R+1&65535;return b}function id(a){var b=gd(a,a.R);a.R=a.R+2&65535;return b}function N(a,b,c,d){d=d||2;a.H[b]&&(void 0===c&&(sb(a,"Value for "+b+" is invalid"),a.U()),c=!a.j.X||a.j.Fb?n(c,d):"--------".substr(0,d),a.H[b].textContent!=c&&(a.H[b].textContent=c))}
|
||||
g.la=function(a){this.V&&(a||!this.j.X||this.j.Fb)&&(N(this,"A",this.O),N(this,"B",this.ba),N(this,"C",this.ga),N(this,"D",this.ca),N(this,"E",this.ha),N(this,"H",this.da),N(this,"L",this.ia),N(this,"SP",this.Ea,4),N(this,"PC",this.R,4),a=xc(this),N(this,"F",a,2),N(this,"SF",a&128,1),N(this,"ZF",a&64,1),N(this,"AF",a&16,1),N(this,"PF",a&4,1),N(this,"CF",a&1,1));if(a=this.H.speed)a.textContent=this.j.X&&this.i.za?this.i.za.toFixed(2)+"Mhz":"Stopped"};
|
||||
g.Ua=function(a){this.j.kb=!0;var b=this.j.Ub=this.C&&jd(this.C),c=a?this.j.pb?0:1:-1;this.j.pb=!1;this.F=this.b=a;this.w&&!a&&this.w.Ob();a||(this.M|=4);do{if(this.N&&this.N&4){this.M=this.b=0;break}if(b){if(kd(this.C,this.R,c)){this.U();break}c=1}this.M=0;this.ea[hd(this)].call(this)}while(0<this.b);return this.j.kb?this.F-this.b:void 0===this.j.kb?0:-1};Qa(function(){for(var a=F(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new tc(d);cb(d,c)}});function ld(){this.b-=4}
|
||||
function O(){this.R=this.R-1&65535;db(this,"unimplemented opcode",!0);this.U()}
|
||||
var uc=[ld,function(){zc(this,id(this));this.b-=10},function(){var a=yc(this);this.Y[(a&this.K)>>>this.P].Ga(a&this.D,this.O&255,a);this.b-=7},function(){zc(this,yc(this)+1);this.b-=5},function(){this.ba=dd(this,this.ba);this.b-=5},function(){this.ba=ed(this,this.ba);this.b-=5},function(){this.ba=hd(this);this.b-=7},function(){var a=this.O<<1;this.O=a&255|a>>8;this.G=this.G&255|a&256;this.b-=4},ld,function(){var a;Dc(this,a=Cc(this)+yc(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){this.O=
|
||||
fd(this,yc(this));this.b-=7},function(){zc(this,yc(this)-1);this.b-=5},function(){this.ga=dd(this,this.ga);this.b-=5},function(){this.ga=ed(this,this.ga);this.b-=5},function(){this.ga=hd(this);this.b-=7},function(){var a=this.O<<8&256;this.O=(a|this.O)>>1;this.G=this.G&255|a;this.b-=4},ld,function(){Bc(this,id(this));this.b-=10},function(){var a=Ac(this);this.Y[(a&this.K)>>>this.P].Ga(a&this.D,this.O&255,a);this.b-=7},function(){Bc(this,Ac(this)+1);this.b-=5},function(){this.ca=dd(this,this.ca);this.b-=
|
||||
5},function(){this.ca=ed(this,this.ca);this.b-=5},function(){this.ca=hd(this);this.b-=7},function(){var a=this.O<<1;this.O=a&255|this.G>>8;this.G=this.G&255|a&256;this.b-=4},ld,function(){var a;Dc(this,a=Cc(this)+Ac(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){this.O=fd(this,Ac(this));this.b-=7},function(){Bc(this,Ac(this)-1);this.b-=5},function(){this.ha=dd(this,this.ha);this.b-=5},function(){this.ha=ed(this,this.ha);this.b-=5},function(){this.ha=hd(this);this.b-=7},function(){var a=
|
||||
this.O<<8&256;this.O=(this.G&256|this.O)>>1;this.G=this.G&255|a;this.b-=4},ld,function(){Dc(this,id(this));this.b-=10},function(){var a=id(this),b=Cc(this),c=a&this.D,d=(a&this.K)>>>this.P;c<this.D?this.Y[d].Pb(c,b&65535,a):(this.Y[d++].Ga(c,b&255,a),this.Y[d&this.S].Ga(0,b>>8&255,a+1));this.b-=16},function(){Dc(this,Cc(this)+1);this.b-=5},function(){this.da=dd(this,this.da);this.b-=5},function(){this.da=ed(this,this.da);this.b-=5},function(){this.da=hd(this);this.b-=7},function(){var a=this.O,b=
|
||||
!!(this.G&256),c=!!cd(this);9<(a&15)||c?(a+=6,c=!0):c=!1;160<=a||b?(a+=96,b=!0):b=!1;this.G=this.L=this.O=a&255;this.G=b?this.G|256:this.G&-257;this.B=c?~this.L&16|this.B&-17:this.L&16|this.B&-17;this.b-=4},ld,function(){var a;Dc(this,a=Cc(this)+Cc(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){Dc(this,gd(this,id(this)));this.b-=16},function(){Dc(this,Cc(this)-1);this.b-=5},function(){this.ia=dd(this,this.ia);this.b-=5},function(){this.ia=ed(this,this.ia);this.b-=5},function(){this.ia=hd(this);
|
||||
this.b-=7},function(){this.O=~this.O&255;this.b-=4},O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O];
|
||||
function md(a){x.call(this,"ROM",a,md);this.s=null;this.F=a.addr;this.w=a.size;this.B=a.alias;this.D=a.file;this.I=ea(this.D);if(this.D){a=this.D;var b=fa(this.I);"json"!=b&&"hex"!=b&&(a=xa()+"/api/v1/dump?file="+this.D+"&format=bytes&decimal=true");var c=this;u(a,null,!0,function(a,b,f){nd(c,a,b,f)})}}z(md);md.prototype.Ma=function(a,b,c,d){this.A=b;this.b=c;this.C=d;od(this)};
|
||||
md.prototype.sa=function(){if(this.qa){if(this.C){var a=this.C,b=this.id,c=this.F,d=this.w,e=this.qa,f=[],k;for(k in e){var h=e[k];"number"==typeof h&&(e[k]=h={o:h});var l=h.o,m=h.a;if(void 0!==l){var p=f,l=[l>>>0,k],r=pa(p,l,a.xb);0>r&&p.splice(-(r+1),0,l)}m&&(h.a=m.replace(/''/g,'"'))}a.I.push({cc:b,u:c,Yb:d,qa:e,yb:f})}delete this.qa}return!0};md.prototype.ra=function(){return!0};
|
||||
function nd(a,b,c,d){if(d)a.fa("Unable to load system ROM (error "+d+": "+b+")");else{ab(a.Ab,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,k=e.data;if(f)a.s=f;else if(k)for(a.s=Array(4*k.length),d=c=0;c<k.length;c++)a.s[d++]=k[c]&255,a.s[d++]=k[c]>>8&255,a.s[d++]=k[c]>>16&255,a.s[d++]=k[c]>>24&255;else a.s=e;a.qa=e.symbols;if(!a.s.length){v("Empty ROM: "+b);return}if(1==a.s.length){v(a.s[0]);return}}catch(h){a.fa("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.s=Array(b.length),e=0;e<b.length;e++)a.s[e]=da(b[e],16);od(a)}}
|
||||
function od(a){if(!rb(a))if(!a.D)G(a);else if(a.s&&a.A){if(a.s.length!=a.w)sb(a,"ROM size (0x"+n(a.s.length)+") does not match specified size ("+("0x"+n(a.w))+")");else{var b;b=a.F;if(Ab(a.A,b,a.w,Kb)){for(var c=0;c<a.s.length;c++){var d=a.A,e=b+c;d.A[(e&d.w)>>>d.P].Va(e&d.s,a.s[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.B?b.push(a.B):null!=a.B&&a.B.length&&(b=a.B);for(c=0;c<b.length;c++){for(var f=a,d=b[c],e=f.A,k=f.w,h=[],l=f.F>>>e.P;0<k&&l<e.A.length;)h.push(e.A[l++]),k-=e.aa;e=f.A;
|
||||
f=f.w;k=0;for(d>>>=e.P;0<f&&d<e.A.length;){l=h[k++];if(!l)break;e.A[d++]=l;f-=e.aa}}delete a.s}}G(a)}}Qa(function(){for(var a=F(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new md(d);cb(d,c)}});function pd(a){x.call(this,"RAM",a,pd);this.B=a.addr;this.w=a.size;this.s=!1}z(pd);g=pd.prototype;g.Ma=function(a,b,c,d){this.A=b;this.b=c;this.C=d;G(this)};g.sa=function(a,b){b||this.reset();return!0};g.ra=function(a){return a?this.save():!0};
|
||||
g.reset=function(){!this.s&&this.w&&Ab(this.A,this.B,this.w,1)&&(this.s=!0,this.status(Math.floor(this.w/1024)+"Kb allocated"));this.s||v("No RAM allocated")};g.save=function(){return null};g.restore=function(){return!0};Qa(function(){for(var a=F(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new pd(d);cb(d,c)}});function qd(a){x.call(this,"Keyboard",a,qd,65536);G(this)}z(qd);
|
||||
Qa(function(){for(var a=F(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new qd(d);cb(d,c)}});function rd(a){x.call(this,"Video",a,rd,262144);G(this)}z(rd);
|
||||
Qa(function(){for(var a=F(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=E(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing <canvas> support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=ya().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
|
||||
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Va.aspect);f&&.3<=f&&3.33>=f&&(Pa("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ja("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e.getContext("2d");d=new nd(d);mb(d,c)}});
|
||||
function od(a){x.call(this,"Debugger",a,od);this.V=this.Ga=this.K=0;this.N=P();this.yb=P();this.D=-1;this.C=[];this.ma=!1;this.ca=P();this.H=[];this.ga={};this.w=this.R=this.F=[];pd(this);this.va=0;qd(this);this.Va=[];rd(this,a.messages);this.Xa=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return mc(b,a)}):void 0===global.$&&(global.$=function(a){return mc(b,a)})}z(od);
|
||||
var sd={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine","t [#]":"trace","u [#]":"unassemble",x:"execution options",v:"print version","var":"assign variable"},td="NONE ACI ADC ADD ADI ANA ANI CALL CC CM CNC CNZ CP CPE CPO CZ CMA CMC CMP CPI DAA DAD DCR DCX DI EI HLT IN INR INX JMP JC JM JNC JNZ JP JPE JPO JZ LDA LDAX LHLD LXI MOV MVI NOP ORA ORI OUT PCHL POP PUSH RAL RAR RET RC RM RNC RNZ RP RPE RPO RZ RLC RRC RST SBB SBI SHLD SPHL STA STAX STC SUB SUI XCHG XRA XRI XTHL".split(" "),
|
||||
ud="B C D E H L M A F BC DE HL PSW SP PC".split(" "),vd=[[45],[42,2323,32],[71,2387],[29,2323],[28,17],[22,17],[44,17,32],[63],[45,32768],[21,6419],[40,2387],[23,2323],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2579,32],[71,2643],[29,2579],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,6675],[40,2643],[23,2579],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2835,32],[68,99],[29,2835],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,6931],[41,99],[23,2835],[28,1297],[22,1297],[44,
|
||||
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Va.aspect);f&&.3<=f&&3.33>=f&&(Pa("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ea("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e.getContext("2d");d=new rd(d);cb(d,c)}});
|
||||
function sd(a){x.call(this,"Debugger",a,sd);this.V=this.Ha=this.K=0;this.N=P();this.zb=P();this.D=-1;this.B=[];this.ma=!1;this.ea=P();this.I=[];this.ja={};this.w=this.S=this.F=[];td(this);this.va=0;ud(this);this.Wa=[];vd(this,a.messages);this.Ya=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return mc(b,a)}):void 0===global.$&&(global.$=function(a){return mc(b,a)})}z(sd);
|
||||
var wd={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine","t [#]":"trace","u [#]":"unassemble",x:"execution options",v:"print version","var":"assign variable"},xd="NONE ACI ADC ADD ADI ANA ANI CALL CC CM CNC CNZ CP CPE CPO CZ CMA CMC CMP CPI DAA DAD DCR DCX DI EI HLT IN INR INX JMP JC JM JNC JNZ JP JPE JPO JZ LDA LDAX LHLD LXI MOV MVI NOP ORA ORI OUT PCHL POP PUSH RAL RAR RET RC RM RNC RNZ RP RPE RPO RZ RLC RRC RST SBB SBI SHLD SPHL STA STAX STC SUB SUI XCHG XRA XRI XTHL".split(" "),
|
||||
yd="B C D E H L M A F BC DE HL PSW SP PC".split(" "),zd=[[45],[42,2323,32],[71,2387],[29,2323],[28,17],[22,17],[44,17,32],[63],[45,32768],[21,6419],[40,2387],[23,2323],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2579,32],[71,2643],[29,2579],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,6675],[40,2643],[23,2579],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2835,32],[68,99],[29,2835],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,6931],[41,99],[23,2835],[28,1297],[22,1297],[44,
|
||||
1297,32],[16],[45,32768],[42,3347,32],[70,97],[29,3347],[28,1553],[22,1553],[44,1553,32],[72],[45,32768],[21,7443],[39,97],[23,3347],[28,1809],[22,1809],[44,1809,32],[17],[43,17,17],[43,17,273],[43,17,529],[43,17,785],[43,17,1041],[43,17,1297],[43,17,1553],[43,17,1809],[43,273,17],[43,273,273],[43,273,529],[43,273,785],[43,273,1041],[43,273,1297],[43,273,1553],[43,273,1809],[43,529,17],[43,529,273],[43,529,529],[43,529,785],[43,529,1041],[43,529,1297],[43,529,1553],[43,529,1809],[43,785,17],[43,785,
|
||||
273],[43,785,529],[43,785,785],[43,785,1041],[43,785,1297],[43,785,1553],[43,785,1809],[43,1041,17],[43,1041,273],[43,1041,529],[43,1041,785],[43,1041,1041],[43,1041,1297],[43,1041,1553],[43,1041,1809],[43,1297,17],[43,1297,273],[43,1297,529],[43,1297,785],[43,1297,1041],[43,1297,1297],[43,1297,1553],[43,1297,1809],[43,1553,17],[43,1553,273],[43,1553,529],[43,1553,785],[43,1553,1041],[43,1553,1297],[43,1553,1553],[43,1553,1809],[43,1809,17],[43,1809,273],[43,1809,529],[43,1809,785],[43,1809,1041],
|
||||
[43,1809,1297],[43,1809,1553],[43,1809,1809],[3,17],[3,273],[3,529],[3,785],[3,1041],[3,1297],[3,1553],[3,1809],[2,17],[2,273],[2,529],[2,785],[2,1041],[2,1297],[2,1553],[2,1809],[73,17],[73,273],[73,529],[73,785],[73,1041],[73,1297],[73,1553],[73,1809],[66,17],[66,273],[66,529],[66,785],[66,1041],[66,1297],[66,1553],[66,1809],[5,17],[5,273],[5,529],[5,785],[5,1041],[5,1297],[5,1553],[5,1809],[76,17],[76,273],[76,529],[76,785],[76,1041],[76,1297],[76,1553],[76,1809],[46,17],[46,273],[46,529],[46,
|
||||
785],[46,1041],[46,1297],[46,1553],[46,1809],[18,17],[18,273],[18,529],[18,785],[18,1041],[18,1297],[18,1553],[18,1809],[58],[50,2323],[34,35],[30,35],[11,35],[51,2323],[4,33],[65],[62],[54],[38,35],[30,32803],[15,35],[7,35],[1,33],[65],[57],[50,2579],[33,35],[48,33],[10,35],[51,2579],[74,33],[65],[55],[54,32768],[31,35],[27,33],[8,35],[7,32803],[67,33],[65],[61],[50,2835],[37,35],[78],[14,35],[51,2835],[6,33],[65],[60],[49],[36,35],[75],[13,35],[7,32803],[77,33],[65],[59],[50,3091],[35,35],[24],
|
||||
[12,35],[51,3091],[47,33],[65],[56],[69],[32,35],[25],[9,35],[7,32803],[19,33],[65]],Q={cpu:1,bus:64,mem:128,port:256,timer:2048,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};g=od.prototype;
|
||||
g.La=function(a,b,c,d){this.A=b;this.b=c;this.s=a;(a=jc(a,"messages"))&&rd(this,a);this.jb=vd;wd(this,function(a){a:{var b=d.b.ia,c=a[0],h=a=0,l=b.length;if(c){a=T(U(d,c));if(-1===a){d.g("invalid address: "+c);break a}h=a>>>d.b.P;l=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,m=0;l--;){var p=b[h];p.type==c?m++||d.g("..."):(c=p.type,m=ac[c],p&&d.g(n(p.id)+" %"+n(h<<d.b.P)+" %%"+n(p.u)+" "+q(p.gb)+" "+q(p.size)+
|
||||
" "+m),c!=Jb&&(c=-1),m=0);a+=d.b.Z;h++}}});G(this)};
|
||||
g.ha=function(a,b,c){var d=this;switch(b){case "debugInput":return this.pa=this.G[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",mc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.D<d.C.length-1&&(b=d.C[++d.D]):40==a.keyCode&&(0<d.D?b=d.C[--d.D]:(b="",d.D=-1)),null!=b){var k=b.length;c.value=b;c.setSelectionRange(k,k)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.G[b]=c,La(c,function(){if(d.pa){var a=d.pa.value;d.pa.value=
|
||||
"";mc(d,a,!0);return!0}return!1}),!0;case "step":return this.G[b]=c,La(c,function(a){var b=!1;qb(d,!0)||(pb(d,!0),b=d.Ta(a?1:0),pb(d,!1));return b}),!0}return!1};g.fb=function(){this.pa&&this.pa.focus()};function T(a){a=a&&a.u;null==a&&(a=-1);return a}g.ta=function(a,b){var c=255,d=T(a);-1!==d&&(c=Cb(this.A,d),b&&xd(a,b));return c};g.ib=function(a,b){var c=65535,d=T(a);if(-1!==d){var c=this.A,e=d&c.s,f=(d&c.w)>>>c.P,c=e!=c.s?c.A[f].tb(e,d):c.A[f++].eb(e,d)|c.A[f&c.L].eb(0,d+1)<<8;b&&xd(a,b)}return c};
|
||||
g.ub=function(a,b,c){var d=T(a);if(-1!==d){var e=this.A;e.A[(d&e.w)>>>e.P].Ua(d&e.s,b&255,d);c&&xd(a,c);I(this.b,!0)}};g.Pb=function(a,b,c){var d=T(a);if(-1!==d){var e=this.A,f=d&e.s,k=(d&e.w)>>>e.P;f!=e.s?e.A[k].Ob(f,b&65535,d):(e.A[k++].Ua(f,b&255,d),e.A[k&e.L].Ua(0,b>>8&255,d+1));c&&xd(a,c);I(this.b,!0)}};function P(a){return{u:a||0,oa:!1}}function yd(a){return[a.u,a.oa]}function zd(a){return{u:a[0],oa:a[1]}}
|
||||
function U(a,b,c){var d;c=(c?a.N:a.yb).u;if(void 0!==b){d=b=Ad(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.H.length;c++){var f=a.H[c].qa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=P(d));break}}if(d=e)return d;c=Bd(a,b,void 0)}null!=c&&(d=P(c));return d}function Cd(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Qb=Dd(a,b.Mb=c[2]))}function xd(a,b){null!=a.u&&(a.u+=b||1)}
|
||||
function Ed(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.ta(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function rd(a,b){a.B=a;a.Y=a.Rb=1073741824;a.wa=null;var c=Dd(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Q)0<=wa(c,d)&&(a.Y|=Q[d],a.g(d+" messages enabled"))}function wd(a,b){for(var c in Q)if(64==Q[c]){a.Va[c]=b;break}}
|
||||
function Fd(a,b){var c;a=a.toUpperCase();null==b?c=wa(ud,a):(c=wa(ud,a.substr(b,3)),0>c&&(c=wa(ud,a.substr(b,2))));return c}function Gd(a,b){var c=0,d=Hd(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 8:c=2;break;case 9:case 10:case 11:case 12:case 13:case 14:c=4}return c?n(d,c):"??"}
|
||||
function Hd(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.S;break;case 8:c=xc(d)&255;break;case 0:c=d.aa;break;case 1:c=d.ea;break;case 9:c=d.aa<<8|d.ea;break;case 2:c=d.ba;break;case 3:c=d.fa;break;case 10:c=d.ba<<8|d.fa;break;case 4:c=d.ja;break;case 5:c=d.la;break;case 11:c=d.ja<<8|d.la;break;case 12:c=d.S<<8|xc(d)&255;break;case 13:c=d.Ea;break;case 14:c=d.O}}return c}
|
||||
function Id(a,b){b=Ad(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Fd(b,c+1),0<=e&&(b=b.substr(0,c)+Gd(a,e)+b.substr(c+1+ud[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=da(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=U(a,e))?(d=e+' "'+Ed(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=U(a,e))?(xd(d),d=e+' "'+
|
||||
Ed(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}g.message=function(a,b){b&&(a+=" at "+n(P(this.b.O).u,4));if(!this.wa||a!=this.wa)if(this.wa=a,this.Y&-2147483648&&(this.U(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Qa=0;c.D-=c.b;c.b=0;I(c)}};function Jd(a,b,c,d){a.message(b.Wa+"."+(null!=d?"outPort":"inPort")+"("+q(c)+",unknown"+(null!=d?",0x"+n(d,2):"")+")")}
|
||||
function qd(a){var b;if(fd(a)){if(!a.L||!a.L.length){a.L=Array(1E3);for(b=0;b<a.L.length;b++)a.L[b]=P();a.na=0;a.g("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.L&&a.L.length&&a.g("instruction history buffer freed"),a.na=0,a.L=[],a.J=[]}g.Fa=function(a){if(!Kd(this))return!1;this.b.Fa(a);return!0};
|
||||
g.Ta=function(a,b,c){if(!Kd(this))return!1;this.K=0;a||fd(this)&&gd(this,this.b.O,0);try{var d=this.b.Ta(a);0<d&&(this.K+=d,rc(this.b,d,!0),oc(this.b,d),this.V++)}catch(e){"number"!=typeof e&&(this.K=0,sb(this.b,e.stack||e.message))}!1!==c&&I(this.b);this.ka(b||!1);return 0<this.K};g.U=function(a){this.b&&this.b.U(a)};g.ka=function(a){void 0===a&&(a=!0);this.N=P(this.b.O);a&&1!=this.T?Ld(this):Md(this)};
|
||||
function Kd(a){var b;if(b=a.b&&rb(a.b))b=a.b,b.j.W?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!qb(a.b)?(a=a.b,a.j.Ja?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}g.sa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};g.ra=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};g.reset=function(a){qd(this);this.V=this.Ga=0;this.wa=null;this.K=0;this.N=P(this.b.O);this.j.X=!1;Nd(this);a||this.ka()};
|
||||
g.save=function(){var a=new J(this);M(a,0,yd(this.N));M(a,1,yd(this.ca));M(a,2,[this.C,this.ma,this.Y]);M(a,3,this.H);return a.data()};g.restore=function(a){var b=0;void 0!==a[2]&&(this.N=zd(a[b++]),this.ca=zd(a[b++]),this.C=a[b][0],"string"==typeof this.C&&(this.C=[this.C]),this.ma=a[b][1],this.Y|=a[b][2]);a[3]&&(this.H=a[3]);return!0};g.start=function(a,b){this.T||this.g("running");this.j.X=!0;this.Sb=a;this.Vb=b};
|
||||
g.stop=function(a,b){if(this.j.X){this.j.X=!1;this.K=b-this.Vb;if(!this.T){var c="stopped";if(this.K){var d=a-this.Sb,e=0<d?Math.round(1E3*this.K/d):0,c=c+" (";fd(this)&&(c+=this.V+" opcodes, ",this.Ga-=this.V,this.V=0);c+=this.K+" cycles, "+d+" ms, "+e+" hz)"}else ob(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.ka(!0);this.fb();Nd(this,this.b.O)}};function fd(a){return 1<a.w.length||!!a.va}
|
||||
function gd(a,b,c){var d=a.b;if(0<c&&(a.va&&!--a.va||ec(a,b,1,a.w)))return!0;0<=c&&a.J.length&&(a.V++,b=Cb(a.A,b),null!=b&&(a.J[b][1]++,b=a.L[a.na],b.u=d.O,b.oa=!1,++a.na==a.L.length&&(a.na=0)));return!1}function Od(a,b,c){a.g("break on input from port "+q(b)+": "+n(c));a.U(!0)}function Pd(a,b,c){a.g("break on output to port "+q(b)+": "+n(c));a.U(!0)}
|
||||
function pd(a){var b,c;a.w=["bp"];if(void 0!==a.R)for(b=1;b<a.R.length;b++){c=a.R[b];var d=a.b;fc(d.ia[T(c)>>>d.P],!1)}a.R=["br"];if(void 0!==a.F)for(b=1;b<a.F.length;b++)c=a.F[b],d=a.b,fc(d.ia[T(c)>>>d.P],!0);a.F=["bw"];a.Ab=0}g.xa=function(a,b,c){var d=!0;c||Qd(this,a,b,!1,!0);if(a!=this.w){var e=T(b);if(-1===e)this.g("invalid address: "+n(b.u,4)),d=!1;else{var f=this.b;f.ia[e>>>f.P].xa(e&f.H,a==this.F)}}d&&(a.push(b),c?b.oa=!0:(Rd(this,a,a.length-1,"set"),qd(this)));return d};
|
||||
function Qd(a,b,c,d,e){var f=!1;c=T(c);for(var k=1;k<b.length;k++){var h=b[k];if(c==T(h)&&(!d||h.oa)){f=!0;h.oa||e||Rd(a,b,k,"cleared");b.splice(k,1);b!=a.w&&(d=a.b,fc(d.ia[c>>>d.P],b==a.F));h.oa||qd(a);break}}return f}function Sd(a,b){for(var c=1;c<b.length;c++)Rd(a,b,c);return b.length-1}function Rd(a,b,c,d){c=b[c];a.g(b[0]+" "+n(c.u,4)+(d?" "+d:c.Mb?' "'+c.Mb+'"':""))}
|
||||
function Nd(a,b){if(void 0!==b)ec(a,b,1,a.w,!0),a.T=0;else for(var c=1;c<a.w.length;c++){var d=a.w[c];if(d.oa){if(!Qd(a,a.w,d,!0))break;c=0}}}
|
||||
function ec(a,b,c,d,e){var f=!1;if(!a.Ab++)for(var k=1;!f&&k<d.length;k++){var h=d[k];if(!e||h.oa)for(var l=T(h),m=0;m<c;m++)if(b+m==l){var p,f=!0;h.oa&&(Qd(a,d,h,!0),e=!0);if(p=h.Qb){for(var f=!1,r=0;r<p.length;r++)if(!Td(a,p[r],!0)){if(p[r].indexOf("if")){f=!0;break}for(var t=r+1;t<p.length&&p[t].indexOf("else");t++)r++;if(t==p.length){f=!0;break}}a.b.j.X||(f=!0)}if(f){e||Rd(a,d,k,"hit");break}}}a.Ab--;return f}
|
||||
function Ud(a,b,c,d){for(var e=P(b.u),f=a.ta(b,1),k=a.jb[f],f="",h=null,l=td[k[0]],m=k.length-1,p=1;p<=m;p++){var r="",t=k[p];if(void 0!==t){var K=t&15;if(0==K){if(null==h)continue;K=h}h=K;K=t&240;if(32==K){var r=a,K=b,B=" ";switch(t&15){case 1:t&12288&&(B=n(r.ta(K,1),2));break;case 2:B=n(r.ta(K,1)<<24>>24,4);break;case 3:B=n(r.ib(K,2),4);break;default:B="imm("+q(t)+")"}r=B}else 16==K&&(r=ud[(t&3840)>>8]);if(!r||!r.length){f="INVALID";break}0<f.length&&(f+=",");f+=r||"???"}}k="";h=n(e.u,4)+" ";if(-1!==
|
||||
e.u&&-1!==b.u){do if(k+=n(a.ta(e,1),2),null==e.u)break;while(e.u!=b.u)}h+=ra(k,11);h+=ra(l,7);f&&(h+=" "+f);c&&(h=ra(h,40)+";"+c,h=a.b.j.Ia?h+("cycles="+pc(a.b).toString()+" cs="+n(a.b.i.Ya)):h+(null!=d?"="+d.toString():""));return h}
|
||||
function Vd(a,b){var c;switch(b){case "I":c=a.b.Da&512;break;case "S":c=a.b.M&128?128:0;break;case "Z":c=a.b.I&255?0:64;break;case "A":c=a.b;c=(c.M^c.C)&16?16:0;break;case "P":c=ub[a.b.M&255]?4:0;break;case "C":c=a.b.I&256?1:0;break;default:c=0}return b+(c?"1":"0")+" "}function V(a,b){return ud[b]+"="+Gd(a,b)+" "}var Wd={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function Xd(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
[12,35],[51,3091],[47,33],[65],[56],[69],[32,35],[25],[9,35],[7,32803],[19,33],[65]],Q={cpu:1,bus:64,mem:128,port:256,timer:2048,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};g=sd.prototype;
|
||||
g.Ma=function(a,b,c,d){this.A=b;this.b=c;this.s=a;(a=jc(a,"messages"))&&vd(this,a);this.jb=zd;Ad(this,function(a){a:{var b=d.b.Y,c=a[0],h=a=0,l=b.length;if(c){a=T(U(d,c));if(-1===a){d.g("invalid address: "+c);break a}h=a>>>d.b.P;l=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,m=0;l--;){var p=b[h];p.type==c?m++||d.g("..."):(c=p.type,m=ac[c],p&&d.g(n(p.id)+" %"+n(h<<d.b.P)+" %%"+n(p.u)+" "+q(p.hb)+" "+q(p.size)+
|
||||
" "+m),c!=Jb&&(c=-1),m=0);a+=d.b.aa;h++}}});G(this)};
|
||||
g.ka=function(a,b,c){var d=this;switch(b){case "debugInput":return this.pa=this.H[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",mc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.D<d.B.length-1&&(b=d.B[++d.D]):40==a.keyCode&&(0<d.D?b=d.B[--d.D]:(b="",d.D=-1)),null!=b){var k=b.length;c.value=b;c.setSelectionRange(k,k)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.H[b]=c,Ga(c,function(){if(d.pa){var a=d.pa.value;d.pa.value=
|
||||
"";mc(d,a,!0);return!0}return!1}),!0;case "step":return this.H[b]=c,Ga(c,function(a){var b=!1;gb(d,!0)||(fb(d,!0),b=d.Ua(a?1:0),fb(d,!1));return b}),!0}return!1};g.gb=function(){this.pa&&this.pa.focus()};function T(a){a=a&&a.u;null==a&&(a=-1);return a}g.ta=function(a,b){var c=255,d=T(a);-1!==d&&(c=Cb(this.A,d),b&&Bd(a,b));return c};g.ib=function(a,b){var c=65535,d=T(a);if(-1!==d){var c=this.A,e=d&c.s,f=(d&c.w)>>>c.P,c=e!=c.s?c.A[f].tb(e,d):c.A[f++].fb(e,d)|c.A[f&c.M].fb(0,d+1)<<8;b&&Bd(a,b)}return c};
|
||||
g.vb=function(a,b,c){var d=T(a);if(-1!==d){var e=this.A;e.A[(d&e.w)>>>e.P].Va(d&e.s,b&255,d);c&&Bd(a,c);I(this.b,!0)}};g.Qb=function(a,b,c){var d=T(a);if(-1!==d){var e=this.A,f=d&e.s,k=(d&e.w)>>>e.P;f!=e.s?e.A[k].ub(f,b&65535,d):(e.A[k++].Va(f,b&255,d),e.A[k&e.M].Va(0,b>>8&255,d+1));c&&Bd(a,c);I(this.b,!0)}};function P(a){return{u:a||0,oa:!1}}function Cd(a){return[a.u,a.oa]}function Dd(a){return{u:a[0],oa:a[1]}}
|
||||
function U(a,b,c){var d;c=(c?a.N:a.zb).u;if(void 0!==b){d=b=Ed(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.I.length;c++){var f=a.I[c].qa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=P(d));break}}if(d=e)return d;c=Fd(a,b,void 0)}null!=c&&(d=P(c));return d}function Gd(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Rb=Hd(a,b.Nb=c[2]))}function Bd(a,b){null!=a.u&&(a.u+=b||1)}
|
||||
function Id(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.ta(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function vd(a,b){a.C=a;a.Z=a.Sb=1073741824;a.wa=null;var c=Hd(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Q)0<=wa(c,d)&&(a.Z|=Q[d],a.g(d+" messages enabled"))}function Ad(a,b){for(var c in Q)if(64==Q[c]){a.Wa[c]=b;break}}
|
||||
function Jd(a,b){var c;a=a.toUpperCase();null==b?c=wa(yd,a):(c=wa(yd,a.substr(b,3)),0>c&&(c=wa(yd,a.substr(b,2))));return c}function Kd(a,b){var c=0,d=Ld(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 8:c=2;break;case 9:case 10:case 11:case 12:case 13:case 14:c=4}return c?n(d,c):"??"}
|
||||
function Ld(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.O;break;case 8:c=xc(d)&255;break;case 0:c=d.ba;break;case 1:c=d.ga;break;case 9:c=d.ba<<8|d.ga;break;case 2:c=d.ca;break;case 3:c=d.ha;break;case 10:c=d.ca<<8|d.ha;break;case 4:c=d.da;break;case 5:c=d.ia;break;case 11:c=d.da<<8|d.ia;break;case 12:c=d.O<<8|xc(d)&255;break;case 13:c=d.Ea;break;case 14:c=d.R}}return c}
|
||||
function Md(a,b){b=Ed(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Jd(b,c+1),0<=e&&(b=b.substr(0,c)+Kd(a,e)+b.substr(c+1+yd[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=da(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=U(a,e))?(d=e+' "'+Id(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=U(a,e))?(Bd(d),d=e+' "'+
|
||||
Id(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}g.message=function(a,b){b&&(a+=" at "+n(P(this.b.R).u,4));if(!this.wa||a!=this.wa)if(this.wa=a,this.Z&-2147483648&&(this.U(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Ra=0;c.F-=c.b;c.b=0;I(c)}};function Nd(a,b,c,d){a.message(b.Xa+"."+(null!=d?"outPort":"inPort")+"("+q(c)+",unknown"+(null!=d?",0x"+n(d,2):"")+")")}
|
||||
function ud(a){var b;if(jd(a)){if(!a.M||!a.M.length){a.M=Array(1E3);for(b=0;b<a.M.length;b++)a.M[b]=P();a.na=0;a.g("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.M&&a.M.length&&a.g("instruction history buffer freed"),a.na=0,a.M=[],a.J=[]}g.Fa=function(a){if(!Od(this))return!1;this.b.Fa(a);return!0};
|
||||
g.Ua=function(a,b,c){if(!Od(this))return!1;this.K=0;a||jd(this)&&kd(this,this.b.R,0);try{var d=this.b.Ua(a);0<d&&(this.K+=d,rc(this.b,d,!0),oc(this.b,d),this.V++)}catch(e){"number"!=typeof e&&(this.K=0,sb(this.b,e.stack||e.message))}!1!==c&&I(this.b);this.la(b||!1);return 0<this.K};g.U=function(a){this.b&&this.b.U(a)};g.la=function(a){void 0===a&&(a=!0);this.N=P(this.b.R);a&&1!=this.T?Pd(this):Qd(this)};
|
||||
function Od(a){var b;if(b=a.b&&rb(a.b))b=a.b,b.j.W?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!gb(a.b)?(a=a.b,a.j.Ka?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}g.sa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};g.ra=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};g.reset=function(a){ud(this);this.V=this.Ha=0;this.wa=null;this.K=0;this.N=P(this.b.R);this.j.X=!1;Rd(this);a||this.la()};
|
||||
g.save=function(){var a=new J(this);M(a,0,Cd(this.N));M(a,1,Cd(this.ea));M(a,2,[this.B,this.ma,this.Z]);M(a,3,this.I);return a.data()};g.restore=function(a){var b=0;void 0!==a[2]&&(this.N=Dd(a[b++]),this.ea=Dd(a[b++]),this.B=a[b][0],"string"==typeof this.B&&(this.B=[this.B]),this.ma=a[b][1],this.Z|=a[b][2]);a[3]&&(this.I=a[3]);return!0};g.start=function(a,b){this.T||this.g("running");this.j.X=!0;this.Tb=a;this.Wb=b};
|
||||
g.stop=function(a,b){if(this.j.X){this.j.X=!1;this.K=b-this.Wb;if(!this.T){var c="stopped";if(this.K){var d=a-this.Tb,e=0<d?Math.round(1E3*this.K/d):0,c=c+" (";jd(this)&&(c+=this.V+" opcodes, ",this.Ha-=this.V,this.V=0);c+=this.K+" cycles, "+d+" ms, "+e+" hz)"}else eb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.la(!0);this.gb();Rd(this,this.b.R)}};function jd(a){return 1<a.w.length||!!a.va}
|
||||
function kd(a,b,c){var d=a.b;if(0<c&&(a.va&&!--a.va||ec(a,b,1,a.w)))return!0;0<=c&&a.J.length&&(a.V++,b=Cb(a.A,b),null!=b&&(a.J[b][1]++,b=a.M[a.na],b.u=d.R,b.oa=!1,++a.na==a.M.length&&(a.na=0)));return!1}function Sd(a,b,c){a.g("break on input from port "+q(b)+": "+n(c));a.U(!0)}function Td(a,b,c){a.g("break on output to port "+q(b)+": "+n(c));a.U(!0)}
|
||||
function td(a){var b,c;a.w=["bp"];if(void 0!==a.S)for(b=1;b<a.S.length;b++){c=a.S[b];var d=a.b;fc(d.Y[T(c)>>>d.P],!1)}a.S=["br"];if(void 0!==a.F)for(b=1;b<a.F.length;b++)c=a.F[b],d=a.b,fc(d.Y[T(c)>>>d.P],!0);a.F=["bw"];a.Bb=0}g.xa=function(a,b,c){var d=!0;c||Ud(this,a,b,!1,!0);if(a!=this.w){var e=T(b);if(-1===e)this.g("invalid address: "+n(b.u,4)),d=!1;else{var f=this.b;f.Y[e>>>f.P].xa(e&f.D,a==this.F)}}d&&(a.push(b),c?b.oa=!0:(Vd(this,a,a.length-1,"set"),ud(this)));return d};
|
||||
function Ud(a,b,c,d,e){var f=!1;c=T(c);for(var k=1;k<b.length;k++){var h=b[k];if(c==T(h)&&(!d||h.oa)){f=!0;h.oa||e||Vd(a,b,k,"cleared");b.splice(k,1);b!=a.w&&(d=a.b,fc(d.Y[c>>>d.P],b==a.F));h.oa||ud(a);break}}return f}function Wd(a,b){for(var c=1;c<b.length;c++)Vd(a,b,c);return b.length-1}function Vd(a,b,c,d){c=b[c];a.g(b[0]+" "+n(c.u,4)+(d?" "+d:c.Nb?' "'+c.Nb+'"':""))}
|
||||
function Rd(a,b){if(void 0!==b)ec(a,b,1,a.w,!0),a.T=0;else for(var c=1;c<a.w.length;c++){var d=a.w[c];if(d.oa){if(!Ud(a,a.w,d,!0))break;c=0}}}
|
||||
function ec(a,b,c,d,e){var f=!1;if(!a.Bb++)for(var k=1;!f&&k<d.length;k++){var h=d[k];if(!e||h.oa)for(var l=T(h),m=0;m<c;m++)if(b+m==l){var p,f=!0;h.oa&&(Ud(a,d,h,!0),e=!0);if(p=h.Rb){for(var f=!1,r=0;r<p.length;r++)if(!Xd(a,p[r],!0)){if(p[r].indexOf("if")){f=!0;break}for(var t=r+1;t<p.length&&p[t].indexOf("else");t++)r++;if(t==p.length){f=!0;break}}a.b.j.X||(f=!0)}if(f){e||Vd(a,d,k,"hit");break}}}a.Bb--;return f}
|
||||
function Yd(a,b,c,d){for(var e=P(b.u),f=a.ta(b,1),k=a.jb[f],f="",h=null,l=xd[k[0]],m=k.length-1,p=1;p<=m;p++){var r="",t=k[p];if(void 0!==t){var K=t&15;if(0==K){if(null==h)continue;K=h}h=K;K=t&240;if(32==K){var r=a,K=b,B=" ";switch(t&15){case 1:t&12288&&(B=n(r.ta(K,1),2));break;case 2:B=n(r.ta(K,1)<<24>>24,4);break;case 3:B=n(r.ib(K,2),4);break;default:B="imm("+q(t)+")"}r=B}else 16==K&&(r=yd[(t&3840)>>8]);if(!r||!r.length){f="INVALID";break}0<f.length&&(f+=",");f+=r||"???"}}k="";h=n(e.u,4)+" ";if(-1!==
|
||||
e.u&&-1!==b.u){do if(k+=n(a.ta(e,1),2),null==e.u)break;while(e.u!=b.u)}h+=na(k,11);h+=na(l,7);f&&(h+=" "+f);c&&(h=na(h,40)+";"+c,h=a.b.j.Ja?h+("cycles="+pc(a.b).toString()+" cs="+n(a.b.i.Za)):h+(null!=d?"="+d.toString():""));return h}function Zd(a,b){var c;switch(b){case "I":c=a.b.Da&512;break;case "S":c=a.b.L&128?128:0;break;case "Z":c=a.b.G&255?0:64;break;case "A":c=cd(a.b);break;case "P":c=ub[a.b.L&255]?4:0;break;case "C":c=a.b.G&256?1:0;break;default:c=0}return b+(c?"1":"0")+" "}
|
||||
function V(a,b){return yd[b]+"="+Kd(a,b)+" "}var $d={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function ae(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
|
||||
function Bd(a,b,c){var d;if(b){b=Ad(a,b);for(var e=0,f=!1,k=b,h=[],l=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<m.length;){var p=m[e++],r=p.length,p=sa(p);if(!p){f=!0;break}p=Yd(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}h.push(p);if(e==m.length)break;var p=m[e++],t=p.length;l.length&&Wd[p]<Wd[l[l.length-1]]&&Xd(h,l,1);l.push(p);b=b.substr(r+t)}Xd(h,l)&&1==h.length||(f=!0);f?c&&a.g("error parsing '"+k+"' at character "+(k.length-b.length)):(d=h.pop(),c&&ye(a,null,
|
||||
d))}return d}function Ad(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Bd(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=U(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.ib(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.V-a.Ga}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function Yd(a,b,c,d){var e;void 0!==b?(e=Fd(b),0<=e?e=Hd(a,e):(e=a.ga[b],void 0===e&&(e=da(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
||||
function ye(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,k="";if(!f||4<f)f=4;for(var h=0;h<f;h++){k&&(k=","+k);var l=d&255,m=8,p="";void 0===m?m=32:32<m&&(m=32);if(null==l||isNaN(l))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(l&1?"1":"0")+p,l>>=1;k=p+"b"+k;d>>=8}d="0x"+n(c)+" "+c+". ("+k+")"}a.g((null!=b?b+": ":"")+d);return e}function ze(a,b){if(b)return ye(a,b,a.ga[b]);var c=0;for(b in a.ga)ye(a,b,a.ga[b]),c++;return 0<c}od.prototype.wb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
||||
function Ae(a,b,c){var d=[],e=T(b)>>>0;for(b=0;b<a.H.length;b++){var f=a.H[b],k=f.u>>>0,h=f.Xb;if(e>=k&&e<k+h){e=ta(f.xb,[e-k],a.wb);0<=e?Be(a,b,e,d):c&&(e=~e,Be(a,b,e-1,d),Be(a,b,e,d));break}}return d}function Be(a,b,c,d){var e={},f=a.H[b].xb,k=0,h=null;0<=c&&c<f.length&&(k=f[c][0],h=f[c][1]);h&&(e=a.H[b].qa[h],h="."==h.charAt(0)?null:e.l||h);d.push(h);d.push(k);d.push(e.a);d.push(e.c)}
|
||||
function Ce(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],k=e[c][1];k&&(a.g((td[a.jb[f][0]]+" ").substr(0,5)+" ("+("0x"+n(f,2))+"): "+k+" times"),d++)}}d||a.g("no frequency data available")}}
|
||||
function De(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return ze(a)||a.g("no variables"),!0;if(!c[2])return ze(a,c[1]);if(!c[3])return delete a.ga[c[1]],!0;var d=Bd(a,c[3]);return void 0!==d?(a.ga[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
||||
function Ee(a,b,c){var d=null;if(b=U(a,b,!0)){var e=Ae(a,b,!0);if(e.length){var f,k;e[0]&&(k="",(f=b.u-e[1])&&(k=" + "+q(f)),f=e[0]+" ("+n(e[1],4)+")"+k,c&&a.g(f),d=f);4<e.length&&e[4]&&(k="",(f=e[5]-b.u)&&(k=" - "+q(f)),f=e[4]+" ("+n(e[5],4)+")"+k,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
||||
function Ld(a,b){var c;if(b&&"?"==b[1])a.g("register commands:"),a.g("\tr\tdump registers"),a.g("\trx [#]\tset flag or register x to [#]");else{null==c&&(c=!0);if(null!=b&&1<b.length){var d=b[1],e=null,f=d.indexOf("=");if(0<f)e=d.substr(f+1),d=d.substr(0,f);else if(2<b.length)e=b[2];else{a.g("missing value for "+b[1]);return}var f=!1,k=Bd(a,e);if(void 0!==k){var f=!0,h=d.toUpperCase();"E"==h.charAt(0)&&(h=null);switch(h){case "A":a.b.S=k&255;break;case "B":a.b.aa=k&255;break;case "BC":a.b.aa=k<<8&
|
||||
255;case "C":a.b.ea=k&255;break;case "D":a.b.ba=k&255;break;case "DE":a.b.ba=k<<8&255;case "E":a.b.fa=k&255;break;case "H":a.b.ja=k&255;break;case "HL":a.b.ja=k<<8&255;case "L":a.b.la=k&255;break;case "SP":a.b.Ea=k&65535;break;case "PC":a.b.O=k&65535;a.N=P(a.b.O);break;case "PS":wc(a.b,k);break;case "C":k?(d=a.b,d.I|=256):(d=a.b,d.I&=255);break;case "P":k?(d=a.b,ub[d.M&255]||(d.M^=1)):(d=a.b,ub[d.M&255]&&(d.M^=1));break;case "A":k?(d=a.b,d.C=~d.M&16|d.C&-17):(d=a.b,d.C=d.M&16|d.C&-17);break;case "Z":k?
|
||||
(d=a.b,d.I&=-256):(d=a.b,d.I|=255);break;case "S":k?(d=a.b,d.M&128||(d.M^=192)):(d=a.b,d.M&128&&(d.M^=192));break;case "I":k?(d=a.b,d.Da|=512):(d=a.b,d.Da&=-513);break;default:a.g("unknown register: "+d);return}}if(!f){a.g("invalid value: "+e);return}I(a.b);a.g("updated registers:")}a.g(V(a,7)+V(a,8)+V(a,0)+V(a,1)+V(a,2)+V(a,3)+V(a,4)+V(a,5)+V(a,13)+Vd(a,"I")+Vd(a,"S")+Vd(a,"Z")+Vd(a,"A")+Vd(a,"P")+Vd(a,"C"));c&&(a.N=P(a.b.O),Md(a,n(a.N.u,4)))}}
|
||||
function Fe(a,b){b=sa(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Id(a,c[2])):Bd(a,b,!0)}function Ge(a,b,c){var d="t"!=b;c=Yd(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ka(c,function(){return pb(a,!0)&&a.Ta(e,d,!1)},function(){I(a.b);pb(a,!1)})}
|
||||
function Md(a,b,c,d){if(b=U(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=U(a,c,!0);if(!d||d.u<b.u)return;e=d.u-b.u;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=qb(a,!1)||a.T?a.K:null;var k=null!=f?"cycles":null,h=Ae(a,b),l=b.u;if(h[0]&&d&&(!c&&d||0>h[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.g(m)}h[3]&&(k=h[3],f=null);f=Ud(a,b,k,f);a.g(f);a.N=b;e-=b.u-l;c++}}}
|
||||
function Dd(a,b,c,d){if(c)if(b){0>a.D&&a.C.length&&(a.D=0);if(0>a.D||b!=a.C[a.D])a.C.splice(0,0,b),a.D=0;a.D--}else b=a.C[a.D+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var k=b.charAt(f);if('"'==k||"'"==k)e?k==e&&(e=null):e=k;else if(k==d&&!e||!k)a.push(sa(b.substring(c,f))),c=f+1}}return a}
|
||||
function Td(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ma&&(a.g("ended assemble at "+n(a.ca.u,4)),a.N=a.ca,a.ma=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.wa=null;if(rb(a)&&0<b.length){a.ma&&(b="a "+n(a.ca.u,4)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var k=f[0],h=k.charAt(0),l=1;l<k.length;l++){var m=k.charAt(l);if("?"==h||"r"==h||"a">m||"z"<m){f[0]=k.substr(l);f.unshift(k.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var p=U(a,f[1],!0);if(p)if(a.ca=
|
||||
p,void 0===f[2])a.g("begin assemble at "+n(p.u,4)),a.ma=!0,I(a.b);else{var r;a.g("not supported yet");r=[];if(r.length){for(var t=0;t<r.length;t++)a.ub(p,r[t],1);a.g(Ud(a,a.ca))}}break;case "b":a:{var K=f[0],B=f[1],af=b;if("?"==B)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
|
||||
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var X=K.charAt(1);if("l"==X){var Ba=0,Ba=Ba+Sd(a,a.w),Ba=Ba+Sd(a,a.R);(Ba+=Sd(a,a.F))||a.g("no breakpoints")}else if("n"==X)a.va=Yd(a,B),a.g("break after "+a.va+" instruction(s)");else if(void 0===B)a.g("missing breakpoint address");else{var A=P();if("*"!=B&&(A=U(a,B,!0),!A))break a;B=q(A.u);"c"==X?null==A.u?(pd(a),a.g("all breakpoints cleared")):Qd(a,a.w,A)||Qd(a,a.R,
|
||||
A)||Qd(a,a.F,A)||a.g("breakpoint missing: "+n(A.u,4)):"i"==X?a.g("breakpoint "+(Db(a.A,A.u)?"enabled":"cleared")+": port "+B+" (input)"):"o"==X?a.g("breakpoint "+(Eb(a.A,A.u)?"enabled":"cleared")+": port "+B+" (output)"):null!=A.u&&(Cd(a,A,af),"p"==X?a.xa(a.w,A):"r"==X?a.xa(a.R,A):"w"==X?a.xa(a.F,A):a.g("unknown breakpoint command: "+X))}}}break;case "c":a.ya&&(a.ya.value="");break;case "d":a:{var Ca,Da=f[0],Y=f[1],na=f[2],bf=f[3];if("?"==Y){var Z="";for(Ca in Q)a.Va[Ca]&&(Z&&(Z+=","),Z+=Ca);Z+=",state,symbols";
|
||||
a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");Z.length&&a.g("dump extension commands:\n\t"+Z)}else if("state"==Y){var Zd=He(a.s,!0);"console"==na?console.log(Zd):(a.ya&&(a.ya.value=""),a.g(Zd))}else if("symbols"==Y)for(var Ac=0;Ac<a.H.length;Ac++){var Bc=a.H[Ac],Fa;for(Fa in Bc.qa)if("."!=Fa.charAt(0)){var $d=Bc.qa[Fa].o;
|
||||
if(void 0!==$d){var ae=Bc.qa[Fa].l;ae&&(Fa=ae);a.g(n($d,4)+" "+Fa)}}}else{if("d"==Da){for(Ca in Q)if(f[1]==Ca){var be=a.Va[Ca];be?(f.shift(),f.shift(),be(f)):a.g("no dump registered for "+Y);break a}Y||(Da=a.Wb||"db")}else a.Wb=Da;if("dh"==Da){var ce=Y,de=na,ee="",fe=0,D=a.na,aa=a.L;if(aa.length){var L=+ce||a.Bb,Ga=+de||10;isNaN(L)?L=Ga:ee="more ";L>aa.length&&(a.g("note: only "+aa.length+" available"),L=aa.length);D-=L;0>D&&(null==aa[aa.length-1].u?(L=D+L,D=0):D+=aa.length);var Cc=[];"call"==de&&
|
||||
(Ga=1E5,Cc=["CALL"]);for(void 0!==ce&&a.g(L+" instructions earlier:");0<Ga&&D!=a.na;){var ge=aa[D++];if(null==ge.u)break;var bb=P(ge.u),cf=L--,he=Ud(a,bb,"history",cf);(!Cc.length||0<=he.indexOf(Cc[0]))&&a.g(he);bb.nb&&(D+=bb.nb,Ga-=bb.nb,L-=bb.nb);D>=aa.length&&(D=0);a.Bb=L;fe++;Ga--}}fe||(a.g("no "+ee+"history available"),a.Bb=void 0)}else{var Kb=U(a,Y);if(Kb){var Lb=0;na&&("l"==na.charAt(0)&&(na=na.substr(1)||bf),Lb=Yd(a,na)>>>0,65536<Lb&&(Lb=65536));for(var oa="",df=(Lb||128)+15>>4||1,Dc="dd"==
|
||||
Da?4:"dw"==Da?2:1,ie=0;ie<df;ie++){for(var Mb=0,Ec=0,cb="",Fc="",Y=n(Kb.u,4),Gc=0;16>Gc;Gc++){var Nb=a.ta(Kb,1),Mb=Mb|Nb<<(Ec++<<3);Ec==Dc&&(cb+=n(Mb,2*Dc),cb+=1==Dc?7==Gc?"-":" ":" ",Mb=Ec=0);Fc+=32<=Nb&&128>Nb?String.fromCharCode(Nb):"."}oa&&(oa+="\n");oa+=Y+" "+cb+" "+Fc}oa&&a.g(oa);a.yb=Kb}}}}break;case "e":if("else"==f[0])break;var Ob=1,je=255,ke=a.ta,le=a.ub;"ew"==f[0]&&(Ob=2,je=65535,ke=a.ib,le=a.Pb);var me=Ob<<1,ne=f[1];if(null==ne)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),
|
||||
a.g("\tew [a] [...] edit words at address a");else{var Pb=U(a,ne);if(Pb)for(var Qb=2;Qb<f.length;Qb++){var db=Bd(a,f[Qb]);if(void 0===db){a.g("unrecognized value: "+f[Qb]);break}db&~je&&a.g("warning: "+n(db)+" exceeds "+Ob+"-byte value");var ef=ke.call(a,Pb);a.g("changing "+n(Pb.u,4)+" from 0x"+n(ef,me)+" to 0x"+n(db,me));le.call(a,Pb,db,Ob)}}break;case "f":Ce(a,f[1]);break;case "g":a:{var oe=f[1],ff=b;if(void 0!==oe){var Hc=U(a,oe,!0);if(!Hc)break a;Cd(a,Hc,ff);a.xa(a.w,Hc,!0)}a.Fa(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
|
||||
case "h":var Ic;a.j.X?(Ic="halting",a.U()):Ic="already halted";c||a.g(Ic);break;case "i":if("if"==f[0]){var Jc;var eb=b.substr(2),eb=sa(eb);Bd(a,eb)?(c||a.g("true: "+eb),Jc=!0):(c||a.g("false: "+eb),Jc=!1);Jc||(d=!1);break}var Kc=f[1];if(Kc&&"?"!=Kc){var Lc=Yd(a,Kc);if(void 0!==Lc){for(var R=a.A,ga=Lc,Mc=1,Nc=0,Oc=0;0<Mc;){var Rb=R.C[ga],fb=R.T[ga]||1,Pc=1==fb?255:2==fb?65535:-1,ha=Pc;void 0!==Rb?(Rb[0]&&(ha=Rb[0](ga,void 0),void 0===ha?ha=Pc:ha&=Pc),R.B&&R.F!=Rb[1]&&Od(R.B,ga,ha)):R.B&&(Jd(R.B,R,
|
||||
ga,null),R.F&&Od(R.B,ga,ha));Nc|=ha<<Oc;Oc+=fb<<3;ga+=fb;Mc-=fb}a.g(q(Lc)+": "+("0x"+n(Nc,2)))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");break;case "k":var gf=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var Qc=0,pe=P(),gb=P(a.b.Ea);for(a.g("stack trace for "+n(gb.u,4));10>Qc;){for(var pa=null,hf=256;65536>gb.u>>>0;){pe.u=a.ib(gb,2);if(null==gb.u||!hf--)break;
|
||||
for(var jf=a,Sb=pe,qe=null,hb=Sb.u,re=hb,Rc=1;6>=Rc&&hb;Rc++){if(2<Rc){Sb.u=hb;var Tb=Ud(jf,Sb);if(0<Tb.indexOf("CALL")){var se=Tb.indexOf(" ");if(hb+(Tb.indexOf(" ",se+1)-se-1)/2==re){qe=Tb;break}}}hb--}Sb.u=re;if(pa=qe)break}if(!pa||null==pa)break;var te=null;if("ks"==gf){var ue=pa.match(/[0-9A-F]+$/);ue&&(te=Ee(a,ue[0]))}pa=ra(pa,50)+" ;"+(te||"stack="+n(gb.u,4));a.g(pa);Qc++}Qc||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ee(a,f[1],!0);break}break;case "m":a:{var ba,ca=null,
|
||||
w=f[1];"?"==w&&(w=void 0);if(void 0!==w){var qa=0;if("all"==w)qa=1610481663,w=null;else if("on"==w)ca=!0,w=null;else if("off"==w)ca=!1,w=null;else{"keys"==w&&(w="key");"kbd"==w&&(w="keyboard");for(ba in Q)if(w==ba){qa=Q[ba];ca=!!(a.Y&qa);break}if(!qa){a.g("unknown message category: "+w);break a}}qa&&("on"==f[2]?(a.Y|=qa,ca=!0):"off"==f[2]&&(a.Y&=~qa,ca=!1))}var kf=0,ia="";for(ba in Q)if(!w||w==ba){var lf=!!(a.Y&Q[ba]);if(null===ca||ca==lf)ia&&(ia+=","),++kf%10||(ia+="\n\t"),"key"==ba&&(ba="keys"),
|
||||
ia+=ba}void 0===w&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==ca?ca?"messages on: ":"messages off: ":"message categories:\n\t")+(ia||"none"));qd(a)}break;case "o":var Sc=f[1],mf=f[2];if(Sc&&"?"!=Sc){var Tc=Yd(a,Sc,"port #"),Uc=Yd(a,mf);if(void 0!==Tc&&void 0!==Uc){for(var S=a.A,ja=Tc,ve=Uc,Vc=1,Wc=0;0<Vc;){var Ub=S.D[ja],ib=S.V[ja]||1,nf=1==ib?255:2==ib?65535:-1,Vb=(ve>>>=Wc)&nf;if(void 0!==Ub){if(Ub[0])Ub[0](ja,Vb,void 0);S.B&&S.H!=Ub[1]&&Pd(S.B,ja,Vb)}else S.B&&
|
||||
(Jd(S.B,S,ja,Vb),S.H&&Pd(S.B,ja,Vb));Wc+=ib<<3;ja+=ib;Vc-=ib}a.g(q(Tc)+": "+("0x"+n(Uc,2)))}}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){Fe(a,b.substr(5));break}var we="pr"==f[0]?1:0,of=1+we;if(a.T)a.g("step in progress");else{var Xc=P(a.b.O);switch(a.ta(Xc)){case 205:a.T=of,xd(Xc,3)}a.T?(a.xa(a.w,Xc,!0),a.Fa()||(a.s&&a.s.fb(),a.T=0)):Ge(a,we?"tr":"t")}break;case "r":if("reset"==
|
||||
b){a.s&&a.s.reset();break}Ld(a,f);break;case "t":Ge(a,f[0],f[1]);break;case "u":Md(a,f[1],f[2],8);break;case "v":if("var"==f[0]){De(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.21.7 ("+a.b.Gb+",RELEASE"+(tb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ya());break;case "x":a:if(f[1]&&"?"!=f[1])switch(f[1]){case "cs":var jb;void 0!==f[3]&&(jb=+f[3]);switch(f[2]){case "int":a.b.i.Na=jb;break;case "start":a.b.i.Za=jb;break;case "stop":a.b.i.Pa=jb;break;default:a.g("unknown cs option");break a}void 0!==
|
||||
jb&&lc(a.b);a.g("checksums "+(a.b.j.Ia?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(qc(a.b,+f[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Aa.toFixed(2)+"Mhz")+" ("+a.b.i.Ca+"x)");break;default:a.g("unknown option: "+f[1])}else a.g("execution options:"),a.g("\tcs int #\tset checksum cycle interval to #"),a.g("\tcs start #\tset checksum cycle start count to #"),a.g("\tcs stop #\tset checksum cycle stop count to #"),a.g("\tsp #\t\tset speed multiplier to #");
|
||||
break;case "?":if(f[1]){Fe(a,b.substr(1));break}var kb="commands:",Yc;for(Yc in sd)kb+="\n"+ra(Yc,7)+sd[Yc];fd(a)||(kb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(kb);break;default:a.g("unknown command: "+b),d=!1}}}catch(xe){a.g("debugger error: "+(xe.stack||xe.message)),d=!1}return d}function mc(a,b,c){b=Dd(a,b,c);for(var d in b)if(!Td(a,b[d]))return!1;return!0}Qa(function(){for(var a=F(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new od(d);mb(d,c)}});
|
||||
function J(a,b,c){this.id=a.id;this.key=Ie(a,b,c);this.B=a.B;Je(this,a.Kb)}function Ie(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
J.prototype={constructor:J,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){Je(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
|
||||
function Je(a,b){a[a.id]={};b&&M(a,"parms",b);a.b=!1}function Ke(a){var b=!0;if(Ea()){var c=JSON.stringify(a[a.id]);Ia(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Le(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){v(c.message||c),b=!1}return b}function Me(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:Ea()&&(b=Ha(a.key))?(a[a.id]=b,a.b=!0):!1}function Ne(a,b){return a[a.id][b]||null}function M(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function Oe(a,b,c){x.call(this,"Computer",a,Oe,67108864);this.j.W=!1;Pe(this,b);this.R=jc(this,"autoPower",a);this.C=0;this.ma=a.busWidth||a.buswidth;this.s=Qe;this.L=null;this.H=this.ga=!1;this.na=jc(this,"url")||"";(Math.random()+.1).toString(36);this.w=Re(this);if(this.b=lb("CPU",this.id)){this.B=lb("Debugger",this.id);this.pa=[];for(b=null;b=wb(this,"Video",b);)this.pa.push(b);this.A=new yb({id:this.zb+".bus",buswidth:this.ma},this.b,this.B);var d,e=C(this.id);if((this.D=lb("Panel",this.id))&&
|
||||
this.D.ya)for(b=0;b<e.length;b++)d=e[b],d.da=this.D.da,d.g=this.D.g,d.ya=this.D.ya;for(b=0;b<e.length;b++)d=e[b],d.La&&d.La(this,this.A,this.b,this.B);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.K=d:this.s=parseInt(d,10));var f;if(a=jc(this,"state")||(f=!0,a.state))b=this.T=a,f||(this.H=!0,this.s=Qe),this.s&&(this.N=new J(this,W),Me(this.N)?b=null:delete this.N);!b&&this.s&&(b=Se(this))&&(this.H=!0);if(b){var k=this;u(b,null,!0,function(a,b,c){c?(k.K=null,k.H=!1,k.da("Unable to load machine state from server (error "+
|
||||
c+(b?": "+sa(b):"")+")")):(k.L=b,k.ga=!0);G(k)})}else G(this);this.G.power||(this.R=!0);!c&&this.R&&Te(this,this.cb)}else v("Unable to find CPU component")}z(Oe);var W="1.21.7",Qe=0;function Pe(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.J=b}
|
||||
function jc(a,b,c){var d=b.toLowerCase(),d=Va[b]||Va[d];void 0===d&&a.J&&(d=a.J[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Te(a,b,c){for(var d=C(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!rb(f)){rb(f,function(){Te(a,b,c)});return}}b.call(a,c)}
|
||||
function Ue(a,b){var c=new J(a,W,"validate");if(Me(c)&&Le(c)){var d=Ne(c,"timestamp"),e=b?Ne(b,"timestamp"):"unknown";d!=e&&(a.da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}g=Oe.prototype;
|
||||
g.cb=function(a){void 0===a&&(a=this.s||(this.L?1:Qe));if(!this.C){this.C++;var b=!1,c=!1;this.ca=!1;var d=this.N||new J(this,W);if(-1==a)b=!0;else if(a>Qe){if(Me(d,this.L)){this.F=new J(this,W,"failsafe");Me(this.F)&&(Ve(this,d),a=2,Je(this.F));M(this.F,"timestamp",va());Ke(this.F);var e=this.s&&!this.H;if(1==a||za("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Le(d)){var f=Ne(d,"code"),k=Ne(d,"data");f&&("ok"==f?Me(d,k):("error"==f&&"no machine state"!=
|
||||
k?(this.da("Error: "+k),"unable to verify user"==k&&(Ia("user",""),this.w=null)):this.g(f+": "+k),Je(d),Me(d)?(c=Le(d),e=!0):c=!1))}e&&Ue(this,c?d:null)}else 2==a&&d.clear()}else Ue(this);delete this.L;delete this.N}e=C(this.id);for(f=0;f<e.length;f++)k=e[f],k!==this&&k!=this.b&&(c=We(this,k,d,b,c));b=[d,a,c];-1!=a?Te(this,this.Cb,b):this.Cb(b)}};
|
||||
function We(a,b,c,d,e){if(!b.j.W){b.j.W=!0;if(b.sa){var f=null;e&&((f=Ne(c,b.id))||(f=Ne(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.sa(f,d)&&f&&(v("Unable to restore state for "+b.type),a.T&&!a.ga?(c.clear(),a.s=Qe,window&&window.location.reload()):a.ca=!0,b.sa(null),e=!1)}if(!d&&b.vb)for(a=b.vb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
g.Cb=function(a){var b=a[0],c=0>a[1];a=a[2];this.j.W=!0;var d=this.G.power;d&&(d.textContent="Shutdown");this.V||(this.g("PC8080 v"+W+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.V=!0);this.b&&(We(this,this.b,b,c,a),nc(this.b));this.ca&&(Ve(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.C=0};
|
||||
function Ve(a,b){if(za("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.na,d=a.w||"",e=b.toString(),f={app:"PC8080"};f.ver=W;f.url=c;f.user=d;f.type="bug";f.data=e;u("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function He(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new J(a,W),k=new J(a,W,"validate"),h=va();M(k,"timestamp",h);M(f,"timestamp",h);M(f,"version","1.21.7");M(f,"url",window?window.location.href:null);M(f,"browser",ya());a.b&&a.b.ra&&(c&&a.b.U(),d=a.b.ra(b,c),"object"===typeof d&&M(f,a.b.id,d),c&&(a.b.j.W=!1,!1===d&&(e=null)));for(var h=C(a.id),l=0;l<h.length;l++){var m=h[l];m.j.W&&(m.ra&&(d=m.ra(b,c),"object"===typeof d&&M(f,m.id,d)),c&&(m.j.W=!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.w&&
|
||||
Xe(a,a.w,f.toString()),Ke(k)&&Ke(f)||(e=null,d=h=!0)):a.s&&(d=!0,h=3==a.s),d&&f.clear(h)):e=f.toString());c&&(a.j.W=!1,b=a.G.power)&&(b.textContent="Power");a.C=0;return e}g.reset=function(){this.A&&this.A.reset&&(nb(this,"Resetting "+this.A.type),this.A.reset());for(var a=C(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&(nb(this,"Resetting "+c.type),c.reset())}};
|
||||
function Fd(a,b,c){var d;if(b){b=Ed(a,b);for(var e=0,f=!1,k=b,h=[],l=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<m.length;){var p=m[e++],r=p.length,p=oa(p);if(!p){f=!0;break}p=be(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}h.push(p);if(e==m.length)break;var p=m[e++],t=p.length;l.length&&$d[p]<$d[l[l.length-1]]&&ae(h,l,1);l.push(p);b=b.substr(r+t)}ae(h,l)&&1==h.length||(f=!0);f?c&&a.g("error parsing '"+k+"' at character "+(k.length-b.length)):(d=h.pop(),c&&Ce(a,null,
|
||||
d))}return d}function Ed(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Fd(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=U(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.ib(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.V-a.Ha}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function be(a,b,c,d){var e;void 0!==b?(e=Jd(b),0<=e?e=Ld(a,e):(e=a.ja[b],void 0===e&&(e=da(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
||||
function Ce(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,k="";if(!f||4<f)f=4;for(var h=0;h<f;h++){k&&(k=","+k);var l=d&255,m=8,p="";void 0===m?m=32:32<m&&(m=32);if(null==l||isNaN(l))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(l&1?"1":"0")+p,l>>=1;k=p+"b"+k;d>>=8}d="0x"+n(c)+" "+c+". ("+k+")"}a.g((null!=b?b+": ":"")+d);return e}function De(a,b){if(b)return Ce(a,b,a.ja[b]);var c=0;for(b in a.ja)Ce(a,b,a.ja[b]),c++;return 0<c}sd.prototype.xb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
||||
function Ee(a,b,c){var d=[],e=T(b)>>>0;for(b=0;b<a.I.length;b++){var f=a.I[b],k=f.u>>>0,h=f.Yb;if(e>=k&&e<k+h){e=pa(f.yb,[e-k],a.xb);0<=e?Fe(a,b,e,d):c&&(e=~e,Fe(a,b,e-1,d),Fe(a,b,e,d));break}}return d}function Fe(a,b,c,d){var e={},f=a.I[b].yb,k=0,h=null;0<=c&&c<f.length&&(k=f[c][0],h=f[c][1]);h&&(e=a.I[b].qa[h],h="."==h.charAt(0)?null:e.l||h);d.push(h);d.push(k);d.push(e.a);d.push(e.c)}
|
||||
function Ge(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],k=e[c][1];k&&(a.g((xd[a.jb[f][0]]+" ").substr(0,5)+" ("+("0x"+n(f,2))+"): "+k+" times"),d++)}}d||a.g("no frequency data available")}}
|
||||
function He(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return De(a)||a.g("no variables"),!0;if(!c[2])return De(a,c[1]);if(!c[3])return delete a.ja[c[1]],!0;var d=Fd(a,c[3]);return void 0!==d?(a.ja[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
||||
function Ie(a,b,c){var d=null;if(b=U(a,b,!0)){var e=Ee(a,b,!0);if(e.length){var f,k;e[0]&&(k="",(f=b.u-e[1])&&(k=" + "+q(f)),f=e[0]+" ("+n(e[1],4)+")"+k,c&&a.g(f),d=f);4<e.length&&e[4]&&(k="",(f=e[5]-b.u)&&(k=" - "+q(f)),f=e[4]+" ("+n(e[5],4)+")"+k,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
||||
function Pd(a,b){var c;if(b&&"?"==b[1])a.g("register commands:"),a.g("\tr\tdump registers"),a.g("\trx [#]\tset flag or register x to [#]");else{null==c&&(c=!0);if(null!=b&&1<b.length){var d=b[1],e=null,f=d.indexOf("=");if(0<f)e=d.substr(f+1),d=d.substr(0,f);else if(2<b.length)e=b[2];else{a.g("missing value for "+b[1]);return}var f=!1,k=Fd(a,e);if(void 0!==k){var f=!0,h=d.toUpperCase();"E"==h.charAt(0)&&(h=null);switch(h){case "A":a.b.O=k&255;break;case "B":a.b.ba=k&255;break;case "BC":a.b.ba=k<<8&
|
||||
255;case "C":a.b.ga=k&255;break;case "D":a.b.ca=k&255;break;case "DE":a.b.ca=k<<8&255;case "E":a.b.ha=k&255;break;case "H":a.b.da=k&255;break;case "HL":a.b.da=k<<8&255;case "L":a.b.ia=k&255;break;case "SP":a.b.Ea=k&65535;break;case "PC":a.b.R=k&65535;a.N=P(a.b.R);break;case "PS":wc(a.b,k);break;case "C":k?(d=a.b,d.G|=256):(d=a.b,d.G&=255);break;case "P":k?(d=a.b,ub[d.L&255]||(d.L^=1)):(d=a.b,ub[d.L&255]&&(d.L^=1));break;case "A":k?(d=a.b,d.B=~d.L&16|d.B&-17):(d=a.b,d.B=d.L&16|d.B&-17);break;case "Z":k?
|
||||
(d=a.b,d.G&=-256):(d=a.b,d.G|=255);break;case "S":k?(d=a.b,d.L&128||(d.L^=192)):(d=a.b,d.L&128&&(d.L^=192));break;case "I":k?(d=a.b,d.Da|=512):(d=a.b,d.Da&=-513);break;default:a.g("unknown register: "+d);return}}if(!f){a.g("invalid value: "+e);return}I(a.b);a.g("updated registers:")}a.g(V(a,7)+V(a,8)+V(a,0)+V(a,1)+V(a,2)+V(a,3)+V(a,4)+V(a,5)+V(a,13)+Zd(a,"I")+Zd(a,"S")+Zd(a,"Z")+Zd(a,"A")+Zd(a,"P")+Zd(a,"C"));c&&(a.N=P(a.b.R),Qd(a,n(a.N.u,4)))}}
|
||||
function Je(a,b){b=oa(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Md(a,c[2])):Fd(a,b,!0)}function Ke(a,b,c){var d="t"!=b;c=be(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Fa(c,function(){return fb(a,!0)&&a.Ua(e,d,!1)},function(){I(a.b);fb(a,!1)})}
|
||||
function Qd(a,b,c,d){if(b=U(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=U(a,c,!0);if(!d||d.u<b.u)return;e=d.u-b.u;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=gb(a,!1)||a.T?a.K:null;var k=null!=f?"cycles":null,h=Ee(a,b),l=b.u;if(h[0]&&d&&(!c&&d||0>h[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.g(m)}h[3]&&(k=h[3],f=null);f=Yd(a,b,k,f);a.g(f);a.N=b;e-=b.u-l;c++}}}
|
||||
function Hd(a,b,c,d){if(c)if(b){0>a.D&&a.B.length&&(a.D=0);if(0>a.D||b!=a.B[a.D])a.B.splice(0,0,b),a.D=0;a.D--}else b=a.B[a.D+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var k=b.charAt(f);if('"'==k||"'"==k)e?k==e&&(e=null):e=k;else if(k==d&&!e||!k)a.push(oa(b.substring(c,f))),c=f+1}}return a}
|
||||
function Xd(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ma&&(a.g("ended assemble at "+n(a.ea.u,4)),a.N=a.ea,a.ma=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.wa=null;if(rb(a)&&0<b.length){a.ma&&(b="a "+n(a.ea.u,4)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var k=f[0],h=k.charAt(0),l=1;l<k.length;l++){var m=k.charAt(l);if("?"==h||"r"==h||"a">m||"z"<m){f[0]=k.substr(l);f.unshift(k.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var p=U(a,f[1],!0);if(p)if(a.ea=
|
||||
p,void 0===f[2])a.g("begin assemble at "+n(p.u,4)),a.ma=!0,I(a.b);else{var r;a.g("not supported yet");r=[];if(r.length){for(var t=0;t<r.length;t++)a.vb(p,r[t],1);a.g(Yd(a,a.ea))}}break;case "b":a:{var K=f[0],B=f[1],ef=b;if("?"==B)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
|
||||
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var X=K.charAt(1);if("l"==X){var Ha=0,Ha=Ha+Wd(a,a.w),Ha=Ha+Wd(a,a.S);(Ha+=Wd(a,a.F))||a.g("no breakpoints")}else if("n"==X)a.va=be(a,B),a.g("break after "+a.va+" instruction(s)");else if(void 0===B)a.g("missing breakpoint address");else{var A=P();if("*"!=B&&(A=U(a,B,!0),!A))break a;B=q(A.u);"c"==X?null==A.u?(td(a),a.g("all breakpoints cleared")):Ud(a,a.w,A)||Ud(a,a.S,
|
||||
A)||Ud(a,a.F,A)||a.g("breakpoint missing: "+n(A.u,4)):"i"==X?a.g("breakpoint "+(Db(a.A,A.u)?"enabled":"cleared")+": port "+B+" (input)"):"o"==X?a.g("breakpoint "+(Eb(a.A,A.u)?"enabled":"cleared")+": port "+B+" (output)"):null!=A.u&&(Gd(a,A,ef),"p"==X?a.xa(a.w,A):"r"==X?a.xa(a.S,A):"w"==X?a.xa(a.F,A):a.g("unknown breakpoint command: "+X))}}}break;case "c":a.ya&&(a.ya.value="");break;case "d":a:{var Ia,Ja=f[0],Y=f[1],qa=f[2],ff=f[3];if("?"==Y){var Z="";for(Ia in Q)a.Wa[Ia]&&(Z&&(Z+=","),Z+=Ia);Z+=",state,symbols";
|
||||
a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");Z.length&&a.g("dump extension commands:\n\t"+Z)}else if("state"==Y){var ce=Le(a.s,!0);"console"==qa?console.log(ce):(a.ya&&(a.ya.value=""),a.g(ce))}else if("symbols"==Y)for(var Ec=0;Ec<a.I.length;Ec++){var Fc=a.I[Ec],La;for(La in Fc.qa)if("."!=La.charAt(0)){var de=Fc.qa[La].o;
|
||||
if(void 0!==de){var ee=Fc.qa[La].l;ee&&(La=ee);a.g(n(de,4)+" "+La)}}}else{if("d"==Ja){for(Ia in Q)if(f[1]==Ia){var fe=a.Wa[Ia];fe?(f.shift(),f.shift(),fe(f)):a.g("no dump registered for "+Y);break a}Y||(Ja=a.Xb||"db")}else a.Xb=Ja;if("dh"==Ja){var ge=Y,he=qa,ie="",je=0,D=a.na,aa=a.M;if(aa.length){var L=+ge||a.Cb,Ma=+he||10;isNaN(L)?L=Ma:ie="more ";L>aa.length&&(a.g("note: only "+aa.length+" available"),L=aa.length);D-=L;0>D&&(null==aa[aa.length-1].u?(L=D+L,D=0):D+=aa.length);var Gc=[];"call"==he&&
|
||||
(Ma=1E5,Gc=["CALL"]);for(void 0!==ge&&a.g(L+" instructions earlier:");0<Ma&&D!=a.na;){var ke=aa[D++];if(null==ke.u)break;var hb=P(ke.u),gf=L--,le=Yd(a,hb,"history",gf);(!Gc.length||0<=le.indexOf(Gc[0]))&&a.g(le);hb.nb&&(D+=hb.nb,Ma-=hb.nb,L-=hb.nb);D>=aa.length&&(D=0);a.Cb=L;je++;Ma--}}je||(a.g("no "+ie+"history available"),a.Cb=void 0)}else{var Nb=U(a,Y);if(Nb){var Ob=0;qa&&("l"==qa.charAt(0)&&(qa=qa.substr(1)||ff),Ob=be(a,qa)>>>0,65536<Ob&&(Ob=65536));for(var ra="",hf=(Ob||128)+15>>4||1,Hc="dd"==
|
||||
Ja?4:"dw"==Ja?2:1,me=0;me<hf;me++){for(var Pb=0,Ic=0,ib="",Jc="",Y=n(Nb.u,4),Kc=0;16>Kc;Kc++){var Qb=a.ta(Nb,1),Pb=Pb|Qb<<(Ic++<<3);Ic==Hc&&(ib+=n(Pb,2*Hc),ib+=1==Hc?7==Kc?"-":" ":" ",Pb=Ic=0);Jc+=32<=Qb&&128>Qb?String.fromCharCode(Qb):"."}ra&&(ra+="\n");ra+=Y+" "+ib+" "+Jc}ra&&a.g(ra);a.zb=Nb}}}}break;case "e":if("else"==f[0])break;var Rb=1,ne=255,oe=a.ta,pe=a.vb;"ew"==f[0]&&(Rb=2,ne=65535,oe=a.ib,pe=a.Qb);var qe=Rb<<1,re=f[1];if(null==re)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),
|
||||
a.g("\tew [a] [...] edit words at address a");else{var Sb=U(a,re);if(Sb)for(var Tb=2;Tb<f.length;Tb++){var jb=Fd(a,f[Tb]);if(void 0===jb){a.g("unrecognized value: "+f[Tb]);break}jb&~ne&&a.g("warning: "+n(jb)+" exceeds "+Rb+"-byte value");var jf=oe.call(a,Sb);a.g("changing "+n(Sb.u,4)+" from 0x"+n(jf,qe)+" to 0x"+n(jb,qe));pe.call(a,Sb,jb,Rb)}}break;case "f":Ge(a,f[1]);break;case "g":a:{var se=f[1],kf=b;if(void 0!==se){var Lc=U(a,se,!0);if(!Lc)break a;Gd(a,Lc,kf);a.xa(a.w,Lc,!0)}a.Fa(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
|
||||
case "h":var Mc;a.j.X?(Mc="halting",a.U()):Mc="already halted";c||a.g(Mc);break;case "i":if("if"==f[0]){var Nc;var kb=b.substr(2),kb=oa(kb);Fd(a,kb)?(c||a.g("true: "+kb),Nc=!0):(c||a.g("false: "+kb),Nc=!1);Nc||(d=!1);break}var Oc=f[1];if(Oc&&"?"!=Oc){var Pc=be(a,Oc);if(void 0!==Pc){for(var R=a.A,ga=Pc,Qc=1,Rc=0,Sc=0;0<Qc;){var Ub=R.B[ga],lb=R.T[ga]||1,Tc=1==lb?255:2==lb?65535:-1,ha=Tc;void 0!==Ub?(Ub[0]&&(ha=Ub[0](ga,void 0),void 0===ha?ha=Tc:ha&=Tc),R.C&&R.F!=Ub[1]&&Sd(R.C,ga,ha)):R.C&&(Nd(R.C,R,
|
||||
ga,null),R.F&&Sd(R.C,ga,ha));Rc|=ha<<Sc;Sc+=lb<<3;ga+=lb;Qc-=lb}a.g(q(Pc)+": "+("0x"+n(Rc,2)))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");break;case "k":var lf=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var Uc=0,te=P(),mb=P(a.b.Ea);for(a.g("stack trace for "+n(mb.u,4));10>Uc;){for(var sa=null,mf=256;65536>mb.u>>>0;){te.u=a.ib(mb,2);if(null==mb.u||!mf--)break;
|
||||
for(var nf=a,Vb=te,ue=null,nb=Vb.u,ve=nb,Vc=1;6>=Vc&&nb;Vc++){if(2<Vc){Vb.u=nb;var Wb=Yd(nf,Vb);if(0<Wb.indexOf("CALL")){var we=Wb.indexOf(" ");if(nb+(Wb.indexOf(" ",we+1)-we-1)/2==ve){ue=Wb;break}}}nb--}Vb.u=ve;if(sa=ue)break}if(!sa||null==sa)break;var xe=null;if("ks"==lf){var ye=sa.match(/[0-9A-F]+$/);ye&&(xe=Ie(a,ye[0]))}sa=na(sa,50)+" ;"+(xe||"stack="+n(mb.u,4));a.g(sa);Uc++}Uc||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ie(a,f[1],!0);break}break;case "m":a:{var ba,ca=null,
|
||||
w=f[1];"?"==w&&(w=void 0);if(void 0!==w){var ta=0;if("all"==w)ta=1610481663,w=null;else if("on"==w)ca=!0,w=null;else if("off"==w)ca=!1,w=null;else{"keys"==w&&(w="key");"kbd"==w&&(w="keyboard");for(ba in Q)if(w==ba){ta=Q[ba];ca=!!(a.Z&ta);break}if(!ta){a.g("unknown message category: "+w);break a}}ta&&("on"==f[2]?(a.Z|=ta,ca=!0):"off"==f[2]&&(a.Z&=~ta,ca=!1))}var of=0,ia="";for(ba in Q)if(!w||w==ba){var pf=!!(a.Z&Q[ba]);if(null===ca||ca==pf)ia&&(ia+=","),++of%10||(ia+="\n\t"),"key"==ba&&(ba="keys"),
|
||||
ia+=ba}void 0===w&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==ca?ca?"messages on: ":"messages off: ":"message categories:\n\t")+(ia||"none"));ud(a)}break;case "o":var Wc=f[1],qf=f[2];if(Wc&&"?"!=Wc){var Xc=be(a,Wc,"port #"),Yc=be(a,qf);if(void 0!==Xc&&void 0!==Yc){for(var S=a.A,ja=Xc,ze=Yc,Zc=1,$c=0;0<Zc;){var Xb=S.D[ja],ob=S.V[ja]||1,rf=1==ob?255:2==ob?65535:-1,Yb=(ze>>>=$c)&rf;if(void 0!==Xb){if(Xb[0])Xb[0](ja,Yb,void 0);S.C&&S.I!=Xb[1]&&Td(S.C,ja,Yb)}else S.C&&
|
||||
(Nd(S.C,S,ja,Yb),S.I&&Td(S.C,ja,Yb));$c+=ob<<3;ja+=ob;Zc-=ob}a.g(q(Xc)+": "+("0x"+n(Yc,2)))}}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){Je(a,b.substr(5));break}var Ae="pr"==f[0]?1:0,sf=1+Ae;if(a.T)a.g("step in progress");else{var ad=P(a.b.R);switch(a.ta(ad)){case 205:a.T=sf,Bd(ad,3)}a.T?(a.xa(a.w,ad,!0),a.Fa()||(a.s&&a.s.gb(),a.T=0)):Ke(a,Ae?"tr":"t")}break;case "r":if("reset"==
|
||||
b){a.s&&a.s.reset();break}Pd(a,f);break;case "t":Ke(a,f[0],f[1]);break;case "u":Qd(a,f[1],f[2],8);break;case "v":if("var"==f[0]){He(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.21.7 ("+a.b.Hb+",RELEASE"+(tb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ya());break;case "x":a:if(f[1]&&"?"!=f[1])switch(f[1]){case "cs":var pb;void 0!==f[3]&&(pb=+f[3]);switch(f[2]){case "int":a.b.i.Oa=pb;break;case "start":a.b.i.$a=pb;break;case "stop":a.b.i.Qa=pb;break;default:a.g("unknown cs option");break a}void 0!==
|
||||
pb&&lc(a.b);a.g("checksums "+(a.b.j.Ja?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(qc(a.b,+f[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Aa.toFixed(2)+"Mhz")+" ("+a.b.i.Ca+"x)");break;default:a.g("unknown option: "+f[1])}else a.g("execution options:"),a.g("\tcs int #\tset checksum cycle interval to #"),a.g("\tcs start #\tset checksum cycle start count to #"),a.g("\tcs stop #\tset checksum cycle stop count to #"),a.g("\tsp #\t\tset speed multiplier to #");
|
||||
break;case "?":if(f[1]){Je(a,b.substr(1));break}var qb="commands:",bd;for(bd in wd)qb+="\n"+na(bd,7)+wd[bd];jd(a)||(qb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(qb);break;default:a.g("unknown command: "+b),d=!1}}}catch(Be){a.g("debugger error: "+(Be.stack||Be.message)),d=!1}return d}function mc(a,b,c){b=Hd(a,b,c);for(var d in b)if(!Xd(a,b[d]))return!1;return!0}Qa(function(){for(var a=F(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new sd(d);cb(d,c)}});
|
||||
function J(a,b,c){this.id=a.id;this.key=Me(a,b,c);this.C=a.C;Ne(this,a.Lb)}function Me(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
J.prototype={constructor:J,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){Ne(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
|
||||
function Ne(a,b){a[a.id]={};b&&M(a,"parms",b);a.b=!1}function Oe(a){var b=!0;if(Ba()){var c=JSON.stringify(a[a.id]);Da(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Pe(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){v(c.message||c),b=!1}return b}function Qe(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:Ba()&&(b=Ca(a.key))?(a[a.id]=b,a.b=!0):!1}function Re(a,b){return a[a.id][b]||null}function M(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function Se(a,b,c){x.call(this,"Computer",a,Se,67108864);this.j.W=!1;Te(this,b);this.S=jc(this,"autoPower",a);this.B=0;this.ma=a.busWidth||a.buswidth;this.s=Ue;this.M=null;this.I=this.ja=!1;this.na=jc(this,"url")||"";(Math.random()+.1).toString(36);this.w=Ve(this);if(this.b=bb("CPU",this.id)){this.C=bb("Debugger",this.id);this.pa=[];for(b=null;b=wb(this,"Video",b);)this.pa.push(b);this.A=new yb({id:this.Ab+".bus",buswidth:this.ma},this.b,this.C);var d,e=C(this.id);if((this.D=bb("Panel",this.id))&&
|
||||
this.D.ya)for(b=0;b<e.length;b++)d=e[b],d.fa=this.D.fa,d.g=this.D.g,d.ya=this.D.ya;for(b=0;b<e.length;b++)d=e[b],d.Ma&&d.Ma(this,this.A,this.b,this.C);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.K=d:this.s=parseInt(d,10));var f;if(a=jc(this,"state")||(f=!0,a.state))b=this.T=a,f||(this.I=!0,this.s=Ue),this.s&&(this.N=new J(this,W),Qe(this.N)?b=null:delete this.N);!b&&this.s&&(b=We(this))&&(this.I=!0);if(b){var k=this;u(b,null,!0,function(a,b,c){c?(k.K=null,k.I=!1,k.fa("Unable to load machine state from server (error "+
|
||||
c+(b?": "+oa(b):"")+")")):(k.M=b,k.ja=!0);G(k)})}else G(this);this.H.power||(this.S=!0);!c&&this.S&&Xe(this,this.eb)}else v("Unable to find CPU component")}z(Se);var W="1.21.7",Ue=0;function Te(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.J=b}
|
||||
function jc(a,b,c){var d=b.toLowerCase(),d=Va[b]||Va[d];void 0===d&&a.J&&(d=a.J[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Xe(a,b,c){for(var d=C(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!rb(f)){rb(f,function(){Xe(a,b,c)});return}}b.call(a,c)}
|
||||
function Ye(a,b){var c=new J(a,W,"validate");if(Qe(c)&&Pe(c)){var d=Re(c,"timestamp"),e=b?Re(b,"timestamp"):"unknown";d!=e&&(a.fa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}g=Se.prototype;
|
||||
g.eb=function(a){void 0===a&&(a=this.s||(this.M?1:Ue));if(!this.B){this.B++;var b=!1,c=!1;this.ea=!1;var d=this.N||new J(this,W);if(-1==a)b=!0;else if(a>Ue){if(Qe(d,this.M)){this.F=new J(this,W,"failsafe");Qe(this.F)&&(Ze(this,d),a=2,Ne(this.F));M(this.F,"timestamp",va());Oe(this.F);var e=this.s&&!this.I;if(1==a||za("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Pe(d)){var f=Re(d,"code"),k=Re(d,"data");f&&("ok"==f?Qe(d,k):("error"==f&&"no machine state"!=
|
||||
k?(this.fa("Error: "+k),"unable to verify user"==k&&(Da("user",""),this.w=null)):this.g(f+": "+k),Ne(d),Qe(d)?(c=Pe(d),e=!0):c=!1))}e&&Ye(this,c?d:null)}else 2==a&&d.clear()}else Ye(this);delete this.M;delete this.N}e=C(this.id);for(f=0;f<e.length;f++)k=e[f],k!==this&&k!=this.b&&(c=$e(this,k,d,b,c));b=[d,a,c];-1!=a?Xe(this,this.Db,b):this.Db(b)}};
|
||||
function $e(a,b,c,d,e){if(!b.j.W){b.j.W=!0;if(b.sa){var f=null;e&&((f=Re(c,b.id))||(f=Re(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.sa(f,d)&&f&&(v("Unable to restore state for "+b.type),a.T&&!a.ja?(c.clear(),a.s=Ue,window&&window.location.reload()):a.ea=!0,b.sa(null),e=!1)}if(!d&&b.wb)for(a=b.wb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
g.Db=function(a){var b=a[0],c=0>a[1];a=a[2];this.j.W=!0;var d=this.H.power;d&&(d.textContent="Shutdown");this.V||(this.g("PC8080 v"+W+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.V=!0);this.b&&($e(this,this.b,b,c,a),nc(this.b));this.ea&&(Ze(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.B=0};
|
||||
function Ze(a,b){if(za("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.na,d=a.w||"",e=b.toString(),f={app:"PC8080"};f.ver=W;f.url=c;f.user=d;f.type="bug";f.data=e;u("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function Le(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new J(a,W),k=new J(a,W,"validate"),h=va();M(k,"timestamp",h);M(f,"timestamp",h);M(f,"version","1.21.7");M(f,"url",window?window.location.href:null);M(f,"browser",ya());a.b&&a.b.ra&&(c&&a.b.U(),d=a.b.ra(b,c),"object"===typeof d&&M(f,a.b.id,d),c&&(a.b.j.W=!1,!1===d&&(e=null)));for(var h=C(a.id),l=0;l<h.length;l++){var m=h[l];m.j.W&&(m.ra&&(d=m.ra(b,c),"object"===typeof d&&M(f,m.id,d)),c&&(m.j.W=!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.w&&
|
||||
af(a,a.w,f.toString()),Oe(k)&&Oe(f)||(e=null,d=h=!0)):a.s&&(d=!0,h=3==a.s),d&&f.clear(h)):e=f.toString());c&&(a.j.W=!1,b=a.H.power)&&(b.textContent="Power");a.B=0;return e}g.reset=function(){this.A&&this.A.reset&&(db(this,"Resetting "+this.A.type),this.A.reset());for(var a=C(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&(db(this,"Resetting "+c.type),c.reset())}};
|
||||
g.start=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};g.stop=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
||||
g.ha=function(a,b,c){var d=this;switch(b){case "power":return this.G[b]=c,c.onclick=function(){d.C||(d.j.W?He(d,!1,!0):Te(d,d.cb))},!0;case "reset":return this.G[b]=c,c.onclick=function(){if(d.j.W&&!d.C)if(d.s&&!d.K){var a=za("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");He(d,a,!0);!a&&d.T?window&&window.location.reload():d.cb(Qe)}else d.reset(),d.b&&nc(d.b)},!0;case "save":if(ka(xa(),"pcjs.org")){c.parentNode.removeChild(c);break}this.G[b]=
|
||||
c;c.onclick=function(){var a=Re(d,!0);if(a){var b=!!(d.s&&!d.K||d.T),c=He(d,b);b?Xe(d,a,c):d.da("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function Re(a,b){var c=a.w;c||(c=Ha("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=Ye(a,c))||a.da("The user ID is invalid."))):b&&a.da("Browser local storage is not available"));return c}
|
||||
function Ye(a,b){a.w=null;var c=u(xa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Ia("user",c.data),a.w=c.data)}catch(e){v(e.message+" ("+d+")")}return a.w}function Se(a){var b=null;a.w&&(b=xa()+"/api/v1/user?req=load&user="+a.w+"&state="+Ie(a,W));return b}
|
||||
function Xe(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Ie(a,W);d.data=c;b=u(xa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.da("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.da(c),Ia("user",""),a.w=null)}}
|
||||
function wb(a,b,c){a=C(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}g.fb=function(){};g.ka=function(a){this.b&&this.b.ka(a);this.D&&this.D.ka(a)};Qa(function(){for(var a=F(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=E(c),c=F(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],k=E(f),k=new Oe(k,d,!0);mb(k,f);k.R&&Te(k,k.cb)}});
|
||||
Ma.show.push(function(){for(var a=F(document,"pc8080","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=lb("Computer",c.id))&&c.V&&!c.j.W&&c.cb(-1)}});Ma.exit.push(function(){for(var a=F(document,"pc8080","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=lb("Computer",c.id))&&c.j.W&&He(c,!(!c.s||c.K),!0)}});var Ze=0;function $e(a,b,c,d,e,f){e("Loading "+a+"...");u(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),f(h,null)):pf(h,a,b,c,d,e,f)})}
|
||||
function pf(a,b,c,d,e,f,k){function h(a,f){if(f)k(f,null);else{if(c){ab(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?e?qf(a,f,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function qf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");u(e,null,!0,function(f,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);qf(a,b,c)}})}else c(a,null)}
|
||||
function rf(a,b,c,d){function e(a){if(void 0===h){var b=k&&F(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=ma(a))}function f(a){e("Error: "+a);l&&(--Ze||Sa(!0));l=!1}var k,h,l=!0;Ze++;$a[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));p.appendChild(r)}c||
|
||||
(c="/versions/pc8080/1.21.7/components.xsl");m=function(d,h){h?$e(c,null,null,!1,e,function(d,m){if(m)if(ab(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(m);l?(k.outerHTML=l,--Ze||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(m),(l=l.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(l,k),--Ze||Sa(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?$e(b,a,d,!0,e,m):pf(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(t){f(t.message)}return l}window.embedPC8080=function(a,b,c,d){Sa(!1);return rf(a,b,c,d)};window.enableEvents=Sa;window.sendEvent=Ta;
|
||||
function sf(a,b,c,d){if(!c&&b){d.push(b);a=$a[d[0]];b=null;for(var e in a)if(ka(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?u(b,null,!0,function(a,b){tf(b,d)}):tf(null,d)}else v("Error ("+c+") requesting "+a)}
|
||||
function tf(a,b){var c,d,e,f=b[0],k=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=$a[f],l={},m;for(m in h){var p=h[m],r=fa(m);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(h[m]);){var t=d[2];t&&(h[t]||(p=p.replace(d[0],"")))}d=m=ea(m)}else"xsl"==r&&(e=m=ea(m));l[m]=p}a&&(l[m="css"]=a);b[2]&&(l[m="parms"]=b[2]);b[3]&&(l[m="state"]=b[3]);d&&e?(m=JSON.stringify(l),k+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),m=k,h=null,l="data:application/javascript,",l=Ja("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),m&&(h=document.createElement("a"),"string"!=typeof h.download&&(h=null)),h?(h.href=l,h.download=m,document.body.appendChild(h),h.click(),document.body.removeChild(h),c="Check your Downloads folder for "+m+"."):(window.open(l),c="Check your browser for a new window/tab containing the requested data"+(m?" ("+m+")":"")+"."),c+=', copy it to your web server as "'+k+'", and then add the following to your web page:\n\n',
|
||||
g.ka=function(a,b,c){var d=this;switch(b){case "power":return this.H[b]=c,c.onclick=function(){d.B||(d.j.W?Le(d,!1,!0):Xe(d,d.eb))},!0;case "reset":return this.H[b]=c,c.onclick=function(){if(d.j.W&&!d.B)if(d.s&&!d.K){var a=za("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Le(d,a,!0);!a&&d.T?window&&window.location.reload():d.eb(Ue)}else d.reset(),d.b&&nc(d.b)},!0;case "save":if(ka(xa(),"pcjs.org")){c.parentNode.removeChild(c);break}this.H[b]=
|
||||
c;c.onclick=function(){var a=Ve(d,!0);if(a){var b=!!(d.s&&!d.K||d.T),c=Le(d,b);b?af(d,a,c):d.fa("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function Ve(a,b){var c=a.w;c||(c=Ca("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=bf(a,c))||a.fa("The user ID is invalid."))):b&&a.fa("Browser local storage is not available"));return c}
|
||||
function bf(a,b){a.w=null;var c=u(xa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Da("user",c.data),a.w=c.data)}catch(e){v(e.message+" ("+d+")")}return a.w}function We(a){var b=null;a.w&&(b=xa()+"/api/v1/user?req=load&user="+a.w+"&state="+Me(a,W));return b}
|
||||
function af(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Me(a,W);d.data=c;b=u(xa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.fa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.fa(c),Da("user",""),a.w=null)}}
|
||||
function wb(a,b,c){a=C(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}g.gb=function(){};g.la=function(a){this.b&&this.b.la(a);this.D&&this.D.la(a)};Qa(function(){for(var a=F(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=E(c),c=F(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],k=E(f),k=new Se(k,d,!0);cb(k,f);k.S&&Xe(k,k.eb)}});
|
||||
Ka.show.push(function(){for(var a=F(document,"pc8080","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=bb("Computer",c.id))&&c.V&&!c.j.W&&c.eb(-1)}});Ka.exit.push(function(){for(var a=F(document,"pc8080","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=bb("Computer",c.id))&&c.j.W&&Le(c,!(!c.s||c.K),!0)}});var cf=0;function df(a,b,c,d,e,f){e("Loading "+a+"...");u(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),f(h,null)):tf(h,a,b,c,d,e,f)})}
|
||||
function tf(a,b,c,d,e,f,k){function h(a,f){if(f)k(f,null);else{if(c){ab(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?e?uf(a,f,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function uf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");u(e,null,!0,function(f,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);uf(a,b,c)}})}else c(a,null)}
|
||||
function vf(a,b,c,d){function e(a){if(void 0===h){var b=k&&F(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=ma(a))}function f(a){e("Error: "+a);l&&(--cf||Sa(!0));l=!1}var k,h,l=!0;cf++;$a[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));p.appendChild(r)}c||
|
||||
(c="/versions/pc8080/1.21.7/components.xsl");m=function(d,h){h?df(c,null,null,!1,e,function(d,m){if(m)if(ab(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(m);l?(k.outerHTML=l,--cf||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(m),(l=l.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(l,k),--cf||Sa(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?df(b,a,d,!0,e,m):tf(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(t){f(t.message)}return l}window.embedPC8080=function(a,b,c,d){Sa(!1);return vf(a,b,c,d)};window.enableEvents=Sa;window.sendEvent=Ta;
|
||||
function wf(a,b,c,d){if(!c&&b){d.push(b);a=$a[d[0]];b=null;for(var e in a)if(ka(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?u(b,null,!0,function(a,b){xf(b,d)}):xf(null,d)}else v("Error ("+c+") requesting "+a)}
|
||||
function xf(a,b){var c,d,e,f=b[0],k=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=$a[f],l={},m;for(m in h){var p=h[m],r=fa(m);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(h[m]);){var t=d[2];t&&(h[t]||(p=p.replace(d[0],"")))}d=m=ea(m)}else"xsl"==r&&(e=m=ea(m));l[m]=p}a&&(l[m="css"]=a);b[2]&&(l[m="parms"]=b[2]);b[3]&&(l[m="state"]=b[3]);d&&e?(m=JSON.stringify(l),k+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),m=k,h=null,l="data:application/javascript,",l=Ea("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),m&&(h=document.createElement("a"),"string"!=typeof h.download&&(h=null)),h?(h.href=l,h.download=m,document.body.appendChild(h),h.click(),document.body.removeChild(h),c="Check your Downloads folder for "+m+"."):(window.open(l),c="Check your browser for a new window/tab containing the requested data"+(m?" ("+m+")":"")+"."),c+=', copy it to your web server as "'+k+'", and then add the following to your web page:\n\n',
|
||||
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+k+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",v(c)):v("Missing XML/XSL resources")}
|
||||
window.savePC=function(a,b,c){var d=lb("Computer",a),e=lb("Debugger",a);if(d){var f=He(d,!0),k=d.J?JSON.stringify(d.J):null;b||(b="/versions/pcjs/1.21.7/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Kb:k}))return!0;u(b,null,!0,function(c,d,e){sf(c,d,e,[a,ea(b,!0),k,f])});return!0}v("Unable to identify machine '"+a+"'");return!1};})();
|
||||
window.savePC=function(a,b,c){var d=bb("Computer",a),e=bb("Debugger",a);if(d){var f=Le(d,!0),k=d.J?JSON.stringify(d.J):null;b||(b="/versions/pcjs/1.21.7/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Lb:k}))return!0;u(b,null,!0,function(c,d,e){wf(c,d,e,[a,ea(b,!0),k,f])});return!0}v("Unable to identify machine '"+a+"'");return!1};})();
|
||||
|
|
|
|||
|
|
@ -6,91 +6,92 @@ typeof b){var l="",m;for(m in b)b.hasOwnProperty(m)&&(l&&(l+="&"),l+=m+"="+encod
|
|||
function u(a){window&&window.alert(a)}function ha(a){var b=!1;window&&(b=window.confirm(a));return b}var ia=null;function ja(){if(null==ia){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ia=a}return ia}function ka(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
|
||||
function la(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ma(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var v={init:[],show:[],exit:[]},na=!1,oa=!0;function pa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function w(a){v.init.push(a)}
|
||||
function qa(a){if(oa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function x(a){!oa&&a?(oa=!0,na&&ra("init")):oa=a}function ra(a){v[a]&&qa(v[a])}pa("onload",function(){na=!0;qa(v.init)});pa("onpageshow",function(){qa(v.show)});pa(ma("Opera")||ma("iOS")?"onunload":"onbeforeunload",function(){qa(v.exit)});
|
||||
function y(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Ka=b.comment;this.Wa=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ma=this.id.substr(0,b),this.La=this.id.substr(b+1)):this.La=this.id;this[a]=c;this.c={ca:!1,ja:!1,Fa:!1,B:!1,X:!1};this.ya=null;this.c.X=!1;this.i={};this.D=null;z.push(this)}var sa=void 0,ta={};
|
||||
if(window){sa||(sa=window.location.search.substr(1));for(var ua,wa=/\+/g,xa=/([^&=]+)=?([^&]*)/g;ua=xa.exec(sa);)ta[decodeURIComponent(ua[1].replace(wa," "))]=decodeURIComponent(ua[2].replace(wa," "))}function ya(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function B(a,b){b||(b=y);a.prototype=ya(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var z=[],C={};function za(a,b,c){C[a]&&b&&(C[a][b]=c)}function D(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<z.length;b++){var d=z[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function y(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Ka=b.comment;this.Wa=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ma=this.id.substr(0,b),this.La=this.id.substr(b+1)):this.La=this.id;this[a]=c;this.c={ca:!1,la:!1,Fa:!1,F:!1,X:!1};this.za=null;this.c.X=!1;this.i={};this.H=null;z.push(this)}var sa=void 0,ta={};
|
||||
if(window){sa||(sa=window.location.search.substr(1));for(var ua,va=/\+/g,wa=/([^&=]+)=?([^&]*)/g;ua=wa.exec(sa);)ta[decodeURIComponent(ua[1].replace(va," "))]=decodeURIComponent(ua[2].replace(va," "))}function xa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function B(a,b){b||(b=y);a.prototype=xa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var z=[],C={};function za(a,b,c){C[a]&&b&&(C[a][b]=c)}function D(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<z.length;b++){var d=z[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function E(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<z.length;d++)if(c)c==z[d]&&(c=null);else if(!(a!=z[d].type||b&&z[d].id.indexOf(b)))return z[d]}return null}function F(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}
|
||||
function G(a,b){for(var c=H(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var f=c[d].childNodes,g=0;g<f.length;g++){var k=f[g];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "pc8080-binding":(h=F(k))&&h.binding&&a.M(h.type,h.binding,k,h.value),m=l.length}}}}
|
||||
function H(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var f=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)f.test(a[b].className)&&c.push(a[b]);return c}
|
||||
y.prototype={constructor:y,parent:null,toString:function(){return this.name?this.name:this.id||this.type},M:function(a,b,c){switch(b){case "clear":return this.i[b]||(this.i[b]=c,c.onclick=function(a){return function(){a.i.print&&(a.i.print.value="")}}(this)),!0;case "print":return this.i[b]||(this.Ea=this.i[b]=c,c.value="",this.L=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.C=function(a,b,c){this.L(a,"notice",c)}),!0;default:return!1}},log:function(){},L:function(){},status:function(a){this.L(this.La+": "+a)},C:function(a,b){b||u(a)},T:function(){return this.c.B=!0},S:function(a,b){b&&(this.c.B=!1);return!0}};function Aa(a,b){if(a.c.Fa)return a.c.ja&&(a.c.ja=!1),a.c.Fa=!1;if(a.c.X)return a.L(a.toString()+" error"),!1;a.c.ja=b;return a.c.ja}function I(a){if(!a.c.X&&(a.c.ca=!0,a.c.ca)){var b=a.ya;a.ya=null;b&&b()}}
|
||||
function Ba(a,b){b&&(a.c.ca?b():a.ya=b);return a.c.ca}
|
||||
var J="undefined"!==typeof ArrayBuffer,Ca=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function Da(a){y.call(this,"Panel",a,Da)}B(Da);e=Da.prototype;e.M=function(a,b,c,d){return this.g&&this.g.M(a,b,c,d)||this.a&&this.a.M(a,b,c,d)||this.b&&this.b.M(a,b,c,d)?!0:this.parent.M.call(this,a,b,c,d)};e.ka=function(a,b,c,d){this.g=a;this.o=b;this.a=c;this.D=d;this.b=Ea(a,"Keyboard")};e.T=function(a,b){b||Fa();return!0};e.S=function(){return!0};e.$=function(){};
|
||||
function Fa(){for(var a=!1,b=H(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],f=F(d),g;a:{g=f.id;if(void 0!==g)for(var k=void 0,k=0;k<z.length;k++)if(z[k].id===g){g=z[k];break a}g=null}g||(a=!0,g=new Da(f));G(g,d);a&&I(g)}}w(Fa);
|
||||
function K(a,b,c){y.call(this,"Bus",a,K);this.a=b;this.D=c;this.g=a.buswidth||16;this.o=Math.pow(2,this.g);this.h=this.o-1|0;this.l=20>=this.g?12:24>=this.g?14:15;this.j=1<<this.l;this.m=this.j>>2;this.s=this.j-1;this.f=this.o/this.j|0;a=new L;Ga(a,this.D);this.b=Array(this.f);for(b=0;b<this.f;b++)this.b[b]=a;a=this.a;b=this.b;c=this.l;var d=this.h;a.J=b;a.l=c;a.j=1<<a.l;a.P=a.j-1;a.ua=b.length;a.ta=a.ua-1;a.U=d;I(this)}B(K);K.prototype.reset=function(){};
|
||||
K.prototype.T=function(a,b){b||this.reset();return!0};function Ha(a,b,c,d){for(var f=b>>>a.l;0<c&&f<a.b.length;){var g=a.b[f],k=f*a.j,h=c>a.j?a.j:c;if(g&&g.size){if(g.type==d){if(b+c<=g.ia)return g.Ca+=g.ia-b,g.ia=b,!0;if(b>=g.ia+g.Ca){h=g.size-(b-k);h>c&&(h=c);g.Ca=b-g.ia+h;c-=h;b=k+a.j;continue}}return Ia(1,b,c)}g=a.b[f];b=new L(b,h,a.j,d);Ga(b,a.D,g);a.b[f++]=b;b=k+a.j;c-=h}return 0>=c?!0:Ia(2,b,c)}function Ia(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Ja;
|
||||
if(J){var Ka=new ArrayBuffer(2);(new DataView(Ka)).setUint16(0,256,!0);Ja=256===(new Uint16Array(Ka))[0]}else Ja=!1;var La=Ja;
|
||||
function L(a,b,c,d){this.id=Ma+=2;this.a=null;this.ia=a;this.Ca=b;this.size=c||0;this.type=d||Na;this.o=d==Oa;Ga(this);this.R=this.eb=!1;if(c)if(J)this.i=new ArrayBuffer(c),this.f=new DataView(this.i,0,c),this.b=new Uint8Array(this.i,0,c),this.j=new Uint16Array(this.i,0,c>>1),this.a=new Int32Array(this.i,0,c>>2),Pa(this,La?Qa:Ra);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;Pa(this,Sa)}else Pa(this)}var Na=0,Oa=2,Ma=0;
|
||||
L.prototype={constructor:L,parent:null,save:function(){var a,b;if(J)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(J)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.R=!0}return!1},l:function(){return 255},s:function(){},m:function(a,b){return this.sa(a++,b++)|this.sa(a,b)<<8},ba:function(a,b,c){this.Da(a++,b&255,c++);this.Da(a,b>>8,c)},F:function(a){return this.a[a>>
|
||||
2]>>>((a&3)<<3)&255},K:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},V:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.R=!0},va:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.R=!0},v:function(a,b){return this.A(a,b)},H:function(a,b){return this.I(a,b)},P:function(a,b,c){this.o||this.Za(a,b,c)},aa:function(a,b,
|
||||
c){this.o||this.ta(a,b,c)},u:function(a){return this.b[a]},w:function(a){return this.b[a]},G:function(a){return this.f.getUint16(a,!0)},J:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.j[a>>1]},O:function(a,b){this.b[a]=b;this.R=!0},U:function(a,b){this.b[a]=b;this.R=!0},W:function(a,b){this.f.setUint16(a,b,!0);this.R=!0},ua:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.j[a>>1]=b;this.R=!0}};function Ga(a,b,c){a.D=b;a.g=a.h=0;c&&((a.g=c.g)&&Ta(a,Ua,!1),(a.h=c.h)&&Va(a,Ua,!1))}
|
||||
function Va(a,b,c){c&&a.h||(a.Da=!a.o&&b[2]||a.s);if(c||void 0===c)a.Za=b[2]||a.s,a.ta=b[3]||a.ba}function Ta(a,b,c){c&&a.g||(a.sa=b[0]||a.l,a.gb=b[1]||a.m);if(c||void 0===c)a.A=b[0]||a.l,a.I=b[1]||a.m}function Pa(a,b){b||(b=Wa);Ta(a,b,void 0);Va(a,b,void 0)}var Wa=[],Sa=[L.prototype.F,L.prototype.K,L.prototype.V,L.prototype.va],Ua=[L.prototype.v,L.prototype.H,L.prototype.P,L.prototype.aa];
|
||||
if(J)var Ra=[L.prototype.u,L.prototype.G,L.prototype.O,L.prototype.W],Qa=[L.prototype.w,L.prototype.J,L.prototype.U,L.prototype.ua];
|
||||
function M(a,b){y.call(this,"CPU",a,M);var c=a.cycles||b,d=a.multiplier||1;this.a={};this.a.ha=c;this.a.ga=d;this.a.Ga=Math.round(this.a.ha/1E4)/100;this.a.da=this.a.Ga*this.a.ga;this.c.N=!1;this.c.Ra=!1;this.c.Pa=a.autoStart;this.c.Qa=!1;this.c.wa=!1;this.a.Aa=this.a.fa=0;this.a.Ba=a.csStart;this.a.la=a.csInterval;this.a.ma=a.csStop;this.bb=this.Ja.bind(this);I(this)}B(M);var Xa=["power","reset"];e=M.prototype;
|
||||
e.ka=function(a,b,c,d){this.g=a;this.o=b;this.D=d;for(b=0;b<Xa.length;b++)(c=this.i[Xa[b]])&&this.g.M(null,Xa[b],c);Ea(a,"FPU");this.m=Ea(a,"ChipSet");a=Ya(a,"autoStart");null!=a&&(this.c.Pa="true"==a?!0:"false"==a?!1:!!a);I(this)};e.reset=function(){};e.save=function(){return null};e.restore=function(){return!1};e.T=function(a,b){if(!b){if(a&&this.restore){Za(this);if(!this.restore(a))return!1;$a(this)}else this.reset();this.L("No debugger detected")}ab(this);return!0};
|
||||
e.S=function(a){return a?this.save():!0};function bb(a){(a.c.Pa||void 0===a.i.run)&&a.Ja()}e.Sa=function(){return 0};function $a(a){void 0===a.a.Ba&&(a.a.Ba=0);void 0===a.a.la&&(a.a.la=-1);void 0===a.a.ma&&(a.a.ma=-1);a.c.wa=0<=a.a.Ba&&0<a.a.la;a.c.wa&&(a.a.Aa=0,a.a.fa=a.a.Ba-a.O)}
|
||||
e.M=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.i[b]=c;a=!0;break;case "run":this.i[b]=c;c.onclick=function(){var a;if(a=d.g)if(a=d.g,a.c.B)a=!0;else{var b=null,c,h=D(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.c.ca);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.c.B);c++);c==h.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.c.ca?"powered yet":"ready yet"+(b.ya?" (waiting for notification)":""))+".");a=!1}a&&(d.c.N?N(d,!0):d.Ja())};a=!0;break;
|
||||
case "speed":this.i[b]=c;a=!0;break;case "setSpeed":this.i[b]=c,c.onclick=function(){O(d,d.a.ga<<1)},c.textContent=this.a.da.toFixed(2)+"Mhz",a=!0}return a};function cb(a,b,c){a.O+=b;c&&(a.K=a.b=0)}function db(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.a.ga&&a.a.Y&&(d=a.a.Y/a.a.Ga);a.a.Ta=Math.round(1E3/30);a.a.fb=Math.floor(a.a.ha/c*d);a.a.Ha=Math.floor(a.a.ha/30*d);a.a.Va=Math.floor(a.a.ha/60*d);a.a.Ua=Math.floor(a.a.ha/2*d);b||(a.a.pa=a.a.Ha,a.a.oa=a.a.Va,a.a.na=a.a.Ua);a.a.Ia=0}
|
||||
function P(a){return a.O+a.G+a.K-a.b}function Za(a){a.a.Y=0;a.O=a.G=a.K=a.b=0;$a(a);O(a,1)}function O(a,b){if(void 0!==b){.8>a.a.Y/a.a.da&&(b=1);a.a.ga=b;var c=a.a.Ga*a.a.ga;if(a.a.da!=c){a.a.da=c;var c=a.a.da.toFixed(2)+"Mhz",d=a.i.setSpeed;d&&(d.textContent=c);a.L("target speed: "+c)}}cb(a,a.G);a.G=0;a.a.ea=p();a.a.Z=0;db(a)}
|
||||
e.Ja=function(){if(Aa(this,!0)){if(!this.c.N){O(this);this.g&&this.g.start(this.a.ea,P(this));this.c.N=!0;this.c.Ra=!0;this.m&&this.m.hb();var a=this.i.run;a&&(a.textContent="Halt");this.g&&this.g.$(!0)}this.a.Ia>=this.a.ha&&db(this,!0);this.a.qa=0;this.a.za=p();this.a.Z&&(a=this.a.za-this.a.Z,a>this.a.Ta&&(this.a.ea+=a,this.a.ea>this.a.za&&(this.a.ea=this.a.za)));try{do{var b=this.c.wa?1:this.a.fb;this.m&&(this.m.Ya(),b=this.m.jb(0,b),b=this.m.ib(b));try{this.Xa(b)}catch(f){if("number"!=typeof f)throw f;
|
||||
}var c=this.K-this.b;this.G+=c;this.a.qa+=c;cb(this,0,!0);a=c;if(this.c.wa){var d=!1;this.a.Aa=this.a.Aa+this.Sa()|0;this.a.fa-=a;0>=this.a.fa&&(this.a.fa+=this.a.la,d=!0);0<=this.a.ma&&this.a.ma<=P(this)&&(this.a.la=this.a.ma=-1,$a(this),N(this),d=!0);d&&this.L(P(this)+" cycles: checksum="+n(this.a.Aa))}this.a.oa-=c;0>=this.a.oa&&(this.a.oa+=this.a.Va);this.a.na-=c;0>=this.a.na&&(this.a.na+=this.a.Ua,this.g&&this.g.$());this.a.pa-=c;if(0>=this.a.pa){this.a.pa+=this.a.Ha;break}}while(this.c.N)}catch(f){N(this);
|
||||
ab(this);this.g&&this.g.stop(p(),P(this));Aa(this,!1);b=f.stack||f.message;this.c.X=!0;this.C(b);return}b=setTimeout;c=this.bb;this.a.Z=p();a=this.a.Ta;this.a.qa&&(a=Math.round(a*this.a.qa/this.a.Ha));a-=this.a.Z-this.a.za;if(d=this.a.Z-this.a.ea)this.a.Y=Math.round(this.G/(10*d))/100,864E5<=d&&(this.O=0,this.m&&this.m.Ya(!0),O(this));if(0>a||this.a.Y<this.a.da)a=0;this.a.Ia+=this.a.qa;this.a.Z+=a;b(c,a)}else ab(this),this.g&&this.g.stop(p(),P(this))};e.Xa=function(){return 0};
|
||||
function N(a,b){a.c.ja&&(a.c.Fa=!0);a.K-=a.b;a.b=0;cb(a,a.G);a.G=0;if(a.c.N){a.c.N=!1;a.m&&a.m.hb();var c=a.i.run;c&&(c.textContent="Run")}a.c.xa=b}function ab(a){a.g&&a.g.$(void 0)}function eb(a){this.ab=a.model||8080;M.call(this,a,1E6);this.$a=fb;Za(this);this.c.xa=this.c.cb=!1;this.va=0;this.J=[];this.l=this.j=this.P=this.ua=this.ta=this.U=0;gb(this)}B(eb,M);e=eb.prototype;e.reset=function(){this.c.N&&N(this);gb(this);Za(this);this.c.X=!1};
|
||||
function gb(a){a.h=0;a.u=0;a.v=0;a.A=0;a.w=0;a.H=0;a.I=0;a.ba=0;a.s=0;hb(a,0);a.aa=0}e.Sa=function(){var a=this.h+this.u+this.v+this.A+this.w+this.H+this.I|0;return a=a+this.ba+this.s+ib(this)|0};
|
||||
e.save=function(){var a=new Q(this);R(a,0,[this.h,this.u,this.v,this.A,this.w,this.H,this.I,this.ba,this.s,ib(this)]);R(a,1,[this.V,this.aa,this.O,this.a.ga]);for(var b=this.o,c=0,d=[],f=0;f<b.f;f++){var g=b.b[f];if(g.R||g.eb){d[c++]=f;var k=c++;a:if(g=g.save()){for(var h=0,l=0,m=[];h<g.length;){for(var A=g[h],r=h+1;r<g.length&&g[r]===A;)r++;m[l++]=r-h;m[l++]=A;h=r}if(m.length<g.length){g=m;break a}}d[k]=g}}R(a,2,d);return a.data()};
|
||||
e.restore=function(a){var b=a[0];this.h=b[0];this.u=b[1];this.v=b[2];this.A=b[3];this.w=b[4];this.H=b[5];this.I=b[6];this.ba=b[7]&65535;this.s=b[8]&65535;hb(this,b[9]);b=a[1];this.V=b[0];this.aa=b[1];this.O=b[2];O(this,b[3]);a:{b=this.o;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],f=a[c+1];if(f&&f.length<b.m){for(var g=0,k=Array(b.m),h=0;h<f.length-1;)for(var l=f[h++],m=f[h++];l--;)k[g++]=m;f=k}g=b.b[d];if(!g||!g.restore(f)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
e.M=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "D":case "E":case "H":case "L":case "SP":case "PC":case "F":case "SF":case "ZF":case "AF":case "PF":case "CF":this.i[b]=c;this.va++;d=!0;break;default:d=this.parent.M.call(this,a,b,c)}return d};function S(a){return a.u<<8|a.v}function jb(a,b){a.u=b>>8&255;a.v=b&255}function kb(a){return a.A<<8|a.w}function lb(a,b){a.A=b>>8&255;a.w=b&255}
|
||||
function ib(a){return a.Na&-214|(a.F&128?128:0)|(a.f&255?0:64)|((a.F^a.W)&16?16:0)|(Ca[a.F&255]?4:0)|(a.f&256?1:0)}function hb(a,b){a.f=a.F=a.W=0;b&1&&(a.f|=256);b&4||(a.F|=1);b&16&&(a.W|=16);b&64||(a.f|=255);b&128&&(a.F^=192);a.Na=a.Na&-513|b&512|2}function mb(a,b){a.W=b;b=(a.F=b+1)&255;a.f=a.f&-256|b;return b}function nb(a,b){a.W=b;b=(a.F=b-1)&255;a.f=a.f&-256|b;return b}function ob(a,b){return a.J[(b&a.U)>>>a.l].sa(b&a.P,b)}function pb(a){var b=ob(a,a.s);a.s=a.s+1&65535;return b}
|
||||
function qb(a){var b;b=a.s;var c=b&a.P,d=(b&a.U)>>>a.l;c<a.P?b=a.J[d].gb(c,b):(c=a.J[d].sa(c,b),b=c|=a.J[d+1&a.ta].sa(0,b+1)<<8);a.s=a.s+2&65535;return b}function T(a,b,c,d){d=d||2;a.i[b]&&(void 0===c&&(a.c.X=!0,a.C("Value for "+b+" is invalid"),N(a)),c=!a.c.N||a.c.Qa?n(c,d):"--------".substr(0,d),a.i[b].textContent!=c&&(a.i[b].textContent=c))}
|
||||
e.$=function(a){this.va&&(a||!this.c.N||this.c.Qa)&&(T(this,"A",this.h),T(this,"B",this.u),T(this,"C",this.v),T(this,"D",this.A),T(this,"E",this.w),T(this,"H",this.H),T(this,"L",this.I),T(this,"SP",this.ba,4),T(this,"PC",this.s,4),a=ib(this),T(this,"F",a,2),T(this,"SF",a&128,1),T(this,"ZF",a&64,1),T(this,"AF",a&16,1),T(this,"PF",a&4,1),T(this,"CF",a&1,1));if(a=this.i.speed)a.textContent=this.c.N&&this.a.Y?this.a.Y.toFixed(2)+"Mhz":"Stopped"};
|
||||
e.Xa=function(a){this.c.xa=!0;this.c.cb=!1;this.c.Ra=!1;this.K=this.b=a;this.m&&!a&&this.m.Ya();a||(this.V|=4);do{if(this.aa&&this.aa&4){this.V=this.b=0;break}this.V=0;this.$a[pb(this)].call(this)}while(0<this.b);return this.c.xa?this.K-this.b:void 0===this.c.xa?0:-1};w(function(){for(var a=H(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new eb(d);G(d,c)}});function rb(){this.b-=4}function U(){this.s=this.s-1&65535;N(this)}
|
||||
var fb=[rb,function(){jb(this,qb(this));this.b-=10},function(){var a=S(this);this.J[(a&this.U)>>>this.l].Da(a&this.P,this.h&255,a);this.b-=7},function(){jb(this,S(this)+1);this.b-=5},function(){this.u=mb(this,this.u);this.b-=5},function(){this.u=nb(this,this.u);this.b-=5},function(){this.u=pb(this);this.b-=7},function(){var a=this.h<<1;this.h=a&255|a>>8;this.f=this.f&255|a&256;this.b-=4},rb,function(){var a,b=a=(this.H<<8|this.I)+S(this);this.H=b>>8&255;this.I=b&255;this.f=this.f&255|a>>8&256;this.b-=
|
||||
10},function(){this.h=ob(this,S(this));this.b-=7},function(){jb(this,S(this)-1);this.b-=5},function(){this.v=mb(this,this.v);this.b-=5},function(){this.v=nb(this,this.v);this.b-=5},function(){this.v=pb(this);this.b-=7},function(){var a=this.h<<8&256;this.h=(a|this.h)>>1;this.f=this.f&255|a;this.b-=4},rb,function(){lb(this,qb(this));this.b-=10},function(){var a=kb(this);this.J[(a&this.U)>>>this.l].Da(a&this.P,this.h&255,a);this.b-=7},function(){lb(this,kb(this)+1);this.b-=5},function(){this.A=mb(this,
|
||||
this.A);this.b-=5},function(){this.A=nb(this,this.A);this.b-=5},function(){this.A=pb(this);this.b-=7},function(){var a=this.h<<1;this.h=a&255|this.f>>8;this.f=this.f&255|a&256;this.b-=4},rb,function(){var a,b=a=(this.H<<8|this.I)+kb(this);this.H=b>>8&255;this.I=b&255;this.f=this.f&255|a>>8&256;this.b-=10},function(){this.h=ob(this,kb(this));this.b-=7},function(){lb(this,kb(this)-1);this.b-=5},function(){this.w=mb(this,this.w);this.b-=5},function(){this.w=nb(this,this.w);this.b-=5},function(){this.w=
|
||||
pb(this);this.b-=7},function(){var a=this.h<<8&256;this.h=(this.f&256|this.h)>>1;this.f=this.f&255|a;this.b-=4},U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,
|
||||
U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U];function V(a){y.call(this,"ROM",a,V);this.b=null;this.l=a.addr;this.f=a.size;this.g=a.alias;this.h=a.file;this.m=ba(this.h);if(this.h){a=this.h;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=t()+"/api/v1/dump?file="+this.h+"&format=bytes&decimal=true");var c=this;q(a,null,!0,function(a,b,g){sb(c,a,b,g)})}}B(V);V.prototype.ka=function(a,b,c,d){this.o=b;this.a=c;this.D=d;tb(this)};
|
||||
V.prototype.T=function(){this.j&&(this.D&&this.D.a(this.id,this.l,this.f,this.j),delete this.j);return!0};V.prototype.S=function(){return!0};
|
||||
function sb(a,b,c,d){if(d)a.C("Unable to load system ROM (error "+d+": "+b+")");else{za(a.Ma,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes,k=f.data;if(g)a.b=g;else if(k)for(a.b=Array(4*k.length),d=c=0;c<k.length;c++)a.b[d++]=k[c]&255,a.b[d++]=k[c]>>8&255,a.b[d++]=k[c]>>16&255,a.b[d++]=k[c]>>24&255;else a.b=f;a.j=f.symbols;if(!a.b.length){u("Empty ROM: "+b);return}if(1==a.b.length){u(a.b[0]);return}}catch(h){a.C("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f<b.length;f++)a.b[f]=aa(b[f]);tb(a)}}
|
||||
function tb(a){if(!Ba(a))if(!a.h)I(a);else if(a.b&&a.o){if(a.b.length!=a.f){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.f))+")";a.c.X=!0;a.C(b)}else{b=a.l;if(Ha(a.o,b,a.f,Oa)){for(var c=0;c<a.b.length;c++){var d=a.o,f=b+c;d.b[(f&d.h)>>>d.l].Za(f&d.s,a.b[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.g?b.push(a.g):null!=a.g&&a.g.length&&(b=a.g);for(c=0;c<b.length;c++){for(var g=a,d=b[c],f=g.o,k=g.f,h=[],l=g.l>>>f.l;0<k&&l<f.b.length;)h.push(f.b[l++]),k-=
|
||||
f.j;f=g.o;g=g.f;k=0;for(d>>>=f.l;0<g&&d<f.b.length;){l=h[k++];if(!l)break;f.b[d++]=l;g-=f.j}}delete a.b}}I(a)}}w(function(){for(var a=H(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new V(d);G(d,c)}});function ub(a){y.call(this,"RAM",a,ub);this.g=a.addr;this.f=a.size;this.b=!1}B(ub);e=ub.prototype;e.ka=function(a,b,c,d){this.o=b;this.a=c;this.D=d;I(this)};e.T=function(a,b){b||this.reset();return!0};e.S=function(a){return a?this.save():!0};
|
||||
e.reset=function(){!this.b&&this.f&&Ha(this.o,this.g,this.f,1)&&(this.b=!0,this.status(Math.floor(this.f/1024)+"Kb allocated"));this.b||u("No RAM allocated")};e.save=function(){return null};e.restore=function(){return!0};w(function(){for(var a=H(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new ub(d);G(d,c)}});function vb(a){y.call(this,"Keyboard",a,vb);I(this)}B(vb);w(function(){for(var a=H(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new vb(d);G(d,c)}});
|
||||
function wb(a){y.call(this,"Video",a,wb);I(this)}B(wb);
|
||||
this.G=function(a,b,c){this.L(a,"notice",c)}),!0;default:return!1}},log:function(){},L:function(){},status:function(a){this.L(this.La+": "+a)},G:function(a,b){b||u(a)},V:function(){return this.c.F=!0},U:function(a,b){b&&(this.c.F=!1);return!0}};function Aa(a,b){if(a.c.Fa)return a.c.la&&(a.c.la=!1),a.c.Fa=!1;if(a.c.X)return a.L(a.toString()+" error"),!1;a.c.la=b;return a.c.la}function I(a){if(!a.c.X&&(a.c.ca=!0,a.c.ca)){var b=a.za;a.za=null;b&&b()}}
|
||||
function Ba(a,b){b&&(a.c.ca?b():a.za=b);return a.c.ca}
|
||||
var Ca="undefined"!==typeof ArrayBuffer,Da=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function Ea(a){y.call(this,"Panel",a,Ea)}B(Ea);e=Ea.prototype;e.M=function(a,b,c,d){return this.h&&this.h.M(a,b,c,d)||this.a&&this.a.M(a,b,c,d)||this.b&&this.b.M(a,b,c,d)?!0:this.parent.M.call(this,a,b,c,d)};e.ma=function(a,b,c,d){this.h=a;this.o=b;this.a=c;this.H=d;this.b=Fa(a,"Keyboard")};e.V=function(a,b){b||Ga();return!0};e.U=function(){return!0};e.$=function(){};
|
||||
function Ga(){for(var a=!1,b=H(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],f=F(d),g;a:{g=f.id;if(void 0!==g)for(var k=void 0,k=0;k<z.length;k++)if(z[k].id===g){g=z[k];break a}g=null}g||(a=!0,g=new Ea(f));G(g,d);a&&I(g)}}w(Ga);
|
||||
function Ha(a,b,c){y.call(this,"Bus",a,Ha);this.a=b;this.H=c;this.g=a.buswidth||16;this.o=Math.pow(2,this.g);this.h=this.o-1|0;this.j=20>=this.g?12:24>=this.g?14:15;this.l=1<<this.j;this.m=this.l>>2;this.s=this.l-1;this.f=this.o/this.l|0;a=new J;Ia(a,this.H);this.b=Array(this.f);for(b=0;b<this.f;b++)this.b[b]=a;a=this.a;b=this.b;c=this.j;var d=this.h;a.I=b;a.j=c;a.l=1<<a.j;a.K=a.l-1;a.va=b.length;a.ja=a.va-1;a.S=d;I(this)}B(Ha);Ha.prototype.reset=function(){};
|
||||
Ha.prototype.V=function(a,b){b||this.reset();return!0};function Ja(a,b,c,d){for(var f=b>>>a.j;0<c&&f<a.b.length;){var g=a.b[f],k=f*a.l,h=c>a.l?a.l:c;if(g&&g.size){if(g.type==d){if(b+c<=g.ka)return g.Da+=g.ka-b,g.ka=b,!0;if(b>=g.ka+g.Da){h=g.size-(b-k);h>c&&(h=c);g.Da=b-g.ka+h;c-=h;b=k+a.l;continue}}return Ka(1,b,c)}g=a.b[f];b=new J(b,h,a.l,d);Ia(b,a.H,g);a.b[f++]=b;b=k+a.l;c-=h}return 0>=c?!0:Ka(2,b,c)}function Ka(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var La;
|
||||
if(Ca){var Ma=new ArrayBuffer(2);(new DataView(Ma)).setUint16(0,256,!0);La=256===(new Uint16Array(Ma))[0]}else La=!1;var Na=La;
|
||||
function J(a,b,c,d){this.id=Oa+=2;this.a=null;this.ka=a;this.Da=b;this.size=c||0;this.type=d||Pa;this.g=d==Qa;Ia(this);this.T=this.eb=!1;if(c)if(Ca)this.f=new ArrayBuffer(c),this.i=new DataView(this.f,0,c),this.b=new Uint8Array(this.f,0,c),this.j=new Uint16Array(this.f,0,c>>1),this.a=new Int32Array(this.f,0,c>>2),Ra(this,Na?Sa:Ta);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;Ra(this,Ua)}else Ra(this)}var Pa=0,Qa=2,Oa=0;
|
||||
J.prototype={constructor:J,parent:null,save:function(){var a,b;if(Ca)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.i.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Ca)for(b=0;b<a.length;b++)this.i.setInt32(b<<2,a[b],!0);else this.a=a;return this.T=!0}return!1},l:function(){return 255},s:function(){},m:function(a,b){return this.ua(a++,b++)|this.ua(a,b)<<8},u:function(a,b,c){this.ia(a++,b&255,c++);this.ia(a,b>>8,c)},C:function(a){return this.a[a>>
|
||||
2]>>>((a&3)<<3)&255},N:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},W:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.T=!0},wa:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.T=!0},A:function(a,b){return this.w(a,b)},I:function(a,b){return this.J(a,b)},R:function(a,b,c){this.g||this.Za(a,b,c)},ba:function(a,b,
|
||||
c){this.g||this.ja(a,b,c)},v:function(a){return this.b[a]},B:function(a){return this.b[a]},D:function(a){return this.i.getUint16(a,!0)},K:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.j[a>>1]},P:function(a,b){this.b[a]=b;this.T=!0},S:function(a,b){this.b[a]=b;this.T=!0},aa:function(a,b){this.i.setUint16(a,b,!0);this.T=!0},va:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.j[a>>1]=b;this.T=!0}};function Ia(a,b,c){a.H=b;a.h=a.o=0;c&&((a.h=c.h)&&Va(a,Wa,!1),(a.o=c.o)&&Xa(a,Wa,!1))}
|
||||
function Xa(a,b,c){c&&a.o||(a.ia=!a.g&&b[2]||a.s,a.ib=!a.g&&b[3]||a.u);if(c||void 0===c)a.Za=b[2]||a.s,a.ja=b[3]||a.u}function Va(a,b,c){c&&a.h||(a.ua=b[0]||a.l,a.gb=b[1]||a.m);if(c||void 0===c)a.w=b[0]||a.l,a.J=b[1]||a.m}function Ra(a,b){b||(b=Ya);Va(a,b,void 0);Xa(a,b,void 0)}var Ya=[],Ua=[J.prototype.C,J.prototype.N,J.prototype.W,J.prototype.wa],Wa=[J.prototype.A,J.prototype.I,J.prototype.R,J.prototype.ba];
|
||||
if(Ca)var Ta=[J.prototype.v,J.prototype.D,J.prototype.P,J.prototype.aa],Sa=[J.prototype.B,J.prototype.K,J.prototype.S,J.prototype.va];
|
||||
function Za(a,b){y.call(this,"CPU",a,Za);var c=a.cycles||b,d=a.multiplier||1;this.a={};this.a.ha=c;this.a.ga=d;this.a.Ga=Math.round(this.a.ha/1E4)/100;this.a.da=this.a.Ga*this.a.ga;this.c.O=!1;this.c.Ra=!1;this.c.Pa=a.autoStart;this.c.Qa=!1;this.c.xa=!1;this.a.Ba=this.a.fa=0;this.a.Ca=a.csStart;this.a.na=a.csInterval;this.a.oa=a.csStop;this.bb=this.Ja.bind(this);I(this)}B(Za);var $a=["power","reset"];e=Za.prototype;
|
||||
e.ma=function(a,b,c,d){this.h=a;this.o=b;this.H=d;for(b=0;b<$a.length;b++)(c=this.i[$a[b]])&&this.h.M(null,$a[b],c);Fa(a,"FPU");this.s=Fa(a,"ChipSet");a=ab(a,"autoStart");null!=a&&(this.c.Pa="true"==a?!0:"false"==a?!1:!!a);I(this)};e.reset=function(){};e.save=function(){return null};e.restore=function(){return!1};e.V=function(a,b){if(!b){if(a&&this.restore){bb(this);if(!this.restore(a))return!1;cb(this)}else this.reset();this.L("No debugger detected")}db(this);return!0};
|
||||
e.U=function(a){return a?this.save():!0};function eb(a){(a.c.Pa||void 0===a.i.run)&&a.Ja()}e.Sa=function(){return 0};function cb(a){void 0===a.a.Ca&&(a.a.Ca=0);void 0===a.a.na&&(a.a.na=-1);void 0===a.a.oa&&(a.a.oa=-1);a.c.xa=0<=a.a.Ca&&0<a.a.na;a.c.xa&&(a.a.Ba=0,a.a.fa=a.a.Ca-a.R)}
|
||||
e.M=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.i[b]=c;a=!0;break;case "run":this.i[b]=c;c.onclick=function(){var a;if(a=d.h)if(a=d.h,a.c.F)a=!0;else{var b=null,c,h=D(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.c.ca);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.c.F);c++);c==h.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.c.ca?"powered yet":"ready yet"+(b.za?" (waiting for notification)":""))+".");a=!1}a&&(d.c.O?K(d,!0):d.Ja())};a=!0;break;
|
||||
case "speed":this.i[b]=c;a=!0;break;case "setSpeed":this.i[b]=c,c.onclick=function(){fb(d,d.a.ga<<1)},c.textContent=this.a.da.toFixed(2)+"Mhz",a=!0}return a};function gb(a,b,c){a.R+=b;c&&(a.P=a.b=0)}function hb(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.a.ga&&a.a.Y&&(d=a.a.Y/a.a.Ga);a.a.Ta=Math.round(1E3/30);a.a.fb=Math.floor(a.a.ha/c*d);a.a.Ha=Math.floor(a.a.ha/30*d);a.a.Va=Math.floor(a.a.ha/60*d);a.a.Ua=Math.floor(a.a.ha/2*d);b||(a.a.ra=a.a.Ha,a.a.qa=a.a.Va,a.a.pa=a.a.Ua);a.a.Ia=0}
|
||||
function ib(a){return a.R+a.N+a.P-a.b}function bb(a){a.a.Y=0;a.R=a.N=a.P=a.b=0;cb(a);fb(a,1)}function fb(a,b){if(void 0!==b){.8>a.a.Y/a.a.da&&(b=1);a.a.ga=b;var c=a.a.Ga*a.a.ga;if(a.a.da!=c){a.a.da=c;var c=a.a.da.toFixed(2)+"Mhz",d=a.i.setSpeed;d&&(d.textContent=c);a.L("target speed: "+c)}}gb(a,a.N);a.N=0;a.a.ea=p();a.a.Z=0;hb(a)}
|
||||
e.Ja=function(){if(Aa(this,!0)){if(!this.c.O){fb(this);this.h&&this.h.start(this.a.ea,ib(this));this.c.O=!0;this.c.Ra=!0;this.s&&this.s.hb();var a=this.i.run;a&&(a.textContent="Halt");this.h&&this.h.$(!0)}this.a.Ia>=this.a.ha&&hb(this,!0);this.a.sa=0;this.a.Aa=p();this.a.Z&&(a=this.a.Aa-this.a.Z,a>this.a.Ta&&(this.a.ea+=a,this.a.ea>this.a.Aa&&(this.a.ea=this.a.Aa)));try{do{var b=this.c.xa?1:this.a.fb;this.s&&(this.s.Ya(),b=this.s.kb(0,b),b=this.s.jb(b));try{this.Xa(b)}catch(f){if("number"!=typeof f)throw f;
|
||||
}var c=this.P-this.b;this.N+=c;this.a.sa+=c;gb(this,0,!0);a=c;if(this.c.xa){var d=!1;this.a.Ba=this.a.Ba+this.Sa()|0;this.a.fa-=a;0>=this.a.fa&&(this.a.fa+=this.a.na,d=!0);0<=this.a.oa&&this.a.oa<=ib(this)&&(this.a.na=this.a.oa=-1,cb(this),K(this),d=!0);d&&this.L(ib(this)+" cycles: checksum="+n(this.a.Ba))}this.a.qa-=c;0>=this.a.qa&&(this.a.qa+=this.a.Va);this.a.pa-=c;0>=this.a.pa&&(this.a.pa+=this.a.Ua,this.h&&this.h.$());this.a.ra-=c;if(0>=this.a.ra){this.a.ra+=this.a.Ha;break}}while(this.c.O)}catch(f){K(this);
|
||||
db(this);this.h&&this.h.stop(p(),ib(this));Aa(this,!1);b=f.stack||f.message;this.c.X=!0;this.G(b);return}b=setTimeout;c=this.bb;this.a.Z=p();a=this.a.Ta;this.a.sa&&(a=Math.round(a*this.a.sa/this.a.Ha));a-=this.a.Z-this.a.Aa;if(d=this.a.Z-this.a.ea)this.a.Y=Math.round(this.N/(10*d))/100,864E5<=d&&(this.R=0,this.s&&this.s.Ya(!0),fb(this));if(0>a||this.a.Y<this.a.da)a=0;this.a.Ia+=this.a.sa;this.a.Z+=a;b(c,a)}else db(this),this.h&&this.h.stop(p(),ib(this))};e.Xa=function(){return 0};
|
||||
function K(a,b){a.c.la&&(a.c.Fa=!0);a.P-=a.b;a.b=0;gb(a,a.N);a.N=0;if(a.c.O){a.c.O=!1;a.s&&a.s.hb();var c=a.i.run;c&&(c.textContent="Run")}a.c.ya=b}function db(a){a.h&&a.h.$(void 0)}function jb(a){this.ab=a.model||8080;Za.call(this,a,1E6);this.$a=kb;bb(this);this.c.ya=this.c.cb=!1;this.wa=0;this.I=[];this.j=this.l=this.K=this.va=this.ja=this.S=0;lb(this)}B(jb,Za);e=jb.prototype;e.reset=function(){this.c.O&&K(this);lb(this);bb(this);this.c.X=!1};
|
||||
function lb(a){a.g=0;a.v=0;a.A=0;a.w=0;a.B=0;a.C=0;a.D=0;a.ba=0;a.u=0;mb(a,0);a.aa=0}e.Sa=function(){var a=this.g+this.v+this.A+this.w+this.B+this.C+this.D|0;return a=a+this.ba+this.u+nb(this)|0};
|
||||
e.save=function(){var a=new L(this);M(a,0,[this.g,this.v,this.A,this.w,this.B,this.C,this.D,this.ba,this.u,nb(this)]);M(a,1,[this.W,this.aa,this.R,this.a.ga]);for(var b=this.o,c=0,d=[],f=0;f<b.f;f++){var g=b.b[f];if(g.T||g.eb){d[c++]=f;var k=c++;a:if(g=g.save()){for(var h=0,l=0,m=[];h<g.length;){for(var A=g[h],r=h+1;r<g.length&&g[r]===A;)r++;m[l++]=r-h;m[l++]=A;h=r}if(m.length<g.length){g=m;break a}}d[k]=g}}M(a,2,d);return a.data()};
|
||||
e.restore=function(a){var b=a[0];this.g=b[0];this.v=b[1];this.A=b[2];this.w=b[3];this.B=b[4];this.C=b[5];this.D=b[6];this.ba=b[7]&65535;this.u=b[8]&65535;mb(this,b[9]);b=a[1];this.W=b[0];this.aa=b[1];this.R=b[2];fb(this,b[3]);a:{b=this.o;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],f=a[c+1];if(f&&f.length<b.m){for(var g=0,k=Array(b.m),h=0;h<f.length-1;)for(var l=f[h++],m=f[h++];l--;)k[g++]=m;f=k}g=b.b[d];if(!g||!g.restore(f)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
e.M=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "D":case "E":case "H":case "L":case "SP":case "PC":case "F":case "SF":case "ZF":case "AF":case "PF":case "CF":this.i[b]=c;this.wa++;d=!0;break;default:d=this.parent.M.call(this,a,b,c)}return d};function ob(a){return a.v<<8|a.A}function pb(a,b){a.v=b>>8&255;a.A=b&255}function qb(a){return a.w<<8|a.B}function rb(a,b){a.w=b>>8&255;a.B=b&255}function N(a){return a.C<<8|a.D}function O(a,b){a.C=b>>8&255;a.D=b&255}
|
||||
function nb(a){return a.Na&-214|(a.m&128?128:0)|(a.f&255?0:64)|((a.m^a.J)&16?16:0)|(Da[a.m&255]?4:0)|(a.f&256?1:0)}function mb(a,b){a.f=a.m=a.J=0;b&1&&(a.f|=256);b&4||(a.m|=1);b&16&&(a.J|=16);b&64||(a.f|=255);b&128&&(a.m^=192);a.Na=a.Na&-513|b&512|2}function P(a,b){a.J=b;b=(a.m=b+1)&255;a.f=a.f&-256|b;return b}function Q(a,b){a.J=b;b=(a.m=b-1)&255;a.f=a.f&-256|b;return b}function sb(a,b){return a.I[(b&a.S)>>>a.j].ua(b&a.K,b)}
|
||||
function tb(a,b){var c=b&a.K,d=(b&a.S)>>>a.j;if(c<a.K)return a.I[d].gb(c,b);c=a.I[d].ua(c,b);return c|=a.I[d+1&a.ja].ua(0,b+1)<<8}function R(a){var b=sb(a,a.u);a.u=a.u+1&65535;return b}function ub(a){var b=tb(a,a.u);a.u=a.u+2&65535;return b}function S(a,b,c,d){d=d||2;a.i[b]&&(void 0===c&&(a.c.X=!0,a.G("Value for "+b+" is invalid"),K(a)),c=!a.c.O||a.c.Qa?n(c,d):"--------".substr(0,d),a.i[b].textContent!=c&&(a.i[b].textContent=c))}
|
||||
e.$=function(a){this.wa&&(a||!this.c.O||this.c.Qa)&&(S(this,"A",this.g),S(this,"B",this.v),S(this,"C",this.A),S(this,"D",this.w),S(this,"E",this.B),S(this,"H",this.C),S(this,"L",this.D),S(this,"SP",this.ba,4),S(this,"PC",this.u,4),a=nb(this),S(this,"F",a,2),S(this,"SF",a&128,1),S(this,"ZF",a&64,1),S(this,"AF",a&16,1),S(this,"PF",a&4,1),S(this,"CF",a&1,1));if(a=this.i.speed)a.textContent=this.c.O&&this.a.Y?this.a.Y.toFixed(2)+"Mhz":"Stopped"};
|
||||
e.Xa=function(a){this.c.ya=!0;this.c.cb=!1;this.c.Ra=!1;this.P=this.b=a;this.s&&!a&&this.s.Ya();a||(this.W|=4);do{if(this.aa&&this.aa&4){this.W=this.b=0;break}this.W=0;this.$a[R(this)].call(this)}while(0<this.b);return this.c.ya?this.P-this.b:void 0===this.c.ya?0:-1};w(function(){for(var a=H(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new jb(d);G(d,c)}});function T(){this.b-=4}function U(){this.u=this.u-1&65535;K(this)}
|
||||
var kb=[T,function(){pb(this,ub(this));this.b-=10},function(){var a=ob(this);this.I[(a&this.S)>>>this.j].ia(a&this.K,this.g&255,a);this.b-=7},function(){pb(this,ob(this)+1);this.b-=5},function(){this.v=P(this,this.v);this.b-=5},function(){this.v=Q(this,this.v);this.b-=5},function(){this.v=R(this);this.b-=7},function(){var a=this.g<<1;this.g=a&255|a>>8;this.f=this.f&255|a&256;this.b-=4},T,function(){var a;O(this,a=N(this)+ob(this));this.f=this.f&255|a>>8&256;this.b-=10},function(){this.g=sb(this,ob(this));
|
||||
this.b-=7},function(){pb(this,ob(this)-1);this.b-=5},function(){this.A=P(this,this.A);this.b-=5},function(){this.A=Q(this,this.A);this.b-=5},function(){this.A=R(this);this.b-=7},function(){var a=this.g<<8&256;this.g=(a|this.g)>>1;this.f=this.f&255|a;this.b-=4},T,function(){rb(this,ub(this));this.b-=10},function(){var a=qb(this);this.I[(a&this.S)>>>this.j].ia(a&this.K,this.g&255,a);this.b-=7},function(){rb(this,qb(this)+1);this.b-=5},function(){this.w=P(this,this.w);this.b-=5},function(){this.w=Q(this,
|
||||
this.w);this.b-=5},function(){this.w=R(this);this.b-=7},function(){var a=this.g<<1;this.g=a&255|this.f>>8;this.f=this.f&255|a&256;this.b-=4},T,function(){var a;O(this,a=N(this)+qb(this));this.f=this.f&255|a>>8&256;this.b-=10},function(){this.g=sb(this,qb(this));this.b-=7},function(){rb(this,qb(this)-1);this.b-=5},function(){this.B=P(this,this.B);this.b-=5},function(){this.B=Q(this,this.B);this.b-=5},function(){this.B=R(this);this.b-=7},function(){var a=this.g<<8&256;this.g=(this.f&256|this.g)>>1;
|
||||
this.f=this.f&255|a;this.b-=4},T,function(){O(this,ub(this));this.b-=10},function(){var a=ub(this),b=N(this),c=a&this.K,d=(a&this.S)>>>this.j;c<this.K?this.I[d].ib(c,b&65535,a):(this.I[d++].ia(c,b&255,a),this.I[d&this.ja].ia(0,b>>8&255,a+1));this.b-=16},function(){O(this,N(this)+1);this.b-=5},function(){this.C=P(this,this.C);this.b-=5},function(){this.C=Q(this,this.C);this.b-=5},function(){this.C=R(this);this.b-=7},function(){var a=this.g,b=!!(this.f&256),c=!!((this.m^this.J)&16);9<(a&15)||c?(a+=
|
||||
6,c=!0):c=!1;160<=a||b?(a+=96,b=!0):b=!1;this.f=this.m=this.g=a&255;this.f=b?this.f|256:this.f&-257;this.J=c?~this.m&16|this.J&-17:this.m&16|this.J&-17;this.b-=4},T,function(){var a;O(this,a=N(this)+N(this));this.f=this.f&255|a>>8&256;this.b-=10},function(){O(this,tb(this,ub(this)));this.b-=16},function(){O(this,N(this)-1);this.b-=5},function(){this.D=P(this,this.D);this.b-=5},function(){this.D=Q(this,this.D);this.b-=5},function(){this.D=R(this);this.b-=7},function(){this.g=~this.g&255;this.b-=4},
|
||||
U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U,U];
|
||||
function V(a){y.call(this,"ROM",a,V);this.b=null;this.l=a.addr;this.f=a.size;this.g=a.alias;this.h=a.file;this.m=ba(this.h);if(this.h){a=this.h;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=t()+"/api/v1/dump?file="+this.h+"&format=bytes&decimal=true");var c=this;q(a,null,!0,function(a,b,g){vb(c,a,b,g)})}}B(V);V.prototype.ma=function(a,b,c,d){this.o=b;this.a=c;this.H=d;wb(this)};V.prototype.V=function(){this.j&&(this.H&&this.H.a(this.id,this.l,this.f,this.j),delete this.j);return!0};V.prototype.U=function(){return!0};
|
||||
function vb(a,b,c,d){if(d)a.G("Unable to load system ROM (error "+d+": "+b+")");else{za(a.Ma,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes,k=f.data;if(g)a.b=g;else if(k)for(a.b=Array(4*k.length),d=c=0;c<k.length;c++)a.b[d++]=k[c]&255,a.b[d++]=k[c]>>8&255,a.b[d++]=k[c]>>16&255,a.b[d++]=k[c]>>24&255;else a.b=f;a.j=f.symbols;if(!a.b.length){u("Empty ROM: "+b);return}if(1==a.b.length){u(a.b[0]);return}}catch(h){a.G("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f<b.length;f++)a.b[f]=aa(b[f]);wb(a)}}
|
||||
function wb(a){if(!Ba(a))if(!a.h)I(a);else if(a.b&&a.o){if(a.b.length!=a.f){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.f))+")";a.c.X=!0;a.G(b)}else{b=a.l;if(Ja(a.o,b,a.f,Qa)){for(var c=0;c<a.b.length;c++){var d=a.o,f=b+c;d.b[(f&d.h)>>>d.j].Za(f&d.s,a.b[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.g?b.push(a.g):null!=a.g&&a.g.length&&(b=a.g);for(c=0;c<b.length;c++){for(var g=a,d=b[c],f=g.o,k=g.f,h=[],l=g.l>>>f.j;0<k&&l<f.b.length;)h.push(f.b[l++]),k-=
|
||||
f.l;f=g.o;g=g.f;k=0;for(d>>>=f.j;0<g&&d<f.b.length;){l=h[k++];if(!l)break;f.b[d++]=l;g-=f.l}}delete a.b}}I(a)}}w(function(){for(var a=H(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new V(d);G(d,c)}});function xb(a){y.call(this,"RAM",a,xb);this.g=a.addr;this.f=a.size;this.b=!1}B(xb);e=xb.prototype;e.ma=function(a,b,c,d){this.o=b;this.a=c;this.H=d;I(this)};e.V=function(a,b){b||this.reset();return!0};e.U=function(a){return a?this.save():!0};
|
||||
e.reset=function(){!this.b&&this.f&&Ja(this.o,this.g,this.f,1)&&(this.b=!0,this.status(Math.floor(this.f/1024)+"Kb allocated"));this.b||u("No RAM allocated")};e.save=function(){return null};e.restore=function(){return!0};w(function(){for(var a=H(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new xb(d);G(d,c)}});function yb(a){y.call(this,"Keyboard",a,yb);I(this)}B(yb);w(function(){for(var a=H(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=F(c),d=new yb(d);G(d,c)}});
|
||||
function zb(a){y.call(this,"Video",a,zb);I(this)}B(zb);
|
||||
w(function(){for(var a=H(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=F(c),f=document.createElement("canvas");if(void 0===f||!f.getContext){c.innerHTML="<br/>Missing <canvas> support. Please try a newer web browser.";break}f.setAttribute("class","pcjs-canvas");f.setAttribute("width",d.screenWidth);f.setAttribute("height",d.screenHeight);f.style.backgroundColor=d.screenColor;f.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
|
||||
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,f,d.screenWidth,d.screenHeight),c.onresize());var g=+(d.aspect||ta.aspect);g&&.3<=g&&3.33>=g&&(pa("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,f,g)),window.onresize());c.appendChild(f);g=document.createElement("textarea");ma("iOS")&&(g.setAttribute("autocapitalize","off"),g.setAttribute("autocorrect","off"));c.appendChild(g);f.getContext("2d");d=new wb(d);G(d,c)}});
|
||||
function Q(a,b,c){this.id=a.id;this.key=xb(a,b,c);this.D=a.D;yb(this,a.Wa)}function xb(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
Q.prototype={constructor:Q,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){yb(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(f){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(f){}b.splice(c,1);c=0}}};
|
||||
function yb(a,b){a[a.id]={};b&&R(a,"parms",b);a.a=!1}function zb(a){var b=!0;if(ja()){var c=JSON.stringify(a[a.id]);la(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Ab(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function W(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:ja()&&(b=ka(a.key))?(a[a.id]=b,a.a=!0):!1}function X(a,b){return a[a.id][b]||null}function R(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function Bb(a,b,c){y.call(this,"Computer",a,Bb);this.c.B=!1;Cb(this,b);this.A=Ya(this,"autoPower",a);this.g=0;this.I=a.busWidth||a.buswidth;this.b=Y;this.u=null;this.l=this.H=!1;this.J=Ya(this,"url")||"";(Math.random()+.1).toString(36);this.f=Db(this);if(this.a=E("CPU",this.id)){this.D=E("Debugger",this.id);this.K=[];for(b=null;b=Ea(this,"Video",b);)this.K.push(b);this.o=new K({id:this.Ma+".bus",buswidth:this.I},this.a,this.D);var d,f=D(this.id);if((this.h=E("Panel",this.id))&&this.h.Ea)for(b=0;b<
|
||||
f.length;b++)d=f[b],d.C=this.h.C,d.L=this.h.L,d.Ea=this.h.Ea;for(b=0;b<f.length;b++)d=f[b],d.ka&&d.ka(this,this.o,this.a,this.D);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.s=d:this.b=parseInt(d,10));var g;if(a=Ya(this,"state")||(g=!0,a.state))b=this.w=a,g||(this.l=!0,this.b=Y),this.b&&(this.v=new Q(this,Z),W(this.v)?b=null:delete this.v);!b&&this.b&&(b=Eb(this))&&(this.l=!0);if(b){var k=this;q(b,null,!0,function(a,b,c){c?(k.s=null,k.l=!1,k.C("Unable to load machine state from server (error "+
|
||||
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(k.u=b,k.H=!0);I(k)})}else I(this);this.i.power||(this.A=!0);!c&&this.A&&Fb(this,this.ra)}else u("Unable to find CPU component")}B(Bb);var Z="1.21.7",Y=0;function Cb(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.m=b}
|
||||
function Ya(a,b,c){var d=b.toLowerCase(),d=ta[b]||ta[d];void 0===d&&a.m&&(d=a.m[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Fb(a,b,c){for(var d=D(a.id),f=0;f<=d.length;f++){var g=f<d.length?d[f]:a;if(!Ba(g)){Ba(g,function(){Fb(a,b,c)});return}}b.call(a,c)}
|
||||
function Gb(a,b){var c=new Q(a,Z,"validate");if(W(c)&&Ab(c)){var d=X(c,"timestamp"),f=b?X(b,"timestamp"):"unknown";d!=f&&(a.C("Machine state may be out-of-date\n("+d+" vs. "+f+")\nCheck your browser's local storage limits"),b||c.clear())}}e=Bb.prototype;
|
||||
e.ra=function(a){void 0===a&&(a=this.b||(this.u?1:Y));if(!this.g){this.g++;var b=!1,c=!1;this.G=!1;var d=this.v||new Q(this,Z);if(-1==a)b=!0;else if(a>Y){if(W(d,this.u)){this.j=new Q(this,Z,"failsafe");W(this.j)&&(Hb(this,d),a=2,yb(this.j));R(this.j,"timestamp",ga());zb(this.j);var f=this.b&&!this.l;if(1==a||ha("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Ab(d)){var g=X(d,"code"),k=X(d,"data");g&&("ok"==g?W(d,k):("error"==g&&"no machine state"!=k?
|
||||
(this.C("Error: "+k),"unable to verify user"==k&&(la("user",""),this.f=null)):this.L(g+": "+k),yb(d),W(d)?(c=Ab(d),f=!0):c=!1))}f&&Gb(this,c?d:null)}else 2==a&&d.clear()}else Gb(this);delete this.u;delete this.v}f=D(this.id);for(g=0;g<f.length;g++)k=f[g],k!==this&&k!=this.a&&(c=Ib(this,k,d,b,c));b=[d,a,c];-1!=a?Fb(this,this.Oa,b):this.Oa(b)}};
|
||||
function Ib(a,b,c,d,f){if(!b.c.B){b.c.B=!0;if(b.T){var g=null;f&&((g=X(c,b.id))||(g=X(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.T(g,d)&&g&&(u("Unable to restore state for "+b.type),a.w&&!a.H?(c.clear(),a.b=Y,window&&window.location.reload()):a.G=!0,b.T(null),f=!1)}if(!d&&b.Ka)for(a=b.Ka.split("|"),c=0;c<a.length;c++)b.status(a[c])}return f}
|
||||
e.Oa=function(a){var b=a[0],c=0>a[1];a=a[2];this.c.B=!0;var d=this.i.power;d&&(d.textContent="Shutdown");this.F||(this.L("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.F=!0);this.a&&(Ib(this,this.a,b,c,a),bb(this.a));this.G&&(Hb(this,b),b.clear());!c&&this.j&&(this.j.clear(),delete this.j);this.g=0};
|
||||
function Hb(a,b){if(ha("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.J,d=a.f||"",f=b.toString(),g={app:"PC8080"};g.ver=Z;g.url=c;g.user=d;g.type="bug";g.data=f;q("http://www.pcjs.org/api/v1/report",g,!0)}}
|
||||
function Jb(a,b,c){var d,f="none";if(a.g)return null;a.g--;var g=new Q(a,Z),k=new Q(a,Z,"validate"),h=ga();R(k,"timestamp",h);R(g,"timestamp",h);R(g,"version","1.21.7");R(g,"url",window?window.location.href:null);R(g,"browser",window?window.navigator.userAgent:"");a.a&&a.a.S&&(c&&N(a.a),d=a.a.S(b,c),"object"===typeof d&&R(g,a.a.id,d),c&&(a.a.c.B=!1,!1===d&&(f=null)));for(var h=D(a.id),l=0;l<h.length;l++){var m=h[l];m.c.B&&(m.S&&(d=m.S(b,c),"object"===typeof d&&R(g,m.id,d)),c&&(m.c.B=!1,!1===d&&(f=
|
||||
null)))}f&&(c?(h=d=!1,b?(a.f&&Kb(a,a.f,g.toString()),zb(k)&&zb(g)||(f=null,d=h=!0)):a.b&&(d=!0,h=3==a.b),d&&g.clear(h)):f=g.toString());c&&(a.c.B=!1,b=a.i.power)&&(b.textContent="Power");a.g=0;return f}e.reset=function(){this.o&&this.o.reset&&this.o.reset();for(var a=D(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.o&&c.reset&&c.reset()}};e.start=function(a,b){for(var c=D(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.start&&f.start(a,b)}};
|
||||
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,f,d.screenWidth,d.screenHeight),c.onresize());var g=+(d.aspect||ta.aspect);g&&.3<=g&&3.33>=g&&(pa("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,f,g)),window.onresize());c.appendChild(f);g=document.createElement("textarea");ma("iOS")&&(g.setAttribute("autocapitalize","off"),g.setAttribute("autocorrect","off"));c.appendChild(g);f.getContext("2d");d=new zb(d);G(d,c)}});
|
||||
function L(a,b,c){this.id=a.id;this.key=Ab(a,b,c);this.H=a.H;Bb(this,a.Wa)}function Ab(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
L.prototype={constructor:L,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){Bb(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(f){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(f){}b.splice(c,1);c=0}}};
|
||||
function Bb(a,b){a[a.id]={};b&&M(a,"parms",b);a.a=!1}function Cb(a){var b=!0;if(ja()){var c=JSON.stringify(a[a.id]);la(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Db(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function W(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:ja()&&(b=ka(a.key))?(a[a.id]=b,a.a=!0):!1}function X(a,b){return a[a.id][b]||null}function M(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function Eb(a,b,c){y.call(this,"Computer",a,Eb);this.c.F=!1;Fb(this,b);this.A=ab(this,"autoPower",a);this.g=0;this.I=a.busWidth||a.buswidth;this.b=Y;this.u=null;this.l=this.D=!1;this.J=ab(this,"url")||"";(Math.random()+.1).toString(36);this.f=Gb(this);if(this.a=E("CPU",this.id)){this.H=E("Debugger",this.id);this.K=[];for(b=null;b=Fa(this,"Video",b);)this.K.push(b);this.o=new Ha({id:this.Ma+".bus",buswidth:this.I},this.a,this.H);var d,f=D(this.id);if((this.h=E("Panel",this.id))&&this.h.Ea)for(b=0;b<
|
||||
f.length;b++)d=f[b],d.G=this.h.G,d.L=this.h.L,d.Ea=this.h.Ea;for(b=0;b<f.length;b++)d=f[b],d.ma&&d.ma(this,this.o,this.a,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.s=d:this.b=parseInt(d,10));var g;if(a=ab(this,"state")||(g=!0,a.state))b=this.w=a,g||(this.l=!0,this.b=Y),this.b&&(this.v=new L(this,Z),W(this.v)?b=null:delete this.v);!b&&this.b&&(b=Hb(this))&&(this.l=!0);if(b){var k=this;q(b,null,!0,function(a,b,c){c?(k.s=null,k.l=!1,k.G("Unable to load machine state from server (error "+
|
||||
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(k.u=b,k.D=!0);I(k)})}else I(this);this.i.power||(this.A=!0);!c&&this.A&&Ib(this,this.ta)}else u("Unable to find CPU component")}B(Eb);var Z="1.21.7",Y=0;function Fb(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.m=b}
|
||||
function ab(a,b,c){var d=b.toLowerCase(),d=ta[b]||ta[d];void 0===d&&a.m&&(d=a.m[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Ib(a,b,c){for(var d=D(a.id),f=0;f<=d.length;f++){var g=f<d.length?d[f]:a;if(!Ba(g)){Ba(g,function(){Ib(a,b,c)});return}}b.call(a,c)}
|
||||
function Jb(a,b){var c=new L(a,Z,"validate");if(W(c)&&Db(c)){var d=X(c,"timestamp"),f=b?X(b,"timestamp"):"unknown";d!=f&&(a.G("Machine state may be out-of-date\n("+d+" vs. "+f+")\nCheck your browser's local storage limits"),b||c.clear())}}e=Eb.prototype;
|
||||
e.ta=function(a){void 0===a&&(a=this.b||(this.u?1:Y));if(!this.g){this.g++;var b=!1,c=!1;this.C=!1;var d=this.v||new L(this,Z);if(-1==a)b=!0;else if(a>Y){if(W(d,this.u)){this.j=new L(this,Z,"failsafe");W(this.j)&&(Kb(this,d),a=2,Bb(this.j));M(this.j,"timestamp",ga());Cb(this.j);var f=this.b&&!this.l;if(1==a||ha("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Db(d)){var g=X(d,"code"),k=X(d,"data");g&&("ok"==g?W(d,k):("error"==g&&"no machine state"!=k?
|
||||
(this.G("Error: "+k),"unable to verify user"==k&&(la("user",""),this.f=null)):this.L(g+": "+k),Bb(d),W(d)?(c=Db(d),f=!0):c=!1))}f&&Jb(this,c?d:null)}else 2==a&&d.clear()}else Jb(this);delete this.u;delete this.v}f=D(this.id);for(g=0;g<f.length;g++)k=f[g],k!==this&&k!=this.a&&(c=Lb(this,k,d,b,c));b=[d,a,c];-1!=a?Ib(this,this.Oa,b):this.Oa(b)}};
|
||||
function Lb(a,b,c,d,f){if(!b.c.F){b.c.F=!0;if(b.V){var g=null;f&&((g=X(c,b.id))||(g=X(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.V(g,d)&&g&&(u("Unable to restore state for "+b.type),a.w&&!a.D?(c.clear(),a.b=Y,window&&window.location.reload()):a.C=!0,b.V(null),f=!1)}if(!d&&b.Ka)for(a=b.Ka.split("|"),c=0;c<a.length;c++)b.status(a[c])}return f}
|
||||
e.Oa=function(a){var b=a[0],c=0>a[1];a=a[2];this.c.F=!0;var d=this.i.power;d&&(d.textContent="Shutdown");this.B||(this.L("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.B=!0);this.a&&(Lb(this,this.a,b,c,a),eb(this.a));this.C&&(Kb(this,b),b.clear());!c&&this.j&&(this.j.clear(),delete this.j);this.g=0};
|
||||
function Kb(a,b){if(ha("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.J,d=a.f||"",f=b.toString(),g={app:"PC8080"};g.ver=Z;g.url=c;g.user=d;g.type="bug";g.data=f;q("http://www.pcjs.org/api/v1/report",g,!0)}}
|
||||
function Mb(a,b,c){var d,f="none";if(a.g)return null;a.g--;var g=new L(a,Z),k=new L(a,Z,"validate"),h=ga();M(k,"timestamp",h);M(g,"timestamp",h);M(g,"version","1.21.7");M(g,"url",window?window.location.href:null);M(g,"browser",window?window.navigator.userAgent:"");a.a&&a.a.U&&(c&&K(a.a),d=a.a.U(b,c),"object"===typeof d&&M(g,a.a.id,d),c&&(a.a.c.F=!1,!1===d&&(f=null)));for(var h=D(a.id),l=0;l<h.length;l++){var m=h[l];m.c.F&&(m.U&&(d=m.U(b,c),"object"===typeof d&&M(g,m.id,d)),c&&(m.c.F=!1,!1===d&&(f=
|
||||
null)))}f&&(c?(h=d=!1,b?(a.f&&Nb(a,a.f,g.toString()),Cb(k)&&Cb(g)||(f=null,d=h=!0)):a.b&&(d=!0,h=3==a.b),d&&g.clear(h)):f=g.toString());c&&(a.c.F=!1,b=a.i.power)&&(b.textContent="Power");a.g=0;return f}e.reset=function(){this.o&&this.o.reset&&this.o.reset();for(var a=D(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.o&&c.reset&&c.reset()}};e.start=function(a,b){for(var c=D(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.start&&f.start(a,b)}};
|
||||
e.stop=function(a,b){for(var c=D(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.stop&&f.stop(a,b)}};
|
||||
e.M=function(a,b,c){var d=this;switch(b){case "power":return this.i[b]=c,c.onclick=function(){d.g||(d.c.B?Jb(d,!1,!0):Fb(d,d.ra))},!0;case "reset":return this.i[b]=c,c.onclick=function(){if(d.c.B&&!d.g)if(d.b&&!d.s){var a=ha("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Jb(d,a,!0);!a&&d.w?window&&window.location.reload():d.ra(Y)}else d.reset(),d.a&&bb(d.a)},!0;case "save":if(da(t(),"pcjs.org")){c.parentNode.removeChild(c);break}this.i[b]=
|
||||
c;c.onclick=function(){var a=Db(d,!0);if(a){var b=!!(d.b&&!d.s||d.w),c=Jb(d,b);b?Kb(d,a,c):d.C("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function Db(a,b){var c=a.f;c||(c=ka("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=Lb(a,c))||a.C("The user ID is invalid."))):b&&a.C("Browser local storage is not available"));return c}
|
||||
function Lb(a,b){a.f=null;var c=q(t()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(la("user",c.data),a.f=c.data)}catch(f){u(f.message+" ("+d+")")}return a.f}function Eb(a){var b=null;a.f&&(b=t()+"/api/v1/user?req=load&user="+a.f+"&state="+xb(a,Z));return b}
|
||||
function Kb(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=xb(a,Z);d.data=c;b=q(t()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var f=d.indexOf("\n");0<f&&(d=d.substr(0,f));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.C("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.C(c),la("user",""),a.f=null)}}
|
||||
function Ea(a,b,c){a=D(a.id);for(var d=0;d<a.length;d++){var f=a[d];if(c)c==f&&(c=null);else if(f.type==b)return f}return null}e.$=function(a){this.a&&this.a.$(a);this.h&&this.h.$(a)};w(function(){for(var a=H(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=F(c),c=H(c,"pc8080","computer"),f=0;f<c.length;f++){var g=c[f],k=F(g),k=new Bb(k,d,!0);G(k,g);k.A&&Fb(k,k.ra)}});
|
||||
v.show.push(function(){for(var a=H(document,"pc8080","computer"),b=0;b<a.length;b++){var c=F(a[b]);(c=E("Computer",c.id))&&c.F&&!c.c.B&&c.ra(-1)}});v.exit.push(function(){for(var a=H(document,"pc8080","computer"),b=0;b<a.length;b++){var c=F(a[b]);(c=E("Computer",c.id))&&c.c.B&&Jb(c,!(!c.b||c.s),!0)}});var Mb=0;function Nb(a,b,c,d,f,g){f("Loading "+a+"...");q(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),g(h,null)):Ob(h,a,b,c,d,f,g)})}
|
||||
function Ob(a,b,c,d,f,g,k){function h(a,g){if(g)k(g,null);else{if(c){za(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?f?Pb(a,g,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function Pb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");q(f,null,!0,function(g,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,A=/( [a-z]+=)(['"])(.*?)\2/g;m=A.exec(g);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+f);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);Pb(a,b,c)}})}else c(a,null)}
|
||||
function Qb(a,b,c,d){function f(a){if(void 0===h){var b=k&&H(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=fa(a))}function g(a){f("Error: "+a);l&&(--Mb||x(!0));l=!1}var k,h,l=!0;Mb++;C[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var A=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));A.appendChild(r)}c||(c=
|
||||
"/versions/pc8080/1.21.7/components.xsl");m=function(d,h){h?Nb(c,null,null,!1,f,function(d,m){if(m)if(za(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(m);l?(k.outerHTML=l,--Mb||x(!0)):g("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(m),(l=l.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(l,k),--Mb||x(!0)):g("invalid machine element: "+
|
||||
a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g(d)}):g(d)};"<"!=b.charAt(0)?Nb(b,a,d,!0,f,m):Ob(b,null,a,d,!1,f,m)}else g("missing machine element: "+a)}catch(va){g(va.message)}return l}window.embedPC8080=function(a,b,c,d){x(!1);return Qb(a,b,c,d)};window.enableEvents=x;window.sendEvent=ra;
|
||||
function Rb(a,b,c,d){if(!c&&b){d.push(b);a=C[d[0]];b=null;for(var f in a)if(da(f,"components.xsl")){b=f.replace(".xsl",".css");break}b?q(b,null,!0,function(a,b){Sb(b,d)}):Sb(null,d)}else u("Error ("+c+") requesting "+a)}
|
||||
function Sb(a,b){var c,d,f,g=b[0],k=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=C[g],l={},m;for(m in h){var A=h[m],r=ca(m);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(h[m]);){var va=d[2];va&&(h[va]||(A=A.replace(d[0],"")))}d=m=ba(m)}else"xsl"==r&&(f=m=ba(m));l[m]=A}a&&(l[m="css"]=a);b[2]&&(l[m="parms"]=b[2]);b[3]&&(l[m="state"]=b[3]);d&&f?(m=JSON.stringify(l),k+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
e.M=function(a,b,c){var d=this;switch(b){case "power":return this.i[b]=c,c.onclick=function(){d.g||(d.c.F?Mb(d,!1,!0):Ib(d,d.ta))},!0;case "reset":return this.i[b]=c,c.onclick=function(){if(d.c.F&&!d.g)if(d.b&&!d.s){var a=ha("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Mb(d,a,!0);!a&&d.w?window&&window.location.reload():d.ta(Y)}else d.reset(),d.a&&eb(d.a)},!0;case "save":if(da(t(),"pcjs.org")){c.parentNode.removeChild(c);break}this.i[b]=
|
||||
c;c.onclick=function(){var a=Gb(d,!0);if(a){var b=!!(d.b&&!d.s||d.w),c=Mb(d,b);b?Nb(d,a,c):d.G("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function Gb(a,b){var c=a.f;c||(c=ka("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=Ob(a,c))||a.G("The user ID is invalid."))):b&&a.G("Browser local storage is not available"));return c}
|
||||
function Ob(a,b){a.f=null;var c=q(t()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(la("user",c.data),a.f=c.data)}catch(f){u(f.message+" ("+d+")")}return a.f}function Hb(a){var b=null;a.f&&(b=t()+"/api/v1/user?req=load&user="+a.f+"&state="+Ab(a,Z));return b}
|
||||
function Nb(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Ab(a,Z);d.data=c;b=q(t()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var f=d.indexOf("\n");0<f&&(d=d.substr(0,f));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.G("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.G(c),la("user",""),a.f=null)}}
|
||||
function Fa(a,b,c){a=D(a.id);for(var d=0;d<a.length;d++){var f=a[d];if(c)c==f&&(c=null);else if(f.type==b)return f}return null}e.$=function(a){this.a&&this.a.$(a);this.h&&this.h.$(a)};w(function(){for(var a=H(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=F(c),c=H(c,"pc8080","computer"),f=0;f<c.length;f++){var g=c[f],k=F(g),k=new Eb(k,d,!0);G(k,g);k.A&&Ib(k,k.ta)}});
|
||||
v.show.push(function(){for(var a=H(document,"pc8080","computer"),b=0;b<a.length;b++){var c=F(a[b]);(c=E("Computer",c.id))&&c.B&&!c.c.F&&c.ta(-1)}});v.exit.push(function(){for(var a=H(document,"pc8080","computer"),b=0;b<a.length;b++){var c=F(a[b]);(c=E("Computer",c.id))&&c.c.F&&Mb(c,!(!c.b||c.s),!0)}});var Pb=0;function Qb(a,b,c,d,f,g){f("Loading "+a+"...");q(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),g(h,null)):Rb(h,a,b,c,d,f,g)})}
|
||||
function Rb(a,b,c,d,f,g,k){function h(a,g){if(g)k(g,null);else{if(c){za(c,b,a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?f?Sb(a,g,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
||||
function Sb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");q(f,null,!0,function(g,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,A=/( [a-z]+=)(['"])(.*?)\2/g;m=A.exec(g);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+f);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],k);Sb(a,b,c)}})}else c(a,null)}
|
||||
function Tb(a,b,c,d){function f(a){if(void 0===h){var b=k&&H(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=fa(a))}function g(a){f("Error: "+a);l&&(--Pb||x(!0));l=!1}var k,h,l=!0;Pb++;C[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var A=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));A.appendChild(r)}c||(c=
|
||||
"/versions/pc8080/1.21.7/components.xsl");m=function(d,h){h?Qb(c,null,null,!1,f,function(d,m){if(m)if(za(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(m);l?(k.outerHTML=l,--Pb||x(!0)):g("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(m),(l=l.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(l,k),--Pb||x(!0)):g("invalid machine element: "+
|
||||
a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g(d)}):g(d)};"<"!=b.charAt(0)?Qb(b,a,d,!0,f,m):Rb(b,null,a,d,!1,f,m)}else g("missing machine element: "+a)}catch(ya){g(ya.message)}return l}window.embedPC8080=function(a,b,c,d){x(!1);return Tb(a,b,c,d)};window.enableEvents=x;window.sendEvent=ra;
|
||||
function Ub(a,b,c,d){if(!c&&b){d.push(b);a=C[d[0]];b=null;for(var f in a)if(da(f,"components.xsl")){b=f.replace(".xsl",".css");break}b?q(b,null,!0,function(a,b){Vb(b,d)}):Vb(null,d)}else u("Error ("+c+") requesting "+a)}
|
||||
function Vb(a,b){var c,d,f,g=b[0],k=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=C[g],l={},m;for(m in h){var A=h[m],r=ca(m);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(h[m]);){var ya=d[2];ya&&(h[ya]||(A=A.replace(d[0],"")))}d=m=ba(m)}else"xsl"==r&&(f=m=ba(m));l[m]=A}a&&(l[m="css"]=a);b[2]&&(l[m="parms"]=b[2]);b[3]&&(l[m="state"]=b[3]);d&&f?(m=JSON.stringify(l),k+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),m=k,h=null,l="data:application/javascript,",l=ma("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),m&&(h=document.createElement("a"),"string"!=typeof h.download&&(h=null)),h?(h.href=l,h.download=m,document.body.appendChild(h),h.click(),document.body.removeChild(h),c="Check your Downloads folder for "+m+"."):(window.open(l),c="Check your browser for a new window/tab containing the requested data"+(m?" ("+m+")":"")+"."),c+=', copy it to your web server as "'+k+'", and then add the following to your web page:\n\n',
|
||||
c+='<div id="'+g+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+k+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+g+'","'+d+'","'+f+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",u(c)):u("Missing XML/XSL resources")}
|
||||
window.savePC=function(a,b,c){var d=E("Computer",a),f=E("Debugger",a);if(d){var g=Jb(d,!0),k=d.m?JSON.stringify(d.m):null;b||(b="/versions/pcjs/1.21.7/pc"+(f?"-dbg":"")+".js");if(c&&c({state:g,Wa:k}))return!0;q(b,null,!0,function(c,d,f){Rb(c,d,f,[a,ba(b,!0),k,g])});return!0}u("Unable to identify machine '"+a+"'");return!1};})();
|
||||
window.savePC=function(a,b,c){var d=E("Computer",a),f=E("Debugger",a);if(d){var g=Mb(d,!0),k=d.m?JSON.stringify(d.m):null;b||(b="/versions/pcjs/1.21.7/pc"+(f?"-dbg":"")+".js");if(c&&c({state:g,Wa:k}))return!0;q(b,null,!0,function(c,d,f){Ub(c,d,f,[a,ba(b,!0),k,g])});return!0}u("Unable to identify machine '"+a+"'");return!1};})();
|
||||
|
|
|
|||
Loading…
Reference in a new issue