190 lines
79 KiB
JavaScript
190 lines
79 KiB
JavaScript
(function(){var m;function aa(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 p(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 r(a){return"0x"+p(a,4)}function ba(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 ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
|
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&","<":"<",">":">",'"':""","'":"'"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}function ga(a,b){return(a+" ").slice(0,b)}function ha(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
|
function ia(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 h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var ja=Date.now||function(){return+new Date};function ka(){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 la(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 ma(a,b,c,d){var e=0,f=null,h=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)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
|
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function na(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
|
function ua(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function va(a){var b=!1;window&&(b=window.confirm(a));return b}var wa=null;function xa(){if(null==wa){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}wa=a}return wa}
|
|
function ya(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function za(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Aa(a){if(window){var b=ua();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 Ca(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
|
function Da(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 Ea={init:[],show:[],exit:[]},Fa=!1,Ka=!0;function La(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ma(a){Ea.init.push(a)}
|
|
function Na(a){if(Ka)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Oa(a){!Ka&&a?(Ka=!0,Fa&&Pa("init")):Ka=a}function Pa(a){Ea[a]&&Na(Ea[a])}La("onload",function(){Fa=!0;Na(Ea.init)});La("onpageshow",function(){Na(Ea.show)});La(Aa("Opera")||Aa("iOS")?"onunload":"onbeforeunload",function(){Na(Ea.exit)});
|
|
function u(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.xb=b.comment;this.Mb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Bb=this.id.substr(0,b),this.Ya=this.id.substr(b+1)):this.Ya=this.id;this[a]=c;this.s={La:!1,Ia:!1,pb:!1,da:!1,Ka:!1};this.mb=null;this.s.Ka=!1;this.N={};this.C=null;this.ga=d||0;w.push(this)}var Qa=void 0,Ra={};
|
|
if(window){Qa||(Qa=window.location.search.substr(1));for(var Sa,Ta=/\+/g,Ua=/([^&=]+)=?([^&]*)/g;Sa=Ua.exec(Qa);)Ra[decodeURIComponent(Sa[1].replace(Ta," "))]=decodeURIComponent(Sa[2].replace(Ta," "))}function Va(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 x(a,b){b||(b=u);a.prototype=Va(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var w=[],Wa={};function $a(a,b,c){Wa[a]&&b&&(Wa[a][b]=c)}function cb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<w.length;b++){var d=w[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
|
function db(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<w.length;d++)if(c)c==w[d]&&(c=null);else if(!(a!=w[d].type||b&&w[d].id.indexOf(b)))return w[d]}return null}function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
|
|
function eb(a,b){for(var c=z(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.la(g.type,g.binding,h,g.value),l=k.length}}}}
|
|
function z(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}
|
|
u.prototype={constructor:u,parent:null,toString:function(){return this.name?this.name:this.id||this.type},la:function(a,b,c){switch(b){case "clear":return this.N[b]||(this.N[b]=c,c.onclick=function(a){return function(){a.N.print&&(a.N.print.value="")}}(this)),!0;case "print":return this.N[b]||(this.Ba=this.N[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.ka=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Ya+": "+a)},ka:function(a,b){b||t(a)},va:function(){return this.s.da=!0},ua:function(a,b){b&&(this.s.da=!1);return!0}};function fb(a,b){if(a.C){a===a.C?b|=0:b=b||a.ga;var c=a.C.ga&b;return!!b&&c===b||!!(c&a.C.Tb)}return!1}function gb(a,b){if(a.s.pb)return a.s.Ia&&(a.s.Ia=!1),a.s.pb=!1;if(a.s.Ka)return a.g(a.toString()+" error"),!1;a.s.Ia=b;return a.s.Ia}
|
|
function hb(a,b){a.s.Ia&&(b?a.s.pb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.s.Ia}function A(a){if(!a.s.Ka&&(a.s.La=!0,a.s.La)){var b=a.mb;a.mb=null;b&&b()}}function ib(a,b){b&&(a.s.La?b():a.mb=b);return a.s.La}function jb(a,b){a.s.Ka=!0;a.ka(b)}
|
|
var kb="undefined"!==typeof ArrayBuffer,lb=[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 mb(a){u.call(this,"Panel",a,mb)}x(mb);m=mb.prototype;m.la=function(a,b,c,d){return this.u&&this.u.la(a,b,c,d)||this.b&&this.b.la(a,b,c,d)||this.A&&this.A.la(a,b,c,d)||this.C&&this.C.la(a,b,c,d)?!0:this.parent.la.call(this,a,b,c,d)};m.Ma=function(a,b,c,d){this.u=a;this.B=b;this.b=c;this.C=d;this.A=nb(a,"Keyboard")};m.va=function(a,b){b||ob();return!0};m.ua=function(){return!0};m.ma=function(){};
|
|
function ob(){for(var a=!1,b=z(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=y(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<w.length;h++)if(w[h].id===f){f=w[h];break a}f=null}f||(a=!0,f=new mb(e));eb(f,d);a&&A(f)}}Ma(ob);
|
|
function pb(a,b,c){u.call(this,"Bus",a,pb);this.b=b;this.C=c;this.U=a.buswidth||16;this.W=Math.pow(2,this.U);this.A=this.W-1|0;this.X=20>=this.U?12:24>=this.U?14:15;this.ha=1<<this.X;this.Y=this.ha>>2;this.u=this.ha-1;this.S=this.W/this.ha|0;this.V=this.S-1;this.F=[];this.G=[];this.H=this.M=!1;this.aa=[];this.ea=[];a=new C;qb(a,this.C);this.B=Array(this.S);for(b=0;b<this.S;b++)this.B[b]=a;a=this.b;b=this.B;c=this.X;var d=this.A;a.ja=b;a.X=c;a.ha=1<<a.X;a.G=a.ha-1;a.Y=b.length;a.W=a.Y-1;a.U=d;A(this)}
|
|
x(pb);pb.prototype.reset=function(){};pb.prototype.va=function(a,b){b||this.reset();return!0};function rb(a,b,c,d){for(var e=b>>>a.X;0<c&&e<a.B.length;){var f=a.B[e],h=e*a.ha,g=c>a.ha?a.ha:c;if(f&&f.size){if(f.type==d){if(b+c<=f.w)return f.ib+=f.w-b,f.w=b,!0;if(b>=f.w+f.ib){g=f.size-(b-h);g>c&&(g=c);f.ib=b-f.w+g;c-=g;b=h+a.ha;continue}}return sb(1,b,c)}f=a.B[e];b=new C(b,g,a.ha,d);qb(b,a.C,f);a.B[e++]=b;b=h+a.ha;c-=g}return 0>=c?!0:sb(2,b,c)}
|
|
function tb(a,b){return a.B[(b&a.A)>>>a.X].gb(b&a.u,b)}function Cb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.F[b]&&(a.F[b]=[null,!1]);a.F[b][1]=!a.F[b][1];return a.F[b][1]}function Db(a,b){for(var c=1,d=0,e=0;0<c;){var f=a.F[b],h=a.aa[b]||1,g=1==h?255:2==h?65535:-1,k=g;void 0!==f?(f[0]&&(k=f[0](b,void 0),void 0===k?k=g:k&=g),a.C&&a.H!=f[1]&&Eb(a.C,b,k)):a.C&&(Fb(a.C,a,b,null),a.H&&Eb(a.C,b,k));d|=k<<e;e+=h<<3;b+=h;c-=h}return d}
|
|
function Gb(a,b){if(void 0===b)return a.M=!a.M,a.M;void 0===a.G[b]&&(a.G[b]=[null,!1]);a.G[b][1]=!a.G[b][1];return a.G[b][1]}function Hb(a,b,c){for(var d=1,e=0;0<d;){var f=a.G[b],h=a.ea[b]||1,g=1==h?255:2==h?65535:-1,g=(c>>>=e)&g;if(void 0!==f){if(f[0])f[0](b,g,void 0);a.C&&a.M!=f[1]&&Ib(a.C,b,g)}else a.C&&(Fb(a.C,a,b,g),a.M&&Ib(a.C,b,g));e+=h<<3;b+=h;d-=h}}function sb(a,b,c){t("Memory block error ("+a+": "+p(b)+","+p(c)+")");return!1}var Jb;
|
|
if(kb){var Kb=new ArrayBuffer(2);(new DataView(Kb)).setUint16(0,256,!0);Jb=256===(new Uint16Array(Kb))[0]}else Jb=!1;var Lb=Jb;
|
|
function C(a,b,c,d){this.id=Mb+=2;this.b=null;this.w=a;this.ib=b;this.size=c||0;this.type=d||Nb;this.N=d==Ob;qb(this);this.xa=this.Wb=!1;if(c)if(kb)this.G=new ArrayBuffer(c),this.H=new DataView(this.G,0,c),this.B=new Uint8Array(this.G,0,c),this.S=new Uint16Array(this.G,0,c>>1),this.b=new Int32Array(this.G,0,c>>2),Pb(this,Lb?Qb:Rb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Pb(this,Sb)}else Pb(this)}var Nb=0,Ob=2,Tb=["NONE","RAM","ROM","VIDEO","H/W"],Mb=0;
|
|
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(kb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.H.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(kb)for(b=0;b<a.length;b++)this.H.setInt32(b<<2,a[b],!0);else this.b=a;return this.xa=!0}return!1},Aa:function(a,b){b?0===this.A++&&Ub(this,Vb,!1):0===this.u++&&Wb(this,Vb,!1)},U:function(){this.C&&fb(this.C,129)&&this.C.message("attempt to read invalid block %"+p(this.w),!0);
|
|
return 255},F:function(a,b){this.C&&fb(this.C,129)&&this.C.message("attempt to write "+r(b)+" to invalid block %"+p(this.w),!0)},V:function(a,b){return this.Ta(a++,b++)|this.Ta(a,b)<<8},M:function(a,b,c){this.Va(a++,b&255,c++);this.Va(a,b>>8,c)},ea:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},qa: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.xa=!0},kb: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.xa=!0},Y:function(a,b){if(this.C&&null!=this.w){var c=this.C;Xb(c,this.w+a,1,c.Y)&&c.ca(!0)}return this.gb(a,b)},na:function(a,b){if(this.C&&null!=this.w){var c=this.C;Xb(c,this.w+a,2,c.Y)&&c.ca(!0)}return this.ub(a,b)},ya:function(a,b,c){if(this.C&&null!=this.w){var d=this.C;Xb(d,this.w+a,1,d.H)&&d.ca(!0)}this.N?this.F(a,b,c):this.Wa(a,b,c)},Ya:function(a,
|
|
b,c){if(this.C&&null!=this.w){var d=this.C;Xb(d,this.w+a,2,d.H)&&d.ca(!0)}this.N?this.F(a,b,c):this.vb(a,b,c)},W:function(a){return this.B[a]},aa:function(a){return this.B[a]},ia:function(a){return this.H.getUint16(a,!0)},pa:function(a){return a&1?this.B[a]|this.B[a+1]<<8:this.S[a>>1]},sa:function(a,b){this.B[a]=b;this.xa=!0},za:function(a,b){this.B[a]=b;this.xa=!0},Xa:function(a,b){this.H.setUint16(a,b,!0);this.xa=!0},Za:function(a,b){a&1?(this.B[a]=b,this.B[a+1]=b>>8):this.S[a>>1]=b;this.xa=!0}};
|
|
function qb(a,b,c){a.C=b;a.u=a.A=0;c&&((a.u=c.u)&&Wb(a,Vb,!1),(a.A=c.A)&&Ub(a,Vb,!1))}function Yb(a,b){b?0===--a.A&&(a.Va=a.N?a.F:a.Wa,a.Qb=a.N?a.M:a.vb):0===--a.u&&(a.Ta=a.gb,a.Nb=a.ub)}function Ub(a,b,c){c&&a.A||(a.Va=!a.N&&b[2]||a.F,a.Qb=!a.N&&b[3]||a.M);if(c||void 0===c)a.Wa=b[2]||a.F,a.vb=b[3]||a.M}function Wb(a,b,c){c&&a.u||(a.Ta=b[0]||a.U,a.Nb=b[1]||a.V);if(c||void 0===c)a.gb=b[0]||a.U,a.ub=b[1]||a.V}function Pb(a,b){b||(b=hc);Wb(a,b,void 0);Ub(a,b,void 0)}
|
|
var hc=[],Sb=[C.prototype.ea,C.prototype.qa,C.prototype.Ha,C.prototype.kb],Vb=[C.prototype.Y,C.prototype.na,C.prototype.ya,C.prototype.Ya];if(kb)var Rb=[C.prototype.W,C.prototype.ia,C.prototype.sa,C.prototype.Xa],Qb=[C.prototype.aa,C.prototype.pa,C.prototype.za,C.prototype.Za];
|
|
function ic(a,b){u.call(this,"CPU",a,ic,1);var c=a.cycles||b,d=a.multiplier||1;this.j={};this.j.Sa=c;this.j.Fa=d;this.j.rb=Math.round(this.j.Sa/1E4)/100;this.j.Da=this.j.rb*this.j.Fa;this.s.fa=!1;this.s.qb=!1;this.s.Fb=a.autoStart;this.s.Gb=!1;this.s.Ja=!1;this.j.$a=this.j.Pa=0;this.j.ab=a.csStart;this.j.Oa=a.csInterval;this.j.Qa=a.csStop;this.ia=this.Ga.bind(this);A(this)}x(ic);var jc=["power","reset"];m=ic.prototype;
|
|
m.Ma=function(a,b,c,d){this.u=a;this.B=b;this.C=d;for(b=0;b<jc.length;b++)(c=this.N[jc[b]])&&this.u.la(null,jc[b],c);nb(a,"FPU");this.A=nb(a,"ChipSet");a=kc(a,"autoStart");null!=a&&(this.s.Fb="true"==a?!0:"false"==a?!1:!!a);A(this)};m.reset=function(){};m.save=function(){return null};m.restore=function(){return!1};
|
|
m.va=function(a,b){if(!b){if(a&&this.restore){lc(this);if(!this.restore(a))return!1;mc(this)}else this.reset();if(this.C){var c=this.C;c.g("Type ? for help with PC8080 Debugger commands");c.ma();if(c.Za){var d=c.Za;c.Za=null;nc(c,d)}}else this.g("No debugger detected")}D(this);return!0};m.ua=function(a){return a?this.save():!0};function oc(a){(a.s.Fb||!a.C&&void 0===a.N.run)&&a.Ga(!0)}m.Hb=function(){return 0};
|
|
function mc(a){void 0===a.j.ab&&(a.j.ab=0);void 0===a.j.Oa&&(a.j.Oa=-1);void 0===a.j.Qa&&(a.j.Qa=-1);a.s.Ja=0<=a.j.ab&&0<a.j.Oa;a.s.Ja&&(a.j.$a=0,a.j.Pa=a.j.ab-a.M)}function pc(a,b){if(a.s.Ja){var c=!1;a.j.$a=a.j.$a+a.Hb()|0;a.j.Pa-=b;0>=a.j.Pa&&(a.j.Pa+=a.j.Oa,c=!0);0<=a.j.Qa&&a.j.Qa<=qc(a)&&(a.j.Oa=a.j.Qa=-1,mc(a),a.ca(),c=!0);c&&a.g(qc(a)+" cycles: checksum="+p(a.j.$a))}}
|
|
m.la=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.N[b]=c;a=!0;break;case "run":this.N[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.s.da)a=!0;else{var b=null,c,g=cb(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.s.La);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.s.da);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.s.La?"powered yet":"ready yet"+(b.mb?" (waiting for notification)":""))+".");a=!1}a&&(d.s.fa?d.ca(!0):d.Ga(!0))};a=
|
|
!0;break;case "speed":this.N[b]=c;a=!0;break;case "setSpeed":this.N[b]=c,c.onclick=function(){rc(d,d.j.Fa<<1,!0)},c.textContent=this.j.Da.toFixed(2)+"Mhz",a=!0}return a};function sc(a,b,c){a.M+=b;c&&(a.F=a.b=0)}
|
|
function tc(a,b){var c=30;60>c&&(c=60);2>c&&(c=2);var d=1;b&&1<a.j.Fa&&a.j.Ca&&(d=a.j.Ca/a.j.rb);a.j.Jb=Math.round(1E3/30);a.j.$b=Math.floor(a.j.Sa/c*d);a.j.sb=Math.floor(a.j.Sa/30*d);a.j.Lb=Math.floor(a.j.Sa/60*d);a.j.Kb=Math.floor(a.j.Sa/2*d);b||(a.j.Ra=a.j.sb,a.j.cb=a.j.Lb,a.j.bb=a.j.Kb);a.j.tb=0}function qc(a){return a.M+a.H+a.F-a.b}function lc(a){a.j.Ca=0;a.M=a.H=a.F=a.b=0;mc(a);rc(a,1)}
|
|
function rc(a,b,c){var d=!1;if(void 0!==b){.8>a.j.Ca/a.j.Da?b=1:d=!0;a.j.Fa=b;b=a.j.rb*a.j.Fa;if(a.j.Da!=b){a.j.Da=b;b=a.j.Da.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.u&&a.u.hb()}sc(a,a.H);a.H=0;a.j.Na=ja();a.j.Ea=0;tc(a);return d}
|
|
m.Ga=function(a){if(gb(this,!0)){if(!this.s.fa){rc(this);this.u&&this.u.start(this.j.Na,qc(this));this.s.fa=!0;this.s.qb=!0;this.A&&this.A.ac();var b=this.N.run;b&&(b.textContent="Halt");this.u&&(this.u.ma(!0),a&&this.u.hb(!0))}this.j.tb>=this.j.Sa&&tc(this,!0);this.j.eb=0;this.j.nb=ja();this.j.Ea&&(a=this.j.nb-this.j.Ea,a>this.j.Jb&&(this.j.Na+=a,this.j.Na>this.j.nb&&(this.j.Na=this.j.nb)));try{do{var c=this.s.Ja?1:this.j.$b;this.A&&(this.A.Pb(),c=this.A.cc(0,c),c=this.A.bc(c));try{this.Ua(c)}catch(e){if("number"!=
|
|
typeof e)throw e;}var d=this.F-this.b;this.H+=d;this.j.eb+=d;sc(this,0,!0);pc(this,d);this.j.cb-=d;0>=this.j.cb&&(this.j.cb+=this.j.Lb);this.j.bb-=d;0>=this.j.bb&&(this.j.bb+=this.j.Kb,this.u&&this.u.ma());this.j.Ra-=d;if(0>=this.j.Ra){this.j.Ra+=this.j.sb;break}}while(this.s.fa)}catch(e){this.ca();D(this);this.u&&this.u.stop(ja(),qc(this));gb(this,!1);jb(this,e.stack||e.message);return}c=setTimeout;d=this.ia;this.j.Ea=ja();a=this.j.Jb;this.j.eb&&(a=Math.round(a*this.j.eb/this.j.sb));a-=this.j.Ea-
|
|
this.j.nb;if(b=this.j.Ea-this.j.Na)this.j.Ca=Math.round(this.H/(10*b))/100,864E5<=b&&(this.M=0,this.A&&this.A.Pb(!0),rc(this));if(0>a||this.j.Ca<this.j.Da)a=0;this.j.tb+=this.j.eb;this.j.Ea+=a;c(d,a)}else D(this),this.u&&this.u.stop(ja(),qc(this))};m.Ua=function(){return 0};m.ca=function(a){hb(this,!0);this.F-=this.b;this.b=0;sc(this,this.H);this.H=0;if(this.s.fa){this.s.fa=!1;this.A&&this.A.ac();var b=this.N.run;b&&(b.textContent="Run")}this.s.lb=a};function D(a,b){a.u&&a.u.ma(b)}
|
|
function uc(a){this.Ib=a.model||8080;ic.call(this,a,1E6);this.ea=vc;lc(this);this.s.lb=this.s.Vb=!1;this.aa=0;this.ja=[];this.X=this.ha=this.G=this.Y=this.W=this.U=0;wc(this)}x(uc,ic);m=uc.prototype;m.reset=function(){this.s.fa&&this.ca();wc(this);lc(this);this.s.Ka=!1};function wc(a){a.i=0;a.I=0;a.O=0;a.J=0;a.P=0;a.K=0;a.R=0;a.Z=0;E(a,0);xc(a,0);a.S=0}m.Hb=function(){var a=this.i+this.I+this.O+this.J+this.P+this.K+this.R|0;return a=a+this.Z+this.L+yc(this)|0};
|
|
m.save=function(){var a=new G(this);I(a,0,[this.i,this.I,this.O,this.J,this.P,this.K,this.R,this.Z,this.L,yc(this)]);I(a,1,[this.V,this.S,this.M,this.j.Fa]);for(var b=this.B,c=0,d=[],e=0;e<b.S;e++){var f=b.B[e];if(f.xa||f.Wb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var n=f[g],q=g+1;q<f.length&&f[q]===n;)q++;l[k++]=q-g;l[k++]=n;g=q}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
|
|
m.restore=function(a){var b=a[0];this.i=b[0];this.I=b[1];this.O=b[2];this.J=b[3];this.P=b[4];this.K=b[5];this.R=b[6];this.Z=b[7]&65535;E(this,b[8]);xc(this,b[9]);b=a[1];this.V=b[0];this.S=b[1];this.M=b[2];rc(this,b[3]);a:{b=this.B;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.Y){for(var f=0,h=Array(b.Y),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.B[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
|
m.la=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.N[b]=c;this.aa++;d=!0;break;default:d=this.parent.la.call(this,a,b,c)}return d};function zc(a){return a.I<<8|a.O}function Ac(a,b){a.I=b>>8&255;a.O=b&255}function Bc(a){return a.J<<8|a.P}function Cc(a,b){a.J=b>>8&255;a.P=b&255}function J(a){return a.K<<8|a.R}function L(a,b){a.K=b>>8&255;a.R=b&255}
|
|
function E(a,b){a.L=b&65535}function M(a){return a.D&256?1:0}function N(a){return lb[a.T&255]?4:0}function Dc(a){return(a.T^a.ba)&16?16:0}function Ec(a){return a.D&255?0:64}function Fc(a){return a.T&128?128:0}function yc(a){return a.oa&-214|Fc(a)|Ec(a)|Dc(a)|N(a)|M(a)}function xc(a,b){a.D=a.T=a.ba=0;b&1&&(a.D|=256);b&4||(a.T|=1);b&16&&(a.ba|=16);b&64||(a.D|=255);b&128&&(a.T^=192);a.oa=a.oa&-513|b&512|2}function Gc(a,b){a.ba=a.i^b;return(a.D=a.T=a.i+b)&255}
|
|
function Hc(a,b){a.ba=a.i^b;return(a.D=a.T=a.i+b+(a.D&256?1:0))&255}function Ic(a,b){return a.D=a.T=a.ba=a.i&b}function bd(a,b){a.ba=a.i^b;a.D=a.T=a.i-b}function cd(a,b){a.ba=b;b=(a.T=b-1)&255;a.D=a.D&-256|b;return b}function dd(a,b){a.ba=b;b=(a.T=b+1)&255;a.D=a.D&-256|b;return b}function ed(a,b){return a.D=a.T=a.ba=a.i|b}function fd(a,b){a.ba=a.i^b;return(a.D=a.T=a.i-b)&255}function gd(a,b){a.ba=a.i^b;return(a.D=a.T=a.i-b-(a.D&256?1:0))&255}function hd(a,b){return a.D=a.T=a.ba=a.i^b}
|
|
function O(a,b){return a.ja[(b&a.U)>>>a.X].Ta(b&a.G,b)}function id(a,b){var c=b&a.G,d=(b&a.U)>>>a.X;if(c<a.G)return a.ja[d].Nb(c,b);c=a.ja[d].Ta(c,b);return c|=a.ja[d+1&a.W].Ta(0,b+1)<<8}function P(a,b,c){a.ja[(b&a.U)>>>a.X].Va(b&a.G,c&255,b)}function jd(a,b,c){var d=b&a.G,e=(b&a.U)>>>a.X;d<a.G?a.ja[e].Qb(d,c&65535,b):(a.ja[e++].Va(d,c&255,b),a.ja[e&a.W].Va(0,c>>8&255,b+1))}function Q(a){var b=O(a,a.L);E(a,a.L+1);return b}function T(a){var b=id(a,a.L);E(a,a.L+2);return b}
|
|
function U(a){var b=id(a,a.Z);a.Z=a.Z+2&65535;return b}function V(a,b){a.Z=a.Z-2&65535;jd(a,a.Z,b)}function W(a,b,c,d){d=d||2;a.N[b]&&(void 0===c&&(jb(a,"Value for "+b+" is invalid"),a.ca()),c=!a.s.fa||a.s.Gb?p(c,d):"--------".substr(0,d),a.N[b].textContent!=c&&(a.N[b].textContent=c))}
|
|
m.ma=function(a){this.aa&&(a||!this.s.fa||this.s.Gb)&&(W(this,"A",this.i),W(this,"B",this.I),W(this,"C",this.O),W(this,"D",this.J),W(this,"E",this.P),W(this,"H",this.K),W(this,"L",this.R),W(this,"SP",this.Z,4),W(this,"PC",this.L,4),a=yc(this),W(this,"F",a,2),W(this,"SF",a&128,1),W(this,"ZF",a&64,1),W(this,"AF",a&16,1),W(this,"PF",a&4,1),W(this,"CF",a&1,1));if(a=this.N.speed)a.textContent=this.s.fa&&this.j.Ca?this.j.Ca.toFixed(2)+"Mhz":"Stopped"};
|
|
m.Ua=function(a){this.s.lb=!0;var b=this.s.Vb=this.C&&kd(this.C),c=a?this.s.qb?0:1:-1;this.s.qb=!1;this.F=this.b=a;this.A&&!a&&this.A.Pb();a||(this.V|=4);do{if(this.S&&this.S&4){this.V=this.b=0;break}if(b){if(ld(this.C,this.L,c)){this.ca();break}c=1}this.V=0;this.ea[Q(this)].call(this)}while(0<this.b);return this.s.lb?this.F-this.b:void 0===this.s.lb?0:-1};Ma(function(){for(var a=z(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new uc(d);eb(d,c)}});function md(){this.b-=4}
|
|
function nd(){E(this,T(this));this.b-=10}function od(){E(this,U(this));this.b-=10}function pd(){var a=T(this);V(this,this.L);E(this,a);this.b-=17}
|
|
var vc=[md,function(){Ac(this,T(this));this.b-=10},function(){P(this,zc(this),this.i);this.b-=7},function(){Ac(this,zc(this)+1);this.b-=5},function(){this.I=dd(this,this.I);this.b-=5},function(){this.I=cd(this,this.I);this.b-=5},function(){this.I=Q(this);this.b-=7},function(){var a=this.i<<1;this.i=a&255|a>>8;this.D=this.D&255|a&256;this.b-=4},md,function(){var a;L(this,a=J(this)+zc(this));this.D=this.D&255|a>>8&256;this.b-=10},function(){this.i=O(this,zc(this));this.b-=7},function(){Ac(this,zc(this)-
|
|
1);this.b-=5},function(){this.O=dd(this,this.O);this.b-=5},function(){this.O=cd(this,this.O);this.b-=5},function(){this.O=Q(this);this.b-=7},function(){var a=this.i<<8&256;this.i=(a|this.i)>>1;this.D=this.D&255|a;this.b-=4},md,function(){Cc(this,T(this));this.b-=10},function(){P(this,Bc(this),this.i);this.b-=7},function(){Cc(this,Bc(this)+1);this.b-=5},function(){this.J=dd(this,this.J);this.b-=5},function(){this.J=cd(this,this.J);this.b-=5},function(){this.J=Q(this);this.b-=7},function(){var a=this.i<<
|
|
1;this.i=a&255|this.D>>8;this.D=this.D&255|a&256;this.b-=4},md,function(){var a;L(this,a=J(this)+Bc(this));this.D=this.D&255|a>>8&256;this.b-=10},function(){this.i=O(this,Bc(this));this.b-=7},function(){Cc(this,Bc(this)-1);this.b-=5},function(){this.P=dd(this,this.P);this.b-=5},function(){this.P=cd(this,this.P);this.b-=5},function(){this.P=Q(this);this.b-=7},function(){var a=this.i<<8&256;this.i=(this.D&256|this.i)>>1;this.D=this.D&255|a;this.b-=4},md,function(){L(this,T(this));this.b-=10},function(){jd(this,
|
|
T(this),J(this));this.b-=16},function(){L(this,J(this)+1);this.b-=5},function(){this.K=dd(this,this.K);this.b-=5},function(){this.K=cd(this,this.K);this.b-=5},function(){this.K=Q(this);this.b-=7},function(){var a=this.i,b=!!M(this),c=!!Dc(this);9<(a&15)||c?(a+=6,c=!0):c=!1;160<=a||b?(a+=96,b=!0):b=!1;this.D=this.T=this.i=a&255;this.D=b?this.D|256:this.D&-257;this.ba=c?~this.T&16|this.ba&-17:this.T&16|this.ba&-17;this.b-=4},md,function(){var a;L(this,a=J(this)+J(this));this.D=this.D&255|a>>8&256;this.b-=
|
|
10},function(){L(this,id(this,T(this)));this.b-=16},function(){L(this,J(this)-1);this.b-=5},function(){this.R=dd(this,this.R);this.b-=5},function(){this.R=cd(this,this.R);this.b-=5},function(){this.R=Q(this);this.b-=7},function(){this.i=~this.i&255;this.b-=4},md,function(){this.Z=T(this)&65535;this.b-=10},function(){P(this,T(this),this.i);this.b-=13},function(){this.Z=this.Z+1&65535;this.b-=5},function(){var a=J(this);P(this,a,dd(this,O(this,a)));this.b-=10},function(){var a=J(this);P(this,a,cd(this,
|
|
O(this,a)));this.b-=10},function(){P(this,J(this),Q(this));this.b-=10},function(){this.D|=256;this.b-=4},md,function(){var a;this.Z=(a=J(this)+this.Z)&65535;this.D=this.D&255|a>>8&256;this.b-=10},function(){this.i=O(this,T(this));this.b-=13},function(){this.Z=this.Z-1&65535;this.b-=5},function(){this.i=dd(this,this.i);this.b-=5},function(){this.i=cd(this,this.i);this.b-=5},function(){this.i=Q(this);this.b-=7},function(){this.D=M(this)?this.D&-257:this.D|256;this.b-=4},function(){this.b-=5},function(){this.I=
|
|
this.O;this.b-=5},function(){this.I=this.J;this.b-=5},function(){this.I=this.P;this.b-=5},function(){this.I=this.K;this.b-=5},function(){this.I=this.R;this.b-=5},function(){this.I=O(this,J(this));this.b-=7},function(){this.I=this.i;this.b-=5},function(){this.O=this.I;this.b-=5},function(){this.b-=5},function(){this.O=this.J;this.b-=5},function(){this.O=this.P;this.b-=5},function(){this.O=this.K;this.b-=5},function(){this.O=this.R;this.b-=5},function(){this.O=O(this,J(this));this.b-=7},function(){this.O=
|
|
this.i;this.b-=5},function(){this.J=this.I;this.b-=5},function(){this.J=this.O;this.b-=5},function(){this.b-=5},function(){this.J=this.P;this.b-=5},function(){this.J=this.K;this.b-=5},function(){this.J=this.R;this.b-=5},function(){this.J=O(this,J(this));this.b-=7},function(){this.J=this.i;this.b-=5},function(){this.P=this.I;this.b-=5},function(){this.P=this.O;this.b-=5},function(){this.P=this.J;this.b-=5},function(){this.b-=5},function(){this.P=this.K;this.b-=5},function(){this.P=this.R;this.b-=5},
|
|
function(){this.P=O(this,J(this));this.b-=7},function(){this.P=this.i;this.b-=5},function(){this.K=this.I;this.b-=5},function(){this.K=this.O;this.b-=5},function(){this.K=this.J;this.b-=5},function(){this.K=this.P;this.b-=5},function(){this.b-=5},function(){this.K=this.R;this.b-=5},function(){this.K=O(this,J(this));this.b-=7},function(){this.K=this.i;this.b-=5},function(){this.R=this.I;this.b-=5},function(){this.R=this.O;this.b-=5},function(){this.R=this.J;this.b-=5},function(){this.R=this.P;this.b-=
|
|
5},function(){this.R=this.K;this.b-=5},function(){this.b-=5},function(){this.R=O(this,J(this));this.b-=7},function(){this.R=this.i;this.b-=5},function(){P(this,J(this),this.I);this.b-=7},function(){P(this,J(this),this.O);this.b-=7},function(){P(this,J(this),this.J);this.b-=7},function(){P(this,J(this),this.P);this.b-=7},function(){P(this,J(this),this.K);this.b-=7},function(){P(this,J(this),this.R);this.b-=7},function(){this.S|=4;this.b-=7;this.C&&fb(this,-2147483648)?(E(this,this.L-1),this.C.ca()):
|
|
this.oa&512||(this.C&&E(this,this.L-1),this.ca())},function(){P(this,J(this),this.i);this.b-=7},function(){this.i=this.I;this.b-=5},function(){this.i=this.O;this.b-=5},function(){this.i=this.J;this.b-=5},function(){this.i=this.P;this.b-=5},function(){this.i=this.K;this.b-=5},function(){this.i=this.R;this.b-=5},function(){this.i=O(this,J(this));this.b-=7},function(){this.b-=5},function(){this.i=Gc(this,this.I);this.b-=4},function(){this.i=Gc(this,this.O);this.b-=4},function(){this.i=Gc(this,this.J);
|
|
this.b-=4},function(){this.i=Gc(this,this.P);this.b-=4},function(){this.i=Gc(this,this.K);this.b-=4},function(){this.i=Gc(this,this.R);this.b-=4},function(){this.i=Gc(this,O(this,J(this)));this.b-=7},function(){this.i=Gc(this,this.i);this.b-=4},function(){this.i=Hc(this,this.I);this.b-=4},function(){this.i=Hc(this,this.O);this.b-=4},function(){this.i=Hc(this,this.J);this.b-=4},function(){this.i=Hc(this,this.P);this.b-=4},function(){this.i=Hc(this,this.K);this.b-=4},function(){this.i=Hc(this,this.R);
|
|
this.b-=4},function(){this.i=Hc(this,O(this,J(this)));this.b-=7},function(){this.i=Hc(this,this.i);this.b-=4},function(){this.i=fd(this,this.I);this.b-=4},function(){this.i=fd(this,this.O);this.b-=4},function(){this.i=fd(this,this.J);this.b-=4},function(){this.i=fd(this,this.P);this.b-=4},function(){this.i=fd(this,this.K);this.b-=4},function(){this.i=fd(this,this.R);this.b-=4},function(){this.i=fd(this,O(this,J(this)));this.b-=7},function(){this.i=fd(this,this.i);this.b-=4},function(){this.i=gd(this,
|
|
this.I);this.b-=4},function(){this.i=gd(this,this.O);this.b-=4},function(){this.i=gd(this,this.J);this.b-=4},function(){this.i=gd(this,this.P);this.b-=4},function(){this.i=gd(this,this.K);this.b-=4},function(){this.i=gd(this,this.R);this.b-=4},function(){this.i=gd(this,O(this,J(this)));this.b-=7},function(){this.i=gd(this,this.i);this.b-=4},function(){this.i=Ic(this,this.I);this.b-=4},function(){this.i=Ic(this,this.O);this.b-=4},function(){this.i=Ic(this,this.J);this.b-=4},function(){this.i=Ic(this,
|
|
this.P);this.b-=4},function(){this.i=Ic(this,this.K);this.b-=4},function(){this.i=Ic(this,this.R);this.b-=4},function(){this.i=Ic(this,O(this,J(this)));this.b-=7},function(){this.i=Ic(this,this.i);this.b-=4},function(){this.i=hd(this,this.I);this.b-=4},function(){this.i=hd(this,this.O);this.b-=4},function(){this.i=hd(this,this.J);this.b-=4},function(){this.i=hd(this,this.P);this.b-=4},function(){this.i=hd(this,this.K);this.b-=4},function(){this.i=hd(this,this.R);this.b-=4},function(){this.i=hd(this,
|
|
O(this,J(this)));this.b-=7},function(){this.i=hd(this,this.i);this.b-=4},function(){this.i=ed(this,this.I);this.b-=4},function(){this.i=ed(this,this.O);this.b-=4},function(){this.i=ed(this,this.J);this.b-=4},function(){this.i=ed(this,this.P);this.b-=4},function(){this.i=ed(this,this.K);this.b-=4},function(){this.i=ed(this,this.R);this.b-=4},function(){this.i=ed(this,O(this,J(this)));this.b-=7},function(){this.i=ed(this,this.i);this.b-=4},function(){bd(this,this.I);this.b-=4},function(){bd(this,this.O);
|
|
this.b-=4},function(){bd(this,this.J);this.b-=4},function(){bd(this,this.P);this.b-=4},function(){bd(this,this.K);this.b-=4},function(){bd(this,this.R);this.b-=4},function(){bd(this,O(this,J(this)));this.b-=7},function(){bd(this,this.i);this.b-=4},function(){Ec(this)||(E(this,U(this)),this.b-=6);this.b-=5},function(){Ac(this,U(this));this.b-=10},function(){var a=T(this);Ec(this)||E(this,a);this.b-=10},nd,function(){var a=T(this);Ec(this)||(V(this,this.L),E(this,a),this.b-=6);this.b-=11},function(){V(this,
|
|
zc(this));this.b-=11},function(){this.i=Gc(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,0);this.b-=11},function(){Ec(this)&&(E(this,U(this)),this.b-=6);this.b-=5},od,function(){var a=T(this);Ec(this)&&E(this,a);this.b-=10},nd,function(){var a=T(this);Ec(this)&&(V(this,this.L),E(this,a),this.b-=6);this.b-=11},pd,function(){this.i=Hc(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,8);this.b-=11},function(){M(this)||(E(this,U(this)),this.b-=6);this.b-=5},function(){Cc(this,U(this));
|
|
this.b-=10},function(){var a=T(this);M(this)||E(this,a);this.b-=10},function(){var a=Q(this);Hb(this.B,a,this.i);this.b-=10},function(){var a=T(this);M(this)||(V(this,this.L),E(this,a),this.b-=6);this.b-=11},function(){V(this,Bc(this));this.b-=11},function(){this.i=fd(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,16);this.b-=11},function(){M(this)&&(E(this,U(this)),this.b-=6);this.b-=5},od,function(){var a=T(this);M(this)&&E(this,a);this.b-=10},function(){var a=Q(this);this.i=Db(this.B,
|
|
a)&255;this.b-=10},function(){var a=T(this);M(this)&&(V(this,this.L),E(this,a),this.b-=6);this.b-=11},pd,function(){this.i=gd(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,24);this.b-=11},function(){N(this)||(E(this,U(this)),this.b-=6);this.b-=5},function(){L(this,U(this));this.b-=10},function(){var a=T(this);N(this)||E(this,a);this.b-=10},function(){var a=U(this);V(this,J(this));L(this,a);this.b-=18},function(){var a=T(this);N(this)||(V(this,this.L),E(this,a),this.b-=6);this.b-=11},function(){V(this,
|
|
J(this));this.b-=11},function(){this.i=Ic(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,32);this.b-=11},function(){N(this)&&(E(this,U(this)),this.b-=6);this.b-=5},function(){E(this,J(this));this.b-=5},function(){var a=T(this);N(this)&&E(this,a);this.b-=10},function(){var a=J(this);L(this,Bc(this));Cc(this,a);this.b-=5},function(){var a=T(this);N(this)&&(V(this,this.L),E(this,a),this.b-=6);this.b-=11},pd,function(){this.i=hd(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,40);
|
|
this.b-=11},function(){Fc(this)||(E(this,U(this)),this.b-=6);this.b-=5},function(){var a=U(this);xc(this,a);this.i=a>>8;this.b-=10},function(){var a=T(this);Fc(this)||E(this,a);this.b-=10},function(){this.oa&=-513;this.b-=4},function(){var a=T(this);Fc(this)||(V(this,this.L),E(this,a),this.b-=6);this.b-=11},function(){V(this,yc(this)|this.i<<8);this.b-=11},function(){this.i=ed(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,48);this.b-=11},function(){Fc(this)&&(E(this,U(this)),this.b-=6);
|
|
this.b-=5},function(){this.Z=J(this)&65535;this.b-=5},function(){var a=T(this);Fc(this)&&E(this,a);this.b-=10},function(){this.oa|=512;this.b-=4},function(){var a=T(this);Fc(this)&&(V(this,this.L),E(this,a),this.b-=6);this.b-=11},pd,function(){bd(this,Q(this));this.b-=7},function(){V(this,this.L);E(this,56);this.b-=11}];
|
|
function qd(a){u.call(this,"ROM",a,qd);this.u=null;this.H=a.addr;this.A=a.size;this.F=a.alias;this.G=a.file;this.M=ba(this.G);if(this.G){a=this.G;var b=ca(this.M);"json"!=b&&"hex"!=b&&(a=na()+"/api/v1/dump?file="+this.G+"&format=bytes&decimal=true");var c=this;ma(a,null,!0,function(a,b,f){rd(c,a,b,f)})}}x(qd);qd.prototype.Ma=function(a,b,c,d){this.B=b;this.b=c;this.C=d;sd(this)};
|
|
qd.prototype.va=function(){if(this.ta){if(this.C){var a=this.C,b=this.id,c=this.H,d=this.A,e=this.ta,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var n=f,k=[k>>>0,h],q=ia(n,k,a.yb);0>q&&n.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.M.push({dc:b,w:c,Zb:d,ta:e,zb:f})}delete this.ta}return!0};qd.prototype.ua=function(){return!0};
|
|
function rd(a,b,c,d){if(d)a.ka("Unable to load system ROM (error "+d+": "+b+")");else{$a(a.Bb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.u=f;else if(h)for(a.u=Array(4*h.length),d=c=0;c<h.length;c++)a.u[d++]=h[c]&255,a.u[d++]=h[c]>>8&255,a.u[d++]=h[c]>>16&255,a.u[d++]=h[c]>>24&255;else a.u=e;a.ta=e.symbols;if(!a.u.length){t("Empty ROM: "+b);return}if(1==a.u.length){t(a.u[0]);return}}catch(g){a.ka("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
|
" ").replace(/ +$/,"").split(" "),a.u=Array(b.length),e=0;e<b.length;e++)a.u[e]=aa(b[e],16);sd(a)}}
|
|
function sd(a){if(!ib(a))if(!a.G)A(a);else if(a.u&&a.B){if(a.u.length!=a.A)jb(a,"ROM size (0x"+p(a.u.length)+") does not match specified size ("+("0x"+p(a.A))+")");else{var b;b=a.H;if(rb(a.B,b,a.A,Ob)){for(var c=0;c<a.u.length;c++){var d=a.B,e=b+c;d.B[(e&d.A)>>>d.X].Wa(e&d.u,a.u[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(c=0;c<b.length;c++){for(var f=a,d=b[c],e=f.B,h=f.A,g=[],k=f.H>>>e.X;0<h&&k<e.B.length;)g.push(e.B[k++]),h-=e.ha;e=f.B;
|
|
f=f.A;h=0;for(d>>>=e.X;0<f&&d<e.B.length;){k=g[h++];if(!k)break;e.B[d++]=k;f-=e.ha}}delete a.u}}A(a)}}Ma(function(){for(var a=z(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new qd(d);eb(d,c)}});function td(a){u.call(this,"RAM",a,td);this.F=a.addr;this.A=a.size;this.u=!1}x(td);m=td.prototype;m.Ma=function(a,b,c,d){this.B=b;this.b=c;this.C=d;A(this)};m.va=function(a,b){b||this.reset();return!0};m.ua=function(a){return a?this.save():!0};
|
|
m.reset=function(){!this.u&&this.A&&rb(this.B,this.F,this.A,1)&&(this.u=!0,this.status(Math.floor(this.A/1024)+"Kb allocated"));this.u||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ma(function(){for(var a=z(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new td(d);eb(d,c)}});function ud(a){u.call(this,"Keyboard",a,ud,65536);A(this)}x(ud);
|
|
Ma(function(){for(var a=z(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new ud(d);eb(d,c)}});function vd(a){u.call(this,"Video",a,vd,262144);A(this)}x(vd);
|
|
Ma(function(){for(var a=z(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=y(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<=ua().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||Ra.aspect);f&&.3<=f&&3.33>=f&&(La("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");Aa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e.getContext("2d");d=new vd(d);eb(d,c)}});
|
|
function wd(a){u.call(this,"Debugger",a,wd);this.ea=this.Ha=this.U=0;this.W=X();this.Ab=X();this.G=-1;this.F=[];this.pa=!1;this.ia=X();this.M=[];this.na={};this.A=this.Y=this.H=[];xd(this);this.ya=0;yd(this);this.Xa=[];zd(this,a.messages);this.Za=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return nc(b,a)}):void 0===global.$&&(global.$=function(a){return nc(b,a)})}x(wd);
|
|
var Ad={"?":"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"},Bd="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(" "),
|
|
Cd="B C D E H L M A F BC DE HL PSW SP PC".split(" "),Dd=[[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]],Ed={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};m=wd.prototype;
|
|
m.Ma=function(a,b,c,d){this.B=b;this.b=c;this.u=a;(a=kc(a,"messages"))&&zd(this,a);this.kb=Dd;Fd(this,function(a){a:{var b=d.b.ja,c=a[0],g=a=0,k=b.length;if(c){a=Y(Z(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.b.X;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var n=b[g];n.type==c?l++||d.g("..."):(c=n.type,l=Tb[c],n&&d.g(p(n.id)+" %"+p(g<<d.b.X)+" %%"+p(n.w)+" "+r(n.ib)+" "+r(n.size)+
|
|
" "+l),c!=Nb&&(c=-1),l=0);a+=d.b.ha;g++}}});A(this)};
|
|
m.la=function(a,b,c){var d=this;switch(b){case "debugInput":return this.sa=this.N[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",nc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.G<d.F.length-1&&(b=d.F[++d.G]):40==a.keyCode&&(0<d.G?b=d.F[--d.G]:(b="",d.G=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.N[b]=c,Da(c,function(){if(d.sa){var a=d.sa.value;d.sa.value=
|
|
"";nc(d,a,!0);return!0}return!1}),!0;case "step":return this.N[b]=c,Da(c,function(a){var b=!1;hb(d,!0)||(gb(d,!0),b=d.Ua(a?1:0),gb(d,!1));return b}),!0}return!1};m.hb=function(){this.sa&&this.sa.focus()};function Y(a){a=a&&a.w;null==a&&(a=-1);return a}m.wa=function(a,b){var c=255,d=Y(a);-1!==d&&(c=tb(this.B,d),b&&Gd(a,b));return c};m.jb=function(a,b){var c=65535,d=Y(a);if(-1!==d){var c=this.B,e=d&c.u,f=(d&c.A)>>>c.X,c=e!=c.u?c.B[f].ub(e,d):c.B[f++].gb(e,d)|c.B[f&c.V].gb(0,d+1)<<8;b&&Gd(a,b)}return c};
|
|
m.wb=function(a,b,c){var d=Y(a);if(-1!==d){var e=this.B;e.B[(d&e.A)>>>e.X].Wa(d&e.u,b&255,d);c&&Gd(a,c);D(this.b,!0)}};m.Rb=function(a,b,c){var d=Y(a);if(-1!==d){var e=this.B,f=d&e.u,h=(d&e.A)>>>e.X;f!=e.u?e.B[h].vb(f,b&65535,d):(e.B[h++].Wa(f,b&255,d),e.B[h&e.V].Wa(0,b>>8&255,d+1));c&&Gd(a,c);D(this.b,!0)}};function X(a){return{w:a||0,ra:!1}}function Hd(a){return[a.w,a.ra]}function Id(a){return{w:a[0],ra:a[1]}}
|
|
function Z(a,b,c){var d;c=(c?a.W:a.Ab).w;if(void 0!==b){d=b=Jd(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.M.length;c++){var f=a.M[c].ta[d];if(void 0!==f){d=f.o;void 0!==d&&(e=X(d));break}}if(d=e)return d;c=Kd(a,b,void 0)}null!=c&&(d=X(c));return d}function Ld(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Sb=Md(a,b.Ob=c[2]))}function Gd(a,b){null!=a.w&&(a.w+=b||1)}
|
|
function Nd(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.wa(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function zd(a,b){a.C=a;a.ga=a.Tb=1073741824;a.za=null;var c=Md(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Ed)0<=la(c,d)&&(a.ga|=Ed[d],a.g(d+" messages enabled"))}function Fd(a,b){for(var c in Ed)if(64==Ed[c]){a.Xa[c]=b;break}}
|
|
function Od(a,b){var c;a=a.toUpperCase();null==b?c=la(Cd,a):(c=la(Cd,a.substr(b,3)),0>c&&(c=la(Cd,a.substr(b,2))));return c}function Pd(a,b){var c=0,d=Qd(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?p(d,c):"??"}
|
|
function Qd(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.i;break;case 8:c=yc(d)&255;break;case 0:c=d.I;break;case 1:c=d.O;break;case 9:c=d.I<<8|d.O;break;case 2:c=d.J;break;case 3:c=d.P;break;case 10:c=d.J<<8|d.P;break;case 4:c=d.K;break;case 5:c=d.R;break;case 11:c=d.K<<8|d.R;break;case 12:c=d.i<<8|yc(d)&255;break;case 13:c=d.Z;break;case 14:c=d.L}}return c}
|
|
function Rd(a,b){b=Jd(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Od(b,c+1),0<=e&&(b=b.substr(0,c)+Pd(a,e)+b.substr(c+1+Cd[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=aa(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=Z(a,e))?(d=e+' "'+Nd(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=Z(a,e))?(Gd(d),d=e+' "'+
|
|
Nd(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+p(X(this.b.L).w,4));if(!this.za||a!=this.za)if(this.za=a,this.ga&-2147483648&&(this.ca(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.j.Ra=0;c.F-=c.b;c.b=0;D(c)}};function Fb(a,b,c,d){a.message(b.Ya+"."+(null!=d?"outPort":"inPort")+"("+r(c)+",unknown"+(null!=d?",0x"+p(d,2):"")+")")}
|
|
function yd(a){var b;if(kd(a)){if(!a.V||!a.V.length){a.V=Array(1E3);for(b=0;b<a.V.length;b++)a.V[b]=X();a.qa=0;a.g("instruction history buffer allocated")}if(!a.S||!a.S.length)for(a.S=Array(256),b=0;b<a.S.length;b++)a.S[b]=[b,0]}else a.V&&a.V.length&&a.g("instruction history buffer freed"),a.qa=0,a.V=[],a.S=[]}m.Ga=function(a){if(!Sd(this))return!1;this.b.Ga(a);return!0};
|
|
m.Ua=function(a,b,c){if(!Sd(this))return!1;this.U=0;a||kd(this)&&ld(this,this.b.L,0);try{var d=this.b.Ua(a);0<d&&(this.U+=d,sc(this.b,d,!0),pc(this.b,d),this.ea++)}catch(e){"number"!=typeof e&&(this.U=0,jb(this.b,e.stack||e.message))}!1!==c&&D(this.b);this.ma(b||!1);return 0<this.U};m.ca=function(a){this.b&&this.b.ca(a)};m.ma=function(a){void 0===a&&(a=!0);this.W=X(this.b.L);a&&1!=this.aa?Td(this):Ud(this)};
|
|
function Sd(a){var b;if(b=a.b&&ib(a.b))b=a.b,b.s.da?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!hb(a.b)?(a=a.b,a.s.Ka?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.va=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.ua=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){yd(this);this.ea=this.Ha=0;this.za=null;this.U=0;this.W=X(this.b.L);this.s.fa=!1;Vd(this);a||this.ma()};
|
|
m.save=function(){var a=new G(this);I(a,0,Hd(this.W));I(a,1,Hd(this.ia));I(a,2,[this.F,this.pa,this.ga]);I(a,3,this.M);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.W=Id(a[b++]),this.ia=Id(a[b++]),this.F=a[b][0],"string"==typeof this.F&&(this.F=[this.F]),this.pa=a[b][1],this.ga|=a[b][2]);a[3]&&(this.M=a[3]);return!0};m.start=function(a,b){this.aa||this.g("running");this.s.fa=!0;this.Ub=a;this.Xb=b};
|
|
m.stop=function(a,b){if(this.s.fa){this.s.fa=!1;this.U=b-this.Xb;if(!this.aa){var c="stopped";if(this.U){var d=a-this.Ub,e=0<d?Math.round(1E3*this.U/d):0,c=c+" (";kd(this)&&(c+=this.ea+" opcodes, ",this.Ha-=this.ea,this.ea=0);c+=this.U+" cycles, "+d+" ms, "+e+" hz)"}else fb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.ma(!0);this.hb();Vd(this,this.b.L)}};function kd(a){return 1<a.A.length||!!a.ya}
|
|
function ld(a,b,c){var d=a.b;if(0<c&&(a.ya&&!--a.ya||Xb(a,b,1,a.A)))return!0;0<=c&&a.S.length&&(a.ea++,b=tb(a.B,b),null!=b&&(a.S[b][1]++,b=a.V[a.qa],b.w=d.L,b.ra=!1,++a.qa==a.V.length&&(a.qa=0)));return!1}function Eb(a,b,c){a.g("break on input from port "+r(b)+": "+p(c));a.ca(!0)}function Ib(a,b,c){a.g("break on output to port "+r(b)+": "+p(c));a.ca(!0)}
|
|
function xd(a){var b,c;a.A=["bp"];if(void 0!==a.Y)for(b=1;b<a.Y.length;b++){c=a.Y[b];var d=a.b;Yb(d.ja[Y(c)>>>d.X],!1)}a.Y=["br"];if(void 0!==a.H)for(b=1;b<a.H.length;b++)c=a.H[b],d=a.b,Yb(d.ja[Y(c)>>>d.X],!0);a.H=["bw"];a.Cb=0}m.Aa=function(a,b,c){var d=!0;c||Wd(this,a,b,!1,!0);if(a!=this.A){var e=Y(b);if(-1===e)this.g("invalid address: "+p(b.w,4)),d=!1;else{var f=this.b;f.ja[e>>>f.X].Aa(e&f.G,a==this.H)}}d&&(a.push(b),c?b.ra=!0:(Xd(this,a,a.length-1,"set"),yd(this)));return d};
|
|
function Wd(a,b,c,d,e){var f=!1;c=Y(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==Y(g)&&(!d||g.ra)){f=!0;g.ra||e||Xd(a,b,h,"cleared");b.splice(h,1);b!=a.A&&(d=a.b,Yb(d.ja[c>>>d.X],b==a.H));g.ra||yd(a);break}}return f}function Yd(a,b){for(var c=1;c<b.length;c++)Xd(a,b,c);return b.length-1}function Xd(a,b,c,d){c=b[c];a.g(b[0]+" "+p(c.w,4)+(d?" "+d:c.Ob?' "'+c.Ob+'"':""))}
|
|
function Vd(a,b){if(void 0!==b)Xb(a,b,1,a.A,!0),a.aa=0;else for(var c=1;c<a.A.length;c++){var d=a.A[c];if(d.ra){if(!Wd(a,a.A,d,!0))break;c=0}}}
|
|
function Xb(a,b,c,d,e){var f=!1;if(!a.Cb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.ra)for(var k=Y(g),l=0;l<c;l++)if(b+l==k){var n,f=!0;g.ra&&(Wd(a,d,g,!0),e=!0);if(n=g.Sb){for(var f=!1,q=0;q<n.length;q++)if(!Zd(a,n[q],!0)){if(n[q].indexOf("if")){f=!0;break}for(var v=q+1;v<n.length&&n[v].indexOf("else");v++)q++;if(v==n.length){f=!0;break}}a.b.s.fa||(f=!0)}if(f){e||Xd(a,d,h,"hit");break}}}a.Cb--;return f}
|
|
function $d(a,b,c,d){for(var e=X(b.w),f=a.wa(b,1),h=a.kb[f],f="",g=null,k=Bd[h[0]],l=h.length-1,n=1;n<=l;n++){var q="",v=h[n];if(void 0!==v){var R=v&15;if(0==R){if(null==g)continue;R=g}g=R;R=v&240;if(32==R){var q=a,R=b,H=" ";switch(v&15){case 1:v&12288&&(H=p(q.wa(R,1),2));break;case 2:H=p(q.wa(R,1)<<24>>24,4);break;case 3:H=p(q.jb(R,2),4);break;default:H="imm("+r(v)+")"}q=H}else 16==R&&(q=Cd[(v&3840)>>8]);if(!q||!q.length){f="INVALID";break}0<f.length&&(f+=",");f+=q||"???"}}h="";g=p(e.w,4)+" ";if(-1!==
|
|
e.w&&-1!==b.w){do if(h+=p(a.wa(e,1),2),null==e.w)break;while(e.w!=b.w)}g+=ga(h,11);g+=ga(k,7);f&&(g+=" "+f);c&&(g=ga(g,40)+";"+c,g=a.b.s.Ja?g+("cycles="+qc(a.b).toString()+" cs="+p(a.b.j.$a)):g+(null!=d?"="+d.toString():""));return g}function ae(a,b){var c;switch(b){case "I":c=a.b.oa&512;break;case "S":c=Fc(a.b);break;case "Z":c=Ec(a.b);break;case "A":c=Dc(a.b);break;case "P":c=N(a.b);break;case "C":c=M(a.b);break;default:c=0}return b+(c?"1":"0")+" "}
|
|
function be(a,b){return Cd[b]+"="+Pd(a,b)+" "}var ce={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
|
function de(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 Kd(a,b,c){var d;if(b){b=Jd(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var n=l[e++],q=n.length,n=ha(n);if(!n){f=!0;break}n=ee(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==l.length)break;var n=l[e++],v=n.length;k.length&&ce[n]<ce[k[k.length-1]]&&de(g,k,1);k.push(n);b=b.substr(q+v)}de(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ee(a,null,
|
|
d))}return d}function Jd(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Kd(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?p(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=Z(a,c[1]),b=b.replace("["+c[1]+"]",d?p(a.jb(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ea-a.Ha}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
|
function ee(a,b,c,d){var e;void 0!==b?(e=Od(b),0<=e?e=Qd(a,e):(e=a.na[b],void 0===e&&(e=aa(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
|
function Ee(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,n="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)n="?"+n;else for(;0<l--;)n=(k&1?"1":"0")+n,k>>=1;h=n+"b"+h;d>>=8}d="0x"+p(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Fe(a,b){if(b)return Ee(a,b,a.na[b]);var c=0;for(b in a.na)Ee(a,b,a.na[b]),c++;return 0<c}wd.prototype.yb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
|
function Ge(a,b,c){var d=[],e=Y(b)>>>0;for(b=0;b<a.M.length;b++){var f=a.M[b],h=f.w>>>0,g=f.Zb;if(e>=h&&e<h+g){e=ia(f.zb,[e-h],a.yb);0<=e?He(a,b,e,d):c&&(e=~e,He(a,b,e-1,d),He(a,b,e,d));break}}return d}function He(a,b,c,d){var e={},f=a.M[b].zb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.M[b].ta[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
|
|
function Ie(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.S)if("clear"==b){for(c=0;c<a.S.length;c++)a.S[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.S.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],h=e[c][1];h&&(a.g((Bd[a.kb[f][0]]+" ").substr(0,5)+" ("+("0x"+p(f,2))+"): "+h+" times"),d++)}}d||a.g("no frequency data available")}}
|
|
function Je(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Fe(a)||a.g("no variables"),!0;if(!c[2])return Fe(a,c[1]);if(!c[3])return delete a.na[c[1]],!0;var d=Kd(a,c[3]);return void 0!==d?(a.na[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
|
function Ke(a,b,c){var d=null;if(b=Z(a,b,!0)){var e=Ge(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.w-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+p(e[1],4)+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.w)&&(h=" - "+r(f)),f=e[4]+" ("+p(e[5],4)+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
|
function Td(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{var d=a.b;null==c&&(c=!0);if(null!=b&&1<b.length){var e=b[1],f=null,h=e.indexOf("=");if(0<h)f=e.substr(h+1),e=e.substr(0,h);else if(2<b.length)f=b[2];else{a.g("missing value for "+b[1]);return}var h=!1,g=Kd(a,f);if(void 0!==g){var h=!0,k=e.toUpperCase();"E"==k.charAt(0)&&(k=null);switch(k){case "A":d.i=g&255;break;case "B":d.I=g&255;break;case "BC":d.I=g>>
|
|
8&255;case "C":d.O=g&255;break;case "D":d.J=g&255;break;case "DE":d.J=g>>8&255;case "E":d.P=g&255;break;case "H":d.K=g&255;break;case "HL":d.K=g>>8&255;case "L":d.R=g&255;break;case "SP":d.Z=g&65535;break;case "PC":E(d,g);a.W=X(d.L);break;case "PS":xc(d,g);break;case "C":d.D=g?d.D|256:d.D&255;break;case "P":g?N(d)||(d.T^=1):N(d)&&(d.T^=1);break;case "A":d.ba=g?~d.T&16|d.ba&-17:d.T&16|d.ba&-17;break;case "Z":d.D=g?d.D&-256:d.D|255;break;case "S":g?Fc(d)||(d.T^=192):Fc(d)&&(d.T^=192);break;case "I":d.oa=
|
|
g?d.oa|512:d.oa&-513;break;default:a.g("unknown register: "+e);return}}if(!h){a.g("invalid value: "+f);return}D(d);a.g("updated registers:")}a.g(be(a,7)+be(a,8)+be(a,0)+be(a,1)+be(a,2)+be(a,3)+be(a,4)+be(a,5)+be(a,13)+ae(a,"I")+ae(a,"S")+ae(a,"Z")+ae(a,"A")+ae(a,"P")+ae(a,"C"));c&&(a.W=X(d.L),Ud(a,p(a.W.w,4)))}}function Le(a,b){b=ha(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Rd(a,c[2])):Kd(a,b,!0)}
|
|
function Me(a,b,c){var d="t"!=b;c=ee(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ca(c,function(){return gb(a,!0)&&a.Ua(e,d,!1)},function(){D(a.b);gb(a,!1)})}
|
|
function Ud(a,b,c,d){if(b=Z(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=Z(a,c,!0);if(!d||d.w<b.w)return;e=d.w-b.w;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=hb(a,!1)||a.aa?a.U:null;var h=null!=f?"cycles":null,g=Ge(a,b),k=b.w;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=$d(a,b,h,f);a.g(f);a.W=b;e-=b.w-k;c++}}}
|
|
function Md(a,b,c,d){if(c)if(b){0>a.G&&a.F.length&&(a.G=0);if(0>a.G||b!=a.F[a.G])a.F.splice(0,0,b),a.G=0;a.G--}else b=a.F[a.G+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 h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==d&&!e||!h)a.push(ha(b.substring(c,f))),c=f+1}}return a}
|
|
function Zd(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.pa&&(a.g("ended assemble at "+p(a.ia.w,4)),a.W=a.ia,a.pa=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.za=null;if(ib(a)&&0<b.length){a.pa&&(b="a "+p(a.ia.w,4)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var n=Z(a,f[1],!0);if(n)if(a.ia=
|
|
n,void 0===f[2])a.g("begin assemble at "+p(n.w,4)),a.pa=!0,D(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var v=0;v<q.length;v++)a.wb(n,q[v],1);a.g($d(a,a.ia))}}break;case "b":a:{var R=f[0],H=f[1],hf=b;if("?"==H)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 oa=R.charAt(1);if("l"==oa){var Xa=0,Xa=Xa+Yd(a,a.A),Xa=Xa+Yd(a,a.Y);(Xa+=Yd(a,a.H))||a.g("no breakpoints")}else if("n"==oa)a.ya=ee(a,H),a.g("break after "+a.ya+" instruction(s)");else if(void 0===H)a.g("missing breakpoint address");else{var F=X();if("*"!=H&&(F=Z(a,H,!0),!F))break a;H=r(F.w);"c"==oa?null==F.w?(xd(a),a.g("all breakpoints cleared")):Wd(a,a.A,F)||Wd(a,
|
|
a.Y,F)||Wd(a,a.H,F)||a.g("breakpoint missing: "+p(F.w,4)):"i"==oa?a.g("breakpoint "+(Cb(a.B,F.w)?"enabled":"cleared")+": port "+H+" (input)"):"o"==oa?a.g("breakpoint "+(Gb(a.B,F.w)?"enabled":"cleared")+": port "+H+" (output)"):null!=F.w&&(Ld(a,F,hf),"p"==oa?a.Aa(a.A,F):"r"==oa?a.Aa(a.Y,F):"w"==oa?a.Aa(a.H,F):a.g("unknown breakpoint command: "+oa))}}}break;case "c":a.Ba&&(a.Ba.value="");break;case "d":a:{var Ya,Za=f[0],pa=f[1],Ga=f[2],jf=f[3];if("?"==pa){var qa="";for(Ya in Ed)a.Xa[Ya]&&(qa&&(qa+=
|
|
","),qa+=Ya);qa+=",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");qa.length&&a.g("dump extension commands:\n\t"+qa)}else if("state"==pa){var fe=Ne(a.u,!0);"console"==Ga?console.log(fe):(a.Ba&&(a.Ba.value=""),a.g(fe))}else if("symbols"==pa)for(var Jc=0;Jc<a.M.length;Jc++){var Kc=a.M[Jc],ab;for(ab in Kc.ta)if("."!=
|
|
ab.charAt(0)){var ge=Kc.ta[ab].o;if(void 0!==ge){var he=Kc.ta[ab].l;he&&(ab=he);a.g(p(ge,4)+" "+ab)}}}else{if("d"==Za){for(Ya in Ed)if(f[1]==Ya){var ie=a.Xa[Ya];ie?(f.shift(),f.shift(),ie(f)):a.g("no dump registered for "+pa);break a}pa||(Za=a.Yb||"db")}else a.Yb=Za;if("dh"==Za){var je=pa,ke=Ga,le="",me=0,K=a.qa,ra=a.V;if(ra.length){var S=+je||a.Db,bb=+ke||10;isNaN(S)?S=bb:le="more ";S>ra.length&&(a.g("note: only "+ra.length+" available"),S=ra.length);K-=S;0>K&&(null==ra[ra.length-1].w?(S=K+S,K=0):
|
|
K+=ra.length);var Lc=[];"call"==ke&&(bb=1E5,Lc=["CALL"]);for(void 0!==je&&a.g(S+" instructions earlier:");0<bb&&K!=a.qa;){var ne=ra[K++];if(null==ne.w)break;var ub=X(ne.w),kf=S--,oe=$d(a,ub,"history",kf);(!Lc.length||0<=oe.indexOf(Lc[0]))&&a.g(oe);ub.ob&&(K+=ub.ob,bb-=ub.ob,S-=ub.ob);K>=ra.length&&(K=0);a.Db=S;me++;bb--}}me||(a.g("no "+le+"history available"),a.Db=void 0)}else{var Zb=Z(a,pa);if(Zb){var $b=0;Ga&&("l"==Ga.charAt(0)&&(Ga=Ga.substr(1)||jf),$b=ee(a,Ga)>>>0,65536<$b&&($b=65536));for(var Ha=
|
|
"",lf=($b||128)+15>>4||1,Mc="dd"==Za?4:"dw"==Za?2:1,pe=0;pe<lf;pe++){for(var ac=0,Nc=0,vb="",Oc="",pa=p(Zb.w,4),Pc=0;16>Pc;Pc++){var bc=a.wa(Zb,1),ac=ac|bc<<(Nc++<<3);Nc==Mc&&(vb+=p(ac,2*Mc),vb+=1==Mc?7==Pc?"-":" ":" ",ac=Nc=0);Oc+=32<=bc&&128>bc?String.fromCharCode(bc):"."}Ha&&(Ha+="\n");Ha+=pa+" "+vb+" "+Oc}Ha&&a.g(Ha);a.Ab=Zb}}}}break;case "e":if("else"==f[0])break;var cc=1,qe=255,re=a.wa,se=a.wb;"ew"==f[0]&&(cc=2,qe=65535,re=a.jb,se=a.Rb);var te=cc<<1,ue=f[1];if(null==ue)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 dc=Z(a,ue);if(dc)for(var ec=2;ec<f.length;ec++){var wb=Kd(a,f[ec]);if(void 0===wb){a.g("unrecognized value: "+f[ec]);break}wb&~qe&&a.g("warning: "+p(wb)+" exceeds "+cc+"-byte value");var mf=re.call(a,dc);a.g("changing "+p(dc.w,4)+" from 0x"+p(mf,te)+" to 0x"+p(wb,te));se.call(a,dc,wb,cc)}}break;case "f":Ie(a,f[1]);break;case "g":a:{var ve=f[1],nf=b;if(void 0!==ve){var Qc=Z(a,ve,!0);if(!Qc)break a;
|
|
Ld(a,Qc,nf);a.Aa(a.A,Qc,!0)}a.Ga(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":var Rc;a.s.fa?(Rc="halting",a.ca()):Rc="already halted";c||a.g(Rc);break;case "i":if("if"==f[0]){var Sc;var xb=b.substr(2),xb=ha(xb);Kd(a,xb)?(c||a.g("true: "+xb),Sc=!0):(c||a.g("false: "+xb),Sc=!1);Sc||(d=!1);break}var Tc=f[1];if(Tc&&"?"!=Tc){var Uc=ee(a,Tc);if(void 0!==Uc){var of=Db(a.B,Uc);a.g(r(Uc)+": "+("0x"+p(of,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 pf=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var Vc=0,we=X(),yb=X(a.b.Z);for(a.g("stack trace for "+p(yb.w,4));10>Vc;){for(var Ia=null,qf=256;65536>yb.w>>>0;){we.w=a.jb(yb,2);if(null==yb.w||!qf--)break;for(var rf=a,fc=we,xe=null,zb=fc.w,ye=zb,Wc=1;6>=Wc&&zb;Wc++){if(2<Wc){fc.w=zb;var gc=$d(rf,fc);if(0<gc.indexOf("CALL")){var ze=gc.indexOf(" ");if(zb+(gc.indexOf(" ",ze+1)-ze-1)/2==ye){xe=gc;break}}}zb--}fc.w=
|
|
ye;if(Ia=xe)break}if(!Ia||null==Ia)break;var Ae=null;if("ks"==pf){var Be=Ia.match(/[0-9A-F]+$/);Be&&(Ae=Ke(a,Be[0]))}Ia=ga(Ia,50)+" ;"+(Ae||"stack="+p(yb.w,4));a.g(Ia);Vc++}Vc||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ke(a,f[1],!0);break}break;case "m":a:{var sa,ta=null,B=f[1];"?"==B&&(B=void 0);if(void 0!==B){var Ja=0;if("all"==B)Ja=1610481663,B=null;else if("on"==B)ta=!0,B=null;else if("off"==B)ta=!1,B=null;else{"keys"==B&&(B="key");"kbd"==B&&(B="keyboard");for(sa in Ed)if(B==
|
|
sa){Ja=Ed[sa];ta=!!(a.ga&Ja);break}if(!Ja){a.g("unknown message category: "+B);break a}}Ja&&("on"==f[2]?(a.ga|=Ja,ta=!0):"off"==f[2]&&(a.ga&=~Ja,ta=!1))}var sf=0,Ba="";for(sa in Ed)if(!B||B==sa){var tf=!!(a.ga&Ed[sa]);if(null===ta||ta==tf)Ba&&(Ba+=","),++sf%10||(Ba+="\n\t"),"key"==sa&&(sa="keys"),Ba+=sa}void 0===B&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==ta?ta?"messages on: ":"messages off: ":"message categories:\n\t")+(Ba||"none"));yd(a)}break;case "o":var Xc=
|
|
f[1],uf=f[2];if(Xc&&"?"!=Xc){var Yc=ee(a,Xc,"port #"),Zc=ee(a,uf);void 0!==Yc&&void 0!==Zc&&(Hb(a.B,Yc,Zc),a.g(r(Yc)+": "+("0x"+p(Zc,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]){Le(a,b.substr(5));break}var Ce="pr"==f[0]?1:0,vf=1+Ce;if(a.aa)a.g("step in progress");else{var $c=X(a.b.L);switch(a.wa($c)){case 205:a.aa=vf,Gd($c,3)}a.aa?(a.Aa(a.A,$c,!0),a.Ga()||(a.u&&a.u.hb(),a.aa=
|
|
0)):Me(a,Ce?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}Td(a,f);break;case "t":Me(a,f[0],f[1]);break;case "u":Ud(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Je(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.21.7 ("+a.b.Ib+",RELEASE"+(kb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ua());break;case "x":a:if(f[1]&&"?"!=f[1])switch(f[1]){case "cs":var Ab;void 0!==f[3]&&(Ab=+f[3]);switch(f[2]){case "int":a.b.j.Oa=Ab;break;case "start":a.b.j.ab=Ab;break;case "stop":a.b.j.Qa=Ab;break;
|
|
default:a.g("unknown cs option");break a}void 0!==Ab&&mc(a.b);a.g("checksums "+(a.b.s.Ja?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(rc(a.b,+f[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.j.Da.toFixed(2)+"Mhz")+" ("+a.b.j.Fa+"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]){Le(a,b.substr(1));break}var Bb="commands:",ad;for(ad in Ad)Bb+="\n"+ga(ad,7)+Ad[ad];kd(a)||(Bb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Bb);break;default:a.g("unknown command: "+b),d=!1}}}catch(De){a.g("debugger error: "+(De.stack||De.message)),d=!1}return d}function nc(a,b,c){b=Md(a,b,c);for(var d in b)if(!Zd(a,b[d]))return!1;return!0}
|
|
Ma(function(){for(var a=z(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new wd(d);eb(d,c)}});function G(a,b,c){this.id=a.id;this.key=Oe(a,b,c);this.C=a.C;Pe(this,a.Mb)}function Oe(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}
|
|
G.prototype={constructor:G,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){Pe(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 Pe(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function Qe(a){var b=!0;if(xa()){var c=JSON.stringify(a[a.id]);za(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Re(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function Se(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:xa()&&(b=ya(a.key))?(a[a.id]=b,a.b=!0):!1}function Te(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
|
function Ue(a,b,c){u.call(this,"Computer",a,Ue,67108864);this.s.da=!1;Ve(this,b);this.Y=kc(this,"autoPower",a);this.F=0;this.pa=a.busWidth||a.buswidth;this.u=We;this.V=null;this.M=this.na=!1;this.qa=kc(this,"url")||"";(Math.random()+.1).toString(36);this.A=Xe(this);if(this.b=db("CPU",this.id)){this.C=db("Debugger",this.id);this.sa=[];for(b=null;b=nb(this,"Video",b);)this.sa.push(b);this.B=new pb({id:this.Bb+".bus",buswidth:this.pa},this.b,this.C);var d,e=cb(this.id);if((this.G=db("Panel",this.id))&&
|
|
this.G.Ba)for(b=0;b<e.length;b++)d=e[b],d.ka=this.G.ka,d.g=this.G.g,d.Ba=this.G.Ba;for(b=0;b<e.length;b++)d=e[b],d.Ma&&d.Ma(this,this.B,this.b,this.C);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.U=d:this.u=parseInt(d,10));var f;if(a=kc(this,"state")||(f=!0,a.state))b=this.aa=a,f||(this.M=!0,this.u=We),this.u&&(this.W=new G(this,Ye),Se(this.W)?b=null:delete this.W);!b&&this.u&&(b=Ze(this))&&(this.M=!0);if(b){var h=this;ma(b,null,!0,function(a,b,c){c?(h.U=null,h.M=!1,h.ka("Unable to load machine state from server (error "+
|
|
c+(b?": "+ha(b):"")+")")):(h.V=b,h.na=!0);A(h)})}else A(this);this.N.power||(this.Y=!0);!c&&this.Y&&$e(this,this.fb)}else t("Unable to find CPU component")}x(Ue);var Ye="1.21.7",We=0;function Ve(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.S=b}
|
|
function kc(a,b,c){var d=b.toLowerCase(),d=Ra[b]||Ra[d];void 0===d&&a.S&&(d=a.S[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function $e(a,b,c){for(var d=cb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!ib(f)){ib(f,function(){$e(a,b,c)});return}}b.call(a,c)}
|
|
function af(a,b){var c=new G(a,Ye,"validate");if(Se(c)&&Re(c)){var d=Te(c,"timestamp"),e=b?Te(b,"timestamp"):"unknown";d!=e&&(a.ka("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Ue.prototype;
|
|
m.fb=function(a){void 0===a&&(a=this.u||(this.V?1:We));if(!this.F){this.F++;var b=!1,c=!1;this.ia=!1;var d=this.W||new G(this,Ye);if(-1==a)b=!0;else if(a>We){if(Se(d,this.V)){this.H=new G(this,Ye,"failsafe");Se(this.H)&&(bf(this,d),a=2,Pe(this.H));I(this.H,"timestamp",ka());Qe(this.H);var e=this.u&&!this.M;if(1==a||va("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Re(d)){var f=Te(d,"code"),h=Te(d,"data");f&&("ok"==f?Se(d,h):("error"==f&&"no machine state"!=
|
|
h?(this.ka("Error: "+h),"unable to verify user"==h&&(za("user",""),this.A=null)):this.g(f+": "+h),Pe(d),Se(d)?(c=Re(d),e=!0):c=!1))}e&&af(this,c?d:null)}else 2==a&&d.clear()}else af(this);delete this.V;delete this.W}e=cb(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=cf(this,h,d,b,c));b=[d,a,c];-1!=a?$e(this,this.Eb,b):this.Eb(b)}};
|
|
function cf(a,b,c,d,e){if(!b.s.da){b.s.da=!0;if(b.va){var f=null;e&&((f=Te(c,b.id))||(f=Te(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.va(f,d)&&f&&(t("Unable to restore state for "+b.type),a.aa&&!a.na?(c.clear(),a.u=We,window&&window.location.reload()):a.ia=!0,b.va(null),e=!1)}if(!d&&b.xb)for(a=b.xb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
|
m.Eb=function(a){var b=a[0],c=0>a[1];a=a[2];this.s.da=!0;var d=this.N.power;d&&(d.textContent="Shutdown");this.ea||(this.g("PC8080 v"+Ye+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.ea=!0);this.b&&(cf(this,this.b,b,c,a),oc(this.b));this.ia&&(bf(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.F=0};
|
|
function bf(a,b){if(va("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.qa,d=a.A||"",e=b.toString(),f={app:"PC8080"};f.ver=Ye;f.url=c;f.user=d;f.type="bug";f.data=e;ma("http://www.pcjs.org/api/v1/report",f,!0)}}
|
|
function Ne(a,b,c){var d,e="none";if(a.F)return null;a.F--;var f=new G(a,Ye),h=new G(a,Ye,"validate"),g=ka();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.21.7");I(f,"url",window?window.location.href:null);I(f,"browser",ua());a.b&&a.b.ua&&(c&&a.b.ca(),d=a.b.ua(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.s.da=!1,!1===d&&(e=null)));for(var g=cb(a.id),k=0;k<g.length;k++){var l=g[k];l.s.da&&(l.ua&&(d=l.ua(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.s.da=!1,!1===d&&(e=null)))}e&&(c?(g=d=
|
|
!1,b?(a.A&&df(a,a.A,f.toString()),Qe(h)&&Qe(f)||(e=null,d=g=!0)):a.u&&(d=!0,g=3==a.u),d&&f.clear(g)):e=f.toString());c&&(a.s.da=!1,b=a.N.power)&&(b.textContent="Power");a.F=0;return e}m.reset=function(){this.B&&this.B.reset&&(this.C&&fb(this,0)&&this.C.message("Resetting "+this.B.type,void 0),this.B.reset());for(var a=cb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.B&&c.reset&&(this.C&&fb(this,0)&&this.C.message("Resetting "+c.type,void 0),c.reset())}};
|
|
m.start=function(a,b){for(var c=cb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=cb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
|
m.la=function(a,b,c){var d=this;switch(b){case "power":return this.N[b]=c,c.onclick=function(){d.F||(d.s.da?Ne(d,!1,!0):$e(d,d.fb))},!0;case "reset":return this.N[b]=c,c.onclick=function(){if(d.s.da&&!d.F)if(d.u&&!d.U){var a=va("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Ne(d,a,!0);!a&&d.aa?window&&window.location.reload():d.fb(We)}else d.reset(),d.b&&oc(d.b)},!0;case "save":if(da(na(),"pcjs.org")){c.parentNode.removeChild(c);
|
|
break}this.N[b]=c;c.onclick=function(){var a=Xe(d,!0);if(a){var b=!!(d.u&&!d.U||d.aa),c=Ne(d,b);b?df(d,a,c):d.ka("Resume disabled, machine state not saved")}};return!0}return!1};
|
|
function Xe(a,b){var c=a.A;c||(c=ya("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=ef(a,c))||a.ka("The user ID is invalid."))):b&&a.ka("Browser local storage is not available"));return c}
|
|
function ef(a,b){a.A=null;var c=ma(na()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(za("user",c.data),a.A=c.data)}catch(e){t(e.message+" ("+d+")")}return a.A}function Ze(a){var b=null;a.A&&(b=na()+"/api/v1/user?req=load&user="+a.A+"&state="+Oe(a,Ye));return b}
|
|
function df(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Oe(a,Ye);d.data=c;b=ma(na()+"/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.ka("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.ka(c),za("user",""),a.A=null)}}
|
|
function nb(a,b,c){a=cb(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}m.hb=function(){};m.ma=function(a){this.b&&this.b.ma(a);this.G&&this.G.ma(a)};Ma(function(){for(var a=z(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=y(c),c=z(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=y(f),h=new Ue(h,d,!0);eb(h,f);h.Y&&$e(h,h.fb)}});
|
|
Ea.show.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.ea&&!c.s.da&&c.fb(-1)}});Ea.exit.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.s.da&&Ne(c,!(!c.u||c.U),!0)}});var ff=0;function gf(a,b,c,d,e,f){e("Loading "+a+"...");ma(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):wf(g,a,b,c,d,e,f)})}
|
|
function wf(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){$a(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
|
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?xf(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
|
function xf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ma(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
|
"");a=a.replace(d[0],h);xf(a,b,c)}})}else c(a,null)}
|
|
function yf(a,b,c,d){function e(a){if(void 0===g){var b=h&&z(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);k&&(--ff||Oa(!0));k=!1}var h,g,k=!0;ff++;Wa[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));n.appendChild(q)}c||
|
|
(c="/versions/pc8080/1.21.7/components.xsl");l=function(d,g){g?gf(c,null,null,!1,e,function(d,k){if(k)if($a(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--ff||Oa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--ff||Oa(!0)):f("invalid machine element: "+
|
|
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?gf(b,a,d,!0,e,l):wf(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPC8080=function(a,b,c,d){Oa(!1);return yf(a,b,c,d)};window.enableEvents=Oa;window.sendEvent=Pa;
|
|
function zf(a,b,c,d){if(!c&&b){d.push(b);a=Wa[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?ma(b,null,!0,function(a,b){Af(b,d)}):Af(null,d)}else t("Error ("+c+") requesting "+a)}
|
|
function Af(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Wa[f],k={},l;for(l in g){var n=g[l],q=ca(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[l]);){var v=d[2];v&&(g[v]||(n=n.replace(d[0],"")))}d=l=ba(l)}else"xsl"==q&&(e=l=ba(l));k[l]=n}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
|
"©"),l=h,g=null,k="data:application/javascript,",k=Aa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", 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="'+h+'">\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.",t(c)):t("Missing XML/XSL resources")}
|
|
window.savePC=function(a,b,c){var d=db("Computer",a),e=db("Debugger",a);if(d){var f=Ne(d,!0),h=d.S?JSON.stringify(d.S):null;b||(b="/versions/pcjs/1.21.7/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Mb:h}))return!0;ma(b,null,!0,function(c,d,e){zf(c,d,e,[a,ba(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();
|