pcjs/versions/pc8080/1.23.3/pc8080-dbg.js

228 lines
94 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 r(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 t(a){return"0x"+r(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={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ga(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}function ha(a,b){return(a+" ").slice(0,b)}function ia(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function ja(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 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){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 k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function oa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function pa(){return window?window.navigator.userAgent:""}function w(a){window&&window.alert(a)}function qa(a){var b=!1;window&&(b=window.confirm(a));return b}var ra=null;function ta(){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 ua(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function va(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function wa(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 xa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function ya(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 za={init:[],show:[],exit:[]},Aa=!1,Fa=!0;function Ga(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ha(a){za.init.push(a)}
function Ia(a){if(Fa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){w(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function Ja(a){!Fa&&a?(Fa=!0,Aa&&Ka("init")):Fa=a}function Ka(a){za[a]&&Ia(za[a])}Ga("onload",function(){Aa=!0;Ia(za.init)});Ga("onpageshow",function(){Ia(za.show)});Ga(wa("Opera")||wa("iOS")?"onunload":"onbeforeunload",function(){Ia(za.exit)});
function z(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.dc=b.comment;this.nc=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Qb=this.id.substr(0,b),this.$a=this.id.substr(b+1)):this.$a=this.id;this[a]=c;this.B={hb:!1,eb:!1,Ob:!1,oa:!1,gb:!1};this.Gb=null;this.B.gb=!1;this.K={};this.G=null;this.ka=d||0;Na.push(this)}var Oa=void 0,Pa={};
if(window){Oa||(Oa=window.location.search.substr(1));for(var Qa,Ra=/\+/g,Sa=/([^&=]+)=?([^&]*)/g;Qa=Sa.exec(Oa);)Pa[decodeURIComponent(Qa[1].replace(Ra," "))]=decodeURIComponent(Qa[2].replace(Ra," "))}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=z);a.prototype=Va(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Na=[],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<Na.length;b++){var d=Na[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<Na.length;d++)if(c)c==Na[d]&&(c=null);else if(!(a!=Na[d].type||b&&Na[d].id.indexOf(b)))return Na[d]}return null}function A(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){w(c.message+" ("+a+")")}return b}
function ab(a,b){for(var c=C(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=A(h))&&g.binding&&a.ma(g.type,g.binding,h,g.value),l=k.length}}}}
function C(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}
z.prototype={constructor:z,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ma:function(a,b,c){switch(b){case "clear":return this.K[b]||(this.K[b]=c,c.onclick=function(a){return function(){a.K.print&&(a.K.print.value="")}}(this)),!0;case "print":return this.K[b]||(this.Aa=this.K[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
this.fa=function(a){this.g(a,this.$a)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.$a+": "+a)},fa:function(a,b,c){c=c||this.type;b||w((c?c+": ":"")+a)},Ca:function(){return this.B.oa=!0},Ha:function(a,b){b&&(this.B.oa=!1);return!0}};function D(a,b,c,d,e,f){var h=!0;a.G&&(!0===h?h=0:null==h&&(h=a.ka),bb(a.G,a,b,c,d,e,f,h))}function cb(a,b,c){a.G&&(!0===c||db(a,c|0))&&a.G.message(b,void 0)}
function db(a,b){if(a.G){a===a.G?b|=0:b=b||a.ka;var c=a.G.ka&b;return!!b&&c===b||!!(c&a.G.Lc)}return!1}function eb(a,b){if(a.B.Ob)return a.B.eb&&(a.B.eb=!1),a.B.Ob=!1;if(a.B.gb)return a.g(a.toString()+" error"),!1;a.B.eb=b;return a.B.eb}function fb(a,b){a.B.eb&&(b?a.B.Ob=!0:void 0===b&&a.g(a.toString()+" busy"));return a.B.eb}function E(a){if(!a.B.gb&&(a.B.hb=!0,a.B.hb)){var b=a.Gb;a.Gb=null;b&&b()}}function gb(a,b){b&&(a.B.hb?b():a.Gb=b);return a.B.hb}function hb(a,b){a.B.gb=!0;a.fa(b)}
var kb="undefined"!==typeof ArrayBuffer,lb=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function mb(a){z.call(this,"Panel",a,mb)}Wa(mb);m=mb.prototype;m.ma=function(a,b,c,d){return this.u&&this.u.ma(a,b,c,d)||this.b&&this.b.ma(a,b,c,d)||this.ca&&this.ca.ma(a,b,c,d)||this.G&&this.G.ma(a,b,c,d)?!0:this.parent.ma.call(this,a,b,c,d)};m.Ma=function(a,b,c,d){this.u=a;this.A=b;this.b=c;this.G=d;this.ca=nb(a,"Keyboard")};m.Ca=function(a,b){b||ob();return!0};m.Ha=function(){return!0};m.Da=function(){};
function ob(){for(var a=!1,b=C(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=A(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<Na.length;h++)if(Na[h].id===f){f=Na[h];break a}f=null}f||(a=!0,f=new mb(e));ab(f,d);a&&E(f)}}Ha(ob);
function pb(a,b,c){z.call(this,"Bus",a,pb);this.b=b;this.G=c;this.I=a.busWidth||16;this.T=Math.pow(2,this.I);this.w=this.T-1|0;this.ja=16>=this.I?10:20>=this.I?12:24>=this.I?14:15;this.Ba=1<<this.ja;this.W=this.Ba>>2;this.A=this.Ba-1;this.L=this.T/this.Ba|0;this.J=this.L-1;this.u=[];this.C=[];this.F=this.H=!1;this.Y=[];this.aa=[];a=new G;qb(a,this.G);this.U=Array(this.L);for(b=0;b<this.L;b++)this.U[b]=a;E(this)}Wa(pb);m=pb.prototype;m.reset=function(){};m.Ca=function(a,b){b||this.reset();return!0};
function rb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ja;0<f&&h<a.U.length;){var g=a.U[h],k=h*a.Ba,l=a.Ba-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.D)return g.Cb+=g.D-e,g.D=e,!0;if(e>=g.D+g.Cb){l=g.size-(e-k);l>f&&(l=f);g.Cb=e-g.D+l;e=k+a.Ba;f-=l;h++;continue}}return sb(1,e,f)}e=new G(e,l,a.Ba,d);qb(e,a.G,g);a.U[h++]=e;e=k+a.Ba;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+tb[d]+" at "+t(b)),!0):sb(2,b,c)}m.X=function(a){return this.U[(a&this.w)>>>this.ja].ob(a&this.A,a)};
function ub(a,b){return a.U[(b&a.w)>>>a.ja].Ab(b&a.A,b)}m.Na=function(a){var b=a&this.A,c=(a&this.w)>>>this.ja;return b!=this.A?this.U[c].oc(b,a):this.U[c++].ob(b,a)|this.U[c&this.J].ob(0,a+1)<<8};function vb(a,b){var c=b&a.A,d=(b&a.w)>>>a.ja;return c!=a.A?a.U[d].Ub(c,b):a.U[d++].Ab(c,b)|a.U[d&a.J].Ab(0,b+1)<<8}m.na=function(a,b){this.U[(a&this.w)>>>this.ja].qb(a&this.A,b&255,a)};function wb(a,b,c){a.U[(b&a.w)>>>a.ja].Db(b&a.A,c&255,b)}
m.Mb=function(a,b){var c=a&this.A,d=(a&this.w)>>>this.ja;c!=this.A?this.U[d].qc(c,b&65535,a):(this.U[d++].qb(c,b&255,a),this.U[d&this.J].qb(0,b>>8&255,a+1))};function xb(a,b){if(void 0===b)return a.F=!a.F,a.F;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}function yb(a,b,c){var d;void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.u[k]?w("Input port "+t(k)+" already registered"):f.u[k]=[g,!1]}}
function zb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.u[b],g=a.Y[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.G&&a.F!=h[1]&&Ab(a.G,b,l)):a.G&&(bb(a.G,a,b,null,c),a.F&&Ab(a.G,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Bb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.C[b]&&(a.C[b]=[null,!1]);a.C[b][1]=!a.C[b][1];return a.C[b][1]}
function Cb(a,b,c){var d;void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.C[k]?w("Output port "+t(k)+" already registered"):f.C[k]=[g,!1]}}function Db(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.C[b],g=a.aa[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.G&&a.H!=h[1]&&Eb(a.G,b,k)}else a.G&&(bb(a.G,a,b,k,d),a.H&&Eb(a.G,b,k));f+=g<<3;b+=g;e-=g}}
function sb(a,b,c){w("Memory block error ("+a+": "+r(b)+","+r(c)+")");return!1}var Fb;if(kb){var Gb=new ArrayBuffer(2);(new DataView(Gb)).setUint16(0,256,!0);Fb=256===(new Uint16Array(Gb))[0]}else Fb=!1;var Qb=Fb;
function G(a,b,c,d){this.id=Rb+=2;this.b=null;this.D=a;this.Cb=b;this.size=c||0;this.type=d||Sb;this.K=d==Tb;qb(this);this.Ja=this.ac=!1;if(c)if(kb)this.F=new ArrayBuffer(c),this.H=new DataView(this.F,0,c),this.A=new Uint8Array(this.F,0,c),this.J=new Uint16Array(this.F,0,c>>1),this.b=new Int32Array(this.F,0,c>>2),Ub(this,Qb?Vb:Wb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Ub(this,Xb)}else Ub(this)}var Sb=0,Tb=2,tb=["NONE","RAM","ROM","VID","H/W"],Rb=0;
G.prototype={constructor:G,parent:null,Ua:function(a){this.D=a},save:function(){var a,b;if(kb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.H.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(kb)for(b=0;b<a.length;b++)this.H.setInt32(b<<2,a[b],!0);else this.b=a;return this.Ja=!0}return!1},Sa:function(a,b){b?0===this.C++&&Yb(this,Zb,!1):0===this.u++&&$b(this,Zb,!1)},L:function(){this.G&&db(this.G,129)&&this.G.message("attempt to read invalid block %"+
r(this.D),!0);return 255},w:function(a,b){this.G&&db(this.G,129)&&this.G.message("attempt to write "+t(b)+" to invalid block %"+r(this.D),!0)},T:function(a,b){return this.ob(a++,b++)|this.ob(a,b)<<8},I:function(a,b,c){this.qb(a++,b&255,c++);this.qb(a,b>>8,c)},ca: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},ya:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Ja=!0},
$a: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.Ja=!0},Y:function(a,b){if(this.G&&null!=this.D){var c=this.G;ac(c,this.D+a,1,c.Y)&&c.ia(!0)}return this.Ab(a,b)},ea:function(a,b){if(this.G&&null!=this.D){var c=this.G;ac(c,this.D+a,2,c.Y)&&c.ia(!0)}return this.Ub(a,b)},wa:function(a,b,c){if(this.G&&null!=this.D){var d=this.G;ac(d,this.D+a,1,d.H)&&d.ia(!0)}this.K?this.w(a,b,c):this.Db(a,b,c)},
Fa:function(a,b,c){if(this.G&&null!=this.D){var d=this.G;ac(d,this.D+a,2,d.H)&&d.ia(!0)}this.K?this.w(a,b,c):this.Vb(a,b,c)},W:function(a){return this.A[a]},aa:function(a){return this.A[a]},da:function(a){return this.H.getUint16(a,!0)},qa:function(a){return a&1?this.A[a]|this.A[a+1]<<8:this.J[a>>1]},ua:function(a,b){this.A[a]=b;this.Ja=!0},xa:function(a,b){this.A[a]=b;this.Ja=!0},za:function(a,b){this.H.setUint16(a,b,!0);this.Ja=!0},Ia:function(a,b){a&1?(this.A[a]=b,this.A[a+1]=b>>8):this.J[a>>1]=
b;this.Ja=!0}};function qb(a,b,c){a.G=b;a.u=a.C=0;c&&((a.u=c.u)&&$b(a,Zb,!1),(a.C=c.C)&&Yb(a,Zb,!1))}function bc(a,b){b?0===--a.C&&(a.qb=a.K?a.w:a.Db,a.qc=a.K?a.I:a.Vb):0===--a.u&&(a.ob=a.Ab,a.oc=a.Ub)}function Yb(a,b,c){c&&a.C||(a.qb=!a.K&&b[2]||a.w,a.qc=!a.K&&b[3]||a.I);if(c||void 0===c)a.Db=b[2]||a.w,a.Vb=b[3]||a.I}function $b(a,b,c){c&&a.u||(a.ob=b[0]||a.L,a.oc=b[1]||a.T);if(c||void 0===c)a.Ab=b[0]||a.L,a.Ub=b[1]||a.T}function Ub(a,b){b||(b=cc);$b(a,b,void 0);Yb(a,b,void 0)}
var cc=[],Xb=[G.prototype.ca,G.prototype.ra,G.prototype.ya,G.prototype.$a],Zb=[G.prototype.Y,G.prototype.ea,G.prototype.wa,G.prototype.Fa];if(kb)var Wb=[G.prototype.W,G.prototype.da,G.prototype.ua,G.prototype.za],Vb=[G.prototype.aa,G.prototype.qa,G.prototype.xa,G.prototype.Ia];
function dc(a,b){z.call(this,"CPU",a,dc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.nb=c;this.i.Jb=0;this.i.Ya=d;this.i.Rb=Math.round(this.i.nb/1E4)/100;this.i.Wa=this.i.Rb*this.i.Ya;this.B.sa=!1;this.B.Pb=!1;this.B.$b=a.autoStart;this.B.bc=!1;this.B.fb=!1;this.i.ub=this.i.kb=0;this.i.vb=a.csStart;this.i.jb=a.csInterval;this.i.lb=a.csStop;this.aa=this.Za.bind(this);E(this)}Wa(dc);var ec=["power","reset"];m=dc.prototype;
m.Ma=function(a,b,c,d){this.u=a;this.A=b;this.G=d;for(b=0;b<ec.length;b++)(c=this.K[ec[b]])&&this.u.ma(null,ec[b],c);this.L=(b=nb(a,"Video"))&&Math.max(b.jd,b.mc)||60;this.C=nb(a,"ChipSet");a=fc(a,"autoStart");null!=a&&(this.B.$b="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.Jb=0};m.save=function(){return null};m.restore=function(){return!1};
m.Ca=function(a,b){if(!b){if(a&&this.restore){gc(this);if(!this.restore(a))return!1;hc(this)}else this.reset();this.G?this.G.Ua():this.g("No debugger detected")}ic(this);return!0};m.Ha=function(a){return a?this.save():!0};function jc(a){(a.B.$b||!a.G&&void 0===a.K.run)&&a.Za(!0)}m.cc=function(){return 0};function hc(a){void 0===a.i.vb&&(a.i.vb=0);void 0===a.i.jb&&(a.i.jb=-1);void 0===a.i.lb&&(a.i.lb=-1);a.B.fb=0<=a.i.vb&&0<a.i.jb;a.B.fb&&(a.i.ub=0,a.i.kb=a.i.vb-a.I)}
function kc(a,b){if(a.B.fb){var c=!1;a.i.ub=a.i.ub+a.cc()|0;a.i.kb-=b;0>=a.i.kb&&(a.i.kb+=a.i.jb,c=!0);0<=a.i.lb&&a.i.lb<=wc(a)&&(a.i.jb=a.i.lb=-1,hc(a),a.ia(),c=!0);c&&a.g(wc(a)+" cycles: checksum="+r(a.i.ub))}}
m.ma=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.K[b]=c;a=!0;break;case "run":this.K[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.B.oa)a=!0;else{var b=null,c,g=Za(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.B.hb);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.B.oa);c++);c==g.length&&(b=a);w("The "+b.type+" component ("+b.id+") is not "+(b.B.hb?"powered yet":"ready yet"+(b.Gb?" (waiting for notification)":""))+".");a=!1}a&&(d.B.sa?d.ia(!0):d.Za(!0))};a=
!0;break;case "speed":this.K[b]=c;a=!0;break;case "setSpeed":this.K[b]=c,c.onclick=function(){xc(d,d.i.Ya<<1,!0)},c.textContent=this.i.Wa.toFixed(2)+"Mhz",a=!0}return a};function yc(a,b,c){a.I+=b;c&&(a.F=a.b=0)}
function zc(a,b){var c=30;c<a.L&&(c=a.L);2>c&&(c=2);var d=1;b&&1<a.i.Ya&&a.i.Va&&(d=a.i.Va/a.i.Rb);a.i.ic=Math.round(1E3/30);a.i.Tc=Math.floor(a.i.nb/c*d);a.i.Sb=Math.floor(a.i.nb/30*d);a.i.kc=Math.floor(a.i.nb/a.L*d);a.i.jc=Math.floor(a.i.nb/2*d);b||(a.i.mb=a.i.Sb,a.i.xb=a.i.kc,a.i.wb=a.i.jc);a.i.Tb=0}function wc(a){return a.I+a.H+a.F-a.b}function gc(a){a.i.Va=0;a.I=a.H=a.F=a.b=0;hc(a);xc(a,1)}
function xc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Va/a.i.Wa?b=1:d=!0;a.i.Ya=b;b=a.i.Rb*a.i.Ya;if(a.i.Wa!=b){a.i.Wa=b;b=a.i.Wa.toFixed(2)+"Mhz";var e=a.K.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.u&&a.u.Bb()}yc(a,a.H);a.H=0;a.i.ib=ka();a.i.Xa=0;zc(a);return d}
m.Za=function(a){if(eb(this,!0)){if(!this.B.sa){xc(this);this.u&&this.u.start(this.i.ib,wc(this));this.B.sa=!0;this.B.Pb=!0;this.C&&this.C.start();var b=this.K.run;b&&(b.textContent="Halt");this.u&&(this.u.Da(!0),a&&this.u.Bb(!0))}this.i.Tb>=this.i.nb&&zc(this,!0);this.i.yb=0;this.i.Ib=ka();this.i.Xa&&(a=this.i.Ib-this.i.Xa,a>this.i.ic&&(this.i.ib+=a,this.i.ib>this.i.Ib&&(this.i.ib=this.i.Ib)));try{do{this.pb(this.B.fb?1:this.i.Tc);var c=this.F-this.b;this.H+=c;this.i.yb+=c;yc(this,0,!0);kc(this,
c);this.i.xb-=c;0>=this.i.xb&&(this.i.xb+=this.i.kc,this.u&&Ac(this.u,this.i.Jb++),this.i.Jb>this.L&&(this.i.Jb=0));this.i.wb-=c;0>=this.i.wb&&(this.i.wb+=this.i.jc,this.u&&this.u.Da());this.i.mb-=c;if(0>=this.i.mb){this.i.mb+=this.i.Sb;break}}while(this.B.sa)}catch(e){this.ia();ic(this);this.u&&this.u.stop(ka(),wc(this));eb(this,!1);hb(this,e.stack||e.message);return}c=setTimeout;a=this.aa;this.i.Xa=ka();b=this.i.ic;this.i.yb&&(b=Math.round(b*this.i.yb/this.i.Sb));var b=b-(this.i.Xa-this.i.Ib),d=
this.i.Xa-this.i.ib;d&&(this.i.Va=Math.round(this.H/(10*d))/100,864E5<=d&&(this.I=0,xc(this)));if(0>b||this.i.Va<this.i.Wa)b=0;this.i.Tb+=this.i.yb;this.i.Xa+=b;c(a,b)}else ic(this),this.u&&this.u.stop(ka(),wc(this))};m.pb=function(){return 0};m.ia=function(a){fb(this,!0);this.F-=this.b;this.b=0;yc(this,this.H);this.H=0;if(this.B.sa){this.B.sa=!1;this.C&&this.C.stop();var b=this.K.run;b&&(b.textContent="Run")}this.B.Fb=a};function ic(a,b){a.u&&(Ac(a.u,-1),a.u.Da(b))}
function Bc(a){this.Ga=+a.model||8080;dc.call(this,a,1E6);this.T=Cc;gc(this);this.B.Fb=this.B.Mc=!1;this.Y=0;this.J=[];this.W=0;Dc(this)}Wa(Bc,dc);function Ec(a,b){a.J.push(b)}m=Bc.prototype;m.reset=function(){this.B.sa&&this.ia();Dc(this);gc(this);this.B.gb=!1;this.parent.reset.call(this)};function Dc(a){a.j=0;a.N=0;a.O=0;a.P=0;a.R=0;a.S=0;a.V=0;a.ha=0;H(a,a.W);Fc(a,0);a.w=0}function Gc(a,b){a.W=b;H(a,b)}
m.cc=function(){var a=this.j+this.N+this.O+this.P+this.R+this.S+this.V|0;return a=a+this.ha+this.M+Hc(this)|0};
m.save=function(){var a=new Ic(this);I(a,0,[this.j,this.N,this.O,this.P,this.R,this.S,this.V,this.ha,this.M,Hc(this)]);I(a,1,[this.w,this.I,this.i.Ya]);for(var b=this.A,c=0,d=[],e=0;e<b.L;e++){var f=b.U[e];if(f.Ja||f.ac){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var n=f[g],p=g+1;p<f.length&&f[p]===n;)p++;l[k++]=p-g;l[k++]=n;g=p}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.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.ha=b[7]&65535;H(this,b[8]);Fc(this,b[9]);b=a[1];this.w=b[0];this.I=b[1];xc(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.W){for(var f=0,h=Array(b.W),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.U[d];if(!f||!f.restore(e)){w("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.ma=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.K[b]=c;this.Y++;d=!0;break;default:d=this.parent.ma.call(this,a,b,c)}return d};function Jc(a){return a.N<<8|a.O}function Kc(a,b){a.N=b>>8&255;a.O=b&255}function Lc(a){return a.P<<8|a.R}function Mc(a,b){a.P=b>>8&255;a.R=b&255}function J(a){return a.S<<8|a.V}
function Nc(a,b){a.S=b>>8&255;a.V=b&255}function H(a,b){a.M=b&65535}function Oc(a){return a.Z&256?1:0}function Pc(a,b){a.Z=a.Z&255|b}function Qc(a){return lb[a.ba&255]?4:0}function Rc(a){return(a.ba^a.pa)&16?16:0}function Sc(a){return a.Z&255?0:64}function Tc(a){return a.ba&128?128:0}function Hc(a){return a.ta&-214|Tc(a)|Sc(a)|Rc(a)|Qc(a)|Oc(a)}function Fc(a,b){a.Z=a.ba=a.pa=0;b&1&&(a.Z|=256);b&4||(a.ba|=1);b&16&&(a.pa|=16);b&64||(a.Z|=255);b&128&&(a.ba^=192);a.ta=a.ta&-726|b&512|2}
function Uc(a,b){a.pa=a.j^b;return a.ba=(a.Z=a.j+b)&255}function Vc(a,b){a.pa=a.j^b;return a.ba=(a.Z=a.j+b+(a.Z&256?1:0))&255}function Wc(a,b){a.Z=a.ba=a.pa=a.j&b;(a.j|b)&8&&(a.pa^=16);return a.Z}function Xc(a,b){a.pa=b^255;b=a.ba=b+255&255;a.Z=a.Z&-256|b;return b}function Yc(a,b){a.pa=b;b=a.ba=b+1&255;a.Z=a.Z&-256|b;return b}function Zc(a,b){return a.ba=a.Z=a.pa=a.j|b}function K(a,b){b^=255;a.pa=a.j^b;return a.ba=(a.Z=a.j+b+1^256)&255}
function $c(a,b){b^=255;a.pa=a.j^b;return a.ba=(a.Z=a.j+b+(a.Z&256?0:1)^256)&255}function ad(a,b){return a.ba=a.Z=a.pa=a.j^b}m.X=function(a){return this.A.X(a)};m.na=function(a,b){this.A.na(a,b)};function M(a){var b=a.X(a.M);H(a,a.M+1);return b}function N(a){var b=a.A.Na(a.M);H(a,a.M+2);return b}function O(a){var b=a.A.Na(a.ha);a.ha=a.ha+2&65535;return b}function P(a,b){a.ha=a.ha-2&65535;a.A.Mb(a.ha,b)}
function Q(a,b,c,d){d=d||2;a.K[b]&&(void 0===c&&(hb(a,"Value for "+b+" is invalid"),a.ia()),c=!a.B.sa||a.B.bc?r(c,d):"--------".substr(0,d),a.K[b].textContent!=c&&(a.K[b].textContent=c))}
m.Da=function(a){this.Y&&(a||!this.B.sa||this.B.bc)&&(Q(this,"A",this.j),Q(this,"B",this.N),Q(this,"C",this.O),Q(this,"BC",Jc(this),4),Q(this,"D",this.P),Q(this,"E",this.R),Q(this,"DE",Lc(this),4),Q(this,"H",this.S),Q(this,"L",this.V),Q(this,"HL",J(this),4),Q(this,"SP",this.ha,4),Q(this,"PC",this.M,4),a=Hc(this),Q(this,"PS",a,4),Q(this,"IF",a&512?1:0,1),Q(this,"SF",a&128?1:0,1),Q(this,"ZF",a&64?1:0,1),Q(this,"AF",a&16?1:0,1),Q(this,"PF",a&4?1:0,1),Q(this,"CF",a&1?1:0,1));if(a=this.K.speed)a.textContent=
this.B.sa&&this.i.Va?this.i.Va.toFixed(2)+"Mhz":"Stopped"};
m.pb=function(a){this.B.Fb=!0;var b=this.B.Mc=this.G&&bd(this.G),c=a?this.B.Pb?0:1:-1;this.B.Pb=!1;this.F=this.b=a;do{if(this.w){var d;this.w&8&&this.ta&512?(d=199|(this.w&7)<<3,this.w&=-16,this.ta&=-513,this.T[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.w&16){this.b=0;break}}if(b){if(ud(this.G,this.M,c)){this.ia();break}c=1}this.T[M(this)].call(this)}while(0<this.b);return this.B.Fb?this.F-this.b:void 0===this.B.Fb?0:-1};
Ha(function(){for(var a=C(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Bc(d);ab(d,c)}});function vd(){this.b-=4}function wd(){H(this,N(this));this.b-=10}function xd(){H(this,O(this));this.b-=10}function yd(){var a=N(this);P(this,this.M);H(this,a);this.b-=17}
var Cc=[vd,function(){Kc(this,N(this));this.b-=10},function(){this.na(Jc(this),this.j);this.b-=7},function(){Kc(this,Jc(this)+1);this.b-=5},function(){this.N=Yc(this,this.N);this.b-=5},function(){this.N=Xc(this,this.N);this.b-=5},function(){this.N=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Pc(this,a&256);this.b-=4},vd,function(){var a;Nc(this,a=J(this)+Jc(this));Pc(this,a>>8&256);this.b-=10},function(){this.j=this.X(Jc(this));this.b-=7},function(){Kc(this,Jc(this)-1);this.b-=
5},function(){this.O=Yc(this,this.O);this.b-=5},function(){this.O=Xc(this,this.O);this.b-=5},function(){this.O=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Pc(this,a);this.b-=4},vd,function(){Mc(this,N(this));this.b-=10},function(){this.na(Lc(this),this.j);this.b-=7},function(){Mc(this,Lc(this)+1);this.b-=5},function(){this.P=Yc(this,this.P);this.b-=5},function(){this.P=Xc(this,this.P);this.b-=5},function(){this.P=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
Oc(this);Pc(this,a&256);this.b-=4},vd,function(){var a;Nc(this,a=J(this)+Lc(this));Pc(this,a>>8&256);this.b-=10},function(){this.j=this.X(Lc(this));this.b-=7},function(){Mc(this,Lc(this)-1);this.b-=5},function(){this.R=Yc(this,this.R);this.b-=5},function(){this.R=Xc(this,this.R);this.b-=5},function(){this.R=M(this);this.b-=7},function(){var a=this.j<<8;this.j=(Oc(this)<<8|this.j)>>1;Pc(this,a&256);this.b-=4},vd,function(){Nc(this,N(this));this.b-=10},function(){var a=N(this);this.A.Mb(a,J(this));
this.b-=16},function(){Nc(this,J(this)+1);this.b-=5},function(){this.S=Yc(this,this.S);this.b-=5},function(){this.S=Xc(this,this.S);this.b-=5},function(){this.S=M(this);this.b-=7},function(){var a=0,b=Oc(this);if(Rc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Uc(this,a);Pc(this,b?256:0);this.b-=4},vd,function(){var a;Nc(this,a=J(this)+J(this));Pc(this,a>>8&256);this.b-=10},function(){var a;a=N(this);a=this.A.Na(a);Nc(this,a);this.b-=16},function(){Nc(this,J(this)-1);this.b-=5},function(){this.V=
Yc(this,this.V);this.b-=5},function(){this.V=Xc(this,this.V);this.b-=5},function(){this.V=M(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},vd,function(){this.ha=N(this)&65535;this.b-=10},function(){this.na(N(this),this.j);this.b-=13},function(){this.ha=this.ha+1&65535;this.b-=5},function(){var a=J(this);this.na(a,Yc(this,this.X(a)));this.b-=10},function(){var a=J(this);this.na(a,Xc(this,this.X(a)));this.b-=10},function(){this.na(J(this),M(this));this.b-=10},function(){this.Z|=256;this.b-=
4},vd,function(){var a;Nc(this,a=J(this)+this.ha);Pc(this,a>>8&256);this.b-=10},function(){this.j=this.X(N(this));this.b-=13},function(){this.ha=this.ha-1&65535;this.b-=5},function(){this.j=Yc(this,this.j);this.b-=5},function(){this.j=Xc(this,this.j);this.b-=5},function(){this.j=M(this);this.b-=7},function(){Pc(this,Oc(this)?0: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(J(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(J(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(J(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(J(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(J(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(J(this));this.b-=7},function(){this.V=this.j;
this.b-=5},function(){this.na(J(this),this.N);this.b-=7},function(){this.na(J(this),this.O);this.b-=7},function(){this.na(J(this),this.P);this.b-=7},function(){this.na(J(this),this.R);this.b-=7},function(){this.na(J(this),this.S);this.b-=7},function(){this.na(J(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.w|=16;this.b-=7;this.G&&db(this,-2147483648)?(H(this,a),this.G.ia()):this.ta&512||(this.G&&H(this,a),this.ia())},
function(){this.na(J(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(J(this));this.b-=7},function(){this.b-=5},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(J(this)));this.b-=7},function(){this.j=Uc(this,this.j);this.b-=4},function(){this.j=Vc(this,this.N);this.b-=4},function(){this.j=Vc(this,this.O);this.b-=4},function(){this.j=Vc(this,this.P);this.b-=4},function(){this.j=Vc(this,this.R);this.b-=4},function(){this.j=Vc(this,this.S);this.b-=4},function(){this.j=Vc(this,this.V);this.b-=4},function(){this.j=Vc(this,this.X(J(this)));
this.b-=7},function(){this.j=Vc(this,this.j);this.b-=4},function(){this.j=K(this,this.N);this.b-=4},function(){this.j=K(this,this.O);this.b-=4},function(){this.j=K(this,this.P);this.b-=4},function(){this.j=K(this,this.R);this.b-=4},function(){this.j=K(this,this.S);this.b-=4},function(){this.j=K(this,this.V);this.b-=4},function(){this.j=K(this,this.X(J(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=$c(this,this.N);this.b-=4},function(){this.j=$c(this,this.O);this.b-=
4},function(){this.j=$c(this,this.P);this.b-=4},function(){this.j=$c(this,this.R);this.b-=4},function(){this.j=$c(this,this.S);this.b-=4},function(){this.j=$c(this,this.V);this.b-=4},function(){this.j=$c(this,this.X(J(this)));this.b-=7},function(){this.j=$c(this,this.j);this.b-=4},function(){this.j=Wc(this,this.N);this.b-=4},function(){this.j=Wc(this,this.O);this.b-=4},function(){this.j=Wc(this,this.P);this.b-=4},function(){this.j=Wc(this,this.R);this.b-=4},function(){this.j=Wc(this,this.S);this.b-=
4},function(){this.j=Wc(this,this.V);this.b-=4},function(){this.j=Wc(this,this.X(J(this)));this.b-=7},function(){this.j=Wc(this,this.j);this.b-=4},function(){this.j=ad(this,this.N);this.b-=4},function(){this.j=ad(this,this.O);this.b-=4},function(){this.j=ad(this,this.P);this.b-=4},function(){this.j=ad(this,this.R);this.b-=4},function(){this.j=ad(this,this.S);this.b-=4},function(){this.j=ad(this,this.V);this.b-=4},function(){this.j=ad(this,this.X(J(this)));this.b-=7},function(){this.j=ad(this,this.j);
this.b-=4},function(){this.j=Zc(this,this.N);this.b-=4},function(){this.j=Zc(this,this.O);this.b-=4},function(){this.j=Zc(this,this.P);this.b-=4},function(){this.j=Zc(this,this.R);this.b-=4},function(){this.j=Zc(this,this.S);this.b-=4},function(){this.j=Zc(this,this.V);this.b-=4},function(){this.j=Zc(this,this.X(J(this)));this.b-=7},function(){this.j=Zc(this,this.j);this.b-=4},function(){K(this,this.N);this.b-=4},function(){K(this,this.O);this.b-=4},function(){K(this,this.P);this.b-=4},function(){K(this,
this.R);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,this.V);this.b-=4},function(){K(this,this.X(J(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){Sc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Kc(this,O(this));this.b-=10},function(){var a=N(this);Sc(this)||H(this,a);this.b-=10},wd,function(){var a=N(this);Sc(this)||(P(this,this.M),H(this,a),this.b-=6);this.b-=11},function(){P(this,Jc(this));this.b-=11},function(){this.j=Uc(this,M(this));this.b-=
7},function(){P(this,this.M);H(this,0);this.b-=11},function(){Sc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},xd,function(){var a=N(this);Sc(this)&&H(this,a);this.b-=10},wd,function(){var a=N(this);Sc(this)&&(P(this,this.M),H(this,a),this.b-=6);this.b-=11},yd,function(){this.j=Vc(this,M(this));this.b-=7},function(){P(this,this.M);H(this,8);this.b-=11},function(){Oc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Mc(this,O(this));this.b-=10},function(){var a=N(this);Oc(this)||H(this,a);this.b-=
10},function(){var a=M(this);Db(this.A,a,this.j,this.M+-2&65535);this.b-=10},function(){var a=N(this);Oc(this)||(P(this,this.M),H(this,a),this.b-=6);this.b-=11},function(){P(this,Lc(this));this.b-=11},function(){this.j=K(this,M(this));this.b-=7},function(){P(this,this.M);H(this,16);this.b-=11},function(){Oc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},xd,function(){var a=N(this);Oc(this)&&H(this,a);this.b-=10},function(){var a=M(this);this.j=zb(this.A,a,this.M+-2&65535)&255;this.b-=10},function(){var a=
N(this);Oc(this)&&(P(this,this.M),H(this,a),this.b-=6);this.b-=11},yd,function(){this.j=$c(this,M(this));this.b-=7},function(){P(this,this.M);H(this,24);this.b-=11},function(){Qc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Nc(this,O(this));this.b-=10},function(){var a=N(this);Qc(this)||H(this,a);this.b-=10},function(){var a=O(this);P(this,J(this));Nc(this,a);this.b-=18},function(){var a=N(this);Qc(this)||(P(this,this.M),H(this,a),this.b-=6);this.b-=11},function(){P(this,J(this));this.b-=
11},function(){this.j=Wc(this,M(this));this.b-=7},function(){P(this,this.M);H(this,32);this.b-=11},function(){Qc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,J(this));this.b-=5},function(){var a=N(this);Qc(this)&&H(this,a);this.b-=10},function(){var a=J(this);Nc(this,Lc(this));Mc(this,a);this.b-=5},function(){var a=N(this);Qc(this)&&(P(this,this.M),H(this,a),this.b-=6);this.b-=11},yd,function(){this.j=ad(this,M(this));this.b-=7},function(){P(this,this.M);H(this,40);this.b-=11},
function(){Tc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Fc(this,a&255|this.ta&-256);this.j=a>>8;this.b-=10},function(){var a=N(this);Tc(this)||H(this,a);this.b-=10},function(){this.ta&=-513;this.b-=4},function(){var a=N(this);Tc(this)||(P(this,this.M),H(this,a),this.b-=6);this.b-=11},function(){P(this,Hc(this)&255|this.j<<8);this.b-=11},function(){this.j=Zc(this,M(this));this.b-=7},function(){P(this,this.M);H(this,48);this.b-=11},function(){Tc(this)&&(H(this,O(this)),
this.b-=6);this.b-=5},function(){this.ha=J(this)&65535;this.b-=5},function(){var a=N(this);Tc(this)&&H(this,a);this.b-=10},function(){this.ta|=512;this.b-=4},function(){var a=N(this);Tc(this)&&(P(this,this.M),H(this,a),this.b-=6);this.b-=11},yd,function(){K(this,M(this));this.b-=7},function(){P(this,this.M);H(this,56);this.b-=11}];
function S(a){z.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!zd[b]&&w("Unrecognized ChipSet model: "+b);this.w=zd[b]||T;this.Ga=this.w.Ea;a.sound&&(this.J=null,window&&(this.J=window.AudioContext||window.webkitAudioContext),this.J&&new this.J);E(this)}Wa(S);
var T={Ea:1978.1,Ic:{va:0,od:1,sd:16,zd:32,Jd:64,Id:128,rb:14},Pa:{va:1,sc:1,Hc:2,Dc:4,Ec:16,Fc:32,Gc:64,rb:8},Jc:{va:2,nd:3,Rd:4,pd:8,Ed:16,Fd:32,Gd:64,qd:128,rb:0},Md:{va:3},Kd:{va:2,Ad:7},Od:{va:3,Sd:1,Nd:2,Hd:4,xd:8,rd:16,ld:32},Ld:{va:4},Pd:{va:5,td:1,ud:2,vd:4,wd:8,Td:16}},U={Ea:100,Eb:{va:66,Ud:1,Ac:2,Bc:4,Dd:8,Bd:16,Cd:32,Wb:64,yd:128},rc:{va:66,INIT:0},Cc:{va:98,INIT:0},uc:{va:162,INIT:0},tc:{va:194,INIT:0}},zd={SI1978:T,VT100:U};S.prototype.ma=function(){return!1};
S.prototype.Ma=function(a,b,c,d){this.A=b;this.b=c;this.G=d;this.u=a;yb(b,this,this.w.Kb);Cb(b,this,this.w.Lb)};S.prototype.Ca=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};S.prototype.Ha=function(a){return a?this.save():!0};T.Ua=[[T.Ic.rb,T.Pa.rb,T.Jc.rb,0,0,0,0]];U.Ua=[[U.rc.INIT,U.Cc.INIT,U.Eb.Ac|U.Eb.Bc,U.uc.INIT,U.tc.INIT]];m=S.prototype;m.reset=function(){this.restore(this.w.Ua)||this.fa("reset error")};
m.save=function(){var a=new Ic(this);switch(this.Ga){case T.Ea:I(a,0,[this.da,this.C,this.ea,this.F,this.I,this.aa,this.ca]);break;case U.Ea:I(a,0,[this.L,this.Y,this.H,this.W,this.T])}return a.data()};m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.Ga){case T.Ea:return this.da=b[0],this.C=b[1],this.ea=b[2],this.F=b[3],this.I=b[4],this.aa=b[5],this.ca=b[6],!0;case U.Ea:return this.L=b[0],this.Y=b[1],this.H=b[2],this.W=b[3],this.T=b[4],!0}return!1};m.start=function(){};m.stop=function(){};
function Ad(a,b,c){a.C&=~b;c&&(a.C|=b)}m.Oc=function(a,b){var c=this.da;D(this,a,null,b,"STATUS0",c);return c};m.Pc=function(a,b){var c=this.C;D(this,a,null,b,"STATUS1",c);return c};m.Qc=function(a,b){var c=this.ea;D(this,a,null,b,"STATUS2",c);return c};m.Nc=function(a,b){var c=this.F>>8-this.I&255;D(this,a,null,b,"SHIFT.RESULT",c);return c};m.Uc=function(a,b,c){D(this,a,b,c,"SHIFT.COUNT",null);this.I=b};m.Wc=function(a,b,c){D(this,a,b,c,"SOUND1",null);this.aa=b};
m.Vc=function(a,b,c){D(this,a,b,c,"SHIFT.DATA",null);this.F=b<<8|this.F>>8};m.Xc=function(a,b,c){D(this,a,b,c,"SOUND2",null);this.ca=b};m.Yc=function(a,b,c){D(this,a,b,c,"WATCHDOG",null)};m.Rc=function(a,b){var c=this.H=this.H&~U.Eb.Wb|((wc(this.b)&64)<<1?U.Eb.Wb:0);D(this,a,null,b,"FLAGS.BUFFER",c);return c};m.Zc=function(a,b,c){D(this,a,b,c,"BRIGHTNESS.LATCH",null);this.L=b};m.bd=function(a,b,c){D(this,a,b,c,"NVR.LATCH",null);this.Y=b};m.ad=function(a,b,c){D(this,a,b,c,"DC012",null);this.W=b};
m.$c=function(a,b,c){D(this,a,b,c,"DC011",null);this.T=b};T.Kb={0:S.prototype.Oc,1:S.prototype.Pc,2:S.prototype.Qc,3:S.prototype.Nc};T.Lb={2:S.prototype.Uc,3:S.prototype.Wc,4:S.prototype.Vc,5:S.prototype.Xc,6:S.prototype.Yc};U.Kb={66:S.prototype.Rc};U.Lb={66:S.prototype.Zc,98:S.prototype.bd,162:S.prototype.ad,194:S.prototype.$c};Ha(function(){for(var a=C(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new S(d);ab(d,c)}});
function Bd(a){z.call(this,"ROM",a,Bd);this.u=null;this.H=a.addr;this.C=a.size;this.I=a.writable;this.w=a.alias;this.F=a.file;this.J=ba(this.F);if(this.F){a=this.F;var b=ca(this.J);"json"!=b&&"hex"!=b&&(a=oa()+"/api/v1/dump?file="+this.F+"&format=bytes&decimal=true");var c=this;na(a,null,!0,function(a,b,f){Cd(c,a,b,f)})}}Wa(Bd);var Dd=[0,5];Bd.prototype.Ma=function(a,b,c,d){this.A=b;this.b=c;this.G=d;Ed(this)};
Bd.prototype.Ca=function(){if(this.La){if(this.G){var a=this.G,b=this.id,c=this.H,d=this.C,e=this.La,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var n=f,k=[k>>>0,h],p=ja(n,k,a.Ra);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.I.push({Vd:b,D:c,Sc:d,La:e,Yb:f})}delete this.La}return!0};Bd.prototype.Ha=function(){return!0};
function Cd(a,b,c,d){if(d)a.fa("Unable to load system ROM (error "+d+": "+b+")");else{Ya(a.Qb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.u=f;else if(h)for(a.u=Array(4*h.length),d=c=0;c<h.length;c++)a.u[d++]=h[c]&255,a.u[d++]=h[c]>>8&255,a.u[d++]=h[c]>>16&255,a.u[d++]=h[c]>>24&255;else a.u=e;a.La=e.symbols;if(!a.u.length){w("Empty ROM: "+b);return}if(1==a.u.length){w(a.u[0]);return}}catch(g){a.fa("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.u=Array(b.length),e=0;e<b.length;e++)a.u[e]=aa(b[e],16);Ed(a)}}
function Ed(a){if(!gb(a))if(!a.F)E(a);else if(a.u&&a.A){a.C||(a.C=a.u.length);if(a.u.length!=a.C)hb(a,"ROM size (0x"+r(a.u.length)+") does not match specified size ("+("0x"+r(a.C))+")");else if(Fd(a,a.H)){var b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.A,h=d.C,g=[],k=d.H>>>f.ja;0<h&&k<f.U.length;)g.push(f.U[k++]),h-=f.Ba;f=d.A;d=d.C;h=0;for(e>>>=f.ja;0<d&&e<f.U.length;){k=g[h++];if(!k)break;f.U[e++]=k;d-=f.Ba}}delete a.u}E(a)}}
function Fd(a,b){if(rb(a.A,b,a.C,a.I?1:Tb)){var c;for(c=0;c<a.u.length;c++)wb(a.A,b+c,a.u[c]);if(a.I&&256==b){for(c=0;c<Dd.length;c++)wb(a.A,Dd[c],118);Ec(a.b,function(a){return function(b){if(0<=Dd.indexOf(b)){var c=!1,h=a.b,g=a.G;if(5==b)switch(c=!0,h.O){case 2:Gd(a,String.fromCharCode(h.R));break;case 9:for(var k=Lc(h),l="",n=255;n--;){var p=a.b.X(k++);if(36==p)break;l+=String.fromCharCode(p)}Gd(a,l);break;default:c=!1}c?xd.call(h):g&&(a.g("\nCP/M vector "+t(b)),H(h,b),g.ia());b=!0}else b=!1;return b}}(a));
Gc(a.b,b)}return!0}return!1}function Gd(a,b){b=b.replace(/\r/g,"");a.Aa&&(a.Aa.value+=b,a.Aa.scrollTop=a.Aa.scrollHeight)}Ha(function(){for(var a=C(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Bd(d);ab(d,c)}});function Hd(a){z.call(this,"RAM",a,Hd);this.w=a.addr;this.C=a.size;this.u=!1}Wa(Hd);m=Hd.prototype;m.Ma=function(a,b,c,d){this.A=b;this.b=c;this.G=d;E(this)};m.Ca=function(a,b){b||this.reset();return!0};m.Ha=function(a){return a?this.save():!0};
m.reset=function(){!this.u&&this.C&&rb(this.A,this.w,this.C,1)&&(this.u=!0);this.u||w("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ha(function(){for(var a=C(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Hd(d);ab(d,c)}});function Id(a){z.call(this,"Keyboard",a,Id,65536);this.reset();E(this)}Wa(Id);
var Jd={Oa:{va:130,yc:1,xc:2,wc:4,vc:8,zc:16,Xb:32,Qd:64,md:128}},Kd={"1p":49,"2p":50,coin:51,left:37,right:39,fire:32},Ld={65:37,68:39,76:32},Md={l4:Jd.Oa.yc,l3:Jd.Oa.xc,l2:Jd.Oa.wc,l1:Jd.Oa.vc,locked:Jd.Oa.zc,online:Jd.Oa.Xb,local:~Jd.Oa.Xb};
Id.prototype.ma=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.K[e]){if("led"==a&&Md[b])return this.K[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Nd(d,a,!0)},c.onkeyup=function(a){return Nd(d,a,!1)},!0;default:if(void 0!==Kd[b])return this.K[e]=c,a=function(a,b){return function(){Od(a,b,!0)}}(this,b),b=function(a,b){return function(){Od(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};
Id.prototype.Ma=function(a,b,c,d){this.G=d;this.C=nb(a,"ChipSet");this.Ga=this.C.Ga;switch(this.Ga){case U.Ea:this.w=Jd}this.w&&(yb(b,this,this.w.Kb),Cb(b,this,this.w.Lb))};Id.prototype.Ca=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Id.prototype.Ha=function(a){return a?this.save():!0};Jd.Ua=[[0]];Id.prototype.reset=function(){this.u={};this.b={};this.w&&!this.restore(this.w.Ua)&&this.fa("reset error")};
Id.prototype.save=function(){var a=new Ic(this);switch(this.Ga){case U.Ea:I(a,0,[this.A])}return a.data()};Id.prototype.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.Ga){case T.Ea:return!0;case U.Ea:return this.A=b[0],Pd(this),!0}return!1};function Pd(a){for(var b in Md){var c=a.K["led-"+b];if(c){var d=Md[b],e=!!(a.A&d);d&d-1&&(e=!(a.A&~d));c.style.backgroundColor=e?"#ff0000":"#000000"}}}
function Nd(a,b,c){var d=!0,e;a:{e=b.keyCode;e=Ld[e]||e;for(var f in Kd)if(Kd[f]===e){e=f;break a}e=null}e&&(d=Od(a,e,c),b.preventDefault());return d}
function Od(a,b,c){if(c)a.u[b]=Date.now(),delete a.b[b];else{var d=a.u[b];if(d&&100>Date.now()-d)return a.b[b]=d,Qd(a),!0;delete a.u[b]}if(a.C)switch(b){case "1p":Ad(a.C,T.Pa.Dc,c);break;case "2p":Ad(a.C,T.Pa.Hc,c);break;case "coin":Ad(a.C,T.Pa.sc,c);break;case "left":Ad(a.C,T.Pa.Fc,c);break;case "right":Ad(a.C,T.Pa.Gc,c);break;case "fire":Ad(a.C,T.Pa.Ec,c)}return!0}
function Qd(a){for(var b=-1,c=Object.keys(a.b),d=0;d<c.length;d++){var e=c[d],f=100-(Date.now()-a.b[e]);if(0<f){if(0>b||b>f)b=f}else delete a.b[e],Od(a,e,!1)}0<=b&&setTimeout(function(){Qd(a)},b)}Id.prototype.F=function(a,b,c){D(this,a,b,c,"KBDUART.STATUS",null);this.A=b;Pd(this)};Jd.Kb={};Jd.Lb={130:Id.prototype.F};Ha(function(){for(var a=C(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Id(d);ab(d,c)}});
function Rd(a,b,c,d,e){var f=this;this.fc=wa("Gecko/");var h=["","moz","ms","webkit"];z.call(this,"Video",a,Rd,262144);this.Y=a.screenWidth;this.W=a.screenHeight;this.Ia=a.bufferAddr;this.fd=a.bufferRAM;var g=a.bufferFormat;this.da=g&&Sd[g.toLowerCase()]||Td;this.Ra=a.bufferCols;this.Fa=a.bufferRows;this.cd=this.la=a.cellWidth||1;this.ga=a.cellHeight||1;this.ab=null;this.Qa=a.bufferBits||1;this.gd=a.bufferLeft||0;if(this.F=a.bufferRotate)this.F=this.F%360,0<this.F&&(this.F-=360),-90!=this.F&&(this.fa("unsupported buffer rotation: "+
this.F),this.F=0);this.mc=a.interruptRate;this.jd=a.refreshRate||60;this.T=b;this.H=c;this.ya=(this.kd=d)||b||null;this.dd=this.Y;this.ed=this.W;this.Hb=this.Y/this.Ra|0;this.ec=this.W/this.Fa|0;1<this.ga&&this.Fa++;b=a.smoothing;(c=Pa.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.H[d]){this.H[d]=b;break}if(this.I=a.screenRotate)this.I=this.I%360,0<this.I&&(this.I-=360),-90!=this.I?(this.fa("unsupported screen rotation: "+
this.I),this.I=0):(this.H.translate(0,this.W),this.H.rotate(this.I*Math.PI/180),this.H.scale(this.W/this.Y,this.Y/this.W));if(this.w=e)if(this.w.cb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.w.cb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){Ud(f,document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?!0:!1)},!1);
break}for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){Ud(f,null)},!1);break}}if(this.ea=a.fontROM)"json"!=ca(this.ea)&&(this.ea=oa()+"/api/v1/dump?file="+this.ea+"&format=bytes"),na(this.ea,null,!0,function(a,b,c){Vd(f,a,b,c)});this.tb={}}Wa(Rd);var Td=0,Sd={vt100:2};
Rd.prototype.Ma=function(a,b,c,d){this.u=a;this.A=b;this.b=c;this.G=d;this.C=nb(a,"ChipSet");!this.da&&this.C&&this.C.Ga==T.Ea&&(this.da=1);this.J=this.Ra*this.la;this.aa=this.Fa*this.ga;b=this.J;c=this.aa;this.F&&(b=this.aa,c=this.J);this.Ta=(this.J*this.Qa>>3)*this.aa;if(this.fd||rb(this.A,this.Ia,this.Ta,3))1<this.la?Wd(this,this.Ra*this.Fa):(this.gc=this.H.createImageData(b,c),this.lc=16/this.Qa|0,Wd(this,this.Ta>>1)),this.L=document.createElement("canvas"),this.L.width=b,this.L.height=c,this.bb=
this.L.getContext("2d"),this.ra={},this.za=1<<this.Qa,this.ua=Array(this.za+2),this.ua[0]=[0,0,0,255],this.ua[1]=[255,255,255,255],1==this.da&&(this.ua[this.za+0]=[255,255,0,255],this.ua[this.za+1]=[0,255,0,255]),2==this.da&&(this.hd=60,this.sb=!1,this.wa=Array(this.Ra));if(this.ca=nb(a,"Keyboard")){for(var e in this.tb)this.ca.ma("led",e,this.tb[e]);this.T&&this.ca.ma(this.kd?"textarea":"canvas","kbd",this.ya)}this.ea||E(this)};
function Vd(a,b,c,d){if(d)a.fa("Unable to load font ROM (error "+d+": "+b+")");else{Ya(a.Qb,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){w("Empty font ROM: "+b);return}if(1==f.length){w(f[0]);return}if(2048==f.length)Xd(a,f);else{a.fa("Unrecognized font data length ("+f.length+")");return}}catch(h){a.fa("Font ROM data error: "+h.message);return}(a.H||a.G)&&E(a)}}
function Xd(a,b){a.ab=b;a.ra[96]=[Yd(a,a.la,a.ga),Yd(a,a.la,a.ga,a.sb)];a.ra[64]=[Yd(a,2*a.la,a.ga),Yd(a,2*a.la,a.ga,a.sb)];a.ra[32]=a.ra[0]=[Yd(a,2*a.la,2*a.ga),Yd(a,2*a.la,2*a.ga,a.sb)]}
function Yd(a,b,c,d){var e=8>=a.cd?8:16,f=8<e?15:0,h=a.ab.length/e,g=!1===d,k={la:b,ga:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=h/16*c;k.context=k.canvas.getContext("2d");for(var l=k.context.createImageData(b,c),n=0;n<h;n++){for(var p=0,v=p;p<a.ga;p++)for(var u=n*e+(f+p&e-1),u=d&&8==p?255:a.ab[u],q=0;q<c/a.ga;q++){for(var B=0,x=B;B<a.la;B++)for(var F=u&128>>(7<B?7:B),y=0;y<b/a.la;y++)g&&(F=!F),Zd(a,l,x,v,F?1:0),x++;v++}k.context.putImageData(l,(n&15)*b,(n>>
4)*c)}return k}Rd.prototype.Ca=function(){return!0};Rd.prototype.ma=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.tb[b]=c,!0;switch(b){case "fullScreen":return this.K[b]=c,this.w&&this.w.cb?c.onclick=function(){d.cb()}:c.parentNode.removeChild(c),!0}return!1};
Rd.prototype.cb=function(){var a=!1;if(this.w){if(this.w.cb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.Y/this.W;b>c&&(a=Math.round(c/b*100)+"%")}this.fc?(this.T.style.width=a,this.T.style.width=a,this.T.style.display="block",this.T.style.margin="auto"):(this.w.style.width=a,this.w.style.height="auto");this.w.style.backgroundColor="black";this.w.cb();a=!0}this.ya&&this.ya.focus()}return a};
function Ud(a,b){!b&&a.w&&(a.fc?a.T.style.width=a.T.style.height="":a.w.style.width=a.w.style.height="");cb(a,"notifyFullScreen("+b+")",!0)}function Wd(a,b){a.hc=b;a.xa=!1;if(void 0===a.qa||a.qa.length!=a.hc)a.qa=Array(a.hc)}function Zd(a,b,c,d,e){d=a.F?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.da&&(208<=c&&236>c?e=a.za+0:28<=c&&72>c&&(e=a.za+1));a=a.ua[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]}
Ha(function(){for(var a=C(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=A(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; 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||Pa.aspect);f&&.3<=f&&3.33>=f&&(Ga("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");wa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new Rd(d,e,h,f,c);ab(d,c)}});
function $d(a){z.call(this,"Debugger",a,$d);this.style=ae;this.ca=this.za=this.L=0;this.W=W();this.Ta=W();this.F=-1;this.w=[];this.ea=!1;this.da=W();this.I=[];this.qa={};this.C=this.Y=this.H=[];be(this);this.wa=0;ce(this);this.Fa=[];de(this,a.messages);this.Ia=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return ee(b,a)}):void 0===global.$&&(global.$=function(a){return ee(b,a)})}Wa($d);
var fe={"?":"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"},ae=8080,ge="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(" "),
he="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(" "),ie="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),je=[[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,3603],[35,51],[24],[12,51],[51,3603],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,
18193,33],[65,128]],ke={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:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};m=$d.prototype;
m.Ma=function(a,b,c,d){this.A=b;this.b=c;this.u=a;(a=fc(a,"messages"))&&de(this,a);this.Qa=je;le(this,function(a){a:{var b=d.A.U,c=a[0],g=a=0,k=b.length;if(c){a=me(ne(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.A.ja;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var n=b[g];n.type==c?l++||d.g("..."):(c=n.type,l=tb[c],n&&d.g(r(n.id)+" %"+r(g<<d.A.ja)+" %%"+r(n.D)+" "+t(n.Cb)+" "+
t(n.size)+" "+l),c!=Sb&&(c=-1),l=0);a+=d.A.Ba;g++}}});E(this)};
m.ma=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ua=this.K[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",ee(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.F<d.w.length-1&&(b=d.w[++d.F]):40==a.keyCode&&(0<d.F?b=d.w[--d.F]:(b="",d.F=-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.K[b]=c,ya(c,function(){if(d.ua){var a=d.ua.value;d.ua.value=
"";ee(d,a,!0);return!0}return!1}),!0;case "step":return this.K[b]=c,ya(c,function(a){var b=!1;fb(d,!0)||(eb(d,!0),b=d.pb(a?1:0),eb(d,!1));return b}),!0}return!1};m.Bb=function(){this.ua&&this.ua.focus()};function me(a){a=a&&a.D;null==a&&(a=-1);return a}m.X=function(a,b){var c=255,d=me(a);-1!==d&&(c=ub(this.A,d),b&&oe(a,b));return c};m.Na=function(a,b){var c=65535,d=me(a);-1!==d&&(c=vb(this.A,d),b&&oe(a,b));return c};m.na=function(a,b,c){var d=me(a);-1!==d&&(wb(this.A,d,b),c&&oe(a,c),ic(this.b,!0))};
m.Mb=function(a,b,c){var d=me(a);if(-1!==d){var e=this.A,f=d&e.A,h=(d&e.w)>>>e.ja;f!=e.A?e.U[h].Vb(f,b&65535,d):(e.U[h++].Db(f,b&255,d),e.U[h&e.J].Db(0,b>>8&255,d+1));c&&oe(a,c);ic(this.b,!0)}};function W(a){return{D:a,Ka:!1}}function pe(a){return[a.D,a.Ka]}function qe(a){return{D:a[0],Ka:a[1]}}
function ne(a,b,c){var d;c=(c?a.W:a.Ta).D;if(void 0!==b){d=b=re(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.I.length;c++){var f=a.I[c].La[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=se(a,b,void 0)}null!=c&&(d=W(c));return d}function te(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Kc=ue(a,b.pc=c[2]))}function oe(a,b){null!=a.D&&(a.D+=b||1)}function X(a){return r(a,4)}
function ve(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 de(a,b){a.G=a;a.ka=a.Lc=536870912;a.xa=null;a.ya=[];var c=ue(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in ke)0<=ma(c,d)&&(a.ka|=ke[d],a.g(d+" messages enabled"))}function le(a,b){for(var c in ke)if(64==ke[c]){a.Fa[c]=b;break}}
function we(a,b){var c;a=a.toUpperCase();null==b?c=ma(ie,a):(c=ma(ie,a.substr(b,2)),0>c&&(c=ma(ie,a.substr(b,1))));return c}function xe(a,b){var c=0,d=ye(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:case 14:c=4}return c?r(d,c):"??"}
function ye(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=Jc(d);break;case 2:c=d.P;break;case 3:c=d.R;break;case 9:c=Lc(d);break;case 4:c=d.S;break;case 5:c=d.V;break;case 10:c=J(d);break;case 6:c=d.X(J(d));break;case 11:c=d.ha;break;case 12:c=d.M;break;case 13:c=Hc(d);break;case 14:c=Hc(d)&255|d.j<<8}}return c}
function ze(a,b){b=re(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=we(b,c+1),0<=e&&(b=b.substr(0,c)+xe(a,e)+b.substr(c+1+ie[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=ne(a,e))?(d=e+' "'+ve(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=ne(a,e))?(oe(d),d=e+' "'+
ve(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+X(W(this.b.M).D));if(this.ka&1073741824)this.ya.push(a);else if(!this.xa||a!=this.xa)if(this.xa=a,this.ka&-2147483648&&(this.ia(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.mb=0;c.F-=c.b;c.b=0;ic(c)}};
function bb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.ka&g)!=g||a.message(b.$a+"."+(null!=d?"outPort":"inPort")+"("+t(c)+","+(f?f:"unknown")+(null!=d?",0x"+r(d,2):"")+")"+(null!=h?": 0x"+r(h,2):"")+(null!=e?" at "+X(e):""))}m.Ua=function(){this.g("Type ? for help with PC8080 Debugger commands");this.Da();if(this.Ia){var a=this.Ia;this.Ia=null;ee(this,a)}};
function ce(a){var b;if(bd(a)){if(!a.T||!a.T.length){a.T=Array(1E3);for(b=0;b<a.T.length;b++)a.T[b]=W();a.ra=0;a.g("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.T&&a.T.length&&a.g("instruction history buffer freed"),a.ra=0,a.T=[],a.J=[]}m.Za=function(a){if(!Ae(this))return!1;this.b.Za(a);return!0};
m.pb=function(a,b,c){if(!Ae(this))return!1;this.L=0;a||bd(this)&&ud(this,this.b.M,0);try{var d=this.b.pb(a);0<d&&(this.L+=d,yc(this.b,d,!0),kc(this.b,d),this.ca++)}catch(e){"number"!=typeof e&&(this.L=0,hb(this.b,e.stack||e.message))}!1!==c&&ic(this.b);this.Da(b||!1);return 0<this.L};m.ia=function(a){this.b&&this.b.ia(a)};m.Da=function(a){void 0===a&&(a=!0);this.W=W(this.b.M);a&&1!=this.aa?Be(this):Ce(this)};
function Ae(a){var b;if(b=a.b&&gb(a.b))b=a.b,b.B.oa?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!fb(a.b)?(a=a.b,a.B.gb?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.Ca=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Ha=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){ce(this);this.ca=this.za=0;this.xa=null;this.L=0;this.W=W(this.b.M);this.B.sa=!1;De(this);a||this.Da()};
m.save=function(){var a=new Ic(this);I(a,0,pe(this.W));I(a,1,pe(this.da));I(a,2,[this.w,this.ea,this.ka]);I(a,3,this.I);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.W=qe(a[b++]),this.da=qe(a[b++]),this.w=a[b][0],"string"==typeof this.w&&(this.w=[this.w]),this.ea=a[b][1],this.ka|=a[b][2]);a[3]&&(this.I=a[3]);return!0};m.start=function(a,b){this.aa||this.g("running");this.B.sa=!0;this.sb=a;this.tb=b};
m.stop=function(a,b){if(this.B.sa){this.B.sa=!1;this.L=b-this.tb;if(!this.aa){var c="stopped";if(this.L){var d=a-this.sb,e=0<d?Math.round(1E3*this.L/d):0,c=c+" (";bd(this)&&(c+=this.ca+" opcodes, ",this.za-=this.ca,this.ca=0);c+=this.L+" cycles, "+d+" ms, "+e+" hz)"}else db(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Da(!0);this.Bb();De(this,this.b.M)}};function bd(a){return 1<a.C.length||!!a.wa}
function ud(a,b,c){var d=a.b;if(0<c&&(a.wa&&!--a.wa||ac(a,b,1,a.C)))return!0;0<=c&&a.J.length&&(a.ca++,b=ub(a.A,b),null!=b&&(a.J[b][1]++,b=a.T[a.ra],b.D=d.M,b.Ka=!1,++a.ra==a.T.length&&(a.ra=0)));return!1}function Ab(a,b,c){a.g("break on input from port "+t(b)+": "+r(c));a.ia(!0)}function Eb(a,b,c){a.g("break on output to port "+t(b)+": "+r(c));a.ia(!0)}
function be(a){var b,c;a.C=["bp"];if(void 0!==a.Y)for(b=1;b<a.Y.length;b++){c=a.Y[b];var d=a.A;bc(d.U[me(c)>>>d.ja],!1)}a.Y=["br"];if(void 0!==a.H)for(b=1;b<a.H.length;b++)c=a.H[b],d=a.A,bc(d.U[me(c)>>>d.ja],!0);a.H=["bw"];a.ab=0}m.Sa=function(a,b,c){var d=!0;c||Ee(this,a,b,!1,!0);if(a!=this.C){var e=me(b);if(-1===e)this.g("invalid address: "+X(b.D)),d=!1;else{var f=this.A;f.U[e>>>f.ja].Sa(e&f.A,a==this.H)}}d&&(a.push(b),c?b.Ka=!0:(Fe(this,a,a.length-1,"set"),ce(this)));return d};
function Ee(a,b,c,d,e){var f=!1;c=me(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==me(g)&&(!d||g.Ka)){f=!0;g.Ka||e||Fe(a,b,h,"cleared");b.splice(h,1);b!=a.C&&(d=a.A,bc(d.U[c>>>d.ja],b==a.H));g.Ka||ce(a);break}}return f}function df(a,b){for(var c=1;c<b.length;c++)Fe(a,b,c);return b.length-1}function Fe(a,b,c,d){c=b[c];a.g(b[0]+" "+X(c.D)+(d?" "+d:c.pc?' "'+c.pc+'"':""))}
function De(a,b){if(void 0!==b)ac(a,b,1,a.C,!0),a.aa=0;else for(var c=1;c<a.C.length;c++){var d=a.C[c];if(d.Ka){if(!Ee(a,a.C,d,!0))break;c=0}}}
function ac(a,b,c,d,e){var f=!1;if(!a.ab++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Ka)for(var k=me(g),l=0;l<c;l++)if(b+l==k){var n,f=!0;g.Ka&&(Ee(a,d,g,!0),e=!0);if(n=g.Kc){for(var f=!1,p=0;p<n.length;p++)if(!ef(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var v=p+1;v<n.length&&n[v].indexOf("else");v++)p++;if(v==n.length){f=!0;break}}a.b.B.sa||(f=!0)}if(f){e||Fe(a,d,h,"hit");break}}}a.ab--;return f}
function ff(a,b,c,d){for(var e=W(b.D),f=a.X(b,1),h=a.Qa[f],g="",k=(8086!=a.style?ge:he)[h[0]],l=h.length-1,n=0,p,v=1;v<=l;v++){var u="";p=h[v];if(void 0!==p&&!(p&16384&&a.style==ae)){var q=p&240;if(q){var B=p&15;B?n=B:p|=n;p&61440||(p|=1==v?8192:4096);if(q&32)a:{var u=a,q=p,B=b,x=" ";switch(q&15){case 1:x=r(u.X(B,1),2);break;case 2:x=r(u.X(B,1)<<24>>24,4);break;case 3:x=r(u.Na(B,2),4);break;default:u="imm("+t(q)+")";break a}8086==u.style&&q&64?x="["+x+"]":q&16||(x=(u.style==ae?"$":"0x")+x);u=x}else q&
16?(u=(p&3840)>>8,q=ie[u],8086==a.style&&p&64&&(6==u&&(q="HL"),q="["+q+"]"),u=q):q&128&&(u=(f>>3&7).toString());if(!u||!u.length){g="INVALID";break}0<g.length&&(g+=",");g+=u||"???"}}}f="";h=X(e.D)+" ";if(-1!==e.D&&-1!==b.D){do if(f+=r(a.X(e,1),2),null==e.D)break;while(e.D!=b.D)}h+=ha(f,10);h=h+(p&32768?"*":" ")+ha(k,7);g&&(h+=" "+g);c&&(h=ha(h,40)+";"+c,h=a.b.B.fb?h+("cycles="+wc(a.b).toString()+" cs="+r(a.b.i.ub)):h+(null!=d?"="+d.toString():""));return h}
function gf(a,b){var c;switch(b){case "IF":c=a.b.ta&512;break;case "SF":c=Tc(a.b);break;case "ZF":c=Sc(a.b);break;case "AF":c=Rc(a.b);break;case "PF":c=Qc(a.b);break;case "CF":c=Oc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function hf(a,b){return ie[b]+"="+xe(a,b)+" "}function jf(a){return hf(a,7)+hf(a,8)+hf(a,9)+hf(a,10)+hf(a,11)+gf(a,"IF")+gf(a,"SF")+gf(a,"ZF")+gf(a,"AF")+gf(a,"PF")+gf(a,"CF")}
var kf={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function lf(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 se(a,b,c){var d;if(b){b=re(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var n=l[e++],p=n.length,n=ia(n);if(!n){f=!0;break}n=mf(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==l.length)break;var n=l[e++],v=n.length;k.length&&kf[n]<kf[k[k.length-1]]&&lf(g,k,1);k.push(n);b=b.substr(p+v)}lf(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&nf(a,null,
d))}return d}function re(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=se(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?r(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=ne(a,c[1]),b=b.replace("["+c[1]+"]",d?r(a.Na(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ca-a.za}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function mf(a,b,c,d){var e;void 0!==b?(e=we(b),0<=e?e=ye(a,e):(e=a.qa[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 nf(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,n="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)n="?"+n;else for(;0<l--;)n=(k&1?"1":"0")+n,k>>=1;h=n+"b"+h;d>>=8}d="0x"+r(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function of(a,b){if(b)return nf(a,b,a.qa[b]);var c=0;for(b in a.qa)nf(a,b,a.qa[b]),c++;return 0<c}$d.prototype.Ra=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function pf(a,b,c){var d=[],e=me(b)>>>0;for(b=0;b<a.I.length;b++){var f=a.I[b],h=f.D>>>0,g=f.Sc;if(e>=h&&e<h+g){e=ja(f.Yb,[e-h],a.Ra);0<=e?qf(a,b,e,d):c&&(e=~e,qf(a,b,e-1,d),qf(a,b,e,d));break}}return d}function qf(a,b,c,d){var e={},f=a.I[b].Yb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.I[b].La[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function rf(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?ge:he;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Qa[h][0]]+" ").substr(0,5)+" ("+("0x"+r(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function sf(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return of(a)||a.g("no variables"),!0;if(!c[2])return of(a,c[1]);if(!c[3])return delete a.qa[c[1]],!0;var d=se(a,c[3]);return void 0!==d?(a.qa[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function tf(a,b,c){var d=null;if(b=ne(a,b,!0)){var e=pf(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.D-e[1])&&(h=" + "+t(f)),f=e[0]+" ("+X(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.D)&&(h=" - "+t(f)),f=e[4]+" ("+X(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function uf(a,b){switch(b[1]){case "8080":a.style=ae;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.jb=c;break;case "start":a.b.i.vb=c;break;case "stop":a.b.i.lb=c;break;default:a.g("unknown cs option");return}void 0!==c&&hc(a.b);a.g("checksums "+(a.b.B.fb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(xc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Wa.toFixed(2)+"Mhz")+
" ("+a.b.i.Ya+"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 Be(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=se(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.ha=g&65535;break;case "PC":H(d,g);a.W=W(d.M);break;case "PS":Fc(d,g);break;case "PSW":Fc(d,g&255|d.ta&-256);d.j=g>>8;break;case "CF":d.Z=g?d.Z|256:d.Z&255;break;case "PF":g?Qc(d)||(d.ba^=1):Qc(d)&&(d.ba^=1);break;case "AF":d.pa=g?~d.ba&16|d.pa&-17:d.ba&16|d.pa&-17;break;case "ZF":d.Z=g?d.Z&-256:d.Z|255;break;case "SF":g?Tc(d)||(d.ba^=192):Tc(d)&&(d.ba^=192);
break;case "IF":d.ta=g?d.ta|512:d.ta&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}ic(d);a.g("updated registers:")}a.g(jf(a));c&&(a.W=W(d.M),Ce(a,X(a.W.D)))}}function vf(a,b){b=ia(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(ze(a,c[2])):se(a,b,!0)}function wf(a,b,c){var d="t"!=b;c=mf(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);xa(c,function(){return eb(a,!0)&&a.pb(e,d,!1)},function(){ic(a.b);eb(a,!1)})}
function Ce(a,b,c,d){if(b=ne(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=ne(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=fb(a,!1)||a.aa?a.L:null;var h=null!=f?"cycles":null,g=pf(a,b),k=b.D;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=ff(a,b,h,f);a.g(f);a.W=b;e-=b.D-k;c++}}}
function ue(a,b,c,d){if(c)if(b){0>a.F&&a.w.length&&(a.F=0);if(0>a.F||b!=a.w[a.F])a.w.splice(0,0,b),a.F=0;a.F--}else a.ea?b="end":b=a.w[a.F+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(ia(b.substring(c,f))),c=f+1}}return a}
function ef(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ea&&(a.g("ended assemble at "+X(a.da.D)),a.W=a.da,a.ea=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.xa=null;if(gb(a)&&0<b.length){a.ea&&(b="a "+X(a.da.D)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var n=ne(a,f[1],!0);if(n)if(a.da=
n,void 0===f[2])a.g("begin assemble at "+X(n.D)),a.ea=!0,ic(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var v=0;v<p.length;v++)a.na(n,p[v],1);a.g(ff(a,a.da))}}break;case "b":a:{var u=f[0],q=f[1],B=b;if("?"==q)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var x=u.charAt(1);if("l"==x){var F=0,F=F+df(a,a.C),F=F+df(a,a.Y);(F+=df(a,a.H))||a.g("no breakpoints")}else if("n"==x)a.wa=mf(a,q),a.g("break after "+a.wa+" instruction(s)");else if(void 0===q)a.g("missing breakpoint address");else{var y=W();if("*"!=q&&(y=ne(a,q,!0),!y))break a;q=t(y.D);"c"==x?null==y.D?(be(a),a.g("all breakpoints cleared")):Ee(a,a.C,y)||Ee(a,a.Y,y)||
Ee(a,a.H,y)||a.g("breakpoint missing: "+X(y.D)):"i"==x?a.g("breakpoint "+(xb(a.A,y.D)?"enabled":"cleared")+": port "+q+" (input)"):"o"==x?a.g("breakpoint "+(Bb(a.A,y.D)?"enabled":"cleared")+": port "+q+" (output)"):null!=y.D&&(te(a,y,B),"p"==x?a.Sa(a.C,y):"r"==x?a.Sa(a.Y,y):"w"==x?a.Sa(a.H,y):a.g("unknown breakpoint command: "+x))}}}break;case "c":a.Aa&&(a.Aa.value="");break;case "d":a:{var R,Y=f[0],V=f[1],sa=f[2],Hb=f[3];if("?"==V){var Ba="";for(R in ke)a.Fa[R]&&(Ba&&(Ba+=","),Ba+=R);Ba+=",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");Ba.length&&a.g("dump extension commands:\n\t"+Ba)}else if("state"==V){var Ge=xf(a.u,!0);"console"==sa?console.log(Ge):(a.Aa&&(a.Aa.value=""),a.g(Ge))}else if("symbols"==V)for(var cd=0;cd<a.I.length;cd++){var dd=a.I[cd],ib;for(ib in dd.La)if("."!=ib.charAt(0)){var He=dd.La[ib].o;
if(void 0!==He){var Ie=dd.La[ib].l;Ie&&(ib=Ie);a.g(X(He)+" "+ib)}}}else{if("d"==Y){for(R in ke)if(f[1]==R){var Je=a.Fa[R];Je?(f.shift(),f.shift(),Je(f)):a.g("no dump registered for "+V);break a}V||(Y=a.Hb||"db")}else a.Hb=Y;if("dh"==Y){var Ke=V,Le=sa,Me="",Ne=0,Z=a.ra,Ca=a.T;if(Ca.length){var fa=+Ke||a.bb,jb=+Le||10;isNaN(fa)?fa=jb:Me="more ";fa>Ca.length&&(a.g("note: only "+Ca.length+" available"),fa=Ca.length);Z-=fa;0>Z&&(null==Ca[Ca.length-1].D?(fa=Z+fa,Z=0):Z+=Ca.length);var ed=[];"call"==Le&&
(jb=1E5,ed=["CALL"]);for(void 0!==Ke&&a.g(fa+" instructions earlier:");0<jb&&Z!=a.ra;){var Oe=Ca[Z++];if(null==Oe.D)break;var Ib=W(Oe.D),Rf=fa--,Pe=ff(a,Ib,"history",Rf);(!ed.length||0<=Pe.indexOf(ed[0]))&&a.g(Pe);Ib.Nb&&(Z+=Ib.Nb,jb-=Ib.Nb,fa-=Ib.Nb);Z>=Ca.length&&(Z=0);a.bb=fa;Ne++;jb--}}Ne||(a.g("no "+Me+"history available"),a.bb=void 0)}else{var lc=ne(a,V);if(lc){var mc=0;sa&&("l"==sa.charAt(0)&&(sa=sa.substr(1)||Hb),mc=mf(a,sa)>>>0,65536<mc&&(mc=65536));for(var Ta="",nc="dd"==Y?4:"dw"==Y?2:1,
oc=nc*mc||128,Sf=oc+15>>4||1;Sf--&&0<oc;){var pc=0,fd=0,Jb,Kb="",gd="",V=X(lc.D);for(Jb=16;0<Jb&&0<oc;Jb--){var qc=a.X(lc,1),pc=pc|qc<<(fd++<<3);fd==nc&&(Kb+=r(pc,2*nc),Kb+=1==nc?9==Jb?"-":" ":" ",pc=fd=0);gd+=32<=qc&&128>qc?String.fromCharCode(qc):".";oc--}Ta&&(Ta+="\n");Ta+=V+" "+Kb+(0==Jb?" "+gd:"")}Ta&&a.g(Ta);a.Ta=lc}}}}break;case "e":if("else"==f[0])break;var rc=1,Qe=255,Re=a.X,Se=a.na;"ew"==f[0]&&(rc=2,Qe=65535,Re=a.Na,Se=a.Mb);var Te=rc<<1,Ue=f[1];if(null==Ue)a.g("edit memory commands:"),
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var sc=ne(a,Ue);if(sc)for(var tc=2;tc<f.length;tc++){var Lb=se(a,f[tc]);if(void 0===Lb){a.g("unrecognized value: "+f[tc]);break}Lb&~Qe&&a.g("warning: "+r(Lb)+" exceeds "+rc+"-byte value");var Tf=Re.call(a,sc);a.g("changing "+X(sc.D)+" from 0x"+r(Tf,Te)+" to 0x"+r(Lb,Te));Se.call(a,sc,Lb,rc)}}break;case "f":rf(a,f[1]);break;case "g":a:{var Ve=f[1],Uf=b;if(void 0!==Ve){var hd=ne(a,Ve,!0);if(!hd)break a;
te(a,hd,Uf);a.Sa(a.C,hd,!0)}a.Za(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var id;if(a.B.sa)id="halting",a.ia();else{if(fb(a,!0))break a;id="already halted"}c||a.g(id)}break;case "i":if("if"==f[0]){var jd;var Mb=b.substr(2),Mb=ia(Mb);se(a,Mb)?(c||a.g("true: "+Mb),jd=!0):(c||a.g("false: "+Mb),jd=!1);jd||(d=!1);break}var kd=f[1];if(kd&&"?"!=kd){var ld=mf(a,kd);if(void 0!==ld){var Vf=zb(a.A,ld);a.g(t(ld)+": "+("0x"+r(Vf,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 Wf=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var md=0,We=W(),Nb=W(a.b.ha);for(a.g("stack trace for "+X(Nb.D));10>md;){for(var Ua=null,Xf=256;65536>Nb.D>>>0;){We.D=a.Na(Nb,2);if(null==Nb.D||!Xf--)break;for(var Yf=a,uc=We,Xe=null,Ob=uc.D,Ye=Ob,nd=1;6>=nd&&Ob;nd++){if(2<nd){uc.D=Ob;var vc=ff(Yf,uc);if(0<=vc.indexOf("CALL")){var Ze=vc.indexOf(" ");
if(Ob+(vc.indexOf(" ",Ze+1)-Ze-1)/2==Ye){Xe=vc;break}}}Ob--}uc.D=Ye;if(Ua=Xe)break}if(!Ua||null==Ua)break;var $e=null;if("ks"==Wf){var af=Ua.match(/[0-9A-F]+$/);af&&($e=tf(a,af[0]))}Ua=ha(Ua,50)+" ;"+($e||"stack="+X(Nb.D));a.g(Ua);md++}md||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){tf(a,f[1],!0);break}break;case "m":a:{var Da,Ea=null,L=f[1];"?"==L&&(L=void 0);if(void 0!==L){var La=0;if("all"==L)La=1878917119,L=null;else if("on"==L)Ea=!0,L=null;else if("off"==L)Ea=!1,L=null;else{"keys"==
L&&(L="key");"kbd"==L&&(L="keyboard");for(Da in ke)if(L==Da){La=ke[Da];Ea=!!(a.ka&La);break}if(!La){a.g("unknown message category: "+L);break a}}if(La)if("on"==f[2])a.ka|=La,Ea=!0;else if("off"==f[2]&&(a.ka&=~La,Ea=!1,1073741824==La)){for(var od=0;od<a.ya.length;od++)a.g(a.ya[od]);a.ya=[]}}var Zf=0,Ma="";for(Da in ke)if(!L||L==Da){var $f=!!(a.ka&ke[Da]);if(null===Ea||Ea==$f)Ma&&(Ma+=","),++Zf%10||(Ma+="\n\t"),"key"==Da&&(Da="keys"),Ma+=Da}void 0===L&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");
a.g((null!==Ea?Ea?"messages on: ":"messages off: ":"message categories:\n\t")+(Ma||"none"));ce(a)}break;case "o":var pd=f[1],ag=f[2];if(pd&&"?"!=pd){var qd=mf(a,pd,"port #"),rd=mf(a,ag);void 0!==qd&&void 0!==rd&&(Db(a.A,qd,rd),a.g(t(qd)+": "+("0x"+r(rd,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]){vf(a,b.substr(5));break}var bf="pr"==f[0]?1:0,bg=1+bf;if(a.aa)a.g("step in progress");
else{var sd=W(a.b.M);switch(a.X(sd)){case 205:a.aa=bg,oe(sd,3)}a.aa?(a.Sa(a.C,sd,!0),a.Za()||(a.u&&a.u.Bb(),a.aa=0)):wf(a,bf?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}Be(a,f);break;case "s":uf(a,f);break;case "t":wf(a,f[0],f[1]);break;case "u":Ce(a,f[1],f[2],8);break;case "v":if("var"==f[0]){sf(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.23.3 ("+a.b.Ga+",RELEASE"+(kb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(pa());break;case "?":if(f[1]){vf(a,b.substr(1));break}var Pb="commands:",
td;for(td in fe)Pb+="\n"+ha(td,7)+fe[td];bd(a)||(Pb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Pb);break;default:a.g("unknown command: "+b),d=!1}}}catch(cf){a.g("debugger error: "+(cf.stack||cf.message)),d=!1}return d}function ee(a,b,c){b=ue(a,b,c);for(var d in b)if(!ef(a,b[d]))return!1;return!0}Ha(function(){for(var a=C(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new $d(d);ab(d,c)}});
function Ic(a,b,c){this.id=a.id;this.key=yf(a,b,c);this.G=a.G;zf(this,a.nc)}function yf(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}
Ic.prototype={constructor:Ic,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){zf(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 zf(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function Af(a){var b=!0;if(ta()){var c=JSON.stringify(a[a.id]);va(a.key,c)||(w("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Bf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){w(c.message||c),b=!1}return b}function Cf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:ta()&&(b=ua(a.key))?(a[a.id]=b,a.b=!0):!1}function Df(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Ef(a,b,c){z.call(this,"Computer",a,Ef,67108864);this.B.oa=!1;Ff(this,b);this.aa=fc(this,"autoPower",a);this.w=0;this.qa=a.busWidth||a.buswidth;this.u=Gf;this.W=null;this.J=this.ea=!1;this.ra=fc(this,"url")||"";(Math.random()+.1).toString(36);this.C=Hf(this);if(this.b=$a("CPU",this.id)){this.G=$a("Debugger",this.id);this.I=[];for(b=null;b=nb(this,"Video",b);)this.I.push(b);this.A=new pb({id:this.Qb+".bus",busWidth:this.qa},this.b,this.G);var d,e=Za(this.id);if((this.F=$a("Panel",this.id))&&
this.F.Aa)for(b=0;b<e.length;b++)d=e[b],d.fa=this.F.fa,d.g=this.F.g,d.Aa=this.F.Aa;this.g("PC8080 v1.23.3\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.Ma&&d.Ma(this,this.A,this.b,this.G);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.T=d:this.u=parseInt(d,10));var f;if(a=fc(this,"state")||(f=!0,a.state))b=this.ca=a,f||(this.J=!0,this.u=Gf),this.u&&(this.Y=new Ic(this,"1.23.3"),Cf(this.Y)?
b=null:delete this.Y);!b&&this.u&&(b=If(this))&&(this.J=!0);if(b){var h=this;na(b,null,!0,function(a,b,c){c?(h.T=null,h.J=!1,h.fa("Unable to load machine state from server (error "+c+(b?": "+ia(b):"")+")")):(h.W=b,h.ea=!0);E(h)})}else E(this);this.K.power||(this.aa=!0);!c&&this.aa&&Jf(this,this.zb)}else w("Unable to find CPU component")}Wa(Ef);var Gf=0;function Ff(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){w(d.message+" ("+c+")")}}a.L=b}
function fc(a,b,c){var d=b.toLowerCase(),d=Pa[b]||Pa[d];void 0===d&&a.L&&(d=a.L[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Jf(a,b,c){for(var d=Za(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!gb(f)){gb(f,function(){Jf(a,b,c)});return}}b.call(a,c)}
function Kf(a,b){var c=new Ic(a,"1.23.3","validate");if(Cf(c)&&Bf(c)){var d=Df(c,"timestamp"),e=b?Df(b,"timestamp"):"unknown";d!=e&&(a.fa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Ef.prototype;
m.zb=function(a){void 0===a&&(a=this.u||(this.W?1:Gf));if(!this.w){this.w++;var b=!1,c=!1;this.da=!1;var d=this.Y||new Ic(this,"1.23.3");if(-1==a)b=!0;else if(a>Gf){if(Cf(d,this.W)){this.H=new Ic(this,"1.23.3","failsafe");Cf(this.H)&&(Lf(this,d),a=2,zf(this.H));I(this.H,"timestamp",la());Af(this.H);var e=this.u&&!this.J;if(1==a||qa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Bf(d)){var f=Df(d,"code"),h=Df(d,"data");f&&("ok"==f?Cf(d,h):("error"==
f&&"no machine state"!=h?(this.fa("Error: "+h),"unable to verify user"==h&&(va("user",""),this.C=null)):this.g(f+": "+h),zf(d),Cf(d)?(c=Bf(d),e=!0):c=!1))}e&&Kf(this,c?d:null)}else 2==a&&d.clear()}else Kf(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=Mf(this,h,d,b,c));b=[d,a,c];-1!=a?Jf(this,this.Zb,b):this.Zb(b)}};
function Mf(a,b,c,d,e){if(!b.B.oa){b.B.oa=!0;if(b.Ca){var f=null;e&&((f=Df(c,b.id))||(f=Df(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ca(f,d)&&f&&(w("Unable to restore state for "+b.type),a.ca&&!a.ea?(c.clear(),a.u=Gf,window&&window.location.reload()):a.da=!0,b.Ca(null),e=!1)}if(!d&&b.dc)for(a=b.dc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Zb=function(a){var b=a[0],c=0>a[1];a=a[2];this.ua=!0;this.B.oa=!0;var d=this.K.power;d&&(d.textContent="Shutdown");this.b&&(Mf(this,this.b,b,c,a),jc(this.b));this.da&&(Lf(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.w=0};
function Lf(a,b){if(qa("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||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.ra;e.user=c;e.type="bug";e.data=d;na("http://www.pcjs.org/api/v1/report",e,!0)}}
function xf(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new Ic(a,"1.23.3"),h=new Ic(a,"1.23.3","validate"),g=la();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.23.3");I(f,"url",window?window.location.href:null);I(f,"browser",pa());a.b&&a.b.Ha&&(c&&a.b.ia(),d=a.b.Ha(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.B.oa=!1,!1===d&&(e=null)));for(var g=Za(a.id),k=0;k<g.length;k++){var l=g[k];l.B.oa&&(l.Ha&&(d=l.Ha(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.B.oa=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.C&&Nf(a,a.C,f.toString()),Af(h)&&Af(f)||(e=null,d=g=!0)):a.u&&(d=!0,g=3==a.u),d&&f.clear(g)):e=f.toString());c&&(a.B.oa=!1,b=a.K.power)&&(b.textContent="Power");a.w=0;return e}m.reset=function(){this.A&&this.A.reset&&(cb(this,"Resetting "+this.A.type),this.A.reset());for(var a=Za(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&(cb(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.ma=function(a,b,c){var d=this;switch(b){case "power":return this.K[b]=c,c.onclick=function(){d.w||(d.B.oa?xf(d,!1,!0):Jf(d,d.zb))},!0;case "reset":return this.K[b]=c,c.onclick=function(){if(d.B.oa&&!d.w)if(d.u&&!d.T){var a=qa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");xf(d,a,!0);!a&&d.ca?window&&window.location.reload():d.zb(Gf)}else d.reset(),d.b&&jc(d.b)},!0;case "save":if(da(oa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.K[b]=c;c.onclick=function(){var a=Hf(d,!0);if(a){var b=!!(d.u&&!d.T||d.ca),c=xf(d,b);b?Nf(d,a,c):d.fa("Resume disabled, machine state not saved")}};return!0}return!1};
function Hf(a,b){var c=a.C;c||(c=ua("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=Of(a,c))||a.fa("The user ID is invalid."))):b&&a.fa("Browser local storage is not available"));return c}
function Of(a,b){a.C=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&&(va("user",c.data),a.C=c.data)}catch(e){w(e.message+" ("+d+")")}return a.C}function If(a){var b=null;a.C&&(b=oa()+"/api/v1/user?req=load&user="+a.C+"&state="+yf(a,"1.23.3"));return b}
function Nf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=yf(a,"1.23.3");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.fa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.fa(c),va("user",""),a.C=null)}}
function nb(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.Bb=function(a){if(this.I.length){var b=0,c=0;a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.I[0];d.ya&&d.ya.focus();a&&window&&window.scrollTo(b,c)}};m.Da=function(a){this.b&&this.b.Da(a);this.F&&this.F.Da(a)};
function Ac(a,b){for(var c=0;c<a.I.length;c++){var d=a.I[c],e=!0;if(0<=b){if(d.mc)if(b&1)e=d.b,e.w=e.w&-8|10,e=!1;else{var f=d.b;f.w=f.w&-8|9}if(f=e&&d.xa){for(var f=d.A,h=d.Ta,g=!0,k=d.Ia>>>f.ja;0<h&&k<f.U.length;)f.U[k].Ja&&(f.U[k].Ja=g=!1,f.U[k].ac=!0),h-=f.Ba,k++;f=g}f&&(e=!1)}if(e)if(1<d.la)switch(d.da){case 2:for(var e=d.Ia,f=-1,h=0,g=60==d.hd?2:5,l=k=0;h<d.Fa;){for(var n=0,p=e,v=f;;){var u=ub(d.A,p++);if(127==(u&127)){var q=ub(d.A,p++),f=q&96,e=(q&15)<<8|ub(d.A,p),e=e+(q&16?8192:16384);break}if(n<
d.wa.length)d.wa[n++]=u;else break}if(g)g--;else{for(;n<d.wa.length;)d.wa[n++]=0;if(0<=v)for(p=0;p<n;p++){u=d.wa[p];if(!d.xa||u!==d.qa[k]){var q=d,B=d.bb,x=u&127;if(u=q.ra[v][u&128?1:0]){var F=(x&15)*u.la,x=(x>>4)*u.ga,y=void 0,R=void 0,Y=void 0,V=void 0,sa=u.la,Hb=u.ga;B?(y=p*q.la,R=h*q.ga,Y=q.la,V=q.ga):(y=p*q.Hb,R=h*q.ec,Y=q.Hb,V=q.ec);u.la>q.la&&(y*=2,Y*=2);u.ga>q.ga&&(0==v&&(x+=q.ga),Hb=q.ga);B?B.drawImage(u.canvas,F,x,sa,Hb,y,R,Y,V):(y+=0,R+=0,q.H.drawImage(u.canvas,F,x,sa,Hb,y,R,Y,V))}l++}k++}h++}}d.xa=
!0;l&&d.bb&&d.H.drawImage(d.L,0,0,d.J,d.aa-d.ga,0,0,d.dd,d.ed)}else{g=d.Ia;k=g+d.Ta;v=n=l=0;e=d.J;p=0;f=d.aa;q=h=0;B=d.Qa;u=(1<<B)-1;d.gd&&(B=-B,q=16+B);for(;g<k;){F=vb(d.A,g);if(d.xa&&F===d.qa[l])n+=d.lc;else{d.qa[l]=F;(x=q)&&(F=F>>8|(F&255)<<8);n<e&&(e=n);for(y=d.lc;y--;)R=F>>x&u,Zd(d,d.gc,n++,v,R),x+=B;n>p&&(p=n);v<f&&(f=v);v>=h&&(h=v+1)}g+=2;l++;if(n>=d.J&&(n=0,v++,v>d.aa))break}d.xa=!0;e<d.J&&(g=p-e,h-=f,d.F&&(k=e,l=g,e=f,g=h,f=d.J-(k+l),h=l),d.bb.putImageData(d.gc,0,0,e,f,g,h),d.H.drawImage(d.L,
0,0,d.L.width,d.L.height,0,0,d.Y,d.W))}}}Ha(function(){for(var a=C(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=A(c),c=C(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=A(f),h=new Ef(h,d,!0);ab(h,f);h.aa&&Jf(h,h.zb)}});za.show.push(function(){for(var a=C(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=$a("Computer",c.id))&&c.ua&&!c.B.oa&&c.zb(-1)}});
za.exit.push(function(){for(var a=C(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=$a("Computer",c.id))&&c.B.oa&&xf(c,!(!c.u||c.T),!0)}});var Pf=0;function Qf(a,b,c,d,e,f){e("Loading "+a+"...");na(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):cg(g,a,b,c,d,e,f)})}
function cg(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(p){g=null,a=p.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?dg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function dg(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 k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);dg(a,b,c)}})}else c(a,null)}
function eg(a,b,c,d){function e(a){if(void 0===g){var b=h&&C(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function f(a){e("Error: "+a);k&&(--Pf||Ja(!0));k=!1}var h,g,k=!0;Pf++;Xa[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=l:p.appendChild(document.createTextNode(l));n.appendChild(p)}c||
(c="/versions/pc8080/1.23.3/components.xsl");l=function(d,g){g?Qf(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,--Pf||Ja(!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),--Pf||Ja(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?Qf(b,a,d,!0,e,l):cg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPC8080=function(a,b,c,d){Ja(!1);return eg(a,b,c,d)};window.enableEvents=Ja;window.sendEvent=Ka;
function fg(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){gg(b,d)}):gg(null,d)}else w("Error ("+c+") requesting "+a)}
function gg(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],k={},l;for(l in g){var n=g[l],p=ca(l);if("xml"==p){for(p=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=p.exec(g[l]);){var v=d[2];v&&(g[v]||(n=n.replace(d[0],"")))}d=l=ba(l)}else"xsl"==p&&(e=l=ba(l));k[l]=n}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=wa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",w(c)):w("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=$a("Computer",a),e=$a("Debugger",a);if(d){var f=xf(d,!0),h=d.L?JSON.stringify(d.L):null;b||(b="/versions/pcjs/1.23.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,nc:h}))return!0;na(b,null,!0,function(c,d,e){fg(c,d,e,[a,ba(b,!0),h,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();