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