201 lines
72 KiB
JavaScript
201 lines
72 KiB
JavaScript
(function(){/*
|
|
http://pcjs.org/modules/shared/lib/dumpapi.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/reportapi.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/userapi.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/keys.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/strlib.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/usrlib.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/weblib.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/cpudef.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/messages.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/debugger.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/debugger.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/embed.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/defines.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/component.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/defines.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/panel.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/bus.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/memory.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/cpu.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/cpustate.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/cpuops.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/chipset.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/rom.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/ram.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/keyboard.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/video.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/serialport.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/pc8080/lib/computer.js (C) Jeff Parsons 2012-2016
|
|
http://pcjs.org/modules/shared/lib/state.js (C) Jeff Parsons 2012-2016
|
|
*/
|
|
var l,m={td:1,ud:3,vd:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,nb:65,Qb:66,Sb:67,qb:68,E:69,Vb:70,Wb:71,Xb:72,Yb:73,ec:74,fc:75,sb:76,mc:77,nc:78,qc:79,rc:80,Q:81,xc:82,Ac:83,Fc:84,Gc:85,Hc:86,Ic:87,Kc:88,Lc:89,Mc:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,de:97,ee:98,fe:99,d:100,e:101,ge:102,he:103,ie:104,je:105,ke:106,k:107,le:108,
|
|
me:109,n:110,ne:111,p:112,q:113,r:114,oe:115,t:116,pe:117,qe:118,re:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,wd:127};
|
|
function ba(a){var b=16,c;if(a){b||(b=10);var d=a.charAt(0),e=0<a.indexOf(",");e&&(a=a.replace(/,/g,""));"#"==d?(b=8,d=null):"$"==d&&(b=16,d=null);null==d?a=a.substr(1):("0"==d&&(d=a.charAt(1),"b"==d&&e&&(b=2,d=null),"o"==d?(b=8,d=null):"x"==d&&(b=16,d=null)),null==d?a=a.substr(2):(d=a.charAt(a.length-1).toLowerCase(),"y"==d?(b=2,d=null):"."==d?(b=10,d=null):"h"==d&&(b=16,d=null),null==d&&(a=a.substr(0,a.length-1))));var f,d=a;((e=b)&&10!=e?16==e?d.match(/^[0-9a-f]+$/i):8==e?d.match(/^[0-7]+$/):2==
|
|
e&&d.match(/^[01]+$/):d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|0)}return c}function p(a,b,c){var d="";b?8<b&&(b=8):b=a&-65536?8:4;if(null==a||isNaN(a))for(;0<b--;)d="?"+d;else for(;0<b--;){var e=a&15,e=e+(0<=e&&9>=e?48:55),d=String.fromCharCode(e)+d;a>>=4}return(c?"0x":"")+d}function ca(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
|
function ea(){var a=fa();return-1!==a.indexOf("pcjs.org",a.length-8)}var ga={"&":"&","<":"<",">":">",'"':""","'":"'"};function ha(a){return a.replace(/[&<>"']/g,function(a){return ga[a]})}function ia(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
|
var ja={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ka=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,c,d){var e=0,f=null,g=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)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
|
typeof b){var k="",n;for(n in b)b.hasOwnProperty(n)&&(k&&(k+="&"),k+=n+"="+encodeURIComponent(b[n]));k=k.replace(/%20/g,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(k)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(f=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,f,e),g=[f,e]);return g}
|
|
function na(a,b){var c,d={Z:null,va:null,Da:null,wa:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,f,g;if("<"==b.substr(0,1))throw Error(b);g=0>b.indexOf("0x")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.Da=g.load;d.wa=g.exec;if(e=g.bytes)d.Z=e;else if(e=g.words)for(d.Z=Array(2*e.length),f=c=0;c<e.length;c++)d.Z[f++]=e[c]&255,d.Z[f++]=e[c]>>8&255;else if(e=g.data)for(d.Z=Array(4*e.length),f=c=0;c<e.length;c++)d.Z[f++]=e[c]&
|
|
255,d.Z[f++]=e[c]>>8&255,d.Z[f++]=e[c]>>16&255,d.Z[f++]=e[c]>>24&255;else d.Z=g;d.va=g.symbols;d.Z.length?1==d.Z.length&&(q(d.Z[0]),d=null):(q("Empty resource: "+a),d=null)}catch(h){q("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){q("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.Z=e)}return d}
|
|
function fa(){return"http://"+(window?window.location.host:"www.pcjs.org")}function q(a){window&&window.alert(a)}function oa(a){var b=!1;window&&(b=window.confirm(a));return b}var pa=null;function qa(){if(null==pa){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}pa=a}return pa}
|
|
function ra(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function sa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ua(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var va={init:[],show:[],exit:[]},wa=!1,xa=!1,ya=!0;
|
|
function za(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Aa(a){va.init.push(a)}function Ba(a){if(ya)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ca("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Da(a){!ya&&a?(ya=!0,wa&&Ea("init"),xa&&Ea("show")):ya=a}function Ea(a){va[a]&&Ba(va[a])}za("onload",function(){wa=!0;Ba(va.init)});
|
|
za("onpageshow",function(){xa=!0;Ba(va.show)});za(ua("Opera")||ua("iOS")?"onunload":"onbeforeunload",function(){Ba(va.exit)});function r(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.yb=b.comment;this.Qc=b;b=this.id.indexOf(".");0>b?this.Wa=this.id:(this.ya=this.id.substr(0,b),this.Wa=this.id.substr(b+1));this[a]=c;this.j={ready:!1,Za:!1,ib:!1,X:!1,error:!1};this.bb=null;this.j.error=!1;this.v={};this.N=null;v.push(this)}var Fa=void 0,Ga={};
|
|
if(window){Fa||(Fa=window.location.search.substr(1));for(var Ha,Ia=/\+/g,Ja=/([^&=]+)=?([^&]*)/g;Ha=Ja.exec(Fa);)Ga[decodeURIComponent(Ha[1].replace(Ia," "))]=decodeURIComponent(Ha[2].replace(Ia," "))}function Ka(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 w(a,b){b||(b=r);a.prototype=Ka(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var La=window.PCjs.Machines||(window.PCjs.Machines={}),v=window.PCjs.Components||(window.PCjs.Components=[])}else La={},v=[];function Ma(a,b,c){La[a]&&b&&(La[a][b]=c)}function Ca(a,b,c){b||q((c?c+": ":"")+a)}
|
|
function Na(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<v.length;b++){var d=v[b];a&&d.id.indexOf(a)||c.push(d)}return c}function Oa(a){if(void 0!==a){var b;for(b=0;b<v.length;b++)if(v[b].id===a)return v[b]}return null}function Pa(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<v.length;d++)if(c)c==v[d]&&(c=null);else if(!(a!=v[d].type||b&&v[d].id.indexOf(b)))return v[d]}return null}
|
|
function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){q(c.message+" ("+a+")")}return b}function Qa(a,b){b=A(b.parentNode,"pc8080-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){var g=f.getAttribute("class");if(g)for(var h=g.split(" "),k=0;k<h.length;k++)switch(g=h[k],g){case "pc8080-binding":(g=y(f))&&g.binding&&a.U(g.type,g.binding,f,g.value),k=h.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}
|
|
r.prototype={constructor:r,parent:null,toString:function(){return this.name?this.name:this.id||this.type},U:function(a,b,c){switch(b){case "clear":return this.v[b]||(this.v[b]=c,c.onclick=function(a){return function(){a.v.print&&(a.v.print.value="")}}(this)),!0;case "print":return this.v[b]||(this.xa=this.v[b]=c,c.value="",this.da=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.J=function(a){this.da(a,this.Wa)}),!0;default:return!1}},log:function(){},da:function(){},status:function(a){this.da(this.Wa+": "+a)},J:function(a,b,c){Ca(a,b,c||this.type)},fa:function(){return this.j.X=!0},ha:function(a,b){b&&(this.j.X=!1);return!0}};function Sa(a,b){if(a.j.ib)return a.j.Za=!1,a.j.ib=!1;if(a.j.error)return a.da(a.toString()+" error"),!1;a.j.Za=b;return a.j.Za}function B(a){if(!a.j.error&&(a.j.ready=!0,a.j.ready)){var b=a.bb;a.bb=null;b&&b()}}
|
|
function Ta(a,b){b&&(a.j.ready?b():a.bb=b);return a.j.ready}Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1});Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});
|
|
Function.prototype.bind||(Function.prototype.bind=function(a){function b(){return e.apply(this instanceof c&&a?this:a,d.concat(Array.prototype.slice.call(arguments)))}function c(){}if("function"!=typeof this)throw new TypeError("Function.prototype.bind: non-callable object");var d=Array.prototype.slice.call(arguments,1),e=this;c.prototype=this.prototype;b.prototype=new c;return b});
|
|
var Ua="undefined"!==typeof ArrayBuffer,Va=[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 Wa(a){r.call(this,"Panel",a,Wa)}w(Wa);l=Wa.prototype;l.U=function(a,b,c,d){return this.w&&this.w.U(a,b,c,d)||this.a&&this.a.U(a,b,c,d)||this.l&&this.l.U(a,b,c,d)?!0:this.parent.U.call(this,a,b,c,d)};l.qa=function(a,b,c,d){this.w=a;this.i=b;this.a=c;this.N=d;this.l=Xa(a,"Keyboard")};l.fa=function(a,b){b||Ya();return!0};l.ha=function(){return!0};l.Ea=function(){};
|
|
function Ya(){for(var a=!1,b=A(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=y(d),f=Oa(e.id);f||(a=!0,f=new Wa(e));Qa(f,d);a&&B(f)}}Aa(Ya);
|
|
function Za(a,b,c){r.call(this,"Bus",a,Za);this.a=b;this.N=c;this.o=a.busWidth||16;this.s=Math.pow(2,this.o);this.g=this.s-1|0;this.i=(this.o>>1)+2;10>this.i&&(this.i=10);15<this.i&&(this.i=15);this.c=1<<this.i;this.u=this.c>>2;this.f=this.c-1;this.h=this.s/this.c|0;this.m=this.h-1;this.l=[];this.w=[];this.A=[];this.B=[];a=new C;$a(a,this.N);this.b=Array(this.h);for(b=0;b<this.h;b++)this.b[b]=a;B(this)}w(Za);Za.prototype.reset=function(){};Za.prototype.fa=function(a,b){b||this.reset();return!0};
|
|
function ab(a,b,c,d){for(var e=b,f=c,g=e>>>a.i;0<f&&g<a.b.length;){var h=a.b[g],k=g*a.c,n=a.c-(e-k);n>f&&(n=f);if(h&&h.size){if(h.type==d){if(e+f<=h.Qa)return h.gb+=h.Qa-e,h.Qa=e,!0;if(e>=h.Qa+h.gb){n=h.size-(e-k);n>f&&(n=f);h.gb=e-h.Qa+n;e=k+a.c;f-=n;g++;continue}}return bb(1,e,f)}e=new C(e,n,a.c,d);$a(e,a.N,h);a.b[g++]=e;e=k+a.c;f-=n}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+cb[d]+" at "+p(b,4,!0)),!0):bb(2,b,c)}Za.prototype.I=function(a){return this.b[(a&this.g)>>>this.i].Ta(a&this.f,a)};
|
|
function db(a,b){return a.b[(b&a.g)>>>a.i].fb(b&a.f,b)}function eb(a,b){var c=b&a.f,d=(b&a.g)>>>a.i;return c!=a.f?a.b[d].od(c,b):a.b[d++].Ta(c,b)|a.b[d&a.m].Ta(0,b+1)<<8}Za.prototype.aa=function(a,b){this.b[(a&this.g)>>>this.i].Ua(a&this.f,b&255,a)};function fb(a,b,c){a.b[(b&a.g)>>>a.i].Lb(b&a.f,c&255,b)}function gb(a,b,c){var d=b&a.f,e=(b&a.g)>>>a.i;d!=a.f?a.b[e].pd(d,c&65535,b):(a.b[e++].Ua(d,c&255,b),a.b[e&a.m].Ua(0,c>>8&255,b+1))}
|
|
function ib(a){for(var b=0,c=[],d=0;d<a.h;d++){var e=a.b[d];if(e.na||e.Eb){c[b++]=d;var f=b++;if(e=e.save()){for(var g=0,h=0,k=[];g<e.length;){for(var n=e[g],u=g+1;u<e.length&&e[u]===n;)u++;k[h++]=u-g;k[h++]=n;g=u}k.length<e.length&&(e=k)}c[f]=e}}return c}function jb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var k=+e+d;k<=g;k++)void 0!==f.l[k]?q("Input port "+p(k,4,!0)+" already registered"):f.l[k]=[h,!1]}}
|
|
function kb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var k=+e+d;k<=g;k++)void 0!==f.w[k]?q("Output port "+p(k,4,!0)+" already registered"):f.w[k]=[h,!1]}}function bb(a,b,c){q("Memory block error ("+a+": "+p(b)+","+p(c)+")");return!1}var lb;if(Ua){var mb=new ArrayBuffer(2);(new DataView(mb)).setUint16(0,256,!0);lb=256===(new Uint16Array(mb))[0]}else lb=!1;var nb=lb;
|
|
function C(a,b,c,d){this.id=ob+=2;this.a=null;this.Qa=a;this.gb=b;this.size=c||0;this.type=d||pb;this.c=d==qb;$a(this);this.na=this.Eb=!1;if(c)if(Ua)this.i=new ArrayBuffer(c),this.v=new DataView(this.i,0,c),this.b=new Uint8Array(this.i,0,c),this.h=new Uint16Array(this.i,0,c>>1),this.a=new Int32Array(this.i,0,c>>2),rb(this,nb?sb:tb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;rb(this,ub)}else rb(this)}var pb=0,qb=2,cb=["NONE","RAM","ROM","VID","H/W"],ob=0;
|
|
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(Ua)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.v.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Ua)for(b=0;b<a.length;b++)this.v.setInt32(b<<2,a[b],!0);else this.a=a;return this.na=!0}return!1},l:function(){return 255},m:function(){},w:function(a,b){return this.Ta(a++,b++)|this.Ta(a,b)<<8},o:function(a,b,c){this.Ua(a++,b&255,c++);this.Ua(a,b>>8,c)},B:function(a){return this.a[a>>
|
|
2]>>>((a&3)<<3)&255},H:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},R:function(a,b){var c=a>>2;a=(a&3)<<3;this.a[c]=this.a[c]&~(255<<a)|b<<a;this.na=!0},Y:function(a,b){var c=a>>2;a=(a&3)<<3;24>a?this.a[c]=this.a[c]&~(65535<<a)|b<<a:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.na=!0},u:function(a,b){return this.fb(a,b)},G:function(a,b){return this.Ib(a,b)},M:function(a,b,c){this.c||this.Lb(a,b,c)},V:function(a,
|
|
b,c){this.c||this.W(a,b,c)},s:function(a){return this.b[a]},A:function(a){return this.b[a]},F:function(a){return this.v.getUint16(a,!0)},L:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.h[a>>1]},K:function(a,b){this.b[a]=b;this.na=!0},P:function(a,b){this.b[a]=b;this.na=!0},T:function(a,b){this.v.setUint16(a,b,!0);this.na=!0},ya:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.h[a>>1]=b;this.na=!0}};function $a(a,b,c){a.N=b;a.f=a.g=0;c&&((a.f=c.f)&&vb(a,wb,!1),(a.g=c.g)&&xb(a,wb,!1))}
|
|
function xb(a,b,c){c&&a.g||(a.Ua=!a.c&&b[1]||a.m,a.pd=!a.c&&b[3]||a.o);if(c||void 0===c)a.Lb=b[1]||a.m,a.W=b[3]||a.o}function vb(a,b,c){c&&a.f||(a.Ta=b[0]||a.l,a.od=b[2]||a.w);if(c||void 0===c)a.fb=b[0]||a.l,a.Ib=b[2]||a.w}function rb(a,b){b||(b=yb);vb(a,b,void 0);xb(a,b,void 0)}var yb=[],ub=[C.prototype.B,C.prototype.R,C.prototype.H,C.prototype.Y],wb=[C.prototype.u,C.prototype.M,C.prototype.G,C.prototype.V];
|
|
if(Ua)var tb=[C.prototype.s,C.prototype.K,C.prototype.F,C.prototype.T],sb=[C.prototype.A,C.prototype.P,C.prototype.L,C.prototype.ya];function zb(a,b){r.call(this,"CPU",a,zb);var c=a.multiplier||1;this.la=a.cycles||b;this.K=c;this.Ga=Math.round(this.la/1E4)/100;this.T=this.Ga*this.K;this.j.oa=!1;this.j.Jb=!1;this.j.Ra=a.autoStart;this.j.Cb=!1;this.j.$a=!1;this.ta=this.W=0;this.ua=a.csStart;this.Y=a.csInterval;this.ia=a.csStop;this.F=[];this.Ya=this.lb.bind(this);B(this)}w(zb);var Ab=["power","reset"];
|
|
l=zb.prototype;l.qa=function(a,b,c,d){this.w=a;this.i=b;this.N=d;for(b=0;b<Ab.length;b++)(c=this.v[Ab[b]])&&this.w.U(null,Ab[b],c);this.L=Xa(a,"ChipSet");a=Bb(a,"autoStart");null!=a&&(this.j.Ra="true"==a?!0:"false"==a?!1:!!a);B(this)};l.reset=function(){};l.save=function(){return null};l.restore=function(){return!1};l.fa=function(a,b){if(!b){if(a&&this.restore){Cb(this);if(!this.restore(a))return!1;Db(this)}else this.reset();this.da("No debugger detected")}Eb(this);return!0};
|
|
l.ha=function(a){return a?this.save():!0};l.Ra=function(){return this.j.Ra||void 0===this.v.run?(this.lb(),!0):!1};l.Fb=function(){return 0};function Db(a){void 0===a.ua&&(a.ua=0);void 0===a.Y&&(a.Y=-1);void 0===a.ia&&(a.ia=-1);a.j.$a=0<=a.ua&&0<a.Y;a.j.$a&&(a.ta=0,a.W=a.ua-a.G)}
|
|
l.U=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.v[b]=c;a=!0;break;case "run":this.v[b]=c;c.onclick=function(){var a;if(a=d.w)if(a=d.w,a.j.X)a=!0;else{var b=null,c,h=Na(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.j.ready);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.j.X);c++);c==h.length&&(b=a);q("The "+b.type+" component ("+b.id+") is not "+(b.j.ready?"powered yet":"ready yet"+(b.bb?" (waiting for notification)":""))+".");a=!1}a&&(d.j.oa?Fb(d):d.lb())};a=!0;
|
|
break;case "speed":this.v[b]=c;a=!0;break;case "setSpeed":this.v[b]=c,c.onclick=function(){Gb(d,d.K<<1,!0)},c.textContent=this.T.toFixed(2)+"Mhz",a=!0}return a};function Hb(a,b){var c=1;b&&1<a.K&&a.P&&(c=a.P/a.Ga);a.Oa=Math.round(1E3/30);a.Aa=Math.floor(a.la/30*c);b||(a.ka=a.Aa);a.Ha=0}function Ib(a){return a.G+a.M+a.V-a.a}function Cb(a){a.P=0;a.Pa=0;a.G=a.M=a.V=a.a=0;Db(a);Gb(a,1)}
|
|
function Gb(a,b,c){if(void 0!==b){.8>a.P/a.T&&(b=1);a.K=b;b=a.Ga*a.K;if(a.T!=b){a.T=b;b=a.T.toFixed(2)+"Mhz";var d=a.v.setSpeed;d&&(d.textContent=b);a.da("target speed: "+b)}c&&a.w&&Jb(a.w)}a.G+=a.M;a.M=0;a.H=ka();a.R=0;Hb(a)}function Kb(a,b){var c=a.F.length;a.F.push([-1,b]);return c}function Lb(a,b,c){0<=b&&b<a.F.length&&0>a.F[b][0]&&(c*=a.la*a.K/1E3,a.F[b][0]=c+Nb(a))}function Nb(a,b){var c=a.V-=a.a;a.a=0;b&&(a.V=0);return c}
|
|
l.lb=function(a){if(Sa(this,!0)){if(!this.j.oa){Gb(this);this.w&&this.w.start(this.H,Ib(this));this.j.oa=!0;this.j.Jb=!0;this.L&&this.L.start();var b=this.v.run;b&&(b.textContent="Halt");this.w&&(this.w.Ea(!0),a&&Jb(this.w,!0))}this.Ha>=this.la&&Hb(this,!0);this.pa=0;this.sa=ka();this.R&&(a=this.sa-this.R,a>this.Oa&&(this.H+=a,this.H>this.sa&&(this.H=this.sa)));try{do{for(var c,d=this.j.$a?1:this.Aa,e=this.F.length-1;0<=e;e--){var f=this.F[e];0>f[0]||d>f[0]&&(d=f[0])}c=d;this.Kb(c);c=Nb(this,!0);
|
|
this.pa+=c;this.M+=c;a=c;this.j.$a&&(b=!1,this.ta=this.ta+this.Fb()|0,this.W-=a,0>=this.W&&(this.W+=this.Y,b=!0),0<=this.ia&&this.ia<=Ib(this)&&(this.Y=this.ia=-1,Db(this),Fb(this),b=!0),b&&this.da(Ib(this)+" cycles: checksum="+p(this.ta)));a=c;for(var g=this.F.length-1;0<=g;g--){var h=this.F[g];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.ka-=c;if(0>=this.ka){this.ka+=this.Aa;15<=++this.Pa&&(this.w&&this.w.Ea(),this.Pa=0);break}}while(this.j.oa)}catch(k){Fb(this);Eb(this);this.w&&this.w.stop(ka(),
|
|
Ib(this));Sa(this,!1);c=k.stack||k.message;this.j.error=!0;this.J(c);return}c=setTimeout;d=this.Ya;this.R=ka();e=this.Oa;this.pa&&(e=Math.round(e*this.pa/this.Aa));e-=this.R-this.sa;if(f=this.R-this.H)this.P=Math.round(this.M/(10*f))/100,864E5<=f&&(this.G=0,Gb(this));if(0>e||this.P<this.T)-1E3>e&&(this.H-=e),e=0;this.Ha+=this.pa;this.R+=e;c(d,e)}else Eb(this),this.w&&this.w.stop(ka(),Ib(this))};l.Kb=function(){return 0};
|
|
function Fb(a){a.j.Za&&(a.j.ib=!0);Nb(a);a.G+=a.M;a.M=0;if(a.j.oa){a.j.oa=!1;a.L&&a.L.stop();var b=a.v.run;b&&(b.textContent="Run")}a.j.complete=void 0}function Eb(a){if(a.w){for(var b=a.w,c=0;c<b.l.length;c++)Ob(b.l[c],void 0);a.w.Ea(void 0)}}function Pb(a){zb.call(this,a,1E6);this.La=Qb;Cb(this);this.j.complete=this.j.Rc=!1;this.Na=0;this.ra=[];this.Ma=0;Rb(this)}w(Pb,zb);function Sb(a,b){a.ra.push(b)}l=Pb.prototype;l.reset=function(){this.j.oa&&Fb(this);Rb(this);Cb(this);this.j.error=!1;this.parent.reset.call(this)};
|
|
function Rb(a){a.b=0;a.c=0;a.C=0;a.f=0;a.D=0;a.g=0;a.h=0;a.s=0;D(a,a.Ma);Tb(a,0);a.A=0}function Ub(a,b){a.Ma=b;D(a,b)}l.Fb=function(){var a=this.b+this.c+this.C+this.f+this.D+this.g+this.h|0;return a=a+this.s+this.m+Vb(this)|0};l.save=function(){var a=new F(this);a.set(0,[this.b,this.c,this.C,this.f,this.D,this.g,this.h,this.s,this.m,Vb(this)]);a.set(1,[this.A,this.G,this.K]);a.set(2,ib(this.i));return a.data()};
|
|
l.restore=function(a){var b=a[0];this.b=b[0];this.c=b[1];this.C=b[2];this.f=b[3];this.D=b[4];this.g=b[5];this.h=b[6];this.s=b[7]&65535;D(this,b[8]);Tb(this,b[9]);b=a[1];this.A=b[0];this.G=b[1];Gb(this,b[3]);a:{b=this.i;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.u){for(var f=0,g=Array(b.u),h=0;h<e.length-1;)for(var k=e[h++],n=e[h++];k--;)g[f++]=n;e=g}f=b.b[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
|
l.U=function(a,b,c){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.v[b]=c;this.Na++;a=!0;break;default:a=this.parent.U.call(this,a,b,c)}return a};function Wb(a){return a.c<<8|a.C}function Xb(a,b){a.c=b>>8&255;a.C=b&255}function Yb(a){return a.f<<8|a.D}function Zb(a,b){a.f=b>>8&255;a.D=b&255}function G(a){return a.g<<8|a.h}
|
|
function H(a,b){a.g=b>>8&255;a.h=b&255}function D(a,b){a.m=b&65535}function J(a){return a.l&256?1:0}function K(a,b){a.l=a.l&255|b}function $b(a){return Va[a.o&255]?4:0}function Vb(a){return a.B&-214|(a.o&128?128:0)|(a.l&255?0:64)|((a.o^a.u)&16?16:0)|$b(a)|J(a)}function Tb(a,b){a.l=a.o=a.u=0;b&1&&(a.l|=256);b&4||(a.o|=1);b&16&&(a.u|=16);b&64||(a.l|=255);b&128&&(a.o^=192);a.B=a.B&-726|b&512|2}function L(a,b){a.u=a.b^b;return a.o=(a.l=a.b+b)&255}
|
|
function ac(a,b){a.u=a.b^b;return a.o=(a.l=a.b+b+(a.l&256?1:0))&255}function bc(a,b){a.l=a.o=a.u=a.b&b;(a.b|b)&8&&(a.u^=16);return a.l}function cc(a,b){a.u=b^255;b=a.o=b+255&255;a.l=a.l&-256|b;return b}function dc(a,b){a.u=b;b=a.o=b+1&255;a.l=a.l&-256|b;return b}function ec(a,b){return a.o=a.l=a.u=a.b|b}function M(a,b){b^=255;a.u=a.b^b;return a.o=(a.l=a.b+b+1^256)&255}function fc(a,b){b^=255;a.u=a.b^b;return a.o=(a.l=a.b+b+(a.l&256?0:1)^256)&255}function gc(a,b){return a.o=a.l=a.u=a.b^b}l.I=function(a){return this.i.I(a)};
|
|
l.aa=function(a,b){this.i.aa(a,b)};function N(a){var b=a.I(a.m);D(a,a.m+1);return b}function O(a){var b=eb(a.i,a.m);D(a,a.m+2);return b}function P(a){var b=eb(a.i,a.s);a.s=a.s+2&65535;return b}function Q(a,b){a.s=a.s-2&65535;gb(a.i,a.s,b)}function hc(a){if(a.a&&a.A&255&&a.B&512){for(var b=0;8>b&&!(a.A&1<<b);b++);a.A&=~(0>b?255:1<<b);a.B&=-513;a.A&=-257;a.La[199|b<<3].call(a)}return a.A&256?(Nb(a),!1):!0}function ic(a,b){a.A|=1<<b;a.B&512&&Nb(a)}
|
|
function S(a,b,c,d){d=d||2;a.v[b]&&(void 0===c&&(a.j.error=!0,a.J("Value for "+b+" is invalid"),Fb(a)),c=!a.j.oa||a.j.Cb?p(c,d):"--------".substr(0,d),a.v[b].textContent!=c&&(a.v[b].textContent=c))}
|
|
l.Ea=function(a){this.Na&&(a||!this.j.oa||this.j.Cb)&&(S(this,"A",this.b),S(this,"B",this.c),S(this,"C",this.C),S(this,"BC",Wb(this),4),S(this,"D",this.f),S(this,"E",this.D),S(this,"DE",Yb(this),4),S(this,"H",this.g),S(this,"L",this.h),S(this,"HL",G(this),4),S(this,"SP",this.s,4),S(this,"PC",this.m,4),a=Vb(this),S(this,"PS",a,4),S(this,"IF",a&512?1:0,1),S(this,"SF",a&128?1:0,1),S(this,"ZF",a&64?1:0,1),S(this,"AF",a&16?1:0,1),S(this,"PF",a&4?1:0,1),S(this,"CF",a&1?1:0,1));if(a=this.v.speed)a.textContent=
|
|
this.j.oa&&this.P?this.P.toFixed(2)+"Mhz":"Stopped"};l.Kb=function(a){this.j.complete=!0;this.j.Rc=!1;this.j.Jb=!1;this.V=this.a=a;if(hc(this)){do this.La[N(this)].call(this);while(0<this.a)}return this.j.complete?this.V-this.a:void 0===this.j.complete?0:-1};Aa(function(){for(var a=A(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Pb(d);Qa(d,c)}});function jc(){this.a-=4}function kc(){D(this,O(this));this.a-=10}function lc(){D(this,P(this));this.a-=10}
|
|
function mc(){var a=O(this);Q(this,this.m);D(this,a);this.a-=17}
|
|
var Qb=[jc,function(){Xb(this,O(this));this.a-=10},function(){this.aa(Wb(this),this.b);this.a-=7},function(){Xb(this,Wb(this)+1);this.a-=5},function(){this.c=dc(this,this.c);this.a-=5},function(){this.c=cc(this,this.c);this.a-=5},function(){this.c=N(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;K(this,a&256);this.a-=4},jc,function(){var a;H(this,a=G(this)+Wb(this));K(this,a>>8&256);this.a-=10},function(){this.b=this.I(Wb(this));this.a-=7},function(){Xb(this,Wb(this)-1);this.a-=5},
|
|
function(){this.C=dc(this,this.C);this.a-=5},function(){this.C=cc(this,this.C);this.a-=5},function(){this.C=N(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;K(this,a);this.a-=4},jc,function(){Zb(this,O(this));this.a-=10},function(){this.aa(Yb(this),this.b);this.a-=7},function(){Zb(this,Yb(this)+1);this.a-=5},function(){this.f=dc(this,this.f);this.a-=5},function(){this.f=cc(this,this.f);this.a-=5},function(){this.f=N(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|J(this);
|
|
K(this,a&256);this.a-=4},jc,function(){var a;H(this,a=G(this)+Yb(this));K(this,a>>8&256);this.a-=10},function(){this.b=this.I(Yb(this));this.a-=7},function(){Zb(this,Yb(this)-1);this.a-=5},function(){this.D=dc(this,this.D);this.a-=5},function(){this.D=cc(this,this.D);this.a-=5},function(){this.D=N(this);this.a-=7},function(){var a=this.b<<8;this.b=(J(this)<<8|this.b)>>1;K(this,a&256);this.a-=4},jc,function(){H(this,O(this));this.a-=10},function(){var a=O(this);gb(this.i,a,G(this));this.a-=16},function(){H(this,
|
|
G(this)+1);this.a-=5},function(){this.g=dc(this,this.g);this.a-=5},function(){this.g=cc(this,this.g);this.a-=5},function(){this.g=N(this);this.a-=7},function(){var a=0,b=J(this);if((this.o^this.u)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=L(this,a);K(this,b?256:0);this.a-=4},jc,function(){var a;H(this,a=G(this)+G(this));K(this,a>>8&256);this.a-=10},function(){var a;a=O(this);a=eb(this.i,a);H(this,a);this.a-=16},function(){H(this,G(this)-1);this.a-=5},function(){this.h=dc(this,this.h);
|
|
this.a-=5},function(){this.h=cc(this,this.h);this.a-=5},function(){this.h=N(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},jc,function(){this.s=O(this)&65535;this.a-=10},function(){this.aa(O(this),this.b);this.a-=13},function(){this.s=this.s+1&65535;this.a-=5},function(){var a=G(this);this.aa(a,dc(this,this.I(a)));this.a-=10},function(){var a=G(this);this.aa(a,cc(this,this.I(a)));this.a-=10},function(){this.aa(G(this),N(this));this.a-=10},function(){this.l|=256;this.a-=4},jc,function(){var a;
|
|
H(this,a=G(this)+this.s);K(this,a>>8&256);this.a-=10},function(){this.b=this.I(O(this));this.a-=13},function(){this.s=this.s-1&65535;this.a-=5},function(){this.b=dc(this,this.b);this.a-=5},function(){this.b=cc(this,this.b);this.a-=5},function(){this.b=N(this);this.a-=7},function(){K(this,J(this)?0:256);this.a-=4},function(){this.a-=5},function(){this.c=this.C;this.a-=5},function(){this.c=this.f;this.a-=5},function(){this.c=this.D;this.a-=5},function(){this.c=this.g;this.a-=5},function(){this.c=this.h;
|
|
this.a-=5},function(){this.c=this.I(G(this));this.a-=7},function(){this.c=this.b;this.a-=5},function(){this.C=this.c;this.a-=5},function(){this.a-=5},function(){this.C=this.f;this.a-=5},function(){this.C=this.D;this.a-=5},function(){this.C=this.g;this.a-=5},function(){this.C=this.h;this.a-=5},function(){this.C=this.I(G(this));this.a-=7},function(){this.C=this.b;this.a-=5},function(){this.f=this.c;this.a-=5},function(){this.f=this.C;this.a-=5},function(){this.a-=5},function(){this.f=this.D;this.a-=
|
|
5},function(){this.f=this.g;this.a-=5},function(){this.f=this.h;this.a-=5},function(){this.f=this.I(G(this));this.a-=7},function(){this.f=this.b;this.a-=5},function(){this.D=this.c;this.a-=5},function(){this.D=this.C;this.a-=5},function(){this.D=this.f;this.a-=5},function(){this.a-=5},function(){this.D=this.g;this.a-=5},function(){this.D=this.h;this.a-=5},function(){this.D=this.I(G(this));this.a-=7},function(){this.D=this.b;this.a-=5},function(){this.g=this.c;this.a-=5},function(){this.g=this.C;this.a-=
|
|
5},function(){this.g=this.f;this.a-=5},function(){this.g=this.D;this.a-=5},function(){this.a-=5},function(){this.g=this.h;this.a-=5},function(){this.g=this.I(G(this));this.a-=7},function(){this.g=this.b;this.a-=5},function(){this.h=this.c;this.a-=5},function(){this.h=this.C;this.a-=5},function(){this.h=this.f;this.a-=5},function(){this.h=this.D;this.a-=5},function(){this.h=this.g;this.a-=5},function(){this.a-=5},function(){this.h=this.I(G(this));this.a-=7},function(){this.h=this.b;this.a-=5},function(){this.aa(G(this),
|
|
this.c);this.a-=7},function(){this.aa(G(this),this.C);this.a-=7},function(){this.aa(G(this),this.f);this.a-=7},function(){this.aa(G(this),this.D);this.a-=7},function(){this.aa(G(this),this.g);this.a-=7},function(){this.aa(G(this),this.h);this.a-=7},function(){var a=this.m-1;if(this.ra.length)for(var b=0;b<this.ra.length;b++)if(this.ra[b](a))return;this.a-=7;this.A|=256;Nb(this);this.B&512||Fb(this)},function(){this.aa(G(this),this.b);this.a-=7},function(){this.b=this.c;this.a-=5},function(){this.b=
|
|
this.C;this.a-=5},function(){this.b=this.f;this.a-=5},function(){this.b=this.D;this.a-=5},function(){this.b=this.g;this.a-=5},function(){this.b=this.h;this.a-=5},function(){this.b=this.I(G(this));this.a-=7},function(){this.a-=5},function(){this.b=L(this,this.c);this.a-=4},function(){this.b=L(this,this.C);this.a-=4},function(){this.b=L(this,this.f);this.a-=4},function(){this.b=L(this,this.D);this.a-=4},function(){this.b=L(this,this.g);this.a-=4},function(){this.b=L(this,this.h);this.a-=4},function(){this.b=
|
|
L(this,this.I(G(this)));this.a-=7},function(){this.b=L(this,this.b);this.a-=4},function(){this.b=ac(this,this.c);this.a-=4},function(){this.b=ac(this,this.C);this.a-=4},function(){this.b=ac(this,this.f);this.a-=4},function(){this.b=ac(this,this.D);this.a-=4},function(){this.b=ac(this,this.g);this.a-=4},function(){this.b=ac(this,this.h);this.a-=4},function(){this.b=ac(this,this.I(G(this)));this.a-=7},function(){this.b=ac(this,this.b);this.a-=4},function(){this.b=M(this,this.c);this.a-=4},function(){this.b=
|
|
M(this,this.C);this.a-=4},function(){this.b=M(this,this.f);this.a-=4},function(){this.b=M(this,this.D);this.a-=4},function(){this.b=M(this,this.g);this.a-=4},function(){this.b=M(this,this.h);this.a-=4},function(){this.b=M(this,this.I(G(this)));this.a-=7},function(){this.b=M(this,this.b);this.a-=4},function(){this.b=fc(this,this.c);this.a-=4},function(){this.b=fc(this,this.C);this.a-=4},function(){this.b=fc(this,this.f);this.a-=4},function(){this.b=fc(this,this.D);this.a-=4},function(){this.b=fc(this,
|
|
this.g);this.a-=4},function(){this.b=fc(this,this.h);this.a-=4},function(){this.b=fc(this,this.I(G(this)));this.a-=7},function(){this.b=fc(this,this.b);this.a-=4},function(){this.b=bc(this,this.c);this.a-=4},function(){this.b=bc(this,this.C);this.a-=4},function(){this.b=bc(this,this.f);this.a-=4},function(){this.b=bc(this,this.D);this.a-=4},function(){this.b=bc(this,this.g);this.a-=4},function(){this.b=bc(this,this.h);this.a-=4},function(){this.b=bc(this,this.I(G(this)));this.a-=7},function(){this.b=
|
|
bc(this,this.b);this.a-=4},function(){this.b=gc(this,this.c);this.a-=4},function(){this.b=gc(this,this.C);this.a-=4},function(){this.b=gc(this,this.f);this.a-=4},function(){this.b=gc(this,this.D);this.a-=4},function(){this.b=gc(this,this.g);this.a-=4},function(){this.b=gc(this,this.h);this.a-=4},function(){this.b=gc(this,this.I(G(this)));this.a-=7},function(){this.b=gc(this,this.b);this.a-=4},function(){this.b=ec(this,this.c);this.a-=4},function(){this.b=ec(this,this.C);this.a-=4},function(){this.b=
|
|
ec(this,this.f);this.a-=4},function(){this.b=ec(this,this.D);this.a-=4},function(){this.b=ec(this,this.g);this.a-=4},function(){this.b=ec(this,this.h);this.a-=4},function(){this.b=ec(this,this.I(G(this)));this.a-=7},function(){this.b=ec(this,this.b);this.a-=4},function(){M(this,this.c);this.a-=4},function(){M(this,this.C);this.a-=4},function(){M(this,this.f);this.a-=4},function(){M(this,this.D);this.a-=4},function(){M(this,this.g);this.a-=4},function(){M(this,this.h);this.a-=4},function(){M(this,
|
|
this.I(G(this)));this.a-=7},function(){M(this,this.b);this.a-=4},function(){this.l&255&&(D(this,P(this)),this.a-=6);this.a-=5},function(){Xb(this,P(this));this.a-=10},function(){var a=O(this);this.l&255&&D(this,a);this.a-=10},kc,function(){var a=O(this);this.l&255&&(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){Q(this,Wb(this));this.a-=11},function(){this.b=L(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,0);this.a-=11},function(){this.l&255||(D(this,P(this)),this.a-=6);this.a-=
|
|
5},lc,function(){var a=O(this);this.l&255||D(this,a);this.a-=10},kc,function(){var a=O(this);this.l&255||(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},mc,function(){this.b=ac(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,8);this.a-=11},function(){J(this)||(D(this,P(this)),this.a-=6);this.a-=5},function(){Zb(this,P(this));this.a-=10},function(){var a=O(this);J(this)||D(this,a);this.a-=10},function(){for(var a=N(this),b=this.i,c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var g=b.w[a],h=b.B[a]||
|
|
1,k=1==h?255:2==h?65535:-1,k=(c>>>=f)&k;if(void 0!==g&&g[0])g[0](a,k,d);f+=h<<3;a+=h;e-=h}this.a-=10},function(){var a=O(this);J(this)||(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){Q(this,Yb(this));this.a-=11},function(){this.b=M(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,16);this.a-=11},function(){J(this)&&(D(this,P(this)),this.a-=6);this.a-=5},lc,function(){var a=O(this);J(this)&&D(this,a);this.a-=10},function(){for(var a=N(this),b=this.i,c=this.m+-2&65535,d=1,e=0,
|
|
f=0;0<d;){var g=b.l[a],h=b.A[a]||1,k=1==h?255:2==h?65535:-1,n=k;void 0!==g&&g[0]&&(n=g[0](a,c),void 0===n?n=k:n&=k);e|=n<<f;f+=h<<3;a+=h;d-=h}this.b=e&255;this.a-=10},function(){var a=O(this);J(this)&&(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},mc,function(){this.b=fc(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,24);this.a-=11},function(){$b(this)||(D(this,P(this)),this.a-=6);this.a-=5},function(){H(this,P(this));this.a-=10},function(){var a=O(this);$b(this)||D(this,a);this.a-=10},
|
|
function(){var a=P(this);Q(this,G(this));H(this,a);this.a-=18},function(){var a=O(this);$b(this)||(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){Q(this,G(this));this.a-=11},function(){this.b=bc(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,32);this.a-=11},function(){$b(this)&&(D(this,P(this)),this.a-=6);this.a-=5},function(){D(this,G(this));this.a-=5},function(){var a=O(this);$b(this)&&D(this,a);this.a-=10},function(){var a=G(this);H(this,Yb(this));Zb(this,a);this.a-=5},function(){var a=
|
|
O(this);$b(this)&&(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},mc,function(){this.b=gc(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,40);this.a-=11},function(){this.o&128||(D(this,P(this)),this.a-=6);this.a-=5},function(){var a=P(this);Tb(this,a&255|this.B&-256);this.b=a>>8;this.a-=10},function(){var a=O(this);this.o&128||D(this,a);this.a-=10},function(){this.B&=-513;this.a-=4},function(){var a=O(this);this.o&128||(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){Q(this,
|
|
Vb(this)&255|this.b<<8);this.a-=11},function(){this.b=ec(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,48);this.a-=11},function(){this.o&128&&(D(this,P(this)),this.a-=6);this.a-=5},function(){this.s=G(this)&65535;this.a-=5},function(){var a=O(this);this.o&128&&D(this,a);this.a-=10},function(){this.B|=512;this.a-=4;hc(this)},function(){var a=O(this);this.o&128&&(Q(this,this.m),D(this,a),this.a-=6);this.a-=11},mc,function(){M(this,N(this));this.a-=7},function(){Q(this,this.m);D(this,56);
|
|
this.a-=11}];function T(a){r.call(this,"ChipSet",a,T);var b=a.model;b&&!nc[b]&&Ca("Unrecognized ChipSet model: "+b);this.c=nc[b]||{};a.sound&&(this.H=null,window&&(this.H=window.AudioContext||window.webkitAudioContext),this.H&&new this.H);B(this)}w(T);
|
|
var U={ba:1978.1,Dc:{ca:0,yd:1,Cd:16,Jd:32,Sd:64,Rd:128,Ja:14},Ca:{ca:1,Tb:1,wc:2,sc:4,tc:16,uc:32,vc:64,Ja:8},Ec:{ca:2,xd:3,ae:4,zd:8,Nd:16,Od:32,Pd:64,Ad:128,Ja:0},Wd:{ca:3},Ud:{ca:2,Kd:7},Yd:{ca:3,be:1,Xd:2,Qd:4,Hd:8,Bd:16,qd:32},Vd:{ca:4},Zd:{ca:5,Dd:1,Ed:2,Fd:4,Gd:8,ce:16}},W={ba:100,ja:{ca:66,zb:1,oc:2,pc:4,Md:8,Ld:16,wb:32,vb:64,rb:128},Rb:{ca:66,INIT:0},za:{ca:194,sd:0,pb:16,yc:32,xb:48,ac:0,bc:32},Va:{ca:162,Td:0,dc:0,$b:0,cc:0,Zb:0},ma:{Id:{ca:98},Fa:{Ob:0,Nb:1,Bc:2,Jc:4,Ub:5,zc:6,$d:7},
|
|
Xa:16383}},nc={SI1978:U,VT100:W};T.prototype.U=function(){return!1};T.prototype.qa=function(a,b,c,d){this.i=b;this.a=c;this.N=d;this.w=a;this.l=Xa(a,"Keyboard");this.Y=Xa(a,"SerialPort");this.video=Xa(a,"Video");jb(b,this,this.c.cb);kb(b,this,this.c.eb)};T.prototype.fa=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};T.prototype.ha=function(a){return a?this.save():!0};U.INIT=[[U.Dc.Ja,U.Ca.Ja,U.Ec.Ja,0,0,0,0]];
|
|
W.INIT=[[W.Rb.INIT,W.ja.oc|W.ja.pc],[W.za.ac,W.za.bc],[W.Va.dc,W.Va.$b,W.Va.cc,W.Va.Zb],[0,0,0,0,[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11776,11984,11888,11776,11808,11776,12E3,12E3,11901,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
|
|
[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11808,11984,11856,11776,11808,11776,12E3,12E3,11881,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]];l=T.prototype;l.reset=function(){this.c.INIT&&!this.restore(this.c.INIT)&&this.J("reset error")};
|
|
l.save=function(){var a=new F(this);switch(this.c.ba){case U.ba:a.set(0,[this.V,this.g,this.W,this.B,this.L,this.R,this.T]);break;case W.ba:a.set(0,[this.K,this.s]),a.set(1,[this.m,this.o]),a.set(2,[this.f,this.F,this.P,this.M]),a.set(3,[this.A,this.b,this.u,this.G,this.h])}return a.data()};
|
|
l.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.c.ba){case U.ba:return this.V=b[0],this.g=b[1],this.W=b[2],this.B=b[3],this.L=b[4],this.R=b[5],this.T=b[6],!0;case W.ba:return this.K=b[0],this.s=b[1],b=a[1],this.m=b[0],this.o=b[1],b=a[2],this.f=b[0],this.F=b[1],this.P=b[2],this.M=b[3],b=a[3],this.A=b[0],this.b=b[1],this.u=b[2],this.G=b[3],this.h=b[4],!0}return!1};l.start=function(){};l.stop=function(){};l.Wc=function(){return this.V};l.Xc=function(){return this.g};l.Yc=function(){return this.W};
|
|
l.Vc=function(){return this.B>>8-this.L&255};l.dd=function(a,b){this.L=b};l.fd=function(a,b){this.R=b};l.ed=function(a,b){this.B=b<<8|this.B>>8};l.gd=function(a,b){this.T=b};l.hd=function(){};function oc(a){var b=0,c=0,d=~a.A;for(a=0;10>a;a++)d&1&&(b=9-a),d>>=1;for(a=0;10>a;a++)d&1&&(c=9-a),d>>=1;return 10*b+c}
|
|
l.Zc=function(){var a=this.s,a=a&~W.ja.vb;if((Ib(this.a)&64)<<1&&(a|=W.ja.vb,a!=this.s)){var b,c;b=this.u&1;switch(this.u>>1&7){case W.ma.Fa.Nb:this.A=this.A<<1|b;break;case W.ma.Fa.Ub:b=oc(this);this.h[b]=W.ma.Xa;break;case W.ma.Fa.Ob:this.b=this.b<<1|b;break;case W.ma.Fa.Jc:b=oc(this);c=this.b&W.ma.Xa;this.h[b]=c;break;case W.ma.Fa.zc:b=oc(this);c=this.h[b];null==c&&(c=W.ma.Xa);this.b=c;break;case W.ma.Fa.Bc:this.b<<=1,this.G=this.b&W.ma.Xa+1}}a&=~W.ja.wb;this.G&&(a|=W.ja.wb);a&=~W.ja.rb;if(b=this.l){b=
|
|
this.l;if(c=b.f)c=b.a,c=Ib(b.a)>=b.l+c.la*c.K/1E3*1.2731488;c&&(b.f=!1);b=!b.f}b&&(a|=W.ja.rb);a&=~W.ja.zb;this.Y&&this.Y.ea&1&&(a|=W.ja.zb);return this.s=a};l.jd=function(a,b){this.K=b};l.md=function(a,b){this.u=b};l.ld=function(a,b){a=b&3;switch(b>>2&3){case 0:this.f=this.f&-4|a;break;case 1:this.f=this.f&-13|a<<2;this.video&&(b=this.video,a=this.f,b.pa!==a&&((b.pa=a)?Ob(b,!0):b.sa=!0));break;case 2:switch(a){case 0:this.F=~this.F;break;case 2:case 3:this.P=3-a}break;case 3:this.M=a}};
|
|
l.kd=function(a,b){b&W.za.yc?(b&=W.za.xb,this.o!=b&&(this.o=b,this.video&&(this.video.Hb=this.o==W.za.xb?50:60))):(b&=W.za.pb,this.m!=b&&(this.m=b,this.video&&(a=this.video,b=this.m==W.za.pb?132:80,a.G=b,a.S=a.Aa,80<b&&a.S--,pc(a)&&qc(a))))};U.cb={0:T.prototype.Wc,1:T.prototype.Xc,2:T.prototype.Yc,3:T.prototype.Vc};U.eb={2:T.prototype.dd,3:T.prototype.fd,4:T.prototype.ed,5:T.prototype.gd,6:T.prototype.hd};W.cb={66:T.prototype.Zc};W.eb={66:T.prototype.jd,98:T.prototype.md,162:T.prototype.ld,194:T.prototype.kd};
|
|
Aa(function(){for(var a=A(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new T(d);Qa(d,c)}});function rc(a){r.call(this,"ROM",a,rc);this.b=null;this.h=a.addr;this.c=a.size;this.g=a.alias;this.f=a.file;this.l=ca(this.f);if(this.f){a=this.f;var b=da(this.l);"json"!=b&&"hex"!=b&&(a=fa()+"/api/v1/dump?file="+this.f+"&format=bytes&decimal=true");var c=this;ma(a,null,!0,function(a,b,f){sc(c,a,b,f)})}}w(rc);rc.prototype.qa=function(a,b,c,d){this.i=b;this.a=c;this.N=d;tc(this)};
|
|
rc.prototype.fa=function(){this.va&&(this.N&&this.N.a(this.id,this.h,this.c,this.va),delete this.va);return!0};rc.prototype.ha=function(){return!0};
|
|
function sc(a,b,c,d){if(d)a.J("Unable to load system ROM (error "+d+": "+b+")");else{Ma(a.ya,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,g=e.data;if(f)a.b=f;else if(g)for(a.b=Array(4*g.length),d=c=0;c<g.length;c++)a.b[d++]=g[c]&255,a.b[d++]=g[c]>>8&255,a.b[d++]=g[c]>>16&255,a.b[d++]=g[c]>>24&255;else a.b=e;a.va=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(h){a.J("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
|
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=ba(b[e]);tc(a)}}
|
|
function tc(a){if(!Ta(a))if(!a.f)B(a);else if(a.b&&a.i){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size ("+p(a.b.length,8,!0)+") does not match specified size ("+p(a.c,8,!0)+")";a.j.error=!0;a.J(b)}else{b=a.h;if(ab(a.i,b,a.c,qb)){var c;for(c=0;c<a.b.length;c++)fb(a.i,b+c,a.b[c]);b=!0}else b=!1;if(b){b=[];"number"==typeof a.g?b.push(a.g):null!=a.g&&a.g.length&&(b=a.g);for(c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.i,g=d.c,h=[],k=d.h>>>f.i;0<g&&k<f.b.length;)h.push(f.b[k++]),g-=f.c;f=d.i;
|
|
d=d.c;g=0;for(e>>>=f.i;0<d&&e<f.b.length;){k=h[g++];if(!k)break;f.b[e++]=k;d-=f.c}}delete a.b}}B(a)}}Aa(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new rc(d);Qa(d,c)}});
|
|
function uc(a){r.call(this,"RAM",a,uc);this.va=this.c=null;this.g=a.addr;this.h=a.size;this.Da=a.load;this.wa=a.exec;this.f=!1;this.b=a.file;this.l=ca(this.b);if(this.b){a=this.b;var b=da(this.l);"json"!=b&&"hex"!=b&&(a=fa()+"/api/v1/dump?file="+this.b+"&format=bytes&decimal=true");var c=this;ma(a,null,!0,function(a,b,f){f?c.J("Unable to load RAM resource (error "+f+": "+a+")"):(Ma(c.ya,a,b),(a=na(a,b))?(c.c=a.Z,c.va=a.va,null==c.Da&&(c.Da=a.Da),null==c.wa&&(c.wa=a.wa)):c.b=null,vc(c))})}}w(uc);
|
|
var wc=[0,5];uc.prototype.qa=function(a,b,c,d){this.i=b;this.a=c;this.N=d;vc(this)};uc.prototype.fa=function(){return!0};uc.prototype.ha=function(){return!0};
|
|
function vc(a){!a.f&&a.h&&ab(a.i,a.g,a.h,1)&&(a.f=!0);if(!Ta(a)){if(!a.f)q("No RAM allocated");else if(a.b){if(!a.c||!a.i)return;var b=a.g;null!==a.Da&&(b=a.Da);for(var c=0;c<a.c.length;c++)fb(a.i,b+c,a.c[c]);if(null!==a.wa){if(256==a.wa){for(c=0;c<wc.length;c++)fb(a.i,wc[c],118);Sb(a.a,function(a){return function(b){if(0<=wc.indexOf(b)){var c=!1,d=a.a,e=a.N;if(5==b)switch(c=!0,d.C){case 2:xc(a,String.fromCharCode(d.D));break;case 9:for(var k=Yb(d),n="",u=255;u--;){var z=a.a.I(k++);if(36==z)break;
|
|
n+=String.fromCharCode(z)}xc(a,n);break;default:c=!1}c?lc.call(d):e&&(a.da("\nCP/M vector "+p(b,4,!0)),D(d,b),Fb(e));b=!0}else b=!1;return b}}(a))}Ub(a.a,a.wa)}delete a.c}B(a)}}uc.prototype.reset=function(){};function xc(a,b){b=b.replace(/\r/g,"");a.xa&&(a.xa.value+=b,a.xa.scrollTop=a.xa.scrollHeight)}Aa(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new uc(d);Qa(d,c)}});
|
|
function X(a){r.call(this,"Keyboard",a,X);(a=a.model)&&!yc[a]&&Ca("Unrecognized Keyboard8080 model: "+a);this.b=yc[a]||{};this.reset();B(this)}w(X);var zc={};zc[m.nb]=37;zc[m.qb]=39;zc[m.sb]=32;
|
|
var Bc={ba:1978.1,hb:{},ob:zc,Ka:{},Ba:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},Y={},Z={ba:100,hb:(Y[8]=3,Y[m.rc]=5,Y[m.qc]=6,Y[m.Lc]=7,Y[m.Fc]=8,Y[m.Ic]=9,Y[m.Q]=10,Y[39]=16,Y[221]=20,Y[219]=21,Y[m.Yb]=22,Y[m.Gc]=23,Y[m.xc]=24,Y[m.E]=25,Y[49]=26,Y[37]=32,Y[40]=34,Y[117]=35,Y[19]=35,Y[192]=36,Y[189]=37,Y[57]=38,Y[55]=39,Y[52]=40,Y[51]=41,Y[27]=42,Y[38]=48,Y[114]=49,Y[112]=50,Y[46]=51,Y[187]=52,Y[48]=53,Y[56]=54,Y[54]=55,Y[53]=56,Y[50]=57,Y[9]=58,Y[103]=64,Y[115]=65,Y[113]=66,Y[96]=67,Y[118]=
|
|
68,Y[220]=69,Y[m.sb]=70,Y[m.fc]=71,Y[m.Wb]=72,Y[m.Vb]=73,Y[m.nb]=74,Y[104]=80,Y[2013]=81,Y[98]=82,Y[97]=83,Y[222]=85,Y[186]=86,Y[m.ec]=87,Y[m.Xb]=88,Y[m.qb]=89,Y[m.Ac]=90,Y[110]=96,Y[116]=97,Y[101]=98,Y[100]=99,Y[13]=100,Y[190]=101,Y[188]=102,Y[m.nc]=103,Y[m.Qb]=104,Y[m.Kc]=105,Y[119]=106,Y[105]=112,Y[99]=113,Y[102]=114,Y[109]=115,Y[191]=117,Y[m.mc]=118,Y[m[" "]]=119,Y[m.Hc]=120,Y[m.Sb]=121,Y[m.Mc]=122,Y[120]=123,Y[17]=124,Y[16]=125,Y[20]=126,Y),ob:{},Ka:{},Ba:{setup:120},Pb:{ca:130,INIT:127},ga:{ca:130,
|
|
kc:1,jc:2,ic:4,hc:8,lc:16,ub:32,tb:63,Cc:64,rd:128,INIT:0},gc:127};Z.Ka={l4:Z.ga.kc,l3:Z.ga.jc,l2:Z.ga.ic,l1:Z.ga.hc,locked:Z.ga.lc,local:Z.ga.ub,online:~Z.ga.ub};var yc={SI1978:Bc,VT100:Z};
|
|
X.prototype.U=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.v[e]){if("led"==a&&this.b.Ka[b])return this.v[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Cc(d,a,!0)},c.onkeyup=function(a){return Cc(d,a,!1)},!0;default:if(this.b.Ba&&void 0!==this.b.Ba[b])return this.v[e]=c,a=function(a,b){return function(c){c.preventDefault();Dc(a,b,!0)}}(this,this.b.Ba[b]),b=function(a,b){return function(){Dc(a,b,!1)}}(this,this.b.Ba[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=
|
|
b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};X.prototype.qa=function(a,b,c,d){this.w=a;this.a=c;this.N=d;var e=this;this.m=Kb(this.a,function(){Ec(e)});this.L=Xa(a,"ChipSet");jb(b,this,this.b.cb);kb(b,this,this.b.eb)};X.prototype.fa=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};X.prototype.ha=function(a){return a?this.save():!0};Z.INIT=[[Z.ga.INIT,Z.Pb.INIT,!1,0,-1]];l=X.prototype;
|
|
l.reset=function(){this.i=[];this.b.INIT&&!this.restore(this.b.INIT)&&this.J("reset error")};l.save=function(){var a=new F(this);switch(this.b.ba){case Z.ba:a.set(0,[this.h,this.g,this.f,this.l,-1])}return a.data()};l.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.b.ba){case Bc.ba:return!0;case Z.ba:return this.h=b[0],Fc(this,this.h&Z.ga.tb),this.g=b[1],this.f=b[2],this.l=b[3],this.c=b[4],!0}return!1};
|
|
function Fc(a,b){for(var c in a.b.Ka){var d=a.v["led-"+c];if(d){var e=a.b.Ka[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}function Cc(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=a.b.ob[e]||e,!a.b.hb[e]){for(var f in a.b.Ba)if(a.b.Ba[f]===e){e=f;break a}e=null}e&&(d=Dc(a,e,c),b.preventDefault());return d}
|
|
function Dc(a,b,c){var d;a:{for(d=0;d<a.i.length;d++)if(a.i[d].mb==b)break a;d=-1}if(c)0>d?a.i.push({mb:b,jb:Date.now(),ab:!1}):(a.i[d].jb=Date.now(),a.i[d].ab=!1);else if(0<=d){if(!a.i[d].ab){var e=a.i[d].jb;if(e&&50>Date.now()-e)return a.i[d].ab=!0,Ec(a),!0}a.i.splice(d,1)}if(a.L){d=0;switch(b){case "1p":d=U.Ca.sc;break;case "2p":d=U.Ca.wc;break;case "coin":d=U.Ca.Tb;break;case "left":d=U.Ca.uc;break;case "right":d=U.Ca.vc;break;case "fire":d=U.Ca.tc}d&&(a=a.L,b=d,a.g&=~b,c&&(a.g|=b))}return!0}
|
|
function Ec(a){for(var b=0,c=-1;b<a.i.length;){if(a.i[b].ab){var d=a.i[b].mb,e=50-(Date.now()-a.i[b].jb);if(0<e){if(0>c||c>e)c=e}else{Dc(a,d,!1);b=0;continue}}b++}0<=c&&Lb(a.a,a.m,c)}l.$c=function(){var a=this.g;0<=this.c&&(this.c<this.i.length?(a=this.i[this.c],this.c++,a=Z.hb[a.mb],a&128&&(a&=127)):(this.c=-1,a=Z.gc),this.g=a,ic(this.a,1));return a};l.nd=function(a,b){this.h=b;this.f=!0;this.l=Ib(this.a);Fc(this,b&Z.ga.tb);b&Z.ga.Cc&&(this.c=0,ic(this.a,1))};Z.cb={130:X.prototype.$c};Z.eb={130:X.prototype.nd};
|
|
Aa(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new X(d);Qa(d,c)}});
|
|
function Gc(a,b,c,d,e){var f=this;this.Ma=ua("Gecko/");var g=["","moz","ms","webkit"];r.call(this,"Video",a,Gc);this.B=a.screenWidth;this.u=a.screenHeight;this.ia=a.bufferAddr;this.Oc=a.bufferRAM;var h=a.bufferFormat;this.T=h&&Hc[h.toUpperCase()]||Ic;this.G=a.bufferCols;this.V=a.bufferRows;this.Aa=this.S=a.cellWidth||1;this.O=a.cellHeight||1;this.W=null;this.La=!1;this.ka=a.bufferBits||1;this.Pc=a.bufferLeft||0;if(this.c=a.bufferRotate)this.c=this.c%360,0<this.c&&(this.c-=360),-90!=this.c&&(this.J("unsupported buffer rotation: "+
|
|
this.c),this.c=0);this.la=a.interruptRate;this.Ab=a.refreshRate||60;this.s=b;this.f=c;this.P=(this.Sc=d)||b||null;this.Nc=this.B;this.Mb=this.u;this.Ga=this.B/this.G|0;this.Ha=this.u/this.V|0;1<this.O&&(this.V++,this.pa=0,this.sa=!1);b=a.smoothing;(c=Ga.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<g.length;c++)if(d=(d=g[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.f[d]){this.f[d]=b;break}if(this.g=a.screenRotate)this.g=this.g%360,0<this.g&&(this.g-=360),-90!=this.g?(this.J("unsupported screen rotation: "+
|
|
this.g),this.g=0):(this.f.translate(0,this.u),this.f.rotate(this.g*Math.PI/180),this.f.scale(this.u/this.B,this.B/this.u));if(this.b=e)if(this.b.Ia=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.b.Ia){for(c=0;c<g.length;c++)if(d=g[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){Jc(f,document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?!0:!1)},!1);
|
|
break}for(c=0;c<g.length;c++)if(d=g[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){Jc(f,null)},!1);break}}if(this.L=a.fontROM)"json"!=da(this.L)&&(this.L=fa()+"/api/v1/dump?file="+this.L+"&format=bytes"),ma(this.L,null,!0,function(a,b,c){Kc(f,a,b,c)});this.ua={}}w(Gc);var Ic=0,Hc={SI1978:1,VT100:2};
|
|
function pc(a){a.m=a.G*a.S;a.F=a.V*a.O;var b=a.m,c=a.F;a.c&&(b=a.F,c=a.m);a.A=0;if(!a.Oc&&(a.A=(a.m*a.ka>>3)*a.F,!ab(a.i,a.ia,a.A,3)))return!1;a.A?(a.Na=a.f.createImageData(b,c),a.Pa=16/a.ka|0,Lc(a,a.A>>1)):Lc(a,(a.G+1)*a.V);a.o=document.createElement("canvas");a.o.width=b;a.o.height=c;a.ra=a.o.getContext("2d");a.H={};a.R=1<<a.ka;a.K=Array(a.R+2);a.K[0]=[0,0,0,255];a.K[1]=[255,255,255,255];1==a.T&&(a.K[a.R+0]=[255,255,0,255],a.K[a.R+1]=[0,255,0,255]);2==a.T&&(a.Hb=60,a.ta=!1,a.Y=Array(a.G));return!0}
|
|
Gc.prototype.qa=function(a,b,c,d){this.w=a;this.i=b;this.a=c;this.N=d;pc(this);if(this.l=Xa(a,"Keyboard")){for(var e in this.ua)this.l.U("led",e,this.ua[e]);this.s&&this.l.U(this.Sc?"textarea":"canvas","kbd",this.P)}var f=this;this.Bb=Kb(this.a,function(){Ob(f)});Lb(this.a,this.Bb,1E3/Math.max(this.Ab,this.la));this.Ya=0;this.L||B(this)};
|
|
function Kc(a,b,c,d){if(d)a.J("Unable to load font ROM (error "+d+": "+b+")");else{Ma(a.ya,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){q("Empty font ROM: "+b);return}if(1==f.length){q(f[0]);return}if(2048==f.length)a.W=f,qc(a);else{a.J("Unrecognized font data length ("+f.length+")");return}}catch(g){a.J("Font ROM data error: "+g.message);return}(a.f||a.N)&&B(a)}}
|
|
function qc(a){a.W&&(a.La=2==a.T,a.H[96]=[Mc(a,a.S,a.O),Mc(a,a.S,a.O,a.ta)],a.H[64]=[Mc(a,2*a.S,a.O),Mc(a,2*a.S,a.O,a.ta)],a.H[32]=a.H[0]=[Mc(a,2*a.S,2*a.O),Mc(a,2*a.S,2*a.O,a.ta)])}
|
|
function Mc(a,b,c,d){var e=8>=a.Aa?8:16,f=8<e?15:0,g=a.W.length/e,h=!1===d,k={S:b,O:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=g/16*c;k.context=k.canvas.getContext("2d");for(var n=k.context.createImageData(b,c),u=0;u<g;u++){for(var z=0,I=z;z<a.O;z++)for(var x=u*e+(f+z&e-1),x=d&&8==z?255:a.W[x],t=0;t<c/a.O;t++){for(var E=0,R=0,V=R;R<a.S;R++){for(var aa=x&128>>(7<R?7:R),E=a.La&&!aa&&E?E:aa,ta=0;ta<b/a.S;ta++)h&&(E=!E),Nc(a,n,V,I,E?1:0),V++;E=aa}I++}k.context.putImageData(n,
|
|
(u&15)*b,(u>>4)*c)}return k}Gc.prototype.fa=function(){return!0};Gc.prototype.U=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.ua[b]=c,!0;switch(b){case "fullScreen":return this.v[b]=c,this.b&&this.b.Ia?c.onclick=function(){d.Ia()}:c.parentNode.removeChild(c),!0}return!1};
|
|
Gc.prototype.Ia=function(){var a=!1;if(this.b){if(this.b.Ia){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.B/this.u;b>c&&(a=Math.round(c/b*100)+"%")}this.Ma?(this.s.style.width=a,this.s.style.width=a,this.s.style.display="block",this.s.style.margin="auto"):(this.b.style.width=a,this.b.style.height="auto");this.b.style.backgroundColor="black";this.b.Ia();a=!0}this.P&&this.P.focus()}return a};
|
|
function Jc(a,b){!b&&a.b&&(a.Ma?a.s.style.width=a.s.style.height="":a.b.style.width=a.b.style.height="")}function Lc(a,b){a.Oa=b;a.M=!1;if(void 0===a.h||a.h.length!=a.Oa)a.h=Array(a.Oa)}function Nc(a,b,c,d,e){d=a.c?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.T&&(208<=c&&236>c?e=a.R+0:28<=c&&72>c&&(e=a.R+1));a=a.K[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
|
|
function Ob(a,b){var c=!0;if(!b){a.la&&(120==a.la?a.Ya&1?(ic(a.a,2),c=!1):ic(a.a,1):ic(a.a,4));if(c&&a.M&&a.A){for(var d=a.i,e=a.A,f=!0,g=a.ia>>>d.i;0<e&&g<d.b.length;)d.b[g].na&&(d.b[g].na=f=!1,d.b[g].Eb=!0),e-=d.c,g++;f&&(c=!1)}Lb(a.a,a.Bb,1E3/Math.max(a.Ab,a.la));a.Ya++}if(c)if(1<a.S)switch(a.T){case 2:for(var c=a.ia,d=-1,e=0,f=60==a.Hb?2:5,h=g=0,k=-1;e<a.V;){var n=0,u=c,z=d,I=a.G;for(96!=z&&(I>>=1);;){var x=db(a.i,u++);if(127==(x&127)){var t=db(a.i,u++),d=t&96,c=(t&15)<<8|db(a.i,u),c=c+(t&16?
|
|
8192:16384);break}if(n<I)a.Y[n++]=x;else break}if(f)f--;else{for(;n<a.Y.length;)a.Y[n++]=0;if(0<=z)for(u=a.M&&a.h[g]==I,a.h[g++]=I,I=0;I<n;I++){x=a.Y[I];if(!u||x!==a.h[g]){a.h[k=g]=x;var t=a,E=a.ra,R=x&127;if(x=t.H[z][x&128?1:0]){var V=(R&15)*x.S,R=(R>>4)*x.O,aa,ta,Ra,hb,Ac=x.S,Mb=x.O;E?(aa=I*t.S,ta=e*t.O,Ra=t.S,hb=t.O):(aa=I*t.Ga,ta=e*t.Ha,Ra=t.Ga,hb=t.Ha);x.S>t.S&&(aa*=2,Ra*=2);x.O>t.O&&(z||(R+=t.O),Mb=t.O);E?E.drawImage(x.canvas,V,R,Ac,Mb,aa,ta,Ra,hb):(aa+=0,ta+=0,t.f.drawImage(x.canvas,V,R,Ac,
|
|
Mb,aa,ta,Ra,hb))}h++}g++}e++}}a.M=!0;!b&&a.sa&&1==h&&(a.h[k]=-1,h=0);a.sa=!1;(h||b)&&a.ra&&a.f.drawImage(a.o,0,a.pa,a.m,a.F-a.O,0,0,a.Nc,a.Mb)}else{e=a.ia;f=e+a.A;k=h=g=0;b=a.m;n=0;c=a.F;z=d=0;u=a.ka;I=(1<<u)-1;a.Pc&&(u=-u,z=16+u);for(;e<f;){t=a.i;E=e;x=E&t.f;V=(E&t.g)>>>t.i;t=x!=t.f?t.b[V].Ib(x,E):t.b[V++].fb(x,E)|t.b[V&t.m].fb(0,E+1)<<8;if(a.M&&t===a.h[g])h+=a.Pa;else{a.h[g]=t;(E=z)&&(t=t>>8|(t&255)<<8);h<b&&(b=h);for(x=a.Pa;x--;)V=t>>E&I,Nc(a,a.Na,h++,k,V),E+=u;h>n&&(n=h);k<c&&(c=k);k>=d&&(d=k+
|
|
1)}e+=2;g++;if(h>=a.m&&(h=0,k++,k>a.F))break}a.M=!0;b<a.m&&(e=n-b,d-=c,a.c&&(f=b,g=e,b=c,e=d,c=a.m-(f+g),d=g),a.ra.putImageData(a.Na,0,0,b,c,e,d),a.f.drawImage(a.o,0,0,a.o.width,a.o.height,0,0,a.B,a.u))}}
|
|
Aa(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(!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<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
|
|
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ga.aspect);f&&.3<=f&&3.33>=f&&(za("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");ua("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var g=e.getContext("2d"),d=new Gc(d,e,g,f,c);Qa(d,c)}});
|
|
function Oc(a){this.H=+a.adapter;switch(this.H){case 0:this.K=0;this.P=2;break;default:q("Unrecognized serial adapter #"+this.H);return}this.b=this.c=null;this.M=a.tabSize;this.G=a.charBOL;this.f=0;this.B=!1;r.call(this,"SerialPort",a,Oc);var b=a.binding;if("console"==b)this.c="";else{var c;a=Pc;b&&(void 0===c&&(c="Panel"),(c=Pa(c,this.id))&&(b=c.v[b])&&this.U(null,a,b))}this.g="";this.h=this.o=null;this.exports={connect:this.Gb,receiveData:this.kb}}w(Oc);
|
|
var Qc=[50,75,110,134.5,150,200,300,600,1200,1800,2E3,2400,3600,4800,9600,19200],Rc=[!1,0,0,133,142,39,238],Pc="buffer";l=Oc.prototype;
|
|
l.U=function(a,b,c,d){var e=this;switch(b){case Pc:return this.v[b]=this.b=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;if(8===b||a.ctrlKey&&65<=b&&90>=b)a.preventDefault&&a.preventDefault(),64<b&&(b-=64),Sc(e,b);return!0},c.onkeypress=function(a){a=a||window.event;Sc(e,a.which||a.keyCode);a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0;default:if(d)return this.v[b]=c,d=d.replace(/\\e/g,String.fromCharCode(27)),c.onclick=function(){e.kb(d);return!0},
|
|
!0}return!1};l.qa=function(a,b,c,d){this.w=a;this.i=b;this.a=c;this.N=d;var e=this;this.R=Kb(this.a,function(){e.kb()});this.T=Kb(this.a,function(){e.ea|=5});this.L=Xa(a,"ChipSet");jb(b,this,Tc,this.K);kb(b,this,Uc,this.K);B(this)};
|
|
l.Gb=function(){if(!this.h){var a=Bb(this.w,"connection");if(a){var b=a.split("->");if(2==b.length){var c=ia(b[0]);if(c!=this.Wa)return;b=ia(b[1]);if(this.h=Oa(b)){var d=this.h.exports;if(d){var e=d.connect;e&&e.call(this.h);if(this.o=d.receiveData){this.status(this.ya+"."+c+" connected to "+b);return}}}}this.status("Unable to establish connection: "+a)}}};l.fa=function(a,b){if(!b)if(this.Gb(),!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
|
|
l.ha=function(a){return a?this.save():!0};l.reset=function(){Vc(this)};l.save=function(){var a=new F(this),b=0,c=[];c[b++]=this.m;c[b++]=this.A;c[b++]=this.F;c[b++]=this.ea;c[b++]=this.l;c[b++]=this.u;c[b]=this.s;a.set(0,c);return a.data()};l.restore=function(a){return Vc(this,a[0])};function Vc(a,b){var c=0;b||(b=Rc);a.m=b[c++];a.A=b[c++];a.F=b[c++];a.ea=b[c++];a.l=b[c++];a.u=b[c++];a.s=b[c];return!0}
|
|
function Wc(a,b){var c=a.s&b;b&15||(c>>=4);b=Qc[c];c=((a.l&12)>>2)+6;a.l&16&&c++;c+=((a.l&192)>>6)+1>>1;return 1E3/Math.round(b/c)}function Sc(a,b){return a.B||a.ea&2?!1:(a.A=b,a.ea|=2,ic(a.a,a.P),!0)}l.kb=function(a){null!=a&&(this.g="number"!=typeof a?a:this.g+String.fromCharCode(a));this.g&&(Sc(this,this.g.charCodeAt(0))&&(this.g=this.g.substr(1)),this.g&&this.a&&Lb(this.a,this.R,Wc(this,15)));return!0};l.Uc=function(){var a=this.A;this.ea&=-3;return a};l.Tc=function(){return this.ea};
|
|
l.cd=function(a,b){this.F=b;this.ea&=-6;if(19==b)this.B=!0;else if(17==b)this.B=!1;else if(this.o&&this.o.call(this.h,b),this.b)if(8==b)this.b.value=this.b.value.slice(0,-1),0<this.f&&this.f--;else{a=(a=ja[b])?"<"+a+">":String.fromCharCode(b);var c=a.length;9==b?(b=this.M||8,c=b-this.f%b,this.M&&(a=" ".slice(0,c))):13==b&&(this.f=c=0,a="\n");this.G&&!this.f&&c&&(a=String.fromCharCode(this.G)+a);this.b.value+=a;this.b.scrollTop=this.b.scrollHeight;this.f+=c}else if(null!=
|
|
this.c){if(10==b||1024<=this.c.length)this.da(this.c),this.c="";10!=b&&(this.c+=String.fromCharCode(b))}this.a&&Lb(this.a,this.T,Wc(this,240))};l.bd=function(a,b){this.m?(this.u=b,this.u&64&&(this.m=!1)):(this.l=b,this.m=!0)};l.ad=function(a,b){this.s=b};var Tc={0:Oc.prototype.Uc,1:Oc.prototype.Tc},Uc={0:Oc.prototype.cd,1:Oc.prototype.bd,2:Oc.prototype.ad};Aa(function(){for(var a=A(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Oc(d);Qa(d,c)}});
|
|
function Xc(a,b,c){r.call(this,"Computer",a,Xc);this.j.X=!1;Yc(this,b);this.u=Bb(this,"autoPower",a);this.f=0;this.L=a.busWidth||a.buswidth;this.b=Zc;this.o=null;this.w=this.F=!1;this.H=Bb(this,"url")||"";(Math.random()+.1).toString(36);this.c=$c(this);if(this.a=Pa("CPU",this.id)){this.N=Pa("Debugger",this.id);this.l=[];for(b=null;b=Xa(this,"Video",b);)this.l.push(b);this.i=new Za({id:this.ya+".bus",busWidth:this.L},this.a,this.N);var d,e=Na(this.id);if((this.g=Pa("Panel",this.id))&&this.g.xa)for(b=
|
|
0;b<e.length;b++)d=e[b],d.J=this.g.J,d.da=this.g.da,d.xa=this.g.xa;this.da("PC8080 v1.30.4\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.qa&&d.qa(this,this.i,this.a,this.N);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=Bb(this,"state")||(f=!0,a.state))b=this.A=a,f||(this.w=!0,this.b=Zc),this.b&&(this.s=new F(this,"1.30.4"),ad(this.s)?b=null:delete this.s);
|
|
!b&&this.b&&(b=bd(this))&&(this.w=!0);if(b){var g=this;ma(b,null,!0,function(a,b,c){c?(g.m=null,g.w=!1,g.J("Unable to load machine state from server (error "+c+(b?": "+ia(b):"")+")")):(g.o=b,g.F=!0);B(g)})}else B(this);this.v.power||(this.u=!0);!c&&this.u&&cd(this,this.Sa)}else q("Unable to find CPU component")}w(Xc);var Zc=0;function Yc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){q(d.message+" ("+c+")")}}a.G=b}
|
|
function Bb(a,b,c){var d=b.toLowerCase(),d=Ga[b]||Ga[d];void 0===d&&a.G&&(d=a.G[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function cd(a,b,c){for(var d=Na(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Ta(f)){Ta(f,function(){cd(a,b,c)});return}}b.call(a,c)}
|
|
function dd(a,b){var c=new F(a,"1.30.4","validate");if(ad(c)&&ed(c)){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.J("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}l=Xc.prototype;
|
|
l.Sa=function(a){void 0===a&&(a=this.b||(this.o?1:Zc));if(!this.f){this.f++;var b=!1,c=!1;this.B=!1;var d=this.s||new F(this,"1.30.4");if(-1==a)b=!0;else if(a>Zc){if(ad(d,this.o)){this.h=new F(this,"1.30.4","failsafe");ad(this.h)&&(fd(this,d),a=2,gd(this.h));this.h.set("timestamp",la());hd(this.h);var e=this.b&&!this.w;if(1==a||oa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=ed(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?ad(d,g):("error"==
|
|
f&&"no machine state"!=g?(this.J("Error: "+g),"unable to verify user"==g&&(sa("user",""),this.c=null)):this.da(f+": "+g),gd(d),ad(d)?(c=ed(d),e=!0):c=!1))}e&&dd(this,c?d:null)}else 2==a&&d.clear()}else dd(this);delete this.o;delete this.s}e=Na(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.a&&(c=id(this,g,d,b,c));b=[d,a,c];-1!=a?cd(this,this.Db,b):this.Db(b)}};
|
|
function id(a,b,c,d,e){if(!b.j.X){b.j.X=!0;if(b.fa){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.fa(f,d)&&f&&(q("Unable to restore state for "+b.type),a.A&&!a.F?(c.clear(),a.b=Zc,window&&window.location.reload()):a.B=!0,b.fa(null),e=!1)}if(!d&&b.yb)for(a=b.yb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
|
l.Db=function(a){var b=a[0],c=0>a[1];a=a[2];this.K=!0;this.j.X=!0;var d=this.v.power;d&&(d.textContent="Shutdown");this.a&&(id(this,this.a,b,c,a),this.a.Ra());this.B&&(fd(this,b),b.clear());!c&&this.h&&(this.h.clear(),delete this.h);this.f=0};
|
|
function fd(a,b){if(oa("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.c||"";b=b.toString();var d={app:"PC8080",ver:"1.30.4"};d.url=a.H;d.user=c;d.type="bug";d.data=b;ma("http://www.pcjs.org/api/v1/report",d,!0)}}
|
|
function jd(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new F(a,"1.30.4"),g=new F(a,"1.30.4","validate"),h=la();g.set("timestamp",h);f.set("timestamp",h);f.set("version","1.30.4");f.set("url",window?window.location.href:null);f.set("browser",window?window.navigator.userAgent:"");a.a&&a.a.ha&&(c&&Fb(a.a),d=a.a.ha(b,c),"object"===typeof d&&f.set(a.a.id,d),c&&(a.a.j.X=!1,!1===d&&(e=null)));for(var h=Na(a.id),k=0;k<h.length;k++){var n=h[k];n.j.X&&(n.ha&&(d=n.ha(b,c),"object"===typeof d&&f.set(n.id,
|
|
d)),c&&(n.j.X=!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.c&&kd(a,a.c,f.toString()),hd(g)&&hd(f)||(e=null,d=h=!0)):a.b&&(d=!0,h=3==a.b),d&&f.clear(h)):e=f.toString());c&&(a.j.X=!1,b=a.v.power)&&(b.textContent="Power");a.f=0;return e}l.reset=function(){this.i&&this.i.reset&&this.i.reset();for(var a=Na(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.i&&c.reset&&c.reset()}};
|
|
l.start=function(a,b){for(var c=Na(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=Na(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
|
l.U=function(a,b,c){var d=this;switch(b){case "power":return this.v[b]=c,c.onclick=function(){d.f||(d.j.X?jd(d,!1,!0):cd(d,d.Sa))},!0;case "reset":return this.v[b]=c,c.onclick=function(){if(d.j.X&&!d.f)if(d.b&&!d.m){var a=oa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");jd(d,a,!0);!a&&d.A?window&&window.location.reload():d.Sa(Zc)}else d.reset(),d.a&&d.a.Ra()},!0;case "save":if(ea())c.parentNode.removeChild(c);else return this.v[b]=
|
|
c,c.onclick=function(){var a=$c(d,!0);if(a){var b=!!(d.b&&!d.m||d.A),c=jd(d,b);b?kd(d,a,c):d.J("Resume disabled, machine state not saved")}},!0}return!1};
|
|
function $c(a,b){var c=a.c;c||((c=ra("user"),void 0!==c)?!c&&b&&(b=null,window&&(b=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=b)&&((c=ld(a,c))||a.J("The user ID is invalid.")):b&&a.J("Browser local storage is not available"));return c}
|
|
function ld(a,b){a.c=null;b=ma(fa()+"/api/v1/user?req=verify&user="+b);var c=b[1];if(!b[0]&&c)try{b=eval("("+c+")"),b.code&&"ok"==b.code&&(sa("user",b.data),a.c=b.data)}catch(d){q(d.message+" ("+c+")")}return a.c}function bd(a){var b=null;a.c&&(b=fa()+"/api/v1/user?req=load&user="+a.c+"&state="+md(a,"1.30.4"));return b}
|
|
function kd(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=md(a,"1.30.4");d.data=c;b=ma(fa()+"/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.J("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.J(c),sa("user",""),a.c=null)}}
|
|
function Xa(a,b,c){a=Na(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}function Jb(a,b){if(a.l.length){var c=0,d=0;!b&&window&&(c=window.scrollX,d=window.scrollY);a=a.l[0];a.P&&a.P.focus();!b&&window&&window.scrollTo(c,d)}}l.Ea=function(a){this.a&&this.a.Ea(a);this.g&&this.g.Ea(a)};
|
|
Aa(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],g=y(f),g=new Xc(g,d,!0);Qa(g,f);g.u&&cd(g,g.Sa)}});va.show.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=Pa("Computer",c.id))&&c.K&&!c.j.X&&c.Sa(-1)}});
|
|
va.exit.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=Pa("Computer",c.id))&&c.j.X&&jd(c,!(!c.b||c.m),!0)}});function F(a,b,c){this.id=a.id;this.key=md(a,b,c);this.N=a.N;gd(this,a.Qc)}function md(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}
|
|
F.prototype={constructor:F,set:function(a,b){try{this[this.id][a]=b}catch(c){}},get:function(a){return this[this.id][a]||null},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){gd(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 gd(a,b){a[a.id]={};b&&a.set("parms",b);a.a=!1}function hd(a){var b=!0;if(qa()){var c=JSON.stringify(a[a.id]);sa(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function ed(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){q(c.message||c),b=!1}return b}function ad(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:qa()&&(b=ra(a.key))?(a[a.id]=b,a.a=!0):!1}var nd=0;
|
|
function od(a,b,c,d,e,f){e("Loading "+a+"...");ma(a,null,!0,function(g,h,k){k?(h||(h="unable to load "+a+" ("+k+")"),f(h,null)):pd(h,a,b,c,d,e,f)})}
|
|
function pd(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{c&&(Ma(c,b,a),(f=b)&&0>f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+f+'"}',"object"==typeof resources&&(f=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(f?' url="'+f+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PC8080$2"),
|
|
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));f=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(u){f=null,a=u.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,f)}}a?e?qd(a,f,h):h(a,null):g("no data"+(b?" for file: "+b:""),
|
|
null)}
|
|
function qd(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ma(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],n,u=/( [a-z]+=)(['"])(.*?)\2/g;n=u.exec(f);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,"");
|
|
a=a.replace(d[0],g);qd(a,b,c)}})}else c(a,null)}
|
|
function rd(a,b,c,d){function e(a){if(void 0===h){var b=g&&A(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ha(a))}function f(a){e("Error: "+a);k&&(--nd||Da(!0));k=!1}var g,h,k=!0;nd++;La[a]={};try{if(g=document.getElementById(a)){var n;if("object"==typeof resources&&(n=resources.css)){var u=document.head||document.getElementsByTagName("head")[0],z=document.createElement("style");z.type="text/css";z.styleSheet?z.styleSheet.cssText=n:z.appendChild(document.createTextNode(n));u.appendChild(z)}c||
|
|
(c="/versions/pc8080/1.30.4/components.xsl");n=function(d,h){h?od(c,null,null,!1,e,function(d,k){k?(Ma(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(k=h.transformNode(k))?(g.outerHTML=k,--nd||Da(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(k),(k=d.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(k,g),--nd||Da(!0)):f("invalid machine element: "+
|
|
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?od(b,a,d,!0,e,n):pd(b,null,a,d,!1,e,n)}else f("missing machine element: "+a)}catch(I){f(I.message)}return k}window.embedPC8080=function(a,b,c,d){Da(!1);return rd(a,b,c,d)};window.enableEvents=Da;window.sendEvent=Ea;})();
|