210 lines
87 KiB
JavaScript
210 lines
87 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 q(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"+q(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 la(){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 ma(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 na(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 l="",k;for(k in b)b.hasOwnProperty(k)&&(l&&(l+="&"),l+=k+"="+encodeURIComponent(b[k]));l=l.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(l)}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 oa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
|
function pa(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function qa(a){var b=!1;window&&(b=window.confirm(a));return b}var ra=null;function sa(){if(null==ra){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}ra=a}return ra}
|
|
function ta(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function ua(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function va(a){if(window){var b=pa();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,Ga=!0;function Ha(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ja(a){Ea.init.push(a)}
|
|
function Ka(a){if(Ga)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 La(a){!Ga&&a?(Ga=!0,Fa&&Pa("init")):Ga=a}function Pa(a){Ea[a]&&Ka(Ea[a])}Ha("onload",function(){Fa=!0;Ka(Ea.init)});Ha("onpageshow",function(){Ka(Ea.show)});Ha(va("Opera")||va("iOS")?"onunload":"onbeforeunload",function(){Ka(Ea.exit)});
|
|
function w(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Eb=b.comment;this.Sb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Hb=this.id.substr(0,b),this.eb=this.id.substr(b+1)):this.eb=this.id;this[a]=c;this.A={Ta:!1,Qa:!1,wb:!1,ia:!1,Sa:!1};this.rb=null;this.A.Sa=!1;this.T={};this.F=null;this.ha=d||0;x.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 Wa(a,b){b||(b=w);a.prototype=Va(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var x=[],Xa={};function Ya(a,b,c){Xa[a]&&b&&(Xa[a][b]=c)}function Za(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<x.length;b++){var d=x[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
|
function $a(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<x.length;d++)if(c)c==x[d]&&(c=null);else if(!(a!=x[d].type||b&&x[d].id.indexOf(b)))return x[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 cb(a,b){for(var c=A(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 l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.oa(g.type,g.binding,h,g.value),k=l.length}}}}
|
|
function A(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},oa:function(a,b,c){switch(b){case "clear":return this.T[b]||(this.T[b]=c,c.onclick=function(a){return function(){a.T.print&&(a.T.print.value="")}}(this)),!0;case "print":return this.T[b]||(this.ta=this.T[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.na=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.eb+": "+a)},na:function(a,b){b||t(a)},Ba:function(){return this.A.ia=!0},Aa:function(a,b){b&&(this.A.ia=!1);return!0}};function db(a,b,c,d,e,f){var h=!0;a.F&&(!0===h?h=0:null==h&&(h=a.ha),eb(a.F,a,b,c,d,e,f,h))}function fb(a,b,c){a.F&&(!0===c||gb(a,c|0))&&a.F.message(b,void 0)}
|
|
function gb(a,b){if(a.F){a===a.F?b|=0:b=b||a.ha;var c=a.F.ha&b;return!!b&&c===b||!!(c&a.F.Xb)}return!1}function hb(a,b){if(a.A.wb)return a.A.Qa&&(a.A.Qa=!1),a.A.wb=!1;if(a.A.Sa)return a.g(a.toString()+" error"),!1;a.A.Qa=b;return a.A.Qa}function ib(a,b){a.A.Qa&&(b?a.A.wb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.A.Qa}function C(a){if(!a.A.Sa&&(a.A.Ta=!0,a.A.Ta)){var b=a.rb;a.rb=null;b&&b()}}function jb(a,b){b&&(a.A.Ta?b():a.rb=b);return a.A.Ta}function kb(a,b){a.A.Sa=!0;a.na(b)}
|
|
var lb="undefined"!==typeof ArrayBuffer,mb=[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 nb(a){w.call(this,"Panel",a,nb)}Wa(nb);m=nb.prototype;m.oa=function(a,b,c,d){return this.w&&this.w.oa(a,b,c,d)||this.b&&this.b.oa(a,b,c,d)||this.u&&this.u.oa(a,b,c,d)||this.F&&this.F.oa(a,b,c,d)?!0:this.parent.oa.call(this,a,b,c,d)};m.Ga=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.u=ob(a,"Keyboard")};m.Ba=function(a,b){b||pb();return!0};m.Aa=function(){return!0};m.va=function(){};
|
|
function pb(){for(var a=!1,b=A(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<x.length;h++)if(x[h].id===f){f=x[h];break a}f=null}f||(a=!0,f=new nb(e));cb(f,d);a&&C(f)}}Ja(pb);
|
|
function qb(a,b,c){w.call(this,"Bus",a,qb);this.b=b;this.F=c;this.J=a.busWidth||16;this.W=Math.pow(2,this.J);this.C=this.W-1|0;this.ea=16>=this.J?10:20>=this.J?12:24>=this.J?14:15;this.ua=1<<this.ea;this.Y=this.ua>>2;this.B=this.ua-1;this.L=this.W/this.ua|0;this.K=this.L-1;this.w=[];this.u=[];this.G=this.H=!1;this.aa=[];this.ba=[];a=new D;rb(a,this.F);this.U=Array(this.L);for(b=0;b<this.L;b++)this.U[b]=a;C(this)}Wa(qb);m=qb.prototype;m.reset=function(){};m.Ba=function(a,b){b||this.reset();return!0};
|
|
function sb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ea;0<f&&h<a.U.length;){var g=a.U[h],l=h*a.ua,k=a.ua-(e-l);k>f&&(k=f);if(g&&g.size){if(g.type==d){if(e+f<=g.D)return g.nb+=g.D-e,g.D=e,!0;if(e>=g.D+g.nb){k=g.size-(e-l);k>f&&(k=f);g.nb=e-g.D+k;e=l+a.ua;f-=k;h++;continue}}return tb(1,e,f)}e=new D(e,k,a.ua,d);rb(e,a.F,g);a.U[h++]=e;e=l+a.ua;f-=k}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+ub[d]+" at "+r(b)),!0):tb(2,b,c)}m.X=function(a){return this.U[(a&this.C)>>>this.ea].ab(a&this.B,a)};
|
|
function vb(a,b){return a.U[(b&a.C)>>>a.ea].lb(b&a.B,b)}m.Fa=function(a){var b=a&this.B,c=(a&this.C)>>>this.ea;return b!=this.B?this.U[c].Tb(b,a):this.U[c++].ab(b,a)|this.U[c&this.K].ab(0,a+1)<<8};function wb(a,b){var c=b&a.B,d=(b&a.C)>>>a.ea;return c!=a.B?a.U[d].Bb(c,b):a.U[d++].lb(c,b)|a.U[d&a.K].lb(0,b+1)<<8}m.ga=function(a,b){this.U[(a&this.C)>>>this.ea].cb(a&this.B,b&255,a)};function xb(a,b,c){a.U[(b&a.C)>>>a.ea].ob(b&a.B,c&255,b)}
|
|
m.ub=function(a,b){var c=a&this.B,d=(a&this.C)>>>this.ea;c!=this.B?this.U[d].Vb(c,b&65535,a):(this.U[d++].cb(c,b&255,a),this.U[d&this.K].cb(0,b>>8&255,a+1))};function yb(a,b){if(void 0===b)return a.G=!a.G,a.G;void 0===a.w[b]&&(a.w[b]=[null,!1]);a.w[b][1]=!a.w[b][1];return a.w[b][1]}
|
|
function zb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.w[b],g=a.aa[b]||1,l=1==g?255:2==g?65535:-1,k=l;void 0!==h?(h[0]&&(k=h[0](b,c),void 0===k?k=l:k&=l),a.F&&a.G!=h[1]&&Ab(a.F,b,k)):a.F&&(eb(a.F,a,b,null,c),a.G&&Ab(a.F,b,k));e|=k<<f;f+=g<<3;b+=g;d-=g}return e}function Jb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
|
|
function Kb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.ba[b]||1,l=1==g?255:2==g?65535:-1,l=(c>>>=f)&l;if(void 0!==h){if(h[0])h[0](b,l,d);a.F&&a.H!=h[1]&&Lb(a.F,b,l)}else a.F&&(eb(a.F,a,b,l,d),a.H&&Lb(a.F,b,l));f+=g<<3;b+=g;e-=g}}function tb(a,b,c){t("Memory block error ("+a+": "+q(b)+","+q(c)+")");return!1}var Mb;if(lb){var Nb=new ArrayBuffer(2);(new DataView(Nb)).setUint16(0,256,!0);Mb=256===(new Uint16Array(Nb))[0]}else Mb=!1;var Ob=Mb;
|
|
function D(a,b,c,d){this.id=Pb+=2;this.b=null;this.D=a;this.nb=b;this.size=c||0;this.type=d||Qb;this.w=d==Rb;rb(this);this.ya=this.Lb=!1;if(c)if(lb)this.G=new ArrayBuffer(c),this.H=new DataView(this.G,0,c),this.B=new Uint8Array(this.G,0,c),this.K=new Uint16Array(this.G,0,c>>1),this.b=new Int32Array(this.G,0,c>>2),Sb(this,Ob?Tb:Ub);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Sb(this,Vb)}else Sb(this)}var Qb=0,Rb=2,ub=["NONE","RAM","ROM","VID","H/W"],Pb=0;
|
|
D.prototype={constructor:D,parent:null,save:function(){var a,b;if(lb)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(lb)for(b=0;b<a.length;b++)this.H.setInt32(b<<2,a[b],!0);else this.b=a;return this.ya=!0}return!1},Ja:function(a,b){b?0===this.u++&&Wb(this,Xb,!1):0===this.T++&&Yb(this,Xb,!1)},L:function(){this.F&&gb(this.F,129)&&this.F.message("attempt to read invalid block %"+q(this.D),!0);
|
|
return 255},C:function(a,b){this.F&&gb(this.F,129)&&this.F.message("attempt to write "+r(b)+" to invalid block %"+q(this.D),!0)},W:function(a,b){return this.ab(a++,b++)|this.ab(a,b)<<8},J:function(a,b,c){this.cb(a++,b&255,c++);this.cb(a,b>>8,c)},fa:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ra: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},xa:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.ya=!0},Ia: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.ya=!0},aa:function(a,b){if(this.F&&null!=this.D){var c=this.F;Zb(c,this.D+a,1,c.aa)&&c.da(!0)}return this.lb(a,b)},la:function(a,b){if(this.F&&null!=this.D){var c=this.F;Zb(c,this.D+a,2,c.aa)&&c.da(!0)}return this.Bb(a,b)},sa:function(a,b,c){if(this.F&&null!=this.D){var d=this.F;Zb(d,this.D+a,1,d.H)&&d.da(!0)}this.w?this.C(a,b,c):this.ob(a,b,c)},Ha:function(a,
|
|
b,c){if(this.F&&null!=this.D){var d=this.F;Zb(d,this.D+a,2,d.H)&&d.da(!0)}this.w?this.C(a,b,c):this.Cb(a,b,c)},Y:function(a){return this.B[a]},ba:function(a){return this.B[a]},ka:function(a){return this.H.getUint16(a,!0)},pa:function(a){return a&1?this.B[a]|this.B[a+1]<<8:this.K[a>>1]},Ea:function(a,b){this.B[a]=b;this.ya=!0},wa:function(a,b){this.B[a]=b;this.ya=!0},Ca:function(a,b){this.H.setUint16(a,b,!0);this.ya=!0},eb:function(a,b){a&1?(this.B[a]=b,this.B[a+1]=b>>8):this.K[a>>1]=b;this.ya=!0}};
|
|
function rb(a,b,c){a.F=b;a.T=a.u=0;c&&((a.T=c.T)&&Yb(a,Xb,!1),(a.u=c.u)&&Wb(a,Xb,!1))}function $b(a,b){b?0===--a.u&&(a.cb=a.w?a.C:a.ob,a.Vb=a.w?a.J:a.Cb):0===--a.T&&(a.ab=a.lb,a.Tb=a.Bb)}function Wb(a,b,c){c&&a.u||(a.cb=!a.w&&b[2]||a.C,a.Vb=!a.w&&b[3]||a.J);if(c||void 0===c)a.ob=b[2]||a.C,a.Cb=b[3]||a.J}function Yb(a,b,c){c&&a.T||(a.ab=b[0]||a.L,a.Tb=b[1]||a.W);if(c||void 0===c)a.lb=b[0]||a.L,a.Bb=b[1]||a.W}function Sb(a,b){b||(b=ac);Yb(a,b,void 0);Wb(a,b,void 0)}
|
|
var ac=[],Vb=[D.prototype.fa,D.prototype.ra,D.prototype.xa,D.prototype.Ia],Xb=[D.prototype.aa,D.prototype.la,D.prototype.sa,D.prototype.Ha];if(lb)var Ub=[D.prototype.Y,D.prototype.ka,D.prototype.Ea,D.prototype.Ca],Tb=[D.prototype.ba,D.prototype.pa,D.prototype.wa,D.prototype.eb];
|
|
function bc(a,b){w.call(this,"CPU",a,bc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.$a=c;this.i.tb=0;this.i.Na=d;this.i.yb=Math.round(this.i.$a/1E4)/100;this.i.La=this.i.yb*this.i.Na;this.A.ma=!1;this.A.xb=!1;this.A.Kb=a.autoStart;this.A.Mb=!1;this.A.Ra=!1;this.i.fb=this.i.Xa=0;this.i.gb=a.csStart;this.i.Wa=a.csInterval;this.i.Ya=a.csStop;this.aa=this.Oa.bind(this);C(this)}Wa(bc);var cc=["power","reset"];m=bc.prototype;
|
|
m.Ga=function(a,b,c,d){this.w=a;this.B=b;this.F=d;for(b=0;b<cc.length;b++)(c=this.T[cc[b]])&&this.w.oa(null,cc[b],c);this.Ea=(b=ob(a,"Video"))&&Math.max(b.Ea,b.Zb)||60;this.K=ob(a,"ChipSet");a=dc(a,"autoStart");null!=a&&(this.A.Kb="true"==a?!0:"false"==a?!1:!!a);C(this)};m.reset=function(){this.i.tb=0};m.save=function(){return null};m.restore=function(){return!1};
|
|
m.Ba=function(a,b){if(!b){if(a&&this.restore){pc(this);if(!this.restore(a))return!1;qc(this)}else this.reset();if(this.F){var c=this.F;c.g("Type ? for help with PC8080 Debugger commands");c.va();if(c.Ia){var d=c.Ia;c.Ia=null;rc(c,d)}}else this.g("No debugger detected")}sc(this);return!0};m.Aa=function(a){return a?this.save():!0};function tc(a){(a.A.Kb||!a.F&&void 0===a.T.run)&&a.Oa(!0)}m.Ob=function(){return 0};
|
|
function qc(a){void 0===a.i.gb&&(a.i.gb=0);void 0===a.i.Wa&&(a.i.Wa=-1);void 0===a.i.Ya&&(a.i.Ya=-1);a.A.Ra=0<=a.i.gb&&0<a.i.Wa;a.A.Ra&&(a.i.fb=0,a.i.Xa=a.i.gb-a.H)}function uc(a,b){if(a.A.Ra){var c=!1;a.i.fb=a.i.fb+a.Ob()|0;a.i.Xa-=b;0>=a.i.Xa&&(a.i.Xa+=a.i.Wa,c=!0);0<=a.i.Ya&&a.i.Ya<=vc(a)&&(a.i.Wa=a.i.Ya=-1,qc(a),a.da(),c=!0);c&&a.g(vc(a)+" cycles: checksum="+q(a.i.fb))}}
|
|
m.oa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.T[b]=c;a=!0;break;case "run":this.T[b]=c;c.onclick=function(){var a;if(a=d.w)if(a=d.w,a.A.ia)a=!0;else{var b=null,c,g=Za(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.A.Ta);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.A.ia);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.A.Ta?"powered yet":"ready yet"+(b.rb?" (waiting for notification)":""))+".");a=!1}a&&(d.A.ma?d.da(!0):d.Oa(!0))};a=
|
|
!0;break;case "speed":this.T[b]=c;a=!0;break;case "setSpeed":this.T[b]=c,c.onclick=function(){wc(d,d.i.Na<<1,!0)},c.textContent=this.i.La.toFixed(2)+"Mhz",a=!0}return a};function xc(a,b,c){a.H+=b;c&&(a.C=a.b=0)}
|
|
function yc(a,b){var c=30;c<a.Ea&&(c=a.Ea);2>c&&(c=2);var d=1;b&&1<a.i.Na&&a.i.Ka&&(d=a.i.Ka/a.i.yb);a.i.Pb=Math.round(1E3/30);a.i.hc=Math.floor(a.i.$a/c*d);a.i.zb=Math.floor(a.i.$a/30*d);a.i.Rb=Math.floor(a.i.$a/a.Ea*d);a.i.Qb=Math.floor(a.i.$a/2*d);b||(a.i.Za=a.i.zb,a.i.ib=a.i.Rb,a.i.hb=a.i.Qb);a.i.Ab=0}function vc(a){return a.H+a.G+a.C-a.b}function pc(a){a.i.Ka=0;a.H=a.G=a.C=a.b=0;qc(a);wc(a,1)}
|
|
function wc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Ka/a.i.La?b=1:d=!0;a.i.Na=b;b=a.i.yb*a.i.Na;if(a.i.La!=b){a.i.La=b;b=a.i.La.toFixed(2)+"Mhz";var e=a.T.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.w&&a.w.mb()}xc(a,a.G);a.G=0;a.i.Va=ja();a.i.Ma=0;yc(a);return d}
|
|
m.Oa=function(a){if(hb(this,!0)){if(!this.A.ma){wc(this);this.w&&this.w.start(this.i.Va,vc(this));this.A.ma=!0;this.A.xb=!0;this.K&&this.K.start();var b=this.T.run;b&&(b.textContent="Halt");this.w&&(this.w.va(!0),a&&this.w.mb(!0))}this.i.Ab>=this.i.$a&&yc(this,!0);this.i.jb=0;this.i.sb=ja();this.i.Ma&&(a=this.i.sb-this.i.Ma,a>this.i.Pb&&(this.i.Va+=a,this.i.Va>this.i.sb&&(this.i.Va=this.i.sb)));try{do{var c=this.A.Ra?1:this.i.hc;try{this.bb(c)}catch(e){if("number"!=typeof e)throw e;}var d=this.C-
|
|
this.b;this.G+=d;this.i.jb+=d;xc(this,0,!0);uc(this,d);this.i.ib-=d;0>=this.i.ib&&(this.i.ib+=this.i.Rb,this.w&&zc(this.w,this.i.tb++),this.i.tb>this.Ea&&(this.i.tb=0));this.i.hb-=d;0>=this.i.hb&&(this.i.hb+=this.i.Qb,this.w&&this.w.va());this.i.Za-=d;if(0>=this.i.Za){this.i.Za+=this.i.zb;break}}while(this.A.ma)}catch(e){this.da();sc(this);this.w&&this.w.stop(ja(),vc(this));hb(this,!1);kb(this,e.stack||e.message);return}c=setTimeout;d=this.aa;this.i.Ma=ja();a=this.i.Pb;this.i.jb&&(a=Math.round(a*
|
|
this.i.jb/this.i.zb));a-=this.i.Ma-this.i.sb;if(b=this.i.Ma-this.i.Va)this.i.Ka=Math.round(this.G/(10*b))/100,864E5<=b&&(this.H=0,wc(this));if(0>a||this.i.Ka<this.i.La)a=0;this.i.Ab+=this.i.jb;this.i.Ma+=a;c(d,a)}else sc(this),this.w&&this.w.stop(ja(),vc(this))};m.bb=function(){return 0};m.da=function(a){ib(this,!0);this.C-=this.b;this.b=0;xc(this,this.G);this.G=0;if(this.A.ma){this.A.ma=!1;this.K&&this.K.stop();var b=this.T.run;b&&(b.textContent="Run")}this.A.qb=a};
|
|
function sc(a,b){a.w&&(zc(a.w,-1),a.w.va(b))}function Ac(a){this.Ua=a.model||8080;bc.call(this,a,1E6);this.L=Bc;pc(this);this.A.qb=this.A.Yb=!1;this.Y=0;this.J=[];this.W=0;Cc(this)}Wa(Ac,bc);function Dc(a,b){a.J.push(b)}m=Ac.prototype;m.reset=function(){this.A.ma&&this.da();Cc(this);pc(this);this.A.Sa=!1;this.parent.reset.call(this)};function Cc(a){a.j=0;a.N=0;a.O=0;a.P=0;a.R=0;a.S=0;a.V=0;a.ca=0;F(a,a.W);Ec(a,0);a.u=0}function Fc(a,b){a.W=b;F(a,b)}
|
|
m.Ob=function(){var a=this.j+this.N+this.O+this.P+this.R+this.S+this.V|0;return a=a+this.ca+this.M+Gc(this)|0};
|
|
m.save=function(){var a=new Hc(this);H(a,0,[this.j,this.N,this.O,this.P,this.R,this.S,this.V,this.ca,this.M,Gc(this)]);H(a,1,[this.u,this.H,this.i.Na]);for(var b=this.B,c=0,d=[],e=0;e<b.L;e++){var f=b.U[e];if(f.ya||f.Lb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var p=f[g],n=g+1;n<f.length&&f[n]===p;)n++;k[l++]=n-g;k[l++]=p;g=n}if(k.length<f.length){f=k;break a}}d[h]=f}}H(a,2,d);return a.data()};
|
|
m.restore=function(a){var b=a[0];this.j=b[0];this.N=b[1];this.O=b[2];this.P=b[3];this.R=b[4];this.S=b[5];this.V=b[6];this.ca=b[7]&65535;F(this,b[8]);Ec(this,b[9]);b=a[1];this.u=b[0];this.H=b[1];wc(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 l=e[g++],k=e[g++];l--;)h[f++]=k;e=h}f=b.U[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
|
m.oa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.T[b]=c;this.Y++;d=!0;break;default:d=this.parent.oa.call(this,a,b,c)}return d};function Ic(a){return a.N<<8|a.O}function Jc(a,b){a.N=b>>8&255;a.O=b&255}function Kc(a){return a.P<<8|a.R}function Lc(a,b){a.P=b>>8&255;a.R=b&255}function I(a){return a.S<<8|a.V}
|
|
function Mc(a,b){a.S=b>>8&255;a.V=b&255}function F(a,b){a.M=b&65535}function Nc(a){return a.I&256?1:0}function Oc(a){return mb[a.Z&255]?4:0}function Pc(a){return(a.Z^a.ja)&16?16:0}function Qc(a){return a.I&255?0:64}function Rc(a){return a.Z&128?128:0}function Gc(a){return a.qa&-214|Rc(a)|Qc(a)|Pc(a)|Oc(a)|Nc(a)}function Ec(a,b){a.I=a.Z=a.ja=0;b&1&&(a.I|=256);b&4||(a.Z|=1);b&16&&(a.ja|=16);b&64||(a.I|=255);b&128&&(a.Z^=192);a.qa=a.qa&-513|b&512|2}
|
|
function Sc(a,b){a.ja=a.j^b;return a.Z=(a.I=a.j+b)&255}function Tc(a,b){a.ja=a.j^b;return a.Z=(a.I=a.j+b+(a.I&256?1:0))&255}function Uc(a,b){a.I=a.Z=a.ja=a.j&b;(a.j|b)&8&&(a.ja^=16);return a.I}function ld(a,b){a.ja=b^255;b=a.Z=b+255&255;a.I=a.I&-256|b;return b}function md(a,b){a.ja=b;b=a.Z=b+1&255;a.I=a.I&-256|b;return b}function nd(a,b){return a.Z=a.I=a.ja=a.j|b}function J(a,b){b^=255;a.ja=a.j^b;return a.Z=(a.I=a.j+b+1^256)&255}
|
|
function od(a,b){b^=255;a.ja=a.j^b;return a.Z=(a.I=a.j+b+(a.I&256?0:1)^256)&255}function pd(a,b){return a.Z=a.I=a.ja=a.j^b}m.X=function(a){return this.B.X(a)};m.ga=function(a,b){this.B.ga(a,b)};function L(a){var b=a.X(a.M);F(a,a.M+1);return b}function M(a){var b=a.B.Fa(a.M);F(a,a.M+2);return b}function N(a){var b=a.B.Fa(a.ca);a.ca=a.ca+2&65535;return b}function Q(a,b){a.ca=a.ca-2&65535;a.B.ub(a.ca,b)}
|
|
function R(a,b,c,d){d=d||2;a.T[b]&&(void 0===c&&(kb(a,"Value for "+b+" is invalid"),a.da()),c=!a.A.ma||a.A.Mb?q(c,d):"--------".substr(0,d),a.T[b].textContent!=c&&(a.T[b].textContent=c))}
|
|
m.va=function(a){this.Y&&(a||!this.A.ma||this.A.Mb)&&(R(this,"A",this.j),R(this,"B",this.N),R(this,"C",this.O),R(this,"BC",Ic(this),4),R(this,"D",this.P),R(this,"E",this.R),R(this,"DE",Kc(this),4),R(this,"H",this.S),R(this,"L",this.V),R(this,"HL",I(this),4),R(this,"SP",this.ca,4),R(this,"PC",this.M,4),a=Gc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.T.speed)a.textContent=
|
|
this.A.ma&&this.i.Ka?this.i.Ka.toFixed(2)+"Mhz":"Stopped"};
|
|
m.bb=function(a){this.A.qb=!0;var b=this.A.Yb=this.F&&qd(this.F),c=a?this.A.xb?0:1:-1;this.A.xb=!1;this.C=this.b=a;do{if(this.u){var d;this.u&8&&this.qa&512?(d=199|(this.u&7)<<3,this.u&=-16,this.qa&=-513,this.L[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.u&16){this.b=0;break}}if(b){if(rd(this.F,this.M,c)){this.da();break}c=1}this.L[L(this)].call(this)}while(0<this.b);return this.A.qb?this.C-this.b:void 0===this.A.qb?0:-1};
|
|
Ja(function(){for(var a=A(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ac(d);cb(d,c)}});function sd(){this.b-=4}function td(){F(this,M(this));this.b-=10}function ud(){F(this,N(this));this.b-=10}function vd(){var a=M(this);Q(this,this.M);F(this,a);this.b-=17}
|
|
var Bc=[sd,function(){Jc(this,M(this));this.b-=10},function(){this.ga(Ic(this),this.j);this.b-=7},function(){Jc(this,Ic(this)+1);this.b-=5},function(){this.N=md(this,this.N);this.b-=5},function(){this.N=ld(this,this.N);this.b-=5},function(){this.N=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;this.I=this.I&255|a&256;this.b-=4},sd,function(){var a;Mc(this,a=I(this)+Ic(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.X(Ic(this));this.b-=7},function(){Jc(this,Ic(this)-
|
|
1);this.b-=5},function(){this.O=md(this,this.O);this.b-=5},function(){this.O=ld(this,this.O);this.b-=5},function(){this.O=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;this.I=this.I&255|a;this.b-=4},sd,function(){Lc(this,M(this));this.b-=10},function(){this.ga(Kc(this),this.j);this.b-=7},function(){Lc(this,Kc(this)+1);this.b-=5},function(){this.P=md(this,this.P);this.b-=5},function(){this.P=ld(this,this.P);this.b-=5},function(){this.P=L(this);this.b-=7},function(){var a=this.j<<
|
|
1;this.j=a&255|this.I>>8;this.I=this.I&255|a&256;this.b-=4},sd,function(){var a;Mc(this,a=I(this)+Kc(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.X(Kc(this));this.b-=7},function(){Lc(this,Kc(this)-1);this.b-=5},function(){this.R=md(this,this.R);this.b-=5},function(){this.R=ld(this,this.R);this.b-=5},function(){this.R=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(this.I&256|this.j)>>1;this.I=this.I&255|a;this.b-=4},sd,function(){Mc(this,M(this));this.b-=10},function(){var a=
|
|
M(this);this.B.ub(a,I(this));this.b-=16},function(){Mc(this,I(this)+1);this.b-=5},function(){this.S=md(this,this.S);this.b-=5},function(){this.S=ld(this,this.S);this.b-=5},function(){this.S=L(this);this.b-=7},function(){var a=0,b=Nc(this);if(Pc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Sc(this,a);this.I=b?this.I|256:this.I&-257;this.b-=4},sd,function(){var a;Mc(this,a=I(this)+I(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){var a;a=M(this);a=this.B.Fa(a);Mc(this,a);this.b-=
|
|
16},function(){Mc(this,I(this)-1);this.b-=5},function(){this.V=md(this,this.V);this.b-=5},function(){this.V=ld(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},sd,function(){this.ca=M(this)&65535;this.b-=10},function(){this.ga(M(this),this.j);this.b-=13},function(){this.ca=this.ca+1&65535;this.b-=5},function(){var a=I(this);this.ga(a,md(this,this.X(a)));this.b-=10},function(){var a=I(this);this.ga(a,ld(this,this.X(a)));this.b-=10},function(){this.ga(I(this),
|
|
L(this));this.b-=10},function(){this.I|=256;this.b-=4},sd,function(){var a;Mc(this,a=I(this)+this.ca);this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.X(M(this));this.b-=13},function(){this.ca=this.ca-1&65535;this.b-=5},function(){this.j=md(this,this.j);this.b-=5},function(){this.j=ld(this,this.j);this.b-=5},function(){this.j=L(this);this.b-=7},function(){this.I=Nc(this)?this.I&-257:this.I|256;this.b-=4},function(){this.b-=5},function(){this.N=this.O;this.b-=5},function(){this.N=this.P;
|
|
this.b-=5},function(){this.N=this.R;this.b-=5},function(){this.N=this.S;this.b-=5},function(){this.N=this.V;this.b-=5},function(){this.N=this.X(I(this));this.b-=7},function(){this.N=this.j;this.b-=5},function(){this.O=this.N;this.b-=5},function(){this.b-=5},function(){this.O=this.P;this.b-=5},function(){this.O=this.R;this.b-=5},function(){this.O=this.S;this.b-=5},function(){this.O=this.V;this.b-=5},function(){this.O=this.X(I(this));this.b-=7},function(){this.O=this.j;this.b-=5},function(){this.P=
|
|
this.N;this.b-=5},function(){this.P=this.O;this.b-=5},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.V;this.b-=5},function(){this.P=this.X(I(this));this.b-=7},function(){this.P=this.j;this.b-=5},function(){this.R=this.N;this.b-=5},function(){this.R=this.O;this.b-=5},function(){this.R=this.P;this.b-=5},function(){this.b-=5},function(){this.R=this.S;this.b-=5},function(){this.R=this.V;this.b-=5},function(){this.R=this.X(I(this));
|
|
this.b-=7},function(){this.R=this.j;this.b-=5},function(){this.S=this.N;this.b-=5},function(){this.S=this.O;this.b-=5},function(){this.S=this.P;this.b-=5},function(){this.S=this.R;this.b-=5},function(){this.b-=5},function(){this.S=this.V;this.b-=5},function(){this.S=this.X(I(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.V=this.N;this.b-=5},function(){this.V=this.O;this.b-=5},function(){this.V=this.P;this.b-=5},function(){this.V=this.R;this.b-=5},function(){this.V=this.S;this.b-=
|
|
5},function(){this.b-=5},function(){this.V=this.X(I(this));this.b-=7},function(){this.V=this.j;this.b-=5},function(){this.ga(I(this),this.N);this.b-=7},function(){this.ga(I(this),this.O);this.b-=7},function(){this.ga(I(this),this.P);this.b-=7},function(){this.ga(I(this),this.R);this.b-=7},function(){this.ga(I(this),this.S);this.b-=7},function(){this.ga(I(this),this.V);this.b-=7},function(){var a=this.M-1;if(this.J.length)for(var b=0;b<this.J.length;b++)if(this.J[b](a))return;this.u|=16;this.b-=7;
|
|
this.F&&gb(this,-2147483648)?(F(this,a),this.F.da()):this.qa&512||(this.F&&F(this,a),this.da())},function(){this.ga(I(this),this.j);this.b-=7},function(){this.j=this.N;this.b-=5},function(){this.j=this.O;this.b-=5},function(){this.j=this.P;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.V;this.b-=5},function(){this.j=this.X(I(this));this.b-=7},function(){this.b-=5},function(){this.j=Sc(this,this.N);this.b-=4},function(){this.j=Sc(this,this.O);
|
|
this.b-=4},function(){this.j=Sc(this,this.P);this.b-=4},function(){this.j=Sc(this,this.R);this.b-=4},function(){this.j=Sc(this,this.S);this.b-=4},function(){this.j=Sc(this,this.V);this.b-=4},function(){this.j=Sc(this,this.X(I(this)));this.b-=7},function(){this.j=Sc(this,this.j);this.b-=4},function(){this.j=Tc(this,this.N);this.b-=4},function(){this.j=Tc(this,this.O);this.b-=4},function(){this.j=Tc(this,this.P);this.b-=4},function(){this.j=Tc(this,this.R);this.b-=4},function(){this.j=Tc(this,this.S);
|
|
this.b-=4},function(){this.j=Tc(this,this.V);this.b-=4},function(){this.j=Tc(this,this.X(I(this)));this.b-=7},function(){this.j=Tc(this,this.j);this.b-=4},function(){this.j=J(this,this.N);this.b-=4},function(){this.j=J(this,this.O);this.b-=4},function(){this.j=J(this,this.P);this.b-=4},function(){this.j=J(this,this.R);this.b-=4},function(){this.j=J(this,this.S);this.b-=4},function(){this.j=J(this,this.V);this.b-=4},function(){this.j=J(this,this.X(I(this)));this.b-=7},function(){this.j=J(this,this.j);
|
|
this.b-=4},function(){this.j=od(this,this.N);this.b-=4},function(){this.j=od(this,this.O);this.b-=4},function(){this.j=od(this,this.P);this.b-=4},function(){this.j=od(this,this.R);this.b-=4},function(){this.j=od(this,this.S);this.b-=4},function(){this.j=od(this,this.V);this.b-=4},function(){this.j=od(this,this.X(I(this)));this.b-=7},function(){this.j=od(this,this.j);this.b-=4},function(){this.j=Uc(this,this.N);this.b-=4},function(){this.j=Uc(this,this.O);this.b-=4},function(){this.j=Uc(this,this.P);
|
|
this.b-=4},function(){this.j=Uc(this,this.R);this.b-=4},function(){this.j=Uc(this,this.S);this.b-=4},function(){this.j=Uc(this,this.V);this.b-=4},function(){this.j=Uc(this,this.X(I(this)));this.b-=7},function(){this.j=Uc(this,this.j);this.b-=4},function(){this.j=pd(this,this.N);this.b-=4},function(){this.j=pd(this,this.O);this.b-=4},function(){this.j=pd(this,this.P);this.b-=4},function(){this.j=pd(this,this.R);this.b-=4},function(){this.j=pd(this,this.S);this.b-=4},function(){this.j=pd(this,this.V);
|
|
this.b-=4},function(){this.j=pd(this,this.X(I(this)));this.b-=7},function(){this.j=pd(this,this.j);this.b-=4},function(){this.j=nd(this,this.N);this.b-=4},function(){this.j=nd(this,this.O);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.S);this.b-=4},function(){this.j=nd(this,this.V);this.b-=4},function(){this.j=nd(this,this.X(I(this)));this.b-=7},function(){this.j=nd(this,this.j);this.b-=4},function(){J(this,this.N);
|
|
this.b-=4},function(){J(this,this.O);this.b-=4},function(){J(this,this.P);this.b-=4},function(){J(this,this.R);this.b-=4},function(){J(this,this.S);this.b-=4},function(){J(this,this.V);this.b-=4},function(){J(this,this.X(I(this)));this.b-=7},function(){J(this,this.j);this.b-=4},function(){Qc(this)||(F(this,N(this)),this.b-=6);this.b-=5},function(){Jc(this,N(this));this.b-=10},function(){var a=M(this);Qc(this)||F(this,a);this.b-=10},td,function(){var a=M(this);Qc(this)||(Q(this,this.M),F(this,a),this.b-=
|
|
6);this.b-=11},function(){Q(this,Ic(this));this.b-=11},function(){this.j=Sc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,0);this.b-=11},function(){Qc(this)&&(F(this,N(this)),this.b-=6);this.b-=5},ud,function(){var a=M(this);Qc(this)&&F(this,a);this.b-=10},td,function(){var a=M(this);Qc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},vd,function(){this.j=Tc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,8);this.b-=11},function(){Nc(this)||(F(this,N(this)),this.b-=6);
|
|
this.b-=5},function(){Lc(this,N(this));this.b-=10},function(){var a=M(this);Nc(this)||F(this,a);this.b-=10},function(){var a=L(this);Kb(this.B,a,this.j,this.M+-2&65535);this.b-=10},function(){var a=M(this);Nc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,Kc(this));this.b-=11},function(){this.j=J(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,16);this.b-=11},function(){Nc(this)&&(F(this,N(this)),this.b-=6);this.b-=5},ud,function(){var a=M(this);Nc(this)&&F(this,
|
|
a);this.b-=10},function(){var a=L(this);this.j=zb(this.B,a,this.M+-2&65535)&255;this.b-=10},function(){var a=M(this);Nc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},vd,function(){this.j=od(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,24);this.b-=11},function(){Oc(this)||(F(this,N(this)),this.b-=6);this.b-=5},function(){Mc(this,N(this));this.b-=10},function(){var a=M(this);Oc(this)||F(this,a);this.b-=10},function(){var a=N(this);Q(this,I(this));Mc(this,a);this.b-=18},function(){var a=
|
|
M(this);Oc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,I(this));this.b-=11},function(){this.j=Uc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,32);this.b-=11},function(){Oc(this)&&(F(this,N(this)),this.b-=6);this.b-=5},function(){F(this,I(this));this.b-=5},function(){var a=M(this);Oc(this)&&F(this,a);this.b-=10},function(){var a=I(this);Mc(this,Kc(this));Lc(this,a);this.b-=5},function(){var a=M(this);Oc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=
|
|
11},vd,function(){this.j=pd(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,40);this.b-=11},function(){Rc(this)||(F(this,N(this)),this.b-=6);this.b-=5},function(){var a=N(this);Ec(this,a);this.j=a>>8;this.b-=10},function(){var a=M(this);Rc(this)||F(this,a);this.b-=10},function(){this.qa&=-513;this.b-=4},function(){var a=M(this);Rc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,Gc(this)&255|this.j<<8);this.b-=11},function(){this.j=nd(this,L(this));this.b-=7},function(){Q(this,
|
|
this.M);F(this,48);this.b-=11},function(){Rc(this)&&(F(this,N(this)),this.b-=6);this.b-=5},function(){this.ca=I(this)&65535;this.b-=5},function(){var a=M(this);Rc(this)&&F(this,a);this.b-=10},function(){this.qa|=512;this.b-=4},function(){var a=M(this);Rc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},vd,function(){J(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,56);this.b-=11}];
|
|
function S(a){w.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!wd[b]&&t("Unrecognized ChipSet model: "+b);this.Ua=wd[b]||xd;a.sound&&(this.W=null,window&&(this.W=window.AudioContext||window.webkitAudioContext),this.W&&new this.W);C(this)}Wa(S);var xd=1978.1,wd={SI1978:xd};m=S.prototype;m.oa=function(){return!1};
|
|
m.Ga=function(a,b,c,d){this.B=b;this.b=c;this.F=d;this.w=a;if(this.Ua==xd){var e;a=yd;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.w[g]?t("Input port "+r(g)+" already registered"):c.w[g]=[h,!1]}var l;e=zd;void 0===l&&(l=0);for(var k in e)if(f=b,a=+k+l,c=e[k].bind(this),void 0!==c)for(d=+k+l;d<=a;d++)void 0!==f.u[d]?t("Output port "+r(d)+" already registered"):f.u[d]=[c,!1]}};
|
|
m.Ba=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.Aa=function(a){return a?this.save():!0};m.reset=function(){this.G=this.H=this.C=this.u=this.L=this.K=this.J=0};m.save=function(){var a=new Hc(this);this.Ua==xd&&H(a,0,[this.J,this.K,this.L,this.u,this.C,this.G,this.H]);return a.data()};m.restore=function(a){a=a[0];this.Ua==xd&&(this.J=a[0],this.K=a[1],this.L=a[2],this.u=a[3],this.C=a[4],this.G=a[5],this.H=a[6]);return!0};m.start=function(){};m.stop=function(){};
|
|
m.cc=function(a,b){var c=this.J;db(this,a,null,b,"STATUS0",c);return c};m.dc=function(a,b){var c=this.K;db(this,a,null,b,"STATUS1",c);return c};m.ec=function(a,b){var c=this.L;db(this,a,null,b,"STATUS2",c);return c};m.bc=function(a,b){var c=this.u>>8-this.C&255;db(this,a,null,b,"SHIFT.RESULT",c);return c};m.ic=function(a,b,c){db(this,a,b,c,"SHIFT.COUNT",null);this.C=b};m.kc=function(a,b,c){db(this,a,b,c,"SOUND1",null);this.G=b};
|
|
m.jc=function(a,b,c){db(this,a,b,c,"SHIFT.DATA",null);this.u=b<<8|this.u>>8};m.lc=function(a,b,c){db(this,a,b,c,"SOUND2",null);this.H=b};m.mc=function(a,b,c){db(this,a,b,c,"WATCHDOG",null)};var yd={0:S.prototype.cc,1:S.prototype.dc,2:S.prototype.ec,3:S.prototype.bc},zd={2:S.prototype.ic,3:S.prototype.kc,4:S.prototype.jc,5:S.prototype.lc,6:S.prototype.mc};Ja(function(){for(var a=A(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new S(d);cb(d,c)}});
|
|
function Ad(a){w.call(this,"ROM",a,Ad);this.w=null;this.H=a.addr;this.u=a.size;this.J=a.writable;this.C=a.alias;this.G=a.file;this.K=ba(this.G);if(this.G){a=this.G;var b=ca(this.K);"json"!=b&&"hex"!=b&&(a=oa()+"/api/v1/dump?file="+this.G+"&format=bytes&decimal=true");var c=this;na(a,null,!0,function(a,b,f){Bd(c,a,b,f)})}}Wa(Ad);var Cd=[0,5];Ad.prototype.Ga=function(a,b,c,d){this.B=b;this.b=c;this.F=d;Dd(this)};
|
|
Ad.prototype.Ba=function(){if(this.Da){if(this.F){var a=this.F,b=this.id,c=this.H,d=this.u,e=this.Da,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var l=g.o,k=g.a;if(void 0!==l){var p=f,l=[l>>>0,h],n=ia(p,l,a.Fb);0>n&&p.splice(-(n+1),0,l)}k&&(g.a=k.replace(/''/g,'"'))}a.J.push({nc:b,D:c,gc:d,Da:e,Db:f})}delete this.Da}return!0};Ad.prototype.Aa=function(){return!0};
|
|
function Bd(a,b,c,d){if(d)a.na("Unable to load system ROM (error "+d+": "+b+")");else{Ya(a.Hb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.w=f;else if(h)for(a.w=Array(4*h.length),d=c=0;c<h.length;c++)a.w[d++]=h[c]&255,a.w[d++]=h[c]>>8&255,a.w[d++]=h[c]>>16&255,a.w[d++]=h[c]>>24&255;else a.w=e;a.Da=e.symbols;if(!a.w.length){t("Empty ROM: "+b);return}if(1==a.w.length){t(a.w[0]);return}}catch(g){a.na("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
|
" ").replace(/ +$/,"").split(" "),a.w=Array(b.length),e=0;e<b.length;e++)a.w[e]=aa(b[e],16);Dd(a)}}
|
|
function Dd(a){if(!jb(a))if(!a.G)C(a);else if(a.w&&a.B){a.u||(a.u=a.w.length);if(a.w.length!=a.u)kb(a,"ROM size (0x"+q(a.w.length)+") does not match specified size ("+("0x"+q(a.u))+")");else if(Ed(a,a.H)){var b=[];"number"==typeof a.C?b.push(a.C):null!=a.C&&a.C.length&&(b=a.C);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.B,h=d.u,g=[],l=d.H>>>f.ea;0<h&&l<f.U.length;)g.push(f.U[l++]),h-=f.ua;f=d.B;d=d.u;h=0;for(e>>>=f.ea;0<d&&e<f.U.length;){l=g[h++];if(!l)break;f.U[e++]=l;d-=f.ua}}delete a.w}C(a)}}
|
|
function Ed(a,b){if(sb(a.B,b,a.u,a.J?1:Rb)){var c;for(c=0;c<a.w.length;c++)xb(a.B,b+c,a.w[c]);if(a.J&&256==b){for(c=0;c<Cd.length;c++)xb(a.B,Cd[c],118);Dc(a.b,function(a){return function(b){if(0<=Cd.indexOf(b)){var c=!1,h=a.b,g=a.F;if(5==b)switch(c=!0,h.O){case 2:Fd(a,String.fromCharCode(h.R));break;case 9:for(var l=Kc(h),k="",p=255;p--;){var n=a.b.X(l++);if(36==n)break;k+=String.fromCharCode(n)}Fd(a,k);break;default:c=!1}c?ud.call(h):g&&(a.g("\nCP/M vector "+r(b)),F(h,b),g.da());b=!0}else b=!1;return b}}(a));
|
|
Fc(a.b,b)}return!0}return!1}function Fd(a,b){b=b.replace(/\r/g,"");a.ta&&(a.ta.value+=b,a.ta.scrollTop=a.ta.scrollHeight)}Ja(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ad(d);cb(d,c)}});function Gd(a){w.call(this,"RAM",a,Gd);this.C=a.addr;this.u=a.size;this.w=!1}Wa(Gd);m=Gd.prototype;m.Ga=function(a,b,c,d){this.B=b;this.b=c;this.F=d;C(this)};m.Ba=function(a,b){b||this.reset();return!0};m.Aa=function(a){return a?this.save():!0};
|
|
m.reset=function(){!this.w&&this.u&&sb(this.B,this.C,this.u,1)&&(this.w=!0);this.w||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ja(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Gd(d);cb(d,c)}});function Hd(a){w.call(this,"Keyboard",a,Hd,65536);C(this)}Wa(Hd);Ja(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Hd(d);cb(d,c)}});
|
|
function Id(a,b,c,d,e){var f=this;this.ra=va("Gecko/");var h=["","moz","webkit","ms"];w.call(this,"Video",a,Id,262144);this.ba=a.screenWidth;this.Y=a.screenHeight;this.ka=a.bufferAddr;this.H=a.bufferCols;this.W=a.bufferRows;this.pa=a.bufferBits||1;this.pb=a.bufferLeft||0;if(this.C=a.bufferRotate)this.C=this.C%360,0<this.C&&(this.C-=360),-90!=this.C&&(this.na("unsupported buffer rotation: "+this.C),this.C=0);this.Zb=a.interruptRate;this.Ea=a.refreshRate||60;this.K=b;this.L=c;this.wa=d||b||null;b=a.smoothing;
|
|
(c=Ra.smoothing)&&(b="true"==c?!0:!1);if(null!=b)for(c=0;c<h.length;c++)d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",this.L[d]=b;if(this.G=a.screenRotate)this.G=this.G%360,0<this.G&&(this.G-=360),-90!=this.G?(this.na("unsupported screen rotation: "+this.G),this.G=0):(this.L.translate(0,this.Y),this.L.rotate(this.G*Math.PI/180),this.L.scale(this.Y/this.ba,this.ba/this.Y));this.Ha=[[0,0,0,255],[255,255,255,255]];a=this.H;b=this.W;this.C&&(a=this.W,b=this.H);this.sa=this.L.createImageData(a,
|
|
b);this.J=document.createElement("canvas");this.J.width=a;this.J.height=b;this.Ia=this.J.getContext("2d");if(this.u=e)if(this.u.Pa=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.u.Pa){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){Jd(f,document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?!0:!1)},!1);break}for(c=0;c<
|
|
h.length;c++)if(d=h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){Jd(f,null)},!1);break}}}Wa(Id);Id.prototype.Ga=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.fa=(this.H*this.pa>>3)*this.W;sb(this.B,this.ka,this.fa,3)&&(this.xa=this.fa>>1,this.Ca=16/this.pa|0,this.la=!1,void 0===this.aa||this.aa.length!=this.xa)&&(this.aa=Array(this.xa));C(this)};
|
|
Id.prototype.oa=function(a,b,c){var d=this;switch(b){case "fullScreen":return this.T[b]=c,this.u&&this.u.Pa?c.onclick=function(){d.Pa()}:c.parentNode.removeChild(c),!0}return!1};
|
|
Id.prototype.Pa=function(){var a=!1;if(this.u){if(this.u.Pa){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.ba/this.Y;b>c&&(a=Math.round(c/b*100)+"%")}this.ra?(this.K.style.width=a,this.K.style.width=a,this.K.style.display="block",this.K.style.margin="auto"):(this.u.style.width=a,this.u.style.height="auto");this.u.style.backgroundColor="black";this.u.Pa();a=!0}this.wa&&this.wa.focus()}return a};
|
|
function Jd(a,b){!b&&a.u&&(a.ra?a.K.style.width=a.K.style.height="":a.u.style.width=a.u.style.height="");fb(a,"notifyFullScreen("+b+")",!0)}
|
|
Ja(function(){for(var a=A(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<=pa().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&&(Ha("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");va("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new Id(d,e,h,f,c);cb(d,c)}});
|
|
function Kd(a){w.call(this,"Debugger",a,Kd);this.style=Ld;this.fa=this.Ca=this.L=0;this.Y=T();this.Gb=T();this.G=-1;this.C=[];this.la=!1;this.ka=T();this.J=[];this.pa={};this.u=this.aa=this.H=[];Md(this);this.wa=0;Nd(this);this.Ha=[];Od(this,a.messages);this.Ia=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return rc(b,a)}):void 0===global.$&&(global.$=function(a){return rc(b,a)})}Wa(Kd);
|
|
var Pd={"?":"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",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},Ld=8080,Qd="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(" "),
|
|
Rd="NONE ADC ADC ADD ADD AND AND CALL CALLC CALLS CALLNC CALLNZ CALLNS CALLP CALLNP CALLZ NOT CMC CMP CMP DAA ADD DEC DEC CLI STI HLT IN INC INC JMP JC JS JNC JNZ JNS JP JNP JZ MOV MOV MOV MOV MOV MOV NOP OR OR OUT JMP POP PUSH RCL RCR RET RETC RETS RETNC RETNZ RETNS RETP RETNP RETZ ROL ROR RST SBB SBB MOV MOV MOV MOV STC SUB SUB XCHG XOR XOR XCHG".split(" "),Sd="B C D E H L M A BC DE HL SP PC PSW".split(" "),Td=[[45],[42,2067,32],[71,2131,18193],[29,2067],[28,17],[22,17],[44,17,32],[63],[45,32768],
|
|
[21,18963,2067],[40,18193,2131],[23,2067],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2323,32],[71,2387,18193],[29,2323],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,18963,2323],[40,18193,2387],[23,2323],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2579,32],[68,115,18963],[29,2579],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,18963,2579],[41,18963,115],[23,2579],[28,1297],[22,1297],[44,1297,32],[16,18193],[45,32768],[42,2835,32],[70,115,18193],[29,2835],[28,1617],[22,1617],
|
|
[44,1617,32],[72],[45,32768],[21,18963,2835],[39,18193,115],[23,2835],[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,1617],[43,17,1809],[43,273,17],[43,273,273],[43,273,529],[43,273,785],[43,273,1041],[43,273,1297],[43,273,1617],[43,273,1809],[43,529,17],[43,529,273],[43,529,529],[43,529,785],[43,529,1041],[43,529,1297],[43,529,1617],[43,529,1809],[43,785,17],[43,785,273],[43,785,529],[43,785,785],[43,785,1041],[43,785,1297],[43,
|
|
785,1617],[43,785,1809],[43,1041,17],[43,1041,273],[43,1041,529],[43,1041,785],[43,1041,1041],[43,1041,1297],[43,1041,1617],[43,1041,1809],[43,1297,17],[43,1297,273],[43,1297,529],[43,1297,785],[43,1297,1041],[43,1297,1297],[43,1297,1617],[43,1297,1809],[43,1617,17],[43,1617,273],[43,1617,529],[43,1617,785],[43,1617,1041],[43,1617,1297],[26],[43,1617,1809],[43,1809,17],[43,1809,273],[43,1809,529],[43,1809,785],[43,1809,1041],[43,1809,1297],[43,1809,1617],[43,1809,1809],[3,18193,17],[3,18193,273],
|
|
[3,18193,529],[3,18193,785],[3,18193,1041],[3,18193,1297],[3,18193,1617],[3,18193,1809],[2,18193,17],[2,18193,273],[2,18193,529],[2,18193,785],[2,18193,1041],[2,18193,1297],[2,18193,1617],[2,18193,1809],[73,18193,17],[73,18193,273],[73,18193,529],[73,18193,785],[73,18193,1041],[73,18193,1297],[73,18193,1617],[73,18193,1809],[66,18193,17],[66,18193,273],[66,18193,529],[66,18193,785],[66,18193,1041],[66,18193,1297],[66,18193,1617],[66,18193,1809],[5,18193,17],[5,18193,273],[5,18193,529],[5,18193,785],
|
|
[5,18193,1041],[5,18193,1297],[5,18193,1617],[5,18193,1809],[76,18193,17],[76,18193,273],[76,18193,529],[76,18193,785],[76,18193,1041],[76,18193,1297],[76,18193,1617],[76,18193,1809],[46,18193,17],[46,18193,273],[46,18193,529],[46,18193,785],[46,18193,1041],[46,18193,1297],[46,18193,1617],[46,18193,1809],[18,18193,17],[18,18193,273],[18,18193,529],[18,18193,785],[18,18193,1041],[18,18193,1297],[18,18193,1617],[18,18193,1809],[58],[50,2067],[34,51],[30,51],[11,51],[51,2067],[4,18193,33],[65,128],[62],
|
|
[54],[38,51],[30,32819],[15,51],[7,51],[1,18193,33],[65,128],[57],[50,2323],[33,51],[48,33,18193],[10,51],[51,2323],[74,18193,33],[65,128],[55],[54,32768],[31,51],[27,18193,33],[8,51],[7,32819],[67,18193,33],[65,128],[61],[50,2579],[37,51],[78,19283,18963],[14,51],[51,2579],[6,18193,33],[65,128],[60],[49,2579],[36,51],[75,18963,18707],[13,51],[7,32819],[77,18193,33],[65,128],[59],[50,3347],[35,51],[24],[12,51],[51,3347],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,
|
|
18193,33],[65,128]],Ud={cpu:1,bus:64,mem:128,port:256,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};m=Kd.prototype;
|
|
m.Ga=function(a,b,c,d){this.B=b;this.b=c;this.w=a;(a=dc(a,"messages"))&&Od(this,a);this.pb=Td;Vd(this,function(a){a:{var b=d.B.U,c=a[0],g=a=0,l=b.length;if(c){a=W(X(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.B.ea;l=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,k=0;l--;){var p=b[g];p.type==c?k++||d.g("..."):(c=p.type,k=ub[c],p&&d.g(q(p.id)+" %"+q(g<<d.B.ea)+" %%"+q(p.D)+" "+r(p.nb)+" "+r(p.size)+
|
|
" "+k),c!=Qb&&(c=-1),k=0);a+=d.B.ua;g++}}});C(this)};
|
|
m.oa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.sa=this.T[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",rc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.G<d.C.length-1&&(b=d.C[++d.G]):40==a.keyCode&&(0<d.G?b=d.C[--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.T[b]=c,Da(c,function(){if(d.sa){var a=d.sa.value;d.sa.value=
|
|
"";rc(d,a,!0);return!0}return!1}),!0;case "step":return this.T[b]=c,Da(c,function(a){var b=!1;ib(d,!0)||(hb(d,!0),b=d.bb(a?1:0),hb(d,!1));return b}),!0}return!1};m.mb=function(){this.sa&&this.sa.focus()};function W(a){a=a&&a.D;null==a&&(a=-1);return a}m.X=function(a,b){var c=255,d=W(a);-1!==d&&(c=vb(this.B,d),b&&Wd(a,b));return c};m.Fa=function(a,b){var c=65535,d=W(a);-1!==d&&(c=wb(this.B,d),b&&Wd(a,b));return c};m.ga=function(a,b,c){var d=W(a);-1!==d&&(xb(this.B,d,b),c&&Wd(a,c),sc(this.b,!0))};
|
|
m.ub=function(a,b,c){var d=W(a);if(-1!==d){var e=this.B,f=d&e.B,h=(d&e.C)>>>e.ea;f!=e.B?e.U[h].Cb(f,b&65535,d):(e.U[h++].ob(f,b&255,d),e.U[h&e.K].ob(0,b>>8&255,d+1));c&&Wd(a,c);sc(this.b,!0)}};function T(a){return{D:a,za:!1}}function Xd(a){return[a.D,a.za]}function Yd(a){return{D:a[0],za:a[1]}}
|
|
function X(a,b,c){var d;c=(c?a.Y:a.Gb).D;if(void 0!==b){d=b=Zd(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].Da[d];if(void 0!==f){d=f.o;void 0!==d&&(e=T(d));break}}if(d=e)return d;c=$d(a,b,void 0)}null!=c&&(d=T(c));return d}function ae(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Wb=be(a,b.Ub=c[2]))}function Wd(a,b){null!=a.D&&(a.D+=b||1)}function Z(a){return q(a,4)}
|
|
function ce(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.X(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Od(a,b){a.F=a;a.ha=a.Xb=1073741824;a.xa=null;var c=be(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Ud)0<=ma(c,d)&&(a.ha|=Ud[d],a.g(d+" messages enabled"))}function Vd(a,b){for(var c in Ud)if(64==Ud[c]){a.Ha[c]=b;break}}
|
|
function de(a,b){var c;a=a.toUpperCase();null==b?c=ma(Sd,a):(c=ma(Sd,a.substr(b,3)),0>c&&(c=ma(Sd,a.substr(b,2))));return c}function ee(a,b){var c=0,d=fe(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 6:c=2;break;case 8:case 9:case 10:case 11:case 12:case 13:c=4}return c?q(d,c):"??"}
|
|
function fe(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.N;break;case 1:c=d.O;break;case 8:c=Ic(d);break;case 2:c=d.P;break;case 3:c=d.R;break;case 9:c=Kc(d);break;case 4:c=d.S;break;case 5:c=d.V;break;case 10:c=I(d);break;case 6:c=d.X(I(d));break;case 11:c=d.ca;break;case 12:c=d.M;break;case 13:c=d.j<<8|Gc(d)&255}}return c}
|
|
function ge(a,b){b=Zd(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=de(b,c+1),0<=e&&(b=b.substr(0,c)+ee(a,e)+b.substr(c+1+Sd[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=X(a,e))?(d=e+' "'+ce(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=X(a,e))?(Wd(d),d=e+' "'+
|
|
ce(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(T(this.b.M).D));if(!this.xa||a!=this.xa)if(this.xa=a,this.ha&-2147483648&&(this.da(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Za=0;c.C-=c.b;c.b=0;sc(c)}};function eb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.ha&g)!=g||a.message(b.eb+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+q(d,2):"")+")"+(null!=h?": 0x"+q(h,2):"")+(null!=e?" at "+Z(e):""))}
|
|
function Nd(a){var b;if(qd(a)){if(!a.W||!a.W.length){a.W=Array(1E3);for(b=0;b<a.W.length;b++)a.W[b]=T();a.ra=0;a.g("instruction history buffer allocated")}if(!a.K||!a.K.length)for(a.K=Array(256),b=0;b<a.K.length;b++)a.K[b]=[b,0]}else a.W&&a.W.length&&a.g("instruction history buffer freed"),a.ra=0,a.W=[],a.K=[]}m.Oa=function(a){if(!he(this))return!1;this.b.Oa(a);return!0};
|
|
m.bb=function(a,b,c){if(!he(this))return!1;this.L=0;a||qd(this)&&rd(this,this.b.M,0);try{var d=this.b.bb(a);0<d&&(this.L+=d,xc(this.b,d,!0),uc(this.b,d),this.fa++)}catch(e){"number"!=typeof e&&(this.L=0,kb(this.b,e.stack||e.message))}!1!==c&&sc(this.b);this.va(b||!1);return 0<this.L};m.da=function(a){this.b&&this.b.da(a)};m.va=function(a){void 0===a&&(a=!0);this.Y=T(this.b.M);a&&1!=this.ba?ie(this):je(this)};
|
|
function he(a){var b;if(b=a.b&&jb(a.b))b=a.b,b.A.ia?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!ib(a.b)?(a=a.b,a.A.Sa?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.Ba=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Aa=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){Nd(this);this.fa=this.Ca=0;this.xa=null;this.L=0;this.Y=T(this.b.M);this.A.ma=!1;ke(this);a||this.va()};
|
|
m.save=function(){var a=new Hc(this);H(a,0,Xd(this.Y));H(a,1,Xd(this.ka));H(a,2,[this.C,this.la,this.ha]);H(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.Y=Yd(a[b++]),this.ka=Yd(a[b++]),this.C=a[b][0],"string"==typeof this.C&&(this.C=[this.C]),this.la=a[b][1],this.ha|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ba||this.g("running");this.A.ma=!0;this.$b=a;this.ac=b};
|
|
m.stop=function(a,b){if(this.A.ma){this.A.ma=!1;this.L=b-this.ac;if(!this.ba){var c="stopped";if(this.L){var d=a-this.$b,e=0<d?Math.round(1E3*this.L/d):0,c=c+" (";qd(this)&&(c+=this.fa+" opcodes, ",this.Ca-=this.fa,this.fa=0);c+=this.L+" cycles, "+d+" ms, "+e+" hz)"}else gb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.va(!0);this.mb();ke(this,this.b.M)}};function qd(a){return 1<a.u.length||!!a.wa}
|
|
function rd(a,b,c){var d=a.b;if(0<c&&(a.wa&&!--a.wa||Zb(a,b,1,a.u)))return!0;0<=c&&a.K.length&&(a.fa++,b=vb(a.B,b),null!=b&&(a.K[b][1]++,b=a.W[a.ra],b.D=d.M,b.za=!1,++a.ra==a.W.length&&(a.ra=0)));return!1}function Ab(a,b,c){a.g("break on input from port "+r(b)+": "+q(c));a.da(!0)}function Lb(a,b,c){a.g("break on output to port "+r(b)+": "+q(c));a.da(!0)}
|
|
function Md(a){var b,c;a.u=["bp"];if(void 0!==a.aa)for(b=1;b<a.aa.length;b++){c=a.aa[b];var d=a.B;$b(d.U[W(c)>>>d.ea],!1)}a.aa=["br"];if(void 0!==a.H)for(b=1;b<a.H.length;b++)c=a.H[b],d=a.B,$b(d.U[W(c)>>>d.ea],!0);a.H=["bw"];a.Jb=0}m.Ja=function(a,b,c){var d=!0;c||le(this,a,b,!1,!0);if(a!=this.u){var e=W(b);if(-1===e)this.g("invalid address: "+Z(b.D)),d=!1;else{var f=this.B;f.U[e>>>f.ea].Ja(e&f.B,a==this.H)}}d&&(a.push(b),c?b.za=!0:(me(this,a,a.length-1,"set"),Nd(this)));return d};
|
|
function le(a,b,c,d,e){var f=!1;c=W(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==W(g)&&(!d||g.za)){f=!0;g.za||e||me(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.B,$b(d.U[c>>>d.ea],b==a.H));g.za||Nd(a);break}}return f}function ne(a,b){for(var c=1;c<b.length;c++)me(a,b,c);return b.length-1}function me(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.D)+(d?" "+d:c.Ub?' "'+c.Ub+'"':""))}
|
|
function ke(a,b){if(void 0!==b)Zb(a,b,1,a.u,!0),a.ba=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.za){if(!le(a,a.u,d,!0))break;c=0}}}
|
|
function Zb(a,b,c,d,e){var f=!1;if(!a.Jb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.za)for(var l=W(g),k=0;k<c;k++)if(b+k==l){var p,f=!0;g.za&&(le(a,d,g,!0),e=!0);if(p=g.Wb){for(var f=!1,n=0;n<p.length;n++)if(!oe(a,p[n],!0)){if(p[n].indexOf("if")){f=!0;break}for(var u=n+1;u<p.length&&p[u].indexOf("else");u++)n++;if(u==p.length){f=!0;break}}a.b.A.ma||(f=!0)}if(f){e||me(a,d,h,"hit");break}}}a.Jb--;return f}
|
|
function pe(a,b,c,d){for(var e=T(b.D),f=a.X(b,1),h=a.pb[f],g="",l=(8086!=a.style?Qd:Rd)[h[0]],k=h.length-1,p=0,n,u=1;u<=k;u++){var z="";n=h[u];if(void 0!==n&&!(n&16384&&a.style==Ld)){var v=n&240;if(v){var O=n&15;O?p=O:n|=p;n&61440||(n|=1==u?8192:4096);if(v&32)a:{var z=a,v=n,O=b,B=" ";switch(v&15){case 1:B=q(z.X(O,1),2);break;case 2:B=q(z.X(O,1)<<24>>24,4);break;case 3:B=q(z.Fa(O,2),4);break;default:z="imm("+r(v)+")";break a}8086==z.style&&v&64?B="["+B+"]":v&16||(B=(z.style==Ld?"$":"0x")+B);z=B}else v&
|
|
16?(z=(n&3840)>>8,v=Sd[z],8086==a.style&&n&64&&(6==z&&(v="HL"),v="["+v+"]"),z=v):v&128&&(z=(f>>3&7).toString());if(!z||!z.length){g="INVALID";break}0<g.length&&(g+=",");g+=z||"???"}}}f="";h=Z(e.D)+" ";if(-1!==e.D&&-1!==b.D){do if(f+=q(a.X(e,1),2),null==e.D)break;while(e.D!=b.D)}h+=ga(f,10);h=h+(n&32768?"*":" ")+ga(l,7);g&&(h+=" "+g);c&&(h=ga(h,40)+";"+c,h=a.b.A.Ra?h+("cycles="+vc(a.b).toString()+" cs="+q(a.b.i.fb)):h+(null!=d?"="+d.toString():""));return h}
|
|
function qe(a,b){var c;switch(b){case "I":c=a.b.qa&512;break;case "S":c=Rc(a.b);break;case "Z":c=Qc(a.b);break;case "A":c=Pc(a.b);break;case "P":c=Oc(a.b);break;case "C":c=Nc(a.b);break;default:c=0}return b+(c?"1":"0")+" "}function re(a,b){return Sd[b]+"="+ee(a,b)+" "}function Qe(a){return re(a,7)+re(a,8)+re(a,9)+re(a,10)+re(a,11)+qe(a,"I")+qe(a,"S")+qe(a,"Z")+qe(a,"A")+qe(a,"P")+qe(a,"C")}
|
|
var Re={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
|
function Se(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 $d(a,b,c){var d;if(b){b=Zd(a,b);for(var e=0,f=!1,h=b,g=[],l=[],k=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<k.length;){var p=k[e++],n=p.length,p=ha(p);if(!p){f=!0;break}p=Te(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;l.length&&Re[p]<Re[l[l.length-1]]&&Se(g,l,1);l.push(p);b=b.substr(n+u)}Se(g,l)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ue(a,null,
|
|
d))}return d}function Zd(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=$d(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=X(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.Fa(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.fa-a.Ca}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
|
function Te(a,b,c,d){var e;void 0!==b?(e=de(b),0<=e?e=fe(a,e):(e=a.pa[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 Ue(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 l=d&255,k=8,p="";void 0===k?k=32:32<k&&(k=32);if(null==l||isNaN(l))for(;0<k--;)p="?"+p;else for(;0<k--;)p=(l&1?"1":"0")+p,l>>=1;h=p+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ve(a,b){if(b)return Ue(a,b,a.pa[b]);var c=0;for(b in a.pa)Ue(a,b,a.pa[b]),c++;return 0<c}Kd.prototype.Fb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
|
function We(a,b,c){var d=[],e=W(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.D>>>0,g=f.gc;if(e>=h&&e<h+g){e=ia(f.Db,[e-h],a.Fb);0<=e?Xe(a,b,e,d):c&&(e=~e,Xe(a,b,e-1,d),Xe(a,b,e,d));break}}return d}function Xe(a,b,c,d){var e={},f=a.J[b].Db,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].Da[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
|
|
function Ye(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.K)if("clear"==b){for(c=0;c<a.K.length;c++)a.K[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.K.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?Qd:Rd;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.pb[h][0]]+" ").substr(0,5)+" ("+("0x"+q(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
|
|
function Ze(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ve(a)||a.g("no variables"),!0;if(!c[2])return Ve(a,c[1]);if(!c[3])return delete a.pa[c[1]],!0;var d=$d(a,c[3]);return void 0!==d?(a.pa[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
|
function $e(a,b,c){var d=null;if(b=X(a,b,!0)){var e=We(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.D-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.D)&&(h=" - "+r(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
|
function af(a,b){switch(b[1]){case "8080":a.style=Ld;break;case "8086":a.style=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.i.Wa=c;break;case "start":a.b.i.gb=c;break;case "stop":a.b.i.Ya=c;break;default:a.g("unknown cs option");return}void 0!==c&&qc(a.b);a.g("checksums "+(a.b.A.Ra?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(wc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.La.toFixed(2)+"Mhz")+
|
|
" ("+a.b.i.Na+"x)");return;case "?":a.g("debugger options:");a.g("\t8080\t\tselect 8080-style mnemonics");a.g("\t8086\t\tselect 8086-style mnemonics");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;default:if(b[1]){a.g("unknown option: "+b[1]);return}}a.g(a.style+"-style mnemonics enabled")}
|
|
function ie(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=$d(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.N=g&255;break;case "BC":d.N=g>>8&255;case "C":d.O=g&255;break;case "D":d.P=
|
|
g&255;break;case "DE":d.P=g>>8&255;case "E":d.R=g&255;break;case "H":d.S=g&255;break;case "HL":d.S=g>>8&255;case "L":d.V=g&255;break;case "SP":d.ca=g&65535;break;case "PC":F(d,g);a.Y=T(d.M);break;case "PS":Ec(d,g);break;case "C":d.I=g?d.I|256:d.I&255;break;case "P":g?Oc(d)||(d.Z^=1):Oc(d)&&(d.Z^=1);break;case "A":d.ja=g?~d.Z&16|d.ja&-17:d.Z&16|d.ja&-17;break;case "Z":d.I=g?d.I&-256:d.I|255;break;case "S":g?Rc(d)||(d.Z^=192):Rc(d)&&(d.Z^=192);break;case "I":d.qa=g?d.qa|512:d.qa&-513;break;default:a.g("unknown register: "+
|
|
e);return}if(!h){a.g("invalid value: "+f);return}sc(d);a.g("updated registers:")}a.g(Qe(a));c&&(a.Y=T(d.M),je(a,Z(a.Y.D)))}}function bf(a,b){b=ha(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(ge(a,c[2])):$d(a,b,!0)}function cf(a,b,c){var d="t"!=b;c=Te(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ca(c,function(){return hb(a,!0)&&a.bb(e,d,!1)},function(){sc(a.b);hb(a,!1)})}
|
|
function je(a,b,c,d){if(b=X(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=X(a,c,!0);if(!d||d.D<b.D)return;e=d.D-b.D;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=ib(a,!1)||a.ba?a.L:null;var h=null!=f?"cycles":null,g=We(a,b),l=b.D;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=pe(a,b,h,f);a.g(f);a.Y=b;e-=b.D-l;c++}}}
|
|
function be(a,b,c,d){if(c)if(b){0>a.G&&a.C.length&&(a.G=0);if(0>a.G||b!=a.C[a.G])a.C.splice(0,0,b),a.G=0;a.G--}else a.la?b="end":b=a.C[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 oe(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.la&&(a.g("ended assemble at "+Z(a.ka.D)),a.Y=a.ka,a.la=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.xa=null;if(jb(a)&&0<b.length){a.la&&(b="a "+Z(a.ka.D)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),l=1;l<h.length;l++){var k=h.charAt(l);if("?"==g||"r"==g||"a">k||"z"<k){f[0]=h.substr(l);f.unshift(h.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var p=X(a,f[1],!0);if(p)if(a.ka=
|
|
p,void 0===f[2])a.g("begin assemble at "+Z(p.D)),a.la=!0,sc(a.b);else{var n;a.g("not supported yet");n=[];if(n.length){for(var u=0;u<n.length;u++)a.ga(p,n[u],1);a.g(pe(a,a.ka))}}break;case "b":a:{var z=f[0],v=f[1],O=b;if("?"==v)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 B=z.charAt(1);if("l"==B){var U=0,U=U+ne(a,a.u),U=U+ne(a,a.aa);(U+=ne(a,a.H))||a.g("no breakpoints")}else if("n"==B)a.wa=Te(a,v),a.g("break after "+a.wa+" instruction(s)");else if(void 0===v)a.g("missing breakpoint address");else{var E=T();if("*"!=v&&(E=X(a,v,!0),!E))break a;v=r(E.D);"c"==B?null==E.D?(Md(a),a.g("all breakpoints cleared")):le(a,a.u,E)||le(a,a.aa,E)||
|
|
le(a,a.H,E)||a.g("breakpoint missing: "+Z(E.D)):"i"==B?a.g("breakpoint "+(yb(a.B,E.D)?"enabled":"cleared")+": port "+v+" (input)"):"o"==B?a.g("breakpoint "+(Jb(a.B,E.D)?"enabled":"cleared")+": port "+v+" (output)"):null!=E.D&&(ae(a,E,O),"p"==B?a.Ja(a.u,E):"r"==B?a.Ja(a.aa,E):"w"==B?a.Ja(a.H,E):a.g("unknown breakpoint command: "+B))}}}break;case "c":a.ta&&(a.ta.value="");break;case "d":a:{var wa,P=f[0],K=f[1],ka=f[2],xa=f[3];if("?"==K){var ya="";for(wa in Ud)a.Ha[wa]&&(ya&&(ya+=","),ya+=wa);ya+=",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");ya.length&&a.g("dump extension commands:\n\t"+ya)}else if("state"==K){var se=df(a.w,!0);"console"==ka?console.log(se):(a.ta&&(a.ta.value=""),a.g(se))}else if("symbols"==K)for(var Vc=0;Vc<a.J.length;Vc++){var Wc=a.J[Vc],ab;for(ab in Wc.Da)if("."!=ab.charAt(0)){var te=Wc.Da[ab].o;
|
|
if(void 0!==te){var ue=Wc.Da[ab].l;ue&&(ab=ue);a.g(Z(te)+" "+ab)}}}else{if("d"==P){for(wa in Ud)if(f[1]==wa){var ve=a.Ha[wa];ve?(f.shift(),f.shift(),ve(f)):a.g("no dump registered for "+K);break a}K||(P=a.fc||"db")}else a.fc=P;if("dh"==P){var we=K,xe=ka,ye="",ze=0,V=a.ra,za=a.W;if(za.length){var Y=+we||a.Nb,bb=+xe||10;isNaN(Y)?Y=bb:ye="more ";Y>za.length&&(a.g("note: only "+za.length+" available"),Y=za.length);V-=Y;0>V&&(null==za[za.length-1].D?(Y=V+Y,V=0):V+=za.length);var Xc=[];"call"==xe&&(bb=
|
|
1E5,Xc=["CALL"]);for(void 0!==we&&a.g(Y+" instructions earlier:");0<bb&&V!=a.ra;){var Ae=za[V++];if(null==Ae.D)break;var Bb=T(Ae.D),Af=Y--,Be=pe(a,Bb,"history",Af);(!Xc.length||0<=Be.indexOf(Xc[0]))&&a.g(Be);Bb.vb&&(V+=Bb.vb,bb-=Bb.vb,Y-=Bb.vb);V>=za.length&&(V=0);a.Nb=Y;ze++;bb--}}ze||(a.g("no "+ye+"history available"),a.Nb=void 0)}else{var ec=X(a,K);if(ec){var fc=0;ka&&("l"==ka.charAt(0)&&(ka=ka.substr(1)||xa),fc=Te(a,ka)>>>0,65536<fc&&(fc=65536));for(var Ma="",gc="dd"==P?4:"dw"==P?2:1,hc=gc*fc||
|
|
128,Bf=hc+15>>4||1;Bf--&&0<hc;){var ic=0,Yc=0,Cb,Db="",Zc="",K=Z(ec.D);for(Cb=16;0<Cb&&0<hc;Cb--){var jc=a.X(ec,1),ic=ic|jc<<(Yc++<<3);Yc==gc&&(Db+=q(ic,2*gc),Db+=1==gc?9==Cb?"-":" ":" ",ic=Yc=0);Zc+=32<=jc&&128>jc?String.fromCharCode(jc):".";hc--}Ma&&(Ma+="\n");Ma+=K+" "+Db+(0==Cb?" "+Zc:"")}Ma&&a.g(Ma);a.Gb=ec}}}}break;case "e":if("else"==f[0])break;var kc=1,Ce=255,De=a.X,Ee=a.ga;"ew"==f[0]&&(kc=2,Ce=65535,De=a.Fa,Ee=a.ub);var Fe=kc<<1,Ge=f[1];if(null==Ge)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 lc=X(a,Ge);if(lc)for(var mc=2;mc<f.length;mc++){var Eb=$d(a,f[mc]);if(void 0===Eb){a.g("unrecognized value: "+f[mc]);break}Eb&~Ce&&a.g("warning: "+q(Eb)+" exceeds "+kc+"-byte value");var Cf=De.call(a,lc);a.g("changing "+Z(lc.D)+" from 0x"+q(Cf,Fe)+" to 0x"+q(Eb,Fe));Ee.call(a,lc,Eb,kc)}}break;case "f":Ye(a,f[1]);break;case "g":a:{var He=f[1],Df=b;if(void 0!==He){var $c=X(a,He,!0);if(!$c)break a;ae(a,$c,Df);a.Ja(a.u,$c,!0)}a.Oa(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
|
|
case "h":a:{var ad;if(a.A.ma)ad="halting",a.da();else{if(ib(a,!0))break a;ad="already halted"}c||a.g(ad)}break;case "i":if("if"==f[0]){var bd;var Fb=b.substr(2),Fb=ha(Fb);$d(a,Fb)?(c||a.g("true: "+Fb),bd=!0):(c||a.g("false: "+Fb),bd=!1);bd||(d=!1);break}var cd=f[1];if(cd&&"?"!=cd){var dd=Te(a,cd);if(void 0!==dd){var Ef=zb(a.B,dd);a.g(r(dd)+": "+("0x"+q(Ef,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 Ff=f[0];
|
|
if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var ed=0,Ie=T(),Gb=T(a.b.ca);for(a.g("stack trace for "+Z(Gb.D));10>ed;){for(var Na=null,Gf=256;65536>Gb.D>>>0;){Ie.D=a.Fa(Gb,2);if(null==Gb.D||!Gf--)break;for(var Hf=a,nc=Ie,Je=null,Hb=nc.D,Ke=Hb,fd=1;6>=fd&&Hb;fd++){if(2<fd){nc.D=Hb;var oc=pe(Hf,nc);if(0<=oc.indexOf("CALL")){var Le=oc.indexOf(" ");if(Hb+(oc.indexOf(" ",Le+1)-Le-1)/2==Ke){Je=oc;break}}}Hb--}nc.D=Ke;if(Na=Je)break}if(!Na||
|
|
null==Na)break;var Me=null;if("ks"==Ff){var Ne=Na.match(/[0-9A-F]+$/);Ne&&(Me=$e(a,Ne[0]))}Na=ga(Na,50)+" ;"+(Me||"stack="+Z(Gb.D));a.g(Na);ed++}ed||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){$e(a,f[1],!0);break}break;case "m":a:{var Aa,Ba=null,G=f[1];"?"==G&&(G=void 0);if(void 0!==G){var Oa=0;if("all"==G)Oa=1610481663,G=null;else if("on"==G)Ba=!0,G=null;else if("off"==G)Ba=!1,G=null;else{"keys"==G&&(G="key");"kbd"==G&&(G="keyboard");for(Aa in Ud)if(G==Aa){Oa=Ud[Aa];Ba=!!(a.ha&
|
|
Oa);break}if(!Oa){a.g("unknown message category: "+G);break a}}Oa&&("on"==f[2]?(a.ha|=Oa,Ba=!0):"off"==f[2]&&(a.ha&=~Oa,Ba=!1))}var If=0,Ia="";for(Aa in Ud)if(!G||G==Aa){var Jf=!!(a.ha&Ud[Aa]);if(null===Ba||Ba==Jf)Ia&&(Ia+=","),++If%10||(Ia+="\n\t"),"key"==Aa&&(Aa="keys"),Ia+=Aa}void 0===G&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ba?Ba?"messages on: ":"messages off: ":"message categories:\n\t")+(Ia||"none"));Nd(a)}break;case "o":var gd=f[1],Kf=f[2];if(gd&&
|
|
"?"!=gd){var hd=Te(a,gd,"port #"),id=Te(a,Kf);void 0!==hd&&void 0!==id&&(Kb(a.B,hd,id),a.g(r(hd)+": "+("0x"+q(id,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]){bf(a,b.substr(5));break}var Oe="pr"==f[0]?1:0,Lf=1+Oe;if(a.ba)a.g("step in progress");else{var jd=T(a.b.M);switch(a.X(jd)){case 205:a.ba=Lf,Wd(jd,3)}a.ba?(a.Ja(a.u,jd,!0),a.Oa()||(a.w&&a.w.mb(),a.ba=0)):cf(a,Oe?"tr":"t")}break;
|
|
case "r":if("reset"==b){a.w&&a.w.reset();break}ie(a,f);break;case "s":af(a,f);break;case "t":cf(a,f[0],f[1]);break;case "u":je(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Ze(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.22.0 ("+a.b.Ua+",RELEASE"+(lb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(pa());break;case "?":if(f[1]){bf(a,b.substr(1));break}var Ib="commands:",kd;for(kd in Pd)Ib+="\n"+ga(kd,7)+Pd[kd];qd(a)||(Ib+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Ib);break;default:a.g("unknown command: "+
|
|
b),d=!1}}}catch(Pe){a.g("debugger error: "+(Pe.stack||Pe.message)),d=!1}return d}function rc(a,b,c){b=be(a,b,c);for(var d in b)if(!oe(a,b[d]))return!1;return!0}Ja(function(){for(var a=A(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Kd(d);cb(d,c)}});function Hc(a,b,c){this.id=a.id;this.key=ef(a,b,c);this.F=a.F;ff(this,a.Sb)}function ef(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}
|
|
Hc.prototype={constructor:Hc,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){ff(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 ff(a,b){a[a.id]={};b&&H(a,"parms",b);a.b=!1}function gf(a){var b=!0;if(sa()){var c=JSON.stringify(a[a.id]);ua(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function hf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function jf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:sa()&&(b=ta(a.key))?(a[a.id]=b,a.b=!0):!1}function kf(a,b){return a[a.id][b]||null}function H(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
|
function lf(a,b,c){w.call(this,"Computer",a,lf,67108864);this.A.ia=!1;mf(this,b);this.ba=dc(this,"autoPower",a);this.C=0;this.pa=a.busWidth||a.buswidth;this.w=nf;this.W=null;this.J=this.la=!1;this.ra=dc(this,"url")||"";(Math.random()+.1).toString(36);this.u=of(this);if(this.b=$a("CPU",this.id)){this.F=$a("Debugger",this.id);this.aa=[];for(b=null;b=ob(this,"Video",b);)this.aa.push(b);this.B=new qb({id:this.Hb+".bus",busWidth:this.pa},this.b,this.F);var d,e=Za(this.id);if((this.G=$a("Panel",this.id))&&
|
|
this.G.ta)for(b=0;b<e.length;b++)d=e[b],d.na=this.G.na,d.g=this.G.g,d.ta=this.G.ta;this.g(pf+" v"+qf+"\n"+rf+"\n"+sf);for(b=0;b<e.length;b++)d=e[b],d.Ga&&d.Ga(this,this.B,this.b,this.F);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.L=d:this.w=parseInt(d,10));var f;if(a=dc(this,"state")||(f=!0,a.state))b=this.fa=a,f||(this.J=!0,this.w=nf),this.w&&(this.Y=new Hc(this,qf),jf(this.Y)?b=null:delete this.Y);!b&&this.w&&(b=tf(this))&&(this.J=!0);if(b){var h=this;na(b,null,!0,function(a,b,c){c?(h.L=null,
|
|
h.J=!1,h.na("Unable to load machine state from server (error "+c+(b?": "+ha(b):"")+")")):(h.W=b,h.la=!0);C(h)})}else C(this);this.T.power||(this.ba=!0);!c&&this.ba&&uf(this,this.kb)}else t("Unable to find CPU component")}Wa(lf);var pf="PC8080",qf="1.22.0",rf="Copyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>",sf="License: GPL version 3 or later <http://gnu.org/licenses/gpl.html>",nf=0;
|
|
function mf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.K=b}function dc(a,b,c){var d=b.toLowerCase(),d=Ra[b]||Ra[d];void 0===d&&a.K&&(d=a.K[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function uf(a,b,c){for(var d=Za(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!jb(f)){jb(f,function(){uf(a,b,c)});return}}b.call(a,c)}
|
|
function vf(a,b){var c=new Hc(a,qf,"validate");if(jf(c)&&hf(c)){var d=kf(c,"timestamp"),e=b?kf(b,"timestamp"):"unknown";d!=e&&(a.na("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=lf.prototype;
|
|
m.kb=function(a){void 0===a&&(a=this.w||(this.W?1:nf));if(!this.C){this.C++;var b=!1,c=!1;this.ka=!1;var d=this.Y||new Hc(this,qf);if(-1==a)b=!0;else if(a>nf){if(jf(d,this.W)){this.H=new Hc(this,qf,"failsafe");jf(this.H)&&(wf(this,d),a=2,ff(this.H));H(this.H,"timestamp",la());gf(this.H);var e=this.w&&!this.J;if(1==a||qa("Click OK to restore the previous "+pf+" machine state, or CANCEL to reset the machine.")){if(c=hf(d)){var f=kf(d,"code"),h=kf(d,"data");f&&("ok"==f?jf(d,h):("error"==f&&"no machine state"!=
|
|
h?(this.na("Error: "+h),"unable to verify user"==h&&(ua("user",""),this.u=null)):this.g(f+": "+h),ff(d),jf(d)?(c=hf(d),e=!0):c=!1))}e&&vf(this,c?d:null)}else 2==a&&d.clear()}else vf(this);delete this.W;delete this.Y}e=Za(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=xf(this,h,d,b,c));b=[d,a,c];-1!=a?uf(this,this.Ib,b):this.Ib(b)}};
|
|
function xf(a,b,c,d,e){if(!b.A.ia){b.A.ia=!0;if(b.Ba){var f=null;e&&((f=kf(c,b.id))||(f=kf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ba(f,d)&&f&&(t("Unable to restore state for "+b.type),a.fa&&!a.la?(c.clear(),a.w=nf,window&&window.location.reload()):a.ka=!0,b.Ba(null),e=!1)}if(!d&&b.Eb)for(a=b.Eb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
|
m.Ib=function(a){var b=a[0],c=0>a[1];a=a[2];this.sa=!0;this.A.ia=!0;var d=this.T.power;d&&(d.textContent="Shutdown");this.b&&(xf(this,this.b,b,c,a),tc(this.b));this.ka&&(wf(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.C=0};
|
|
function wf(a,b){if(qa("There may be a problem with your "+pf+" machine.\n\nTo help us diagnose it, click OK to send this "+pf+" machine state to http://www.pcjs.org.")){var c=a.ra,d=a.u||"",e=b.toString(),f=qf,h={};h.app=pf;h.ver=f;h.url=c;h.user=d;h.type="bug";h.data=e;na("http://www.pcjs.org/api/v1/report",h,!0)}}
|
|
function df(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new Hc(a,qf),h=new Hc(a,qf,"validate"),g=la();H(h,"timestamp",g);H(f,"timestamp",g);H(f,"version","1.22.0");H(f,"url",window?window.location.href:null);H(f,"browser",pa());a.b&&a.b.Aa&&(c&&a.b.da(),d=a.b.Aa(b,c),"object"===typeof d&&H(f,a.b.id,d),c&&(a.b.A.ia=!1,!1===d&&(e=null)));for(var g=Za(a.id),l=0;l<g.length;l++){var k=g[l];k.A.ia&&(k.Aa&&(d=k.Aa(b,c),"object"===typeof d&&H(f,k.id,d)),c&&(k.A.ia=!1,!1===d&&(e=null)))}e&&(c?(g=
|
|
d=!1,b?(a.u&&yf(a,a.u,f.toString()),gf(h)&&gf(f)||(e=null,d=g=!0)):a.w&&(d=!0,g=3==a.w),d&&f.clear(g)):e=f.toString());c&&(a.A.ia=!1,b=a.T.power)&&(b.textContent="Power");a.C=0;return e}m.reset=function(){this.B&&this.B.reset&&(fb(this,"Resetting "+this.B.type),this.B.reset());for(var a=Za(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.B&&c.reset&&(fb(this,"Resetting "+c.type),c.reset())}};
|
|
m.start=function(a,b){for(var c=Za(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=Za(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
|
m.oa=function(a,b,c){var d=this;switch(b){case "power":return this.T[b]=c,c.onclick=function(){d.C||(d.A.ia?df(d,!1,!0):uf(d,d.kb))},!0;case "reset":return this.T[b]=c,c.onclick=function(){if(d.A.ia&&!d.C)if(d.w&&!d.L){var a=qa("Click OK to save changes to this "+pf+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");df(d,a,!0);!a&&d.fa?window&&window.location.reload():d.kb(nf)}else d.reset(),d.b&&tc(d.b)},!0;case "save":if(da(oa(),"pcjs.org")){c.parentNode.removeChild(c);
|
|
break}this.T[b]=c;c.onclick=function(){var a=of(d,!0);if(a){var b=!!(d.w&&!d.L||d.fa),c=df(d,b);b?yf(d,a,c):d.na("Resume disabled, machine state not saved")}};return!0}return!1};
|
|
function of(a,b){var c=a.u;c||(c=ta("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=zf(a,c))||a.na("The user ID is invalid."))):b&&a.na("Browser local storage is not available"));return c}
|
|
function zf(a,b){a.u=null;var c=na(oa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(ua("user",c.data),a.u=c.data)}catch(e){t(e.message+" ("+d+")")}return a.u}function tf(a){var b=null;a.u&&(b=oa()+"/api/v1/user?req=load&user="+a.u+"&state="+ef(a,qf));return b}
|
|
function yf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=ef(a,qf);d.data=c;b=na(oa()+"/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.na("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.na(c),ua("user",""),a.u=null)}}
|
|
function ob(a,b,c){a=Za(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.mb=function(){};m.va=function(a){this.b&&this.b.va(a);this.G&&this.G.va(a)};
|
|
function zc(a,b){for(var c=0;c<a.aa.length;c++)a:{var d=a.aa[c];if(0<=b){if(b&1){d=d.b;d.u=d.u&-8|10;break a}var e=d.b;e.u=e.u&-8|9;if(e=d.la){for(var e=d.B,f=d.fa,h=!0,g=d.ka>>>e.ea;0<f&&g<e.U.length;)e.U[g].ya&&(e.U[g].ya=h=!1,e.U[g].Lb=!0),f-=e.ua,g++;e=h}if(e)break a}var g=d.ka,l=g+d.fa,k=0,p=d.Ha,n=0,u=0,e=d.H,z=0,f=d.W,v=h=0,O=d.pa,B=(1<<O)-1;d.pb&&(O=-O,v=16+O);for(;g<l;){var U=wb(d.B,g);if(d.la&&U===d.aa[k])n+=d.Ca;else{d.aa[k]=U;var E=v;v&&(U=U>>8|(U&255)<<8);n<e&&(e=n);for(var wa=0;wa<d.Ca;wa++){var P=
|
|
U>>E&B,K=d.sa,ka=n++,P=p[P],xa=void 0,xa=d.C?(K.height-ka-1)*K.width+u:ka+u*K.width,xa=xa*P.length;K.data[xa]=P[0];K.data[xa+1]=P[1];K.data[xa+2]=P[2];K.data[xa+3]=P[3];E+=O}n>z&&(z=n);u<f&&(f=u);u>=h&&(h=u+1)}g+=2;k++;if(n>=d.H&&(n=0,u++,u>d.W))break}d.la=!0;e<d.H&&(g=z-e,h-=f,d.C&&(l=e,k=g,e=f,g=h,f=d.H-(l+k),h=k),d.Ia.putImageData(d.sa,0,0,e,f,g,h),d.L.drawImage(d.J,0,0,d.J.width,d.J.height,0,0,d.ba,d.Y))}}
|
|
Ja(function(){for(var a=A(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=y(c),c=A(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=y(f),h=new lf(h,d,!0);cb(h,f);h.ba&&uf(h,h.kb)}});Ea.show.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=$a("Computer",c.id))&&c.sa&&!c.A.ia&&c.kb(-1)}});
|
|
Ea.exit.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=$a("Computer",c.id))&&c.A.ia&&df(c,!(!c.w||c.L),!0)}});var Mf=0;function Nf(a,b,c,d,e,f){e("Loading "+a+"...");na(a,null,!0,function(h,g,l){l?(g||(g="unable to load "+a+" ("+l+")"),f(g,null)):Of(g,a,b,c,d,e,f)})}
|
|
function Of(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ya(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(n){g=null,a=n.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Pf(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
|
function Pf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");na(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 l=g[0],k,p=/( [a-z]+=)(['"])(.*?)\2/g;k=p.exec(f);)l=0>l.indexOf(k[1])?l.replace(">",k[0]+">"):l.replace(new RegExp(k[1]+"(['\"])(.*?)\\1"),k[0]);g[0]!=l&&(h=h.replace(g[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
|
"");a=a.replace(d[0],h);Pf(a,b,c)}})}else c(a,null)}
|
|
function Qf(a,b,c,d){function e(a){if(void 0===g){var b=h&&A(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);l&&(--Mf||La(!0));l=!1}var h,g,l=!0;Mf++;Xa[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css";n.styleSheet?n.styleSheet.cssText=k:n.appendChild(document.createTextNode(k));p.appendChild(n)}c||
|
|
(c="/versions/pc8080/1.22.0/components.xsl");k=function(d,g){g?Nf(c,null,null,!1,e,function(d,k){if(k)if(Ya(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--Mf||La(!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),--Mf||La(!0)):f("invalid machine element: "+
|
|
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?Nf(b,a,d,!0,e,k):Of(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(u){f(u.message)}return l}window.embedPC8080=function(a,b,c,d){La(!1);return Qf(a,b,c,d)};window.enableEvents=La;window.sendEvent=Pa;
|
|
function Rf(a,b,c,d){if(!c&&b){d.push(b);a=Xa[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?na(b,null,!0,function(a,b){Sf(b,d)}):Sf(null,d)}else t("Error ("+c+") requesting "+a)}
|
|
function Sf(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=Xa[f],l={},k;for(k in g){var p=g[k],n=ca(k);if("xml"==n){for(n=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=n.exec(g[k]);){var u=d[2];u&&(g[u]||(p=p.replace(d[0],"")))}d=k=ba(k)}else"xsl"==n&&(e=k=ba(k));l[k]=p}a&&(l[k="css"]=a);b[2]&&(l[k="parms"]=b[2]);b[3]&&(l[k="state"]=b[3]);d&&e?(k=JSON.stringify(l),h+=".js",c=c[1]+"var resources="+k+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
|
"©"),k=h,g=null,l="data:application/javascript,",l=va("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),k&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=l,g.download=k,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+k+"."):(window.open(l),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.",t(c)):t("Missing XML/XSL resources")}
|
|
window.savePC=function(a,b,c){var d=$a("Computer",a),e=$a("Debugger",a);if(d){var f=df(d,!0),h=d.K?JSON.stringify(d.K):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Sb:h}))return!0;na(b,null,!0,function(c,d,e){Rf(c,d,e,[a,ba(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();
|