Final tweaks to screen rotation (for now)

This commit is contained in:
Jeff Parsons 2016-05-02 17:28:13 -07:00
commit 180ef91a72
7 changed files with 389 additions and 335 deletions

View file

@ -9,7 +9,7 @@
<rom id="romF" addr="0x1000" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-F.json"/>
<rom id="romE" addr="0x1800" size="0x0800" file="/devices/pc8080/rom/invaders/INVADERS-E.json"/>
<ram id="ram" addr="0x2000" size="0x0400"/>
<video id="video" screenWidth="896" screenHeight="1024" screenRotation="90" bufferAddr="0x2400" bufferCols="256" bufferRows="224" bufferBits="1" bufferLeft="0" interruptRate="120" width="40%" pos="left" padding="8px">
<video id="video" screenWidth="896" screenHeight="1024" screenRotate="90" bufferAddr="0x2400" bufferCols="256" bufferRows="224" bufferBits="1" bufferLeft="0" interruptRate="120" width="40%" pos="left" padding="8px">
<menu>
<title>224x256 Screen (Rotated)</title>
</menu>

View file

@ -989,9 +989,9 @@
<xsl:otherwise>black</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenRotation">
<xsl:variable name="screenRotate">
<xsl:choose>
<xsl:when test="@screenRotation"><xsl:value-of select="@screenRotation"/></xsl:when>
<xsl:when test="@screenRotate"><xsl:value-of select="@screenRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
@ -1016,6 +1016,18 @@
<xsl:variable name="bufferBits">
<xsl:choose>
<xsl:when test="@bufferBits"><xsl:value-of select="@bufferBits"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="bufferLeft">
<xsl:choose>
<xsl:when test="@bufferLeft"><xsl:value-of select="@bufferLeft"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="bufferRotate">
<xsl:choose>
<xsl:when test="@bufferRotate"><xsl:value-of select="@bufferRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
@ -1095,7 +1107,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">video</xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotation:<xsl:value-of select="$screenRotation"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,bufferLeft:<xsl:value-of select="$bufferLeft"/>,bufferRotate:<xsl:value-of select="$bufferRotate"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -50,13 +50,14 @@ if (NODE) {
* screenWidth: width of the screen canvas, in pixels
* screenHeight: height of the screen canvas, in pixels
* screenColor: background color of the screen canvas (default is black)
* screenRotation: the amount of counter-clockwise rotation required (eg, 90)
* screenRotate: the amount of counter-clockwise screen rotation required (eg, 90)
* aspectRatio (eg, 1.33)
* bufferAddr: the starting address of the frame buffer (eg, 0x2400)
* bufferCols: the width of a single frame buffer row, in pixels (eg, 256)
* bufferRows: the number of frame buffer rows (eg, 224)
* bufferBits: the number of bits per column (default is 1 if omitted)
* bufferLeft: the bit position of the left-most pixel in a byte (eg, 0)
* bufferBits: the number of bits per column (default is 1)
* bufferLeft: the bit position of the left-most pixel in a byte (default is 0; CGA uses 7)
* bufferRotate: the amount of counter-clockwise buffer rotation required (eg, 90)
* interruptRate: normally the same as (or some multiple of) refreshRate (eg, 120)
* refreshRate: how many times updateScreen() should be performed per second (eg, 60)
*
@ -71,9 +72,10 @@ if (NODE) {
* been redrawn), so we need an interrupt rate of 120Hz. We pass the higher rate on to the CPU, so that
* it will call updateScreen() more frequently, but we still limit our screen updates to every *other* call.
*
* TODO: Consider alternatives to screenRotation; it's expedient, but I'm not sure how efficient it is,
* and it might be nice (especially for debugging) if we created our own rotated image buffer which we could
* then blast directly to the screen canvas.
* bufferRotate is an alternative to screenRotate; you may set one or the other (but not both) to 90 to
* enable different approaches to 90-degree image rotation. screenRotate uses canvas transformation methods
* (ie, translate(), rotate(), and scale()), while bufferRotate inverts the dimensions of the off-screen
* buffer and then relies on setPixel() to rotate the data into it.
*
* @constructor
* @extends Component
@ -95,6 +97,7 @@ function Video(parmsVideo, canvas, context, textarea, container)
this.cyBuffer = parmsVideo['bufferRows'];
this.nBitsPerPixel = parmsVideo['bufferBits'] || 1;
this.iBitFirstPixel = parmsVideo['bufferLeft'] || 0;
this.rotateBuffer = parmsVideo['bufferRotate'];
this.interruptRate = parmsVideo['interruptRate'];
this.refreshRate = parmsVideo['refreshRate'] || 60;
@ -104,7 +107,7 @@ function Video(parmsVideo, canvas, context, textarea, container)
this.textareaScreen = textarea;
this.inputScreen = textarea || canvas || null;
this.rotateScreen = parmsVideo['screenRotation'];
this.rotateScreen = parmsVideo['screenRotate'];
if (this.rotateScreen == 90) {
this.contextScreen.translate(0, this.cyScreen);
this.contextScreen.rotate((-this.rotateScreen * Math.PI)/180);
@ -116,10 +119,16 @@ function Video(parmsVideo, canvas, context, textarea, container)
/*
* Allocate off-screen buffers.
*/
this.imageBuffer = this.contextScreen.createImageData(this.cxBuffer, this.cyBuffer);
var cxBuffer = this.cxBuffer;
var cyBuffer = this.cyBuffer;
if (this.rotateBuffer) {
cxBuffer = this.cyBuffer;
cyBuffer = this.cxBuffer;
}
this.imageBuffer = this.contextScreen.createImageData(cxBuffer, cyBuffer);
this.canvasBuffer = document.createElement("canvas");
this.canvasBuffer.width = this.cxBuffer;
this.canvasBuffer.height = this.cyBuffer;
this.canvasBuffer.width = cxBuffer;
this.canvasBuffer.height = cyBuffer;
// this.canvasBuffer.style['image-rendering'] = "pixelated";
this.contextBuffer = this.canvasBuffer.getContext("2d");
}
@ -207,21 +216,27 @@ Video.prototype.getColors = function()
};
/**
* setPixel(imageData, x, y, rgb)
* setPixel(imageBuffer, x, y, rgb)
*
* @this {Video}
* @param {Object} imageData
* @param {Object} imageBuffer
* @param {number} x
* @param {number} y
* @param {Array.<number>} rgb is a 4-element array containing the red, green, blue and alpha values
*/
Video.prototype.setPixel = function(imageData, x, y, rgb)
Video.prototype.setPixel = function(imageBuffer, x, y, rgb)
{
var index = (x + y * imageData.width) * rgb.length;
imageData.data[index] = rgb[0];
imageData.data[index+1] = rgb[1];
imageData.data[index+2] = rgb[2];
imageData.data[index+3] = rgb[3];
var index;
if (!this.rotateBuffer) {
index = (x + y * imageBuffer.width);
} else {
index = (imageBuffer.height - x - 1) * imageBuffer.width + y;
}
index *= rgb.length;
imageBuffer.data[index] = rgb[0];
imageBuffer.data[index+1] = rgb[1];
imageBuffer.data[index+2] = rgb[2];
imageBuffer.data[index+3] = rgb[3];
};
/**
@ -318,8 +333,17 @@ Video.prototype.updateScreen = function(n)
if (xDirty < this.cxBuffer) {
var cxDirty = xMaxDirty - xDirty;
var cyDirty = yMaxDirty - yDirty;
this.contextBuffer.putImageData(this.imageBuffer, 0, 0, xDirty, yDirty, cxDirty, cyDirty);
this.contextScreen.drawImage(this.canvasBuffer, 0, 0, this.cxBuffer, this.cyBuffer, 0, 0, this.cxScreen, this.cyScreen);
if (this.rotateBuffer) {
/*
* TODO: One last bit of work required for "bufferRotate" (if you really don't want to use
* "screenRotate"): the dirty coordinates must be "rotated" as well, because they are relative
* to the frame buffer, not the image buffer. That's why this code copies the ENTIRE imageBuffer.
*/
this.contextBuffer.putImageData(this.imageBuffer, 0, 0);
} else {
this.contextBuffer.putImageData(this.imageBuffer, 0, 0, xDirty, yDirty, cxDirty, cyDirty);
}
this.contextScreen.drawImage(this.canvasBuffer, 0, 0, this.canvasBuffer.width, this.canvasBuffer.height, 0, 0, this.cxScreen, this.cyScreen);
}
};

View file

@ -991,9 +991,9 @@
<xsl:otherwise>black</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenRotation">
<xsl:variable name="screenRotate">
<xsl:choose>
<xsl:when test="@screenRotation"><xsl:value-of select="@screenRotation"/></xsl:when>
<xsl:when test="@screenRotate"><xsl:value-of select="@screenRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
@ -1027,6 +1027,12 @@
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="bufferRotate">
<xsl:choose>
<xsl:when test="@bufferRotate"><xsl:value-of select="@bufferRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="memory">
<!-- PCjs uses this to determine the amount of Video memory installed; in retrospect, "bufferSize"
might seem like a better choice for the name, but PCjs doesn't use ANY of the "buffer" properties,
@ -1108,7 +1114,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">video</xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotation:<xsl:value-of select="$screenRotation"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,bufferLeft:<xsl:value-of select="$bufferLeft"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,bufferLeft:<xsl:value-of select="$bufferLeft"/>,bufferRotate:<xsl:value-of select="$bufferRotate"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -989,9 +989,9 @@
<xsl:otherwise>black</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenRotation">
<xsl:variable name="screenRotate">
<xsl:choose>
<xsl:when test="@screenRotation"><xsl:value-of select="@screenRotation"/></xsl:when>
<xsl:when test="@screenRotate"><xsl:value-of select="@screenRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
@ -1016,6 +1016,18 @@
<xsl:variable name="bufferBits">
<xsl:choose>
<xsl:when test="@bufferBits"><xsl:value-of select="@bufferBits"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="bufferLeft">
<xsl:choose>
<xsl:when test="@bufferLeft"><xsl:value-of select="@bufferLeft"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="bufferRotate">
<xsl:choose>
<xsl:when test="@bufferRotate"><xsl:value-of select="@bufferRotate"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
@ -1095,7 +1107,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">video</xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotation:<xsl:value-of select="$screenRotation"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
<xsl:with-param name="parms">,model:'<xsl:value-of select="$model"/>',mode:<xsl:value-of select="$mode"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,screenColor:'<xsl:value-of select="$screenColor"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferCols:<xsl:value-of select="$bufferCols"/>,bufferRows:<xsl:value-of select="$bufferRows"/>,bufferBits:<xsl:value-of select="$bufferBits"/>,bufferLeft:<xsl:value-of select="$bufferLeft"/>,bufferRotate:<xsl:value-of select="$bufferRotate"/>,memory:<xsl:value-of select="$memory"/>,switches:'<xsl:value-of select="$switches"/>',scale:<xsl:value-of select="$scale"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

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

View file

@ -1,129 +1,129 @@
(function(){var m;function aa(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function 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 fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var ha=Date.now||function(){return+new Date};function ia(){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(){var m;function ba(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ca(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 da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ea(a,b){return-1!==a.indexOf(b,a.length-b.length)}var fa={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}var ha=Date.now||function(){return+new Date};function ia(){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 p(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 ja(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function q(a){window&&window.alert(a)}function ka(a){var b=!1;window&&(b=window.confirm(a));return b}var ma=null;function na(){if(null==ma){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}ma=a}return ma}function oa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function pa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function sa(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var t={init:[],show:[],exit:[]},ta=!1,ua=!0;function va(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function wa(a){t.init.push(a)}
function xa(a){if(ua)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){q("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function ya(a){!ua&&a?(ua=!0,ta&&za("init")):ua=a}function za(a){t[a]&&xa(t[a])}va("onload",function(){ta=!0;xa(t.init)});va("onpageshow",function(){xa(t.show)});va(sa("Opera")||sa("iOS")?"onunload":"onbeforeunload",function(){xa(t.exit)});
function u(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.ya=b.comment;this.Ya=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Oa=this.id.substr(0,b),this.za=this.id.substr(b+1)):this.za=this.id;this[a]=c;this.h={ea:!1,la:!1,Ia:!1,J:!1,Y:!1};this.Ca=null;this.h.Y=!1;this.B={};this.H=null;v.push(this)}var Aa=void 0,Ba={};
if(window){Aa||(Aa=window.location.search.substr(1));for(var Ca,Da=/\+/g,Ga=/([^&=]+)=?([^&]*)/g;Ca=Ga.exec(Aa);)Ba[decodeURIComponent(Ca[1].replace(Da," "))]=decodeURIComponent(Ca[2].replace(Da," "))}function Ha(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
function w(a,b){b||(b=u);a.prototype=Ha(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var v=[],Ia={};function Ja(a,b,c){Ia[a]&&b&&(Ia[a][b]=c)}function y(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<v.length;b++){var d=v[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function Ka(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<v.length;d++)if(c)c==v[d]&&(c=null);else if(!(a!=v[d].type||b&&v[d].id.indexOf(b)))return v[d]}return null}function z(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){q(c.message+" ("+a+")")}return b}
function La(a,b){for(var c=B(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=z(h))&&g.binding&&a.P(g.type,g.binding,h,g.value),l=k.length}}}}
function B(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
u.prototype={constructor:u,parent:null,toString:function(){return this.name?this.name:this.id||this.type},P:function(a,b,c){switch(b){case "clear":return this.B[b]||(this.B[b]=c,c.onclick=function(a){return function(){a.B.print&&(a.B.print.value="")}}(this)),!0;case "print":return this.B[b]||(this.X=this.B[b]=c,c.value="",this.O=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.K=function(a,b,c){this.O(a,"notice",c)}),!0;default:return!1}},log:function(){},O:function(){},status:function(a){this.O(this.za+": "+a)},K:function(a,b){b||q(a)},V:function(){return this.h.J=!0},U:function(a,b){b&&(this.h.J=!1);return!0}};function Ma(a,b){if(a.h.Ia)return a.h.la&&(a.h.la=!1),a.h.Ia=!1;if(a.h.Y)return a.O(a.toString()+" error"),!1;a.h.la=b;return a.h.la}function C(a){if(!a.h.Y&&(a.h.ea=!0,a.h.ea)){var b=a.Ca;a.Ca=null;b&&b()}}
typeof b){var l="",k;for(k in b)b.hasOwnProperty(k)&&(l&&(l+="&"),l+=k+"="+encodeURIComponent(b[k]));l=l.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(l)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function ja(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function r(a){window&&window.alert(a)}function ka(a){var b=!1;window&&(b=window.confirm(a));return b}var la=null;function oa(){if(null==la){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}la=a}return la}function pa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function qa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ra(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var ta={init:[],show:[],exit:[]},ua=!1,va=!0;function wa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function xa(a){ta.init.push(a)}
function ya(a){if(va)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){r("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function za(a){!va&&a?(va=!0,ua&&Aa("init")):va=a}function Aa(a){ta[a]&&ya(ta[a])}wa("onload",function(){ua=!0;ya(ta.init)});wa("onpageshow",function(){ya(ta.show)});wa(ra("Opera")||ra("iOS")?"onunload":"onbeforeunload",function(){ya(ta.exit)});
function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.ya=b.comment;this.Ya=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Oa=this.id.substr(0,b),this.za=this.id.substr(b+1)):this.za=this.id;this[a]=c;this.h={ea:!1,la:!1,Ia:!1,J:!1,$:!1};this.Ca=null;this.h.$=!1;this.B={};this.H=null;u.push(this)}var Ba=void 0,Ca={};
if(window){Ba||(Ba=window.location.search.substr(1));for(var Da,Ea=/\+/g,Ga=/([^&=]+)=?([^&]*)/g;Da=Ga.exec(Ba);)Ca[decodeURIComponent(Da[1].replace(Ea," "))]=decodeURIComponent(Da[2].replace(Ea," "))}function Ha(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 v(a,b){b||(b=t);a.prototype=Ha(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var u=[],Ia={};function Ja(a,b,c){Ia[a]&&b&&(Ia[a][b]=c)}function w(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<u.length;b++){var d=u[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function Ka(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<u.length;d++)if(c)c==u[d]&&(c=null);else if(!(a!=u[d].type||b&&u[d].id.indexOf(b)))return u[d]}return null}function x(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}
function La(a,b){for(var c=y(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=x(h))&&g.binding&&a.R(g.type,g.binding,h,g.value),k=l.length}}}}
function y(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}
t.prototype={constructor:t,parent:null,toString:function(){return this.name?this.name:this.id||this.type},R:function(a,b,c){switch(b){case "clear":return this.B[b]||(this.B[b]=c,c.onclick=function(a){return function(){a.B.print&&(a.B.print.value="")}}(this)),!0;case "print":return this.B[b]||(this.Z=this.B[b]=c,c.value="",this.P=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.K=function(a,b,c){this.P(a,"notice",c)}),!0;default:return!1}},log:function(){},P:function(){},status:function(a){this.P(this.za+": "+a)},K:function(a,b){b||r(a)},V:function(){return this.h.J=!0},U:function(a,b){b&&(this.h.J=!1);return!0}};function Ma(a,b){if(a.h.Ia)return a.h.la&&(a.h.la=!1),a.h.Ia=!1;if(a.h.$)return a.P(a.toString()+" error"),!1;a.h.la=b;return a.h.la}function B(a){if(!a.h.$&&(a.h.ea=!0,a.h.ea)){var b=a.Ca;a.Ca=null;b&&b()}}
function Na(a,b){b&&(a.h.ea?b():a.Ca=b);return a.h.ea}
var Oa="undefined"!==typeof ArrayBuffer,Pa=[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 Qa(a){u.call(this,"Panel",a,Qa)}w(Qa);m=Qa.prototype;m.P=function(a,b,c,d){return this.u&&this.u.P(a,b,c,d)||this.a&&this.a.P(a,b,c,d)||this.b&&this.b.P(a,b,c,d)?!0:this.parent.P.call(this,a,b,c,d)};m.Z=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.b=Ra(a,"Keyboard")};m.V=function(a,b){b||Sa();return!0};m.U=function(){return!0};m.ba=function(){};
function Sa(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=z(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<v.length;h++)if(v[h].id===f){f=v[h];break a}f=null}f||(a=!0,f=new Qa(e));La(f,d);a&&C(f)}}wa(Sa);
function Ta(a,b,c){u.call(this,"Bus",a,Ta);this.a=b;this.H=c;this.j=a.busWidth||16;this.s=Math.pow(2,this.j);this.i=this.s-1|0;this.c=16>=this.j?10:20>=this.j?12:24>=this.j?14:15;this.f=1<<this.c;this.A=this.f>>2;this.g=this.f-1;this.l=this.s/this.f|0;this.u=this.l-1;this.o=[];this.m=[];this.C=[];this.D=[];a=new D;Ua(a,this.H);this.b=Array(this.l);for(b=0;b<this.l;b++)this.b[b]=a;C(this)}w(Ta);Ta.prototype.reset=function(){};Ta.prototype.V=function(a,b){b||this.reset();return!0};
function Va(a,b,c,d){for(var e=b>>>a.c;0<c&&e<a.b.length;){var f=a.b[e],h=e*a.f,g=a.f-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.ka)return f.Ha+=f.ka-b,f.ka=b,!0;if(b>=f.ka+f.Ha){g=f.size-(b-h);g>c&&(g=c);f.Ha=b-f.ka+g;b=h+a.f;c-=g;e++;continue}}return Wa(1,b,c)}b=new D(b,g,a.f,d);Ua(b,a.H,f);a.b[e++]=b;b=h+a.f;c-=g}return 0>=c?!0:Wa(2,b,c)}Ta.prototype.F=function(a){return this.b[(a&this.i)>>>this.c].ta(a&this.g,a)};
function Xa(a,b){var c=b&a.g,d=(b&a.i)>>>a.c;return c!=a.g?a.b[d].pb(c,b):a.b[d++].ta(c,b)|a.b[d&a.u].ta(0,b+1)<<8}Ta.prototype.M=function(a,b){this.b[(a&this.i)>>>this.c].ua(a&this.g,b&255,a)};function Ya(a,b,c){a.b[(b&a.i)>>>a.c].ab(b&a.g,c&255,b)}function Za(a,b,c){var d=b&a.g,e=(b&a.i)>>>a.c;d!=a.g?a.b[e].qb(d,c&65535,b):(a.b[e++].ua(d,c&255,b),a.b[e&a.u].ua(0,c>>8&255,b+1))}function Wa(a,b,c){q("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var $a;
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 Qa(a){t.call(this,"Panel",a,Qa)}v(Qa);m=Qa.prototype;m.R=function(a,b,c,d){return this.u&&this.u.R(a,b,c,d)||this.a&&this.a.R(a,b,c,d)||this.b&&this.b.R(a,b,c,d)?!0:this.parent.R.call(this,a,b,c,d)};m.aa=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.b=Ra(a,"Keyboard")};m.V=function(a,b){b||Sa();return!0};m.U=function(){return!0};m.da=function(){};
function Sa(){for(var a=!1,b=y(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=x(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<u.length;h++)if(u[h].id===f){f=u[h];break a}f=null}f||(a=!0,f=new Qa(e));La(f,d);a&&B(f)}}xa(Sa);
function Ta(a,b,c){t.call(this,"Bus",a,Ta);this.a=b;this.H=c;this.j=a.busWidth||16;this.s=Math.pow(2,this.j);this.i=this.s-1|0;this.c=16>=this.j?10:20>=this.j?12:24>=this.j?14:15;this.f=1<<this.c;this.A=this.f>>2;this.g=this.f-1;this.l=this.s/this.f|0;this.u=this.l-1;this.o=[];this.m=[];this.C=[];this.D=[];a=new C;Ua(a,this.H);this.b=Array(this.l);for(b=0;b<this.l;b++)this.b[b]=a;B(this)}v(Ta);Ta.prototype.reset=function(){};Ta.prototype.V=function(a,b){b||this.reset();return!0};
function Va(a,b,c,d){for(var e=b>>>a.c;0<c&&e<a.b.length;){var f=a.b[e],h=e*a.f,g=a.f-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.ka)return f.Ha+=f.ka-b,f.ka=b,!0;if(b>=f.ka+f.Ha){g=f.size-(b-h);g>c&&(g=c);f.Ha=b-f.ka+g;b=h+a.f;c-=g;e++;continue}}return Wa(1,b,c)}b=new C(b,g,a.f,d);Ua(b,a.H,f);a.b[e++]=b;b=h+a.f;c-=g}return 0>=c?!0:Wa(2,b,c)}Ta.prototype.F=function(a){return this.b[(a&this.i)>>>this.c].ta(a&this.g,a)};
function Xa(a,b){var c=b&a.g,d=(b&a.i)>>>a.c;return c!=a.g?a.b[d].pb(c,b):a.b[d++].ta(c,b)|a.b[d&a.u].ta(0,b+1)<<8}Ta.prototype.M=function(a,b){this.b[(a&this.i)>>>this.c].ua(a&this.g,b&255,a)};function Ya(a,b,c){a.b[(b&a.i)>>>a.c].ab(b&a.g,c&255,b)}function Za(a,b,c){var d=b&a.g,e=(b&a.i)>>>a.c;d!=a.g?a.b[e].qb(d,c&65535,b):(a.b[e++].ua(d,c&255,b),a.b[e&a.u].ua(0,c>>8&255,b+1))}function Wa(a,b,c){r("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var $a;
if(Oa){var ab=new ArrayBuffer(2);(new DataView(ab)).setUint16(0,256,!0);$a=256===(new Uint16Array(ab))[0]}else $a=!1;var bb=$a;
function D(a,b,c,d){this.id=cb+=2;this.a=null;this.ka=a;this.Ha=b;this.size=c||0;this.type=d||db;this.g=d==eb;Ua(this);this.S=this.Ra=!1;if(c)if(Oa)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.l=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),fb(this,bb?gb:hb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;fb(this,ib)}else fb(this)}var db=0,eb=2,cb=0;
D.prototype={constructor:D,parent:null,save:function(){var a,b;if(Oa)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Oa)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.S=!0}return!1},o:function(){return 255},B:function(){},m:function(a,b){return this.ta(a++,b++)|this.ta(a,b)<<8},u:function(a,b,c){this.ua(a++,b&255,c++);this.ua(a,b>>8,c)},D:function(a){return this.a[a>>
2]>>>((a&3)<<3)&255},N:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},da:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.S=!0},za:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.S=!0},A:function(a,b){return this.Ma(a,b)},I:function(a,b){return this.Za(a,b)},R:function(a,b,c){this.g||this.ab(a,b,c)},wa:function(a,
b,c){this.g||this.xa(a,b,c)},s:function(a){return this.b[a]},C:function(a){return this.b[a]},G:function(a){return this.f.getUint16(a,!0)},L:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.l[a>>1]},W:function(a,b){this.b[a]=b;this.S=!0},ca:function(a,b){this.b[a]=b;this.S=!0},va:function(a,b){this.f.setUint16(a,b,!0);this.S=!0},ya:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.l[a>>1]=b;this.S=!0}};function Ua(a,b,c){a.H=b;a.i=a.j=0;c&&((a.i=c.i)&&jb(a,kb,!1),(a.j=c.j)&&lb(a,kb,!1))}
function lb(a,b,c){c&&a.j||(a.ua=!a.g&&b[2]||a.B,a.qb=!a.g&&b[3]||a.u);if(c||void 0===c)a.ab=b[2]||a.B,a.xa=b[3]||a.u}function jb(a,b,c){c&&a.i||(a.ta=b[0]||a.o,a.pb=b[1]||a.m);if(c||void 0===c)a.Ma=b[0]||a.o,a.Za=b[1]||a.m}function fb(a,b){b||(b=mb);jb(a,b,void 0);lb(a,b,void 0)}var mb=[],ib=[D.prototype.D,D.prototype.N,D.prototype.da,D.prototype.za],kb=[D.prototype.A,D.prototype.I,D.prototype.R,D.prototype.wa];
if(Oa)var hb=[D.prototype.s,D.prototype.G,D.prototype.W,D.prototype.va],gb=[D.prototype.C,D.prototype.L,D.prototype.ca,D.prototype.ya];
function nb(a,b){u.call(this,"CPU",a,nb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.ja=c;this.c.Ga=0;this.c.ia=d;this.c.Ja=Math.round(this.c.ja/1E4)/100;this.c.fa=this.c.Ja*this.c.ia;this.h.T=!1;this.h.Ta=!1;this.h.Qa=a.autoStart;this.h.Sa=!1;this.h.Aa=!1;this.c.Ea=this.c.ha=0;this.c.Fa=a.csStart;this.c.ma=a.csInterval;this.c.na=a.csStop;this.cb=this.Na.bind(this);C(this)}w(nb);var ob=["power","reset"];m=nb.prototype;
m.Z=function(a,b,c,d){this.u=a;this.o=b;this.H=d;for(b=0;b<ob.length;b++)(c=this.B[ob[b]])&&this.u.P(null,ob[b],c);this.W=(b=Ra(a,"Video"))&&Math.max(b.W,b.bb)||60;this.da=Ra(a,"ChipSet");a=pb(a,"autoStart");null!=a&&(this.h.Qa="true"==a?!0:"false"==a?!1:!!a);C(this)};m.reset=function(){this.c.Ga=0};m.save=function(){return null};m.restore=function(){return!1};
m.V=function(a,b){if(!b){if(a&&this.restore){qb(this);if(!this.restore(a))return!1;rb(this)}else this.reset();this.O("No debugger detected")}sb(this);return!0};m.U=function(a){return a?this.save():!0};function tb(a){(a.h.Qa||void 0===a.B.run)&&a.Na()}m.Ua=function(){return 0};function rb(a){void 0===a.c.Fa&&(a.c.Fa=0);void 0===a.c.ma&&(a.c.ma=-1);void 0===a.c.na&&(a.c.na=-1);a.h.Aa=0<=a.c.Fa&&0<a.c.ma;a.h.Aa&&(a.c.Ea=0,a.c.ha=a.c.Fa-a.N)}
m.P=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.B[b]=c;a=!0;break;case "run":this.B[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.h.J)a=!0;else{var b=null,c,g=y(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.h.ea);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.h.J);c++);c==g.length&&(b=a);q("The "+b.type+" component ("+b.id+") is not "+(b.h.ea?"powered yet":"ready yet"+(b.Ca?" (waiting for notification)":""))+".");a=!1}a&&(d.h.T?ub(d,!0):d.Na())};a=!0;break;
function C(a,b,c,d){this.id=cb+=2;this.a=null;this.ka=a;this.Ha=b;this.size=c||0;this.type=d||db;this.g=d==eb;Ua(this);this.S=this.Ra=!1;if(c)if(Oa)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.l=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),fb(this,bb?gb:hb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;fb(this,ib)}else fb(this)}var db=0,eb=2,cb=0;
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(Oa)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Oa)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.S=!0}return!1},o:function(){return 255},B:function(){},m:function(a,b){return this.ta(a++,b++)|this.ta(a,b)<<8},u:function(a,b,c){this.ua(a++,b&255,c++);this.ua(a,b>>8,c)},D:function(a){return this.a[a>>
2]>>>((a&3)<<3)&255},N:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},Y:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.S=!0},za:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.S=!0},A:function(a,b){return this.Ma(a,b)},I:function(a,b){return this.Za(a,b)},O:function(a,b,c){this.g||this.ab(a,b,c)},wa:function(a,
b,c){this.g||this.xa(a,b,c)},s:function(a){return this.b[a]},C:function(a){return this.b[a]},G:function(a){return this.f.getUint16(a,!0)},L:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.l[a>>1]},W:function(a,b){this.b[a]=b;this.S=!0},X:function(a,b){this.b[a]=b;this.S=!0},va:function(a,b){this.f.setUint16(a,b,!0);this.S=!0},ya:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.l[a>>1]=b;this.S=!0}};function Ua(a,b,c){a.H=b;a.i=a.j=0;c&&((a.i=c.i)&&jb(a,kb,!1),(a.j=c.j)&&lb(a,kb,!1))}
function lb(a,b,c){c&&a.j||(a.ua=!a.g&&b[2]||a.B,a.qb=!a.g&&b[3]||a.u);if(c||void 0===c)a.ab=b[2]||a.B,a.xa=b[3]||a.u}function jb(a,b,c){c&&a.i||(a.ta=b[0]||a.o,a.pb=b[1]||a.m);if(c||void 0===c)a.Ma=b[0]||a.o,a.Za=b[1]||a.m}function fb(a,b){b||(b=mb);jb(a,b,void 0);lb(a,b,void 0)}var mb=[],ib=[C.prototype.D,C.prototype.N,C.prototype.Y,C.prototype.za],kb=[C.prototype.A,C.prototype.I,C.prototype.O,C.prototype.wa];
if(Oa)var hb=[C.prototype.s,C.prototype.G,C.prototype.W,C.prototype.va],gb=[C.prototype.C,C.prototype.L,C.prototype.X,C.prototype.ya];
function nb(a,b){t.call(this,"CPU",a,nb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.ja=c;this.c.Ga=0;this.c.ia=d;this.c.Ja=Math.round(this.c.ja/1E4)/100;this.c.fa=this.c.Ja*this.c.ia;this.h.T=!1;this.h.Ta=!1;this.h.Qa=a.autoStart;this.h.Sa=!1;this.h.Aa=!1;this.c.Ea=this.c.ha=0;this.c.Fa=a.csStart;this.c.ma=a.csInterval;this.c.na=a.csStop;this.cb=this.Na.bind(this);B(this)}v(nb);var ob=["power","reset"];m=nb.prototype;
m.aa=function(a,b,c,d){this.u=a;this.o=b;this.H=d;for(b=0;b<ob.length;b++)(c=this.B[ob[b]])&&this.u.R(null,ob[b],c);this.W=(b=Ra(a,"Video"))&&Math.max(b.W,b.bb)||60;this.Y=Ra(a,"ChipSet");a=pb(a,"autoStart");null!=a&&(this.h.Qa="true"==a?!0:"false"==a?!1:!!a);B(this)};m.reset=function(){this.c.Ga=0};m.save=function(){return null};m.restore=function(){return!1};
m.V=function(a,b){if(!b){if(a&&this.restore){qb(this);if(!this.restore(a))return!1;rb(this)}else this.reset();this.P("No debugger detected")}sb(this);return!0};m.U=function(a){return a?this.save():!0};function tb(a){(a.h.Qa||void 0===a.B.run)&&a.Na()}m.Ua=function(){return 0};function rb(a){void 0===a.c.Fa&&(a.c.Fa=0);void 0===a.c.ma&&(a.c.ma=-1);void 0===a.c.na&&(a.c.na=-1);a.h.Aa=0<=a.c.Fa&&0<a.c.ma;a.h.Aa&&(a.c.Ea=0,a.c.ha=a.c.Fa-a.N)}
m.R=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.B[b]=c;a=!0;break;case "run":this.B[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.h.J)a=!0;else{var b=null,c,g=w(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.h.ea);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.h.J);c++);c==g.length&&(b=a);r("The "+b.type+" component ("+b.id+") is not "+(b.h.ea?"powered yet":"ready yet"+(b.Ca?" (waiting for notification)":""))+".");a=!1}a&&(d.h.T?ub(d,!0):d.Na())};a=!0;break;
case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(){wb(d,d.c.ia<<1)},c.textContent=this.c.fa.toFixed(2)+"Mhz",a=!0}return a};function xb(a,b,c){a.N+=b;c&&(a.L=a.a=0)}
function yb(a,b){var c=30;c<a.W&&(c=a.W);2>c&&(c=2);var d=1;b&&1<a.c.ia&&a.c.$&&(d=a.c.$/a.c.Ja);a.c.Va=Math.round(1E3/30);a.c.jb=Math.floor(a.c.ja/c*d);a.c.Ka=Math.floor(a.c.ja/30*d);a.c.Xa=Math.floor(a.c.ja/a.W*d);a.c.Wa=Math.floor(a.c.ja/2*d);b||(a.c.qa=a.c.Ka,a.c.pa=a.c.Xa,a.c.oa=a.c.Wa);a.c.La=0}function zb(a){return a.N+a.I+a.L-a.a}function qb(a){a.c.$=0;a.N=a.I=a.L=a.a=0;rb(a);wb(a,1)}
function wb(a,b){if(void 0!==b){.8>a.c.$/a.c.fa&&(b=1);a.c.ia=b;var c=a.c.Ja*a.c.ia;if(a.c.fa!=c){a.c.fa=c;var c=a.c.fa.toFixed(2)+"Mhz",d=a.B.setSpeed;d&&(d.textContent=c);a.O("target speed: "+c)}}xb(a,a.I);a.I=0;a.c.ga=ha();a.c.aa=0;yb(a)}
m.Na=function(){if(Ma(this,!0)){if(!this.h.T){wb(this);this.u&&this.u.start(this.c.ga,zb(this));this.h.T=!0;this.h.Ta=!0;this.da&&this.da.start();var a=this.B.run;a&&(a.textContent="Halt");this.u&&this.u.ba(!0)}this.c.La>=this.c.ja&&yb(this,!0);this.c.ra=0;this.c.Da=ha();this.c.aa&&(a=this.c.Da-this.c.aa,a>this.c.Va&&(this.c.ga+=a,this.c.ga>this.c.Da&&(this.c.ga=this.c.Da)));try{do{var b=this.h.Aa?1:this.c.jb;try{this.$a(b)}catch(e){if("number"!=typeof e)throw e;}var c=this.L-this.a;this.I+=c;this.c.ra+=
c;xb(this,0,!0);a=c;if(this.h.Aa){var d=!1;this.c.Ea=this.c.Ea+this.Ua()|0;this.c.ha-=a;0>=this.c.ha&&(this.c.ha+=this.c.ma,d=!0);0<=this.c.na&&this.c.na<=zb(this)&&(this.c.ma=this.c.na=-1,rb(this),ub(this),d=!0);d&&this.O(zb(this)+" cycles: checksum="+n(this.c.Ea))}this.c.pa-=c;0>=this.c.pa&&(this.c.pa+=this.c.Xa,this.u&&Ab(this.u,this.c.Ga++),this.c.Ga>this.W&&(this.c.Ga=0));this.c.oa-=c;0>=this.c.oa&&(this.c.oa+=this.c.Wa,this.u&&this.u.ba());this.c.qa-=c;if(0>=this.c.qa){this.c.qa+=this.c.Ka;
break}}while(this.h.T)}catch(e){ub(this);sb(this);this.u&&this.u.stop(ha(),zb(this));Ma(this,!1);b=e.stack||e.message;this.h.Y=!0;this.K(b);return}b=setTimeout;c=this.cb;this.c.aa=ha();a=this.c.Va;this.c.ra&&(a=Math.round(a*this.c.ra/this.c.Ka));a-=this.c.aa-this.c.Da;if(d=this.c.aa-this.c.ga)this.c.$=Math.round(this.I/(10*d))/100,864E5<=d&&(this.N=0,wb(this));if(0>a||this.c.$<this.c.fa)a=0;this.c.La+=this.c.ra;this.c.aa+=a;b(c,a)}else sb(this),this.u&&this.u.stop(ha(),zb(this))};m.$a=function(){return 0};
function ub(a,b){a.h.la&&(a.h.Ia=!0);a.L-=a.a;a.a=0;xb(a,a.I);a.I=0;if(a.h.T){a.h.T=!1;a.da&&a.da.stop();var c=a.B.run;c&&(c.textContent="Run")}a.h.Ba=b}function sb(a){a.u&&(Ab(a.u,-1),a.u.ba(void 0))}function Bb(a){this.R=a.model||8080;nb.call(this,a,1E6);this.va=Cb;qb(this);this.h.Ba=this.h.eb=!1;this.xa=0;this.ca=[];this.wa=0;Db(this)}w(Bb,nb);function Eb(a,b){a.ca.push(b)}m=Bb.prototype;m.reset=function(){this.h.T&&ub(this);Db(this);qb(this);this.h.Y=!1;this.parent.reset.call(this)};
function Db(a){a.b=0;a.g=0;a.v=0;a.i=0;a.w=0;a.j=0;a.l=0;a.A=0;E(a,a.wa);Fb(a,0);a.D=0}function Gb(a,b){a.wa=b;E(a,b)}m.Ua=function(){var a=this.b+this.g+this.v+this.i+this.w+this.j+this.l|0;return a=a+this.A+this.m+Hb(this)|0};
m.save=function(){var a=new F(this);G(a,0,[this.b,this.g,this.v,this.i,this.w,this.j,this.l,this.A,this.m,Hb(this)]);G(a,1,[this.D,this.N,this.c.ia]);for(var b=this.o,c=0,d=[],e=0;e<b.l;e++){var f=b.b[e];if(f.S||f.Ra){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var x=f[g],r=g+1;r<f.length&&f[r]===x;)r++;l[k++]=r-g;l[k++]=x;g=r}if(l.length<f.length){f=l;break a}}d[h]=f}}G(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.b=b[0];this.g=b[1];this.v=b[2];this.i=b[3];this.w=b[4];this.j=b[5];this.l=b[6];this.A=b[7]&65535;E(this,b[8]);Fb(this,b[9]);b=a[1];this.D=b[0];this.N=b[1];wb(this,b[3]);a:{b=this.o;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.A){for(var f=0,h=Array(b.A),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.b[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.P=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 "SF":case "ZF":case "AF":case "PF":case "CF":this.B[b]=c;this.xa++;d=!0;break;default:d=this.parent.P.call(this,a,b,c)}return d};function Ib(a){return a.g<<8|a.v}function Jb(a,b){a.g=b>>8&255;a.v=b&255}function H(a){return a.i<<8|a.w}function Kb(a,b){a.i=b>>8&255;a.w=b&255}function I(a){return a.j<<8|a.l}
function J(a,b){a.j=b>>8&255;a.l=b&255}function E(a,b){a.m=b&65535}function K(a){return a.f&256?1:0}function Lb(a){return Pa[a.s&255]?4:0}function Hb(a){return a.G&-214|(a.s&128?128:0)|(a.f&255?0:64)|((a.s^a.C)&16?16:0)|Lb(a)|K(a)}function Fb(a,b){a.f=a.s=a.C=0;b&1&&(a.f|=256);b&4||(a.s|=1);b&16&&(a.C|=16);b&64||(a.f|=255);b&128&&(a.s^=192);a.G=a.G&-513|b&512|2}function L(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b)&255}function M(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?1:0))&255}
function N(a,b){a.f=a.s=a.C=a.b&b;(a.b|b)&8&&(a.C^=16);return a.f}function Mb(a,b){a.C=b^255;b=a.s=b+255&255;a.f=a.f&-256|b;return b}function Nb(a,b){a.C=b;b=a.s=b+1&255;a.f=a.f&-256|b;return b}function O(a,b){return a.s=a.f=a.C=a.b|b}function P(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+1^256)&255}function Q(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?0:1)^256)&255}function R(a,b){return a.s=a.f=a.C=a.b^b}m.F=function(a){return this.o.F(a)};m.M=function(a,b){this.o.M(a,b)};
function S(a){var b=a.F(a.m);E(a,a.m+1);return b}function T(a){var b=Xa(a.o,a.m);E(a,a.m+2);return b}function U(a){var b=Xa(a.o,a.A);a.A=a.A+2&65535;return b}function V(a,b){a.A=a.A-2&65535;Za(a.o,a.A,b)}function W(a,b,c,d){d=d||2;a.B[b]&&(void 0===c&&(a.h.Y=!0,a.K("Value for "+b+" is invalid"),ub(a)),c=!a.h.T||a.h.Sa?n(c,d):"--------".substr(0,d),a.B[b].textContent!=c&&(a.B[b].textContent=c))}
m.ba=function(a){this.xa&&(a||!this.h.T||this.h.Sa)&&(W(this,"A",this.b),W(this,"B",this.g),W(this,"C",this.v),W(this,"BC",Ib(this),4),W(this,"D",this.i),W(this,"E",this.w),W(this,"DE",H(this),4),W(this,"H",this.j),W(this,"L",this.l),W(this,"HL",I(this),4),W(this,"SP",this.A,4),W(this,"PC",this.m,4),a=Hb(this),W(this,"PS",a,4),W(this,"SF",a&128?1:0,1),W(this,"ZF",a&64?1:0,1),W(this,"AF",a&16?1:0,1),W(this,"PF",a&4?1:0,1),W(this,"CF",a&1?1:0,1));if(a=this.B.speed)a.textContent=this.h.T&&this.c.$?this.c.$.toFixed(2)+
"Mhz":"Stopped"};m.$a=function(a){this.h.Ba=!0;this.h.eb=!1;this.h.Ta=!1;this.L=this.a=a;do{if(a=this.D)this.D&8&&this.G&512?(a=199|(this.D&7)<<3,this.D&=-16,this.G&=-513,this.va[a].call(this),a=!0):a=!1,a=!a;if(a&&this.D&16){this.a=0;break}this.va[S(this)].call(this)}while(0<this.a);return this.h.Ba?this.L-this.a:void 0===this.h.Ba?0:-1};wa(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Bb(d);La(d,c)}});function Ob(){this.a-=4}
function Pb(){E(this,T(this));this.a-=10}function Qb(){E(this,U(this));this.a-=10}function Rb(){var a=T(this);V(this,this.m);E(this,a);this.a-=17}
var Cb=[Ob,function(){Jb(this,T(this));this.a-=10},function(){this.M(Ib(this),this.b);this.a-=7},function(){Jb(this,Ib(this)+1);this.a-=5},function(){this.g=Nb(this,this.g);this.a-=5},function(){this.g=Mb(this,this.g);this.a-=5},function(){this.g=S(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+Ib(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(Ib(this));this.a-=7},function(){Jb(this,Ib(this)-
1);this.a-=5},function(){this.v=Nb(this,this.v);this.a-=5},function(){this.v=Mb(this,this.v);this.a-=5},function(){this.v=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){Kb(this,T(this));this.a-=10},function(){this.M(H(this),this.b);this.a-=7},function(){Kb(this,H(this)+1);this.a-=5},function(){this.i=Nb(this,this.i);this.a-=5},function(){this.i=Mb(this,this.i);this.a-=5},function(){this.i=S(this);this.a-=7},function(){var a=this.b<<
1;this.b=a&255|this.f>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+H(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(H(this));this.a-=7},function(){Kb(this,H(this)-1);this.a-=5},function(){this.w=Nb(this,this.w);this.a-=5},function(){this.w=Mb(this,this.w);this.a-=5},function(){this.w=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(this.f&256|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){J(this,T(this));this.a-=10},function(){var a=
T(this);Za(this.o,a,I(this));this.a-=16},function(){J(this,I(this)+1);this.a-=5},function(){this.j=Nb(this,this.j);this.a-=5},function(){this.j=Mb(this,this.j);this.a-=5},function(){this.j=S(this);this.a-=7},function(){var a=0,b=K(this);if((this.s^this.C)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=L(this,a);this.f=b?this.f|256:this.f&-257;this.a-=4},Ob,function(){var a;J(this,a=I(this)+I(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){var a;a=T(this);a=Xa(this.o,a);J(this,
a);this.a-=16},function(){J(this,I(this)-1);this.a-=5},function(){this.l=Nb(this,this.l);this.a-=5},function(){this.l=Mb(this,this.l);this.a-=5},function(){this.l=S(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Ob,function(){this.A=T(this)&65535;this.a-=10},function(){this.M(T(this),this.b);this.a-=13},function(){this.A=this.A+1&65535;this.a-=5},function(){var a=I(this);this.M(a,Nb(this,this.F(a)));this.a-=10},function(){var a=I(this);this.M(a,Mb(this,this.F(a)));this.a-=10},function(){this.M(I(this),
S(this));this.a-=10},function(){this.f|=256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+this.A);this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(T(this));this.a-=13},function(){this.A=this.A-1&65535;this.a-=5},function(){this.b=Nb(this,this.b);this.a-=5},function(){this.b=Mb(this,this.b);this.a-=5},function(){this.b=S(this);this.a-=7},function(){this.f=K(this)?this.f&-257:this.f|256;this.a-=4},function(){this.a-=5},function(){this.g=this.v;this.a-=5},function(){this.g=this.i;this.a-=
function yb(a,b){var c=30;c<a.W&&(c=a.W);2>c&&(c=2);var d=1;b&&1<a.c.ia&&a.c.ba&&(d=a.c.ba/a.c.Ja);a.c.Va=Math.round(1E3/30);a.c.jb=Math.floor(a.c.ja/c*d);a.c.Ka=Math.floor(a.c.ja/30*d);a.c.Xa=Math.floor(a.c.ja/a.W*d);a.c.Wa=Math.floor(a.c.ja/2*d);b||(a.c.qa=a.c.Ka,a.c.pa=a.c.Xa,a.c.oa=a.c.Wa);a.c.La=0}function zb(a){return a.N+a.I+a.L-a.a}function qb(a){a.c.ba=0;a.N=a.I=a.L=a.a=0;rb(a);wb(a,1)}
function wb(a,b){if(void 0!==b){.8>a.c.ba/a.c.fa&&(b=1);a.c.ia=b;var c=a.c.Ja*a.c.ia;if(a.c.fa!=c){a.c.fa=c;var c=a.c.fa.toFixed(2)+"Mhz",d=a.B.setSpeed;d&&(d.textContent=c);a.P("target speed: "+c)}}xb(a,a.I);a.I=0;a.c.ga=ha();a.c.ca=0;yb(a)}
m.Na=function(){if(Ma(this,!0)){if(!this.h.T){wb(this);this.u&&this.u.start(this.c.ga,zb(this));this.h.T=!0;this.h.Ta=!0;this.Y&&this.Y.start();var a=this.B.run;a&&(a.textContent="Halt");this.u&&this.u.da(!0)}this.c.La>=this.c.ja&&yb(this,!0);this.c.ra=0;this.c.Da=ha();this.c.ca&&(a=this.c.Da-this.c.ca,a>this.c.Va&&(this.c.ga+=a,this.c.ga>this.c.Da&&(this.c.ga=this.c.Da)));try{do{var b=this.h.Aa?1:this.c.jb;try{this.$a(b)}catch(e){if("number"!=typeof e)throw e;}var c=this.L-this.a;this.I+=c;this.c.ra+=
c;xb(this,0,!0);a=c;if(this.h.Aa){var d=!1;this.c.Ea=this.c.Ea+this.Ua()|0;this.c.ha-=a;0>=this.c.ha&&(this.c.ha+=this.c.ma,d=!0);0<=this.c.na&&this.c.na<=zb(this)&&(this.c.ma=this.c.na=-1,rb(this),ub(this),d=!0);d&&this.P(zb(this)+" cycles: checksum="+n(this.c.Ea))}this.c.pa-=c;0>=this.c.pa&&(this.c.pa+=this.c.Xa,this.u&&Ab(this.u,this.c.Ga++),this.c.Ga>this.W&&(this.c.Ga=0));this.c.oa-=c;0>=this.c.oa&&(this.c.oa+=this.c.Wa,this.u&&this.u.da());this.c.qa-=c;if(0>=this.c.qa){this.c.qa+=this.c.Ka;
break}}while(this.h.T)}catch(e){ub(this);sb(this);this.u&&this.u.stop(ha(),zb(this));Ma(this,!1);b=e.stack||e.message;this.h.$=!0;this.K(b);return}b=setTimeout;c=this.cb;this.c.ca=ha();a=this.c.Va;this.c.ra&&(a=Math.round(a*this.c.ra/this.c.Ka));a-=this.c.ca-this.c.Da;if(d=this.c.ca-this.c.ga)this.c.ba=Math.round(this.I/(10*d))/100,864E5<=d&&(this.N=0,wb(this));if(0>a||this.c.ba<this.c.fa)a=0;this.c.La+=this.c.ra;this.c.ca+=a;b(c,a)}else sb(this),this.u&&this.u.stop(ha(),zb(this))};m.$a=function(){return 0};
function ub(a,b){a.h.la&&(a.h.Ia=!0);a.L-=a.a;a.a=0;xb(a,a.I);a.I=0;if(a.h.T){a.h.T=!1;a.Y&&a.Y.stop();var c=a.B.run;c&&(c.textContent="Run")}a.h.Ba=b}function sb(a){a.u&&(Ab(a.u,-1),a.u.da(void 0))}function Bb(a){this.O=a.model||8080;nb.call(this,a,1E6);this.va=Cb;qb(this);this.h.Ba=this.h.eb=!1;this.xa=0;this.X=[];this.wa=0;Db(this)}v(Bb,nb);function Eb(a,b){a.X.push(b)}m=Bb.prototype;m.reset=function(){this.h.T&&ub(this);Db(this);qb(this);this.h.$=!1;this.parent.reset.call(this)};
function Db(a){a.b=0;a.g=0;a.v=0;a.i=0;a.w=0;a.j=0;a.l=0;a.A=0;D(a,a.wa);Fb(a,0);a.D=0}function Gb(a,b){a.wa=b;D(a,b)}m.Ua=function(){var a=this.b+this.g+this.v+this.i+this.w+this.j+this.l|0;return a=a+this.A+this.m+Hb(this)|0};
m.save=function(){var a=new E(this);G(a,0,[this.b,this.g,this.v,this.i,this.w,this.j,this.l,this.A,this.m,Hb(this)]);G(a,1,[this.D,this.N,this.c.ia]);for(var b=this.o,c=0,d=[],e=0;e<b.l;e++){var f=b.b[e];if(f.S||f.Ra){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var A=f[g],q=g+1;q<f.length&&f[q]===A;)q++;k[l++]=q-g;k[l++]=A;g=q}if(k.length<f.length){f=k;break a}}d[h]=f}}G(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.b=b[0];this.g=b[1];this.v=b[2];this.i=b[3];this.w=b[4];this.j=b[5];this.l=b[6];this.A=b[7]&65535;D(this,b[8]);Fb(this,b[9]);b=a[1];this.D=b[0];this.N=b[1];wb(this,b[3]);a:{b=this.o;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.A){for(var f=0,h=Array(b.A),g=0;g<e.length-1;)for(var l=e[g++],k=e[g++];l--;)h[f++]=k;e=h}f=b.b[d];if(!f||!f.restore(e)){r("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.R=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 "SF":case "ZF":case "AF":case "PF":case "CF":this.B[b]=c;this.xa++;d=!0;break;default:d=this.parent.R.call(this,a,b,c)}return d};function Ib(a){return a.g<<8|a.v}function Jb(a,b){a.g=b>>8&255;a.v=b&255}function H(a){return a.i<<8|a.w}function Kb(a,b){a.i=b>>8&255;a.w=b&255}function I(a){return a.j<<8|a.l}
function J(a,b){a.j=b>>8&255;a.l=b&255}function D(a,b){a.m=b&65535}function K(a){return a.f&256?1:0}function Lb(a){return Pa[a.s&255]?4:0}function Hb(a){return a.G&-214|(a.s&128?128:0)|(a.f&255?0:64)|((a.s^a.C)&16?16:0)|Lb(a)|K(a)}function Fb(a,b){a.f=a.s=a.C=0;b&1&&(a.f|=256);b&4||(a.s|=1);b&16&&(a.C|=16);b&64||(a.f|=255);b&128&&(a.s^=192);a.G=a.G&-513|b&512|2}function M(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b)&255}function N(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?1:0))&255}
function O(a,b){a.f=a.s=a.C=a.b&b;(a.b|b)&8&&(a.C^=16);return a.f}function Mb(a,b){a.C=b^255;b=a.s=b+255&255;a.f=a.f&-256|b;return b}function Nb(a,b){a.C=b;b=a.s=b+1&255;a.f=a.f&-256|b;return b}function P(a,b){return a.s=a.f=a.C=a.b|b}function Q(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+1^256)&255}function R(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?0:1)^256)&255}function S(a,b){return a.s=a.f=a.C=a.b^b}m.F=function(a){return this.o.F(a)};m.M=function(a,b){this.o.M(a,b)};
function T(a){var b=a.F(a.m);D(a,a.m+1);return b}function U(a){var b=Xa(a.o,a.m);D(a,a.m+2);return b}function V(a){var b=Xa(a.o,a.A);a.A=a.A+2&65535;return b}function W(a,b){a.A=a.A-2&65535;Za(a.o,a.A,b)}function X(a,b,c,d){d=d||2;a.B[b]&&(void 0===c&&(a.h.$=!0,a.K("Value for "+b+" is invalid"),ub(a)),c=!a.h.T||a.h.Sa?n(c,d):"--------".substr(0,d),a.B[b].textContent!=c&&(a.B[b].textContent=c))}
m.da=function(a){this.xa&&(a||!this.h.T||this.h.Sa)&&(X(this,"A",this.b),X(this,"B",this.g),X(this,"C",this.v),X(this,"BC",Ib(this),4),X(this,"D",this.i),X(this,"E",this.w),X(this,"DE",H(this),4),X(this,"H",this.j),X(this,"L",this.l),X(this,"HL",I(this),4),X(this,"SP",this.A,4),X(this,"PC",this.m,4),a=Hb(this),X(this,"PS",a,4),X(this,"SF",a&128?1:0,1),X(this,"ZF",a&64?1:0,1),X(this,"AF",a&16?1:0,1),X(this,"PF",a&4?1:0,1),X(this,"CF",a&1?1:0,1));if(a=this.B.speed)a.textContent=this.h.T&&this.c.ba?
this.c.ba.toFixed(2)+"Mhz":"Stopped"};m.$a=function(a){this.h.Ba=!0;this.h.eb=!1;this.h.Ta=!1;this.L=this.a=a;do{if(a=this.D)this.D&8&&this.G&512?(a=199|(this.D&7)<<3,this.D&=-16,this.G&=-513,this.va[a].call(this),a=!0):a=!1,a=!a;if(a&&this.D&16){this.a=0;break}this.va[T(this)].call(this)}while(0<this.a);return this.h.Ba?this.L-this.a:void 0===this.h.Ba?0:-1};xa(function(){for(var a=y(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=x(c),d=new Bb(d);La(d,c)}});function Ob(){this.a-=4}
function Pb(){D(this,U(this));this.a-=10}function Qb(){D(this,V(this));this.a-=10}function Rb(){var a=U(this);W(this,this.m);D(this,a);this.a-=17}
var Cb=[Ob,function(){Jb(this,U(this));this.a-=10},function(){this.M(Ib(this),this.b);this.a-=7},function(){Jb(this,Ib(this)+1);this.a-=5},function(){this.g=Nb(this,this.g);this.a-=5},function(){this.g=Mb(this,this.g);this.a-=5},function(){this.g=T(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+Ib(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(Ib(this));this.a-=7},function(){Jb(this,Ib(this)-
1);this.a-=5},function(){this.v=Nb(this,this.v);this.a-=5},function(){this.v=Mb(this,this.v);this.a-=5},function(){this.v=T(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){Kb(this,U(this));this.a-=10},function(){this.M(H(this),this.b);this.a-=7},function(){Kb(this,H(this)+1);this.a-=5},function(){this.i=Nb(this,this.i);this.a-=5},function(){this.i=Mb(this,this.i);this.a-=5},function(){this.i=T(this);this.a-=7},function(){var a=this.b<<
1;this.b=a&255|this.f>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+H(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(H(this));this.a-=7},function(){Kb(this,H(this)-1);this.a-=5},function(){this.w=Nb(this,this.w);this.a-=5},function(){this.w=Mb(this,this.w);this.a-=5},function(){this.w=T(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(this.f&256|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){J(this,U(this));this.a-=10},function(){var a=
U(this);Za(this.o,a,I(this));this.a-=16},function(){J(this,I(this)+1);this.a-=5},function(){this.j=Nb(this,this.j);this.a-=5},function(){this.j=Mb(this,this.j);this.a-=5},function(){this.j=T(this);this.a-=7},function(){var a=0,b=K(this);if((this.s^this.C)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=M(this,a);this.f=b?this.f|256:this.f&-257;this.a-=4},Ob,function(){var a;J(this,a=I(this)+I(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){var a;a=U(this);a=Xa(this.o,a);J(this,
a);this.a-=16},function(){J(this,I(this)-1);this.a-=5},function(){this.l=Nb(this,this.l);this.a-=5},function(){this.l=Mb(this,this.l);this.a-=5},function(){this.l=T(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Ob,function(){this.A=U(this)&65535;this.a-=10},function(){this.M(U(this),this.b);this.a-=13},function(){this.A=this.A+1&65535;this.a-=5},function(){var a=I(this);this.M(a,Nb(this,this.F(a)));this.a-=10},function(){var a=I(this);this.M(a,Mb(this,this.F(a)));this.a-=10},function(){this.M(I(this),
T(this));this.a-=10},function(){this.f|=256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+this.A);this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(U(this));this.a-=13},function(){this.A=this.A-1&65535;this.a-=5},function(){this.b=Nb(this,this.b);this.a-=5},function(){this.b=Mb(this,this.b);this.a-=5},function(){this.b=T(this);this.a-=7},function(){this.f=K(this)?this.f&-257:this.f|256;this.a-=4},function(){this.a-=5},function(){this.g=this.v;this.a-=5},function(){this.g=this.i;this.a-=
5},function(){this.g=this.w;this.a-=5},function(){this.g=this.j;this.a-=5},function(){this.g=this.l;this.a-=5},function(){this.g=this.F(I(this));this.a-=7},function(){this.g=this.b;this.a-=5},function(){this.v=this.g;this.a-=5},function(){this.a-=5},function(){this.v=this.i;this.a-=5},function(){this.v=this.w;this.a-=5},function(){this.v=this.j;this.a-=5},function(){this.v=this.l;this.a-=5},function(){this.v=this.F(I(this));this.a-=7},function(){this.v=this.b;this.a-=5},function(){this.i=this.g;this.a-=
5},function(){this.i=this.v;this.a-=5},function(){this.a-=5},function(){this.i=this.w;this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.l;this.a-=5},function(){this.i=this.F(I(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.w=this.g;this.a-=5},function(){this.w=this.v;this.a-=5},function(){this.w=this.i;this.a-=5},function(){this.a-=5},function(){this.w=this.j;this.a-=5},function(){this.w=this.l;this.a-=5},function(){this.w=this.F(I(this));this.a-=7},function(){this.w=
this.b;this.a-=5},function(){this.j=this.g;this.a-=5},function(){this.j=this.v;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.j=this.w;this.a-=5},function(){this.a-=5},function(){this.j=this.l;this.a-=5},function(){this.j=this.F(I(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.l=this.g;this.a-=5},function(){this.l=this.v;this.a-=5},function(){this.l=this.i;this.a-=5},function(){this.l=this.w;this.a-=5},function(){this.l=this.j;this.a-=5},function(){this.a-=5},
function(){this.l=this.F(I(this));this.a-=7},function(){this.l=this.b;this.a-=5},function(){this.M(I(this),this.g);this.a-=7},function(){this.M(I(this),this.v);this.a-=7},function(){this.M(I(this),this.i);this.a-=7},function(){this.M(I(this),this.w);this.a-=7},function(){this.M(I(this),this.j);this.a-=7},function(){this.M(I(this),this.l);this.a-=7},function(){var a=this.m-1;if(this.ca.length)for(var b=0;b<this.ca.length;b++)if(this.ca[b](a))return;this.D|=16;this.a-=7;this.G&512||ub(this)},function(){this.M(I(this),
this.b);this.a-=7},function(){this.b=this.g;this.a-=5},function(){this.b=this.v;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.w;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.l;this.a-=5},function(){this.b=this.F(I(this));this.a-=7},function(){this.a-=5},function(){this.b=L(this,this.g);this.a-=4},function(){this.b=L(this,this.v);this.a-=4},function(){this.b=L(this,this.i);this.a-=4},function(){this.b=L(this,this.w);this.a-=4},function(){this.b=L(this,
this.j);this.a-=4},function(){this.b=L(this,this.l);this.a-=4},function(){this.b=L(this,this.F(I(this)));this.a-=7},function(){this.b=L(this,this.b);this.a-=4},function(){this.b=M(this,this.g);this.a-=4},function(){this.b=M(this,this.v);this.a-=4},function(){this.b=M(this,this.i);this.a-=4},function(){this.b=M(this,this.w);this.a-=4},function(){this.b=M(this,this.j);this.a-=4},function(){this.b=M(this,this.l);this.a-=4},function(){this.b=M(this,this.F(I(this)));this.a-=7},function(){this.b=M(this,
this.b);this.a-=4},function(){this.b=P(this,this.g);this.a-=4},function(){this.b=P(this,this.v);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.w);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.l);this.a-=4},function(){this.b=P(this,this.F(I(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=Q(this,this.g);this.a-=4},function(){this.b=Q(this,this.v);this.a-=4},function(){this.b=Q(this,this.i);
this.a-=4},function(){this.b=Q(this,this.w);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.l);this.a-=4},function(){this.b=Q(this,this.F(I(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){this.b=N(this,this.g);this.a-=4},function(){this.b=N(this,this.v);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.w);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.l);this.a-=
4},function(){this.b=N(this,this.F(I(this)));this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){this.b=R(this,this.g);this.a-=4},function(){this.b=R(this,this.v);this.a-=4},function(){this.b=R(this,this.i);this.a-=4},function(){this.b=R(this,this.w);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.l);this.a-=4},function(){this.b=R(this,this.F(I(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=O(this,this.g);this.a-=
4},function(){this.b=O(this,this.v);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.w);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.l);this.a-=4},function(){this.b=O(this,this.F(I(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){P(this,this.g);this.a-=4},function(){P(this,this.v);this.a-=4},function(){P(this,this.i);this.a-=4},function(){P(this,this.w);this.a-=4},function(){P(this,this.j);this.a-=
4},function(){P(this,this.l);this.a-=4},function(){P(this,this.F(I(this)));this.a-=7},function(){P(this,this.b);this.a-=4},function(){this.f&255&&(E(this,U(this)),this.a-=6);this.a-=5},function(){Jb(this,U(this));this.a-=10},function(){var a=T(this);this.f&255&&E(this,a);this.a-=10},Pb,function(){var a=T(this);this.f&255&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,Ib(this));this.a-=11},function(){this.b=L(this,S(this));this.a-=7},function(){V(this,this.m);E(this,0);this.a-=
11},function(){this.f&255||(E(this,U(this)),this.a-=6);this.a-=5},Qb,function(){var a=T(this);this.f&255||E(this,a);this.a-=10},Pb,function(){var a=T(this);this.f&255||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=M(this,S(this));this.a-=7},function(){V(this,this.m);E(this,8);this.a-=11},function(){K(this)||(E(this,U(this)),this.a-=6);this.a-=5},function(){Kb(this,U(this));this.a-=10},function(){var a=T(this);K(this)||E(this,a);this.a-=10},function(){for(var a=S(this),b=this.o,
c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var h=b.m[a],g=b.D[a]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h&&h[0])h[0](a,k,d);f+=g<<3;a+=g;e-=g}this.a-=10},function(){var a=T(this);K(this)||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,H(this));this.a-=11},function(){this.b=P(this,S(this));this.a-=7},function(){V(this,this.m);E(this,16);this.a-=11},function(){K(this)&&(E(this,U(this)),this.a-=6);this.a-=5},Qb,function(){var a=T(this);K(this)&&E(this,a);this.a-=10},function(){for(var a=
S(this),b=this.o,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.o[a],g=b.C[a]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h&&h[0]&&(l=h[0](a,c),void 0===l?l=k:l&=k);e|=l<<f;f+=g<<3;a+=g;d-=g}this.b=e&255;this.a-=10},function(){var a=T(this);K(this)&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=Q(this,S(this));this.a-=7},function(){V(this,this.m);E(this,24);this.a-=11},function(){Lb(this)||(E(this,U(this)),this.a-=6);this.a-=5},function(){J(this,U(this));this.a-=10},function(){var a=
T(this);Lb(this)||E(this,a);this.a-=10},function(){var a=U(this);V(this,I(this));J(this,a);this.a-=18},function(){var a=T(this);Lb(this)||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,I(this));this.a-=11},function(){this.b=N(this,S(this));this.a-=7},function(){V(this,this.m);E(this,32);this.a-=11},function(){Lb(this)&&(E(this,U(this)),this.a-=6);this.a-=5},function(){E(this,I(this));this.a-=5},function(){var a=T(this);Lb(this)&&E(this,a);this.a-=10},function(){var a=I(this);J(this,
H(this));Kb(this,a);this.a-=5},function(){var a=T(this);Lb(this)&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=R(this,S(this));this.a-=7},function(){V(this,this.m);E(this,40);this.a-=11},function(){this.s&128||(E(this,U(this)),this.a-=6);this.a-=5},function(){var a=U(this);Fb(this,a);this.b=a>>8;this.a-=10},function(){var a=T(this);this.s&128||E(this,a);this.a-=10},function(){this.G&=-513;this.a-=4},function(){var a=T(this);this.s&128||(V(this,this.m),E(this,a),this.a-=6);
this.a-=11},function(){V(this,Hb(this)&255|this.b<<8);this.a-=11},function(){this.b=O(this,S(this));this.a-=7},function(){V(this,this.m);E(this,48);this.a-=11},function(){this.s&128&&(E(this,U(this)),this.a-=6);this.a-=5},function(){this.A=I(this)&65535;this.a-=5},function(){var a=T(this);this.s&128&&E(this,a);this.a-=10},function(){this.G|=512;this.a-=4},function(){var a=T(this);this.s&128&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){P(this,S(this));this.a-=7},function(){V(this,
this.m);E(this,56);this.a-=11}];function X(a){u.call(this,"ChipSet",a,X);var b=a.model;b&&!Sb[b]&&q("Unrecognized ChipSet model: "+b);this.R=Sb[b]||Tb;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);C(this)}w(X);var Tb=1978.1,Sb={SI1978:Tb};m=X.prototype;m.P=function(){return!1};
m.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;this.u=a;if(this.R==Tb){var e;a=Ub;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.o[g]?q("Input port 0x"+n(g,4)+" already registered"):c.o[g]=[h,!1]}var k;e=Vb;void 0===k&&(k=0);for(var l in e)if(f=b,a=+l+k,c=e[l].bind(this),void 0!==c)for(d=+l+k;d<=a;d++)void 0!==f.m[d]?q("Output port 0x"+n(d,4)+" already registered"):f.m[d]=[c,!1]}};
m.V=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.U=function(a){return a?this.save():!0};m.reset=function(){this.f=this.g=this.c=this.b=this.l=this.j=this.i=0};m.save=function(){var a=new F(this);this.R==Tb&&G(a,0,[this.i,this.j,this.l,this.b,this.c,this.f,this.g]);return a.data()};m.restore=function(a){a=a[0];this.R==Tb&&(this.i=a[0],this.j=a[1],this.l=a[2],this.b=a[3],this.c=a[4],this.f=a[5],this.g=a[6]);return!0};m.start=function(){};m.stop=function(){};
m.gb=function(){return this.i};m.hb=function(){return this.j};m.ib=function(){return this.l};m.fb=function(){return this.b>>8-this.c&255};m.kb=function(a,b){this.c=b};m.mb=function(a,b){this.f=b};m.lb=function(a,b){this.b=b<<8|this.b>>8};m.nb=function(a,b){this.g=b};m.ob=function(){};var Ub={0:X.prototype.gb,1:X.prototype.hb,2:X.prototype.ib,3:X.prototype.fb},Vb={2:X.prototype.kb,3:X.prototype.mb,4:X.prototype.lb,5:X.prototype.nb,6:X.prototype.ob};
wa(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new X(d);La(d,c)}});function Wb(a){u.call(this,"ROM",a,Wb);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.g=a.file;this.m=ba(this.g);if(this.g){a=this.g;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=ja()+"/api/v1/dump?file="+this.g+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){Xb(c,a,b,f)})}}w(Wb);var Yb=[0,5];
Wb.prototype.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;Zb(this)};Wb.prototype.V=function(){this.i&&(this.H&&this.H.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Wb.prototype.U=function(){return!0};
function Xb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Ja(a.Oa,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.K("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=aa(b[e]);Zb(a)}}
function Zb(a){if(!Na(a))if(!a.g)C(a);else if(a.b&&a.o){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.c))+")";a.h.Y=!0;a.K(b)}else if($b(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.o,h=d.c,g=[],k=d.j>>>f.c;0<h&&k<f.b.length;)g.push(f.b[k++]),h-=f.f;f=d.o;d=d.c;h=0;for(e>>>=f.c;0<d&&e<f.b.length;){k=g[h++];if(!k)break;f.b[e++]=k;d-=f.f}}delete a.b}C(a)}}
function $b(a,b){if(Va(a.o,b,a.c,a.l?1:eb)){var c;for(c=0;c<a.b.length;c++)Ya(a.o,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Yb.length;c++)Ya(a.o,Yb[c],118);Eb(a.a,function(a){return function(b){if(0<=Yb.indexOf(b)){var c=!1,h=a.a,g=a.H;if(5==b)switch(c=!0,h.v){case 2:ac(a,String.fromCharCode(h.w));break;case 9:for(var k=H(h),l="",x=255;x--;){var r=a.a.F(k++);if(36==r)break;l+=String.fromCharCode(r)}ac(a,l);break;default:c=!1}c?Qb.call(h):g&&(a.O("\nCP/M vector 0x"+n(b,4)),E(h,b),ub(g));b=!0}else b=!1;
return b}}(a));Gb(a.a,b)}return!0}return!1}function ac(a,b){b=b.replace(/\r/g,"");a.X&&(a.X.value+=b,a.X.scrollTop=a.X.scrollHeight)}wa(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Wb(d);La(d,c)}});function bc(a){u.call(this,"RAM",a,bc);this.f=a.addr;this.c=a.size;this.b=!1}w(bc);m=bc.prototype;m.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;C(this)};m.V=function(a,b){b||this.reset();return!0};m.U=function(a){return a?this.save():!0};
m.reset=function(){!this.b&&this.c&&Va(this.o,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||q("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};wa(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new bc(d);La(d,c)}});function cc(a){u.call(this,"Keyboard",a,cc);C(this)}w(cc);
wa(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new cc(d);La(d,c)}});
function dc(a,b,c){u.call(this,"Video",a,dc);this.s=a.screenWidth;this.j=a.screenHeight;this.m=a.bufferAddr;this.b=a.bufferCols;this.c=a.bufferRows;this.D=a.bufferBits||1;this.bb=a.interruptRate;this.W=a.refreshRate||60;this.f=c;this.L=a.screenRotation;90==this.L&&(this.f.translate(0,this.j),this.f.rotate(-this.L*Math.PI/180),this.f.scale(this.j/this.s,this.s/this.j));this.N=[[0,0,0,255],[255,255,255,255]];this.C=this.f.createImageData(this.b,this.c);this.i=document.createElement("canvas");this.i.width=
this.b;this.i.height=this.c;this.R=this.i.getContext("2d")}w(dc);dc.prototype.Z=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.l=(this.b*this.D>>3)*this.c;Va(this.o,this.m,this.l,3)&&(this.G=this.l>>1,this.I=16/this.D|0,this.A=!1,void 0===this.g||this.g.length!=this.G)&&(this.g=Array(this.G));C(this)};
wa(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=z(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<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ba.aspect);f&&.3<=f&&3.33>=f&&(va("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");sa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new dc(d,0,e);La(d,c)}});
function F(a,b,c){this.id=a.id;this.key=ec(a,b,c);this.H=a.H;fc(this,a.Ya)}function ec(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
F.prototype={constructor:F,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){fc(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 fc(a,b){a[a.id]={};b&&G(a,"parms",b);a.a=!1}function gc(a){var b=!0;if(na()){var c=JSON.stringify(a[a.id]);pa(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function hc(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){q(c.message||c),b=!1}return b}function ic(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:na()&&(b=oa(a.key))?(a[a.id]=b,a.a=!0):!1}function jc(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
function kc(a,b,c){u.call(this,"Computer",a,kc);this.h.J=!1;lc(this,b);this.C=pb(this,"autoPower",a);this.f=0;this.N=a.busWidth||a.buswidth;this.b=mc;this.u=null;this.j=this.L=!1;this.R=pb(this,"url")||"";(Math.random()+.1).toString(36);this.c=nc(this);if(this.a=Ka("CPU",this.id)){this.H=Ka("Debugger",this.id);this.A=[];for(b=null;b=Ra(this,"Video",b);)this.A.push(b);this.o=new Ta({id:this.Oa+".bus",busWidth:this.N},this.a,this.H);var d,e=y(this.id);if((this.g=Ka("Panel",this.id))&&this.g.X)for(b=
0;b<e.length;b++)d=e[b],d.K=this.g.K,d.O=this.g.O,d.X=this.g.X;for(b=0;b<e.length;b++)d=e[b],d.Z&&d.Z(this,this.o,this.a,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=pb(this,"state")||(f=!0,a.state))b=this.D=a,f||(this.j=!0,this.b=mc),this.b&&(this.s=new F(this,Z),ic(this.s)?b=null:delete this.s);!b&&this.b&&(b=oc(this))&&(this.j=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.m=null,h.j=!1,h.K("Unable to load machine state from server (error "+
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.u=b,h.L=!0);C(h)})}else C(this);this.B.power||(this.C=!0);!c&&this.C&&pc(this,this.sa)}else q("Unable to find CPU component")}w(kc);var Z="1.22.0",mc=0;function lc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){q(d.message+" ("+c+")")}}a.l=b}
function pb(a,b,c){var d=b.toLowerCase(),d=Ba[b]||Ba[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 pc(a,b,c){for(var d=y(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Na(f)){Na(f,function(){pc(a,b,c)});return}}b.call(a,c)}
function qc(a,b){var c=new F(a,Z,"validate");if(ic(c)&&hc(c)){var d=jc(c,"timestamp"),e=b?jc(b,"timestamp"):"unknown";d!=e&&(a.K("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=kc.prototype;
m.sa=function(a){void 0===a&&(a=this.b||(this.u?1:mc));if(!this.f){this.f++;var b=!1,c=!1;this.I=!1;var d=this.s||new F(this,Z);if(-1==a)b=!0;else if(a>mc){if(ic(d,this.u)){this.i=new F(this,Z,"failsafe");ic(this.i)&&(rc(this,d),a=2,fc(this.i));G(this.i,"timestamp",ia());gc(this.i);var e=this.b&&!this.j;if(1==a||ka("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=hc(d)){var f=jc(d,"code"),h=jc(d,"data");f&&("ok"==f?ic(d,h):("error"==f&&"no machine state"!=
h?(this.K("Error: "+h),"unable to verify user"==h&&(pa("user",""),this.c=null)):this.O(f+": "+h),fc(d),ic(d)?(c=hc(d),e=!0):c=!1))}e&&qc(this,c?d:null)}else 2==a&&d.clear()}else qc(this);delete this.u;delete this.s}e=y(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=sc(this,h,d,b,c));b=[d,a,c];-1!=a?pc(this,this.Pa,b):this.Pa(b)}};
function sc(a,b,c,d,e){if(!b.h.J){b.h.J=!0;if(b.V){var f=null;e&&((f=jc(c,b.id))||(f=jc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.V(f,d)&&f&&(q("Unable to restore state for "+b.type),a.D&&!a.L?(c.clear(),a.b=mc,window&&window.location.reload()):a.I=!0,b.V(null),e=!1)}if(!d&&b.ya)for(a=b.ya.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Pa=function(a){var b=a[0],c=0>a[1];a=a[2];this.h.J=!0;var d=this.B.power;d&&(d.textContent="Shutdown");this.G||(this.O("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.G=!0);this.a&&(sc(this,this.a,b,c,a),tb(this.a));this.I&&(rc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
function rc(a,b){if(ka("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.R,d=a.c||"",e=b.toString(),f={app:"PC8080"};f.ver=Z;f.url=c;f.user=d;f.type="bug";f.data=e;p("http://www.pcjs.org/api/v1/report",f,!0)}}
function tc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new F(a,Z),h=new F(a,Z,"validate"),g=ia();G(h,"timestamp",g);G(f,"timestamp",g);G(f,"version","1.22.0");G(f,"url",window?window.location.href:null);G(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.U&&(c&&ub(a.a),d=a.a.U(b,c),"object"===typeof d&&G(f,a.a.id,d),c&&(a.a.h.J=!1,!1===d&&(e=null)));for(var g=y(a.id),k=0;k<g.length;k++){var l=g[k];l.h.J&&(l.U&&(d=l.U(b,c),"object"===typeof d&&G(f,l.id,d)),c&&(l.h.J=!1,!1===d&&(e=
null)))}e&&(c?(g=d=!1,b?(a.c&&uc(a,a.c,f.toString()),gc(h)&&gc(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.h.J=!1,b=a.B.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.o&&this.o.reset&&this.o.reset();for(var a=y(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.o&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=y(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=y(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.P=function(a,b,c){var d=this;switch(b){case "power":return this.B[b]=c,c.onclick=function(){d.f||(d.h.J?tc(d,!1,!0):pc(d,d.sa))},!0;case "reset":return this.B[b]=c,c.onclick=function(){if(d.h.J&&!d.f)if(d.b&&!d.m){var a=ka("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");tc(d,a,!0);!a&&d.D?window&&window.location.reload():d.sa(mc)}else d.reset(),d.a&&tb(d.a)},!0;case "save":if(da(ja(),"pcjs.org")){c.parentNode.removeChild(c);break}this.B[b]=
c;c.onclick=function(){var a=nc(d,!0);if(a){var b=!!(d.b&&!d.m||d.D),c=tc(d,b);b?uc(d,a,c):d.K("Resume disabled, machine state not saved")}};return!0}return!1};
function nc(a,b){var c=a.c;c||(c=oa("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=vc(a,c))||a.K("The user ID is invalid."))):b&&a.K("Browser local storage is not available"));return c}
function vc(a,b){a.c=null;var c=p(ja()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(pa("user",c.data),a.c=c.data)}catch(e){q(e.message+" ("+d+")")}return a.c}function oc(a){var b=null;a.c&&(b=ja()+"/api/v1/user?req=load&user="+a.c+"&state="+ec(a,Z));return b}
function uc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=ec(a,Z);d.data=c;b=p(ja()+"/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.K("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.K(c),pa("user",""),a.c=null)}}
function Ra(a,b,c){a=y(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.ba=function(a){this.a&&this.a.ba(a);this.g&&this.g.ba(a)};
function Ab(a,b){for(var c=0;c<a.A.length;c++)a:{var d=a.A[c];if(0<=b){if(b&1){d=d.a;d.D=d.D&-8|10;break a}var e=d.a;e.D=e.D&-8|9;if(e=d.A){for(var e=d.o,f=d.l,h=!0,g=d.m>>>e.c;0<f&&g<e.b.length;)e.b[g].S&&(e.b[g].S=h=!1,e.b[g].Ra=!0),f-=e.f,g++;e=h}if(e)break a}for(var e=d.m,f=e+d.l,h=0,g=d.N,k=0,l=0,x=d.b,r=0,Y=d.c,vb=0;e<f;){var A;A=d.o;var ga=e,Ea=ga&A.g,qa=(ga&A.i)>>>A.c;A=Ea!=A.g?A.b[qa].Za(Ea,ga):A.b[qa++].Ma(Ea,ga)|A.b[qa&A.u].Ma(0,ga+1)<<8;if(d.A&&A===d.g[h])k+=d.I;else{d.g[h]=A;A=A>>8|(A&
255)<<8;ga=65536;Ea=16;k<x&&(x=k);for(qa=0;qa<d.I;qa++){var la=(A&(ga>>=1))>>--Ea,Fa=d.C,ra=k++,la=g[la],ra=(ra+l*Fa.width)*la.length;Fa.data[ra]=la[0];Fa.data[ra+1]=la[1];Fa.data[ra+2]=la[2];Fa.data[ra+3]=la[3]}k>r&&(r=k);l<Y&&(Y=l);l>=vb&&(vb=l+1)}e+=2;h++;if(k>=d.b&&(k=0,l++,l>d.c))break}d.A=!0;x<d.b&&(d.R.putImageData(d.C,0,0,x,Y,r-x,vb-Y),d.f.drawImage(d.i,0,0,d.b,d.c,0,0,d.s,d.j))}}
wa(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=z(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=z(f),h=new kc(h,d,!0);La(h,f);h.C&&pc(h,h.sa)}});t.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Ka("Computer",c.id))&&c.G&&!c.h.J&&c.sa(-1)}});
t.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Ka("Computer",c.id))&&c.h.J&&tc(c,!(!c.b||c.m),!0)}});var wc=0;function xc(a,b,c,d,e,f){e("Loading "+a+"...");p(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):yc(g,a,b,c,d,e,f)})}
function yc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ja(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){g=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?zc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function zc(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(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,x=/( [a-z]+=)(['"])(.*?)\2/g;l=x.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);zc(a,b,c)}})}else c(a,null)}
function Ac(a,b,c,d){function e(a){if(void 0===g){var b=h&&B(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);k&&(--wc||ya(!0));k=!1}var h,g,k=!0;wc++;Ia[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var x=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=l:r.appendChild(document.createTextNode(l));x.appendChild(r)}c||
(c="/versions/pc8080/1.22.0/components.xsl");l=function(d,g){g?xc(c,null,null,!1,e,function(d,l){if(l)if(Ja(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--wc||ya(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--wc||ya(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?xc(b,a,d,!0,e,l):yc(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(Y){f(Y.message)}return k}window.embedPC8080=function(a,b,c,d){ya(!1);return Ac(a,b,c,d)};window.enableEvents=ya;window.sendEvent=za;
function Bc(a,b,c,d){if(!c&&b){d.push(b);a=Ia[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Cc(b,d)}):Cc(null,d)}else q("Error ("+c+") requesting "+a)}
function Cc(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=Ia[f],k={},l;for(l in g){var x=g[l],r=ca(l);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(g[l]);){var Y=d[2];Y&&(g[Y]||(x=x.replace(d[0],"")))}d=l=ba(l)}else"xsl"==r&&(e=l=ba(l));k[l]=x}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=sa("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.",q(c)):q("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Ka("Computer",a),e=Ka("Debugger",a);if(d){var f=tc(d,!0),h=d.l?JSON.stringify(d.l):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Ya:h}))return!0;p(b,null,!0,function(c,d,e){Bc(c,d,e,[a,ba(b,!0),h,f])});return!0}q("Unable to identify machine '"+a+"'");return!1};})();
function(){this.l=this.F(I(this));this.a-=7},function(){this.l=this.b;this.a-=5},function(){this.M(I(this),this.g);this.a-=7},function(){this.M(I(this),this.v);this.a-=7},function(){this.M(I(this),this.i);this.a-=7},function(){this.M(I(this),this.w);this.a-=7},function(){this.M(I(this),this.j);this.a-=7},function(){this.M(I(this),this.l);this.a-=7},function(){var a=this.m-1;if(this.X.length)for(var b=0;b<this.X.length;b++)if(this.X[b](a))return;this.D|=16;this.a-=7;this.G&512||ub(this)},function(){this.M(I(this),
this.b);this.a-=7},function(){this.b=this.g;this.a-=5},function(){this.b=this.v;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.w;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.l;this.a-=5},function(){this.b=this.F(I(this));this.a-=7},function(){this.a-=5},function(){this.b=M(this,this.g);this.a-=4},function(){this.b=M(this,this.v);this.a-=4},function(){this.b=M(this,this.i);this.a-=4},function(){this.b=M(this,this.w);this.a-=4},function(){this.b=M(this,
this.j);this.a-=4},function(){this.b=M(this,this.l);this.a-=4},function(){this.b=M(this,this.F(I(this)));this.a-=7},function(){this.b=M(this,this.b);this.a-=4},function(){this.b=N(this,this.g);this.a-=4},function(){this.b=N(this,this.v);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.w);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.l);this.a-=4},function(){this.b=N(this,this.F(I(this)));this.a-=7},function(){this.b=N(this,
this.b);this.a-=4},function(){this.b=Q(this,this.g);this.a-=4},function(){this.b=Q(this,this.v);this.a-=4},function(){this.b=Q(this,this.i);this.a-=4},function(){this.b=Q(this,this.w);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.l);this.a-=4},function(){this.b=Q(this,this.F(I(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){this.b=R(this,this.g);this.a-=4},function(){this.b=R(this,this.v);this.a-=4},function(){this.b=R(this,this.i);
this.a-=4},function(){this.b=R(this,this.w);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.l);this.a-=4},function(){this.b=R(this,this.F(I(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=O(this,this.g);this.a-=4},function(){this.b=O(this,this.v);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.w);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.l);this.a-=
4},function(){this.b=O(this,this.F(I(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){this.b=S(this,this.g);this.a-=4},function(){this.b=S(this,this.v);this.a-=4},function(){this.b=S(this,this.i);this.a-=4},function(){this.b=S(this,this.w);this.a-=4},function(){this.b=S(this,this.j);this.a-=4},function(){this.b=S(this,this.l);this.a-=4},function(){this.b=S(this,this.F(I(this)));this.a-=7},function(){this.b=S(this,this.b);this.a-=4},function(){this.b=P(this,this.g);this.a-=
4},function(){this.b=P(this,this.v);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.w);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.l);this.a-=4},function(){this.b=P(this,this.F(I(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){Q(this,this.g);this.a-=4},function(){Q(this,this.v);this.a-=4},function(){Q(this,this.i);this.a-=4},function(){Q(this,this.w);this.a-=4},function(){Q(this,this.j);this.a-=
4},function(){Q(this,this.l);this.a-=4},function(){Q(this,this.F(I(this)));this.a-=7},function(){Q(this,this.b);this.a-=4},function(){this.f&255&&(D(this,V(this)),this.a-=6);this.a-=5},function(){Jb(this,V(this));this.a-=10},function(){var a=U(this);this.f&255&&D(this,a);this.a-=10},Pb,function(){var a=U(this);this.f&255&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,Ib(this));this.a-=11},function(){this.b=M(this,T(this));this.a-=7},function(){W(this,this.m);D(this,0);this.a-=
11},function(){this.f&255||(D(this,V(this)),this.a-=6);this.a-=5},Qb,function(){var a=U(this);this.f&255||D(this,a);this.a-=10},Pb,function(){var a=U(this);this.f&255||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=N(this,T(this));this.a-=7},function(){W(this,this.m);D(this,8);this.a-=11},function(){K(this)||(D(this,V(this)),this.a-=6);this.a-=5},function(){Kb(this,V(this));this.a-=10},function(){var a=U(this);K(this)||D(this,a);this.a-=10},function(){for(var a=T(this),b=this.o,
c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var h=b.m[a],g=b.D[a]||1,l=1==g?255:2==g?65535:-1,l=(c>>>=f)&l;if(void 0!==h&&h[0])h[0](a,l,d);f+=g<<3;a+=g;e-=g}this.a-=10},function(){var a=U(this);K(this)||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,H(this));this.a-=11},function(){this.b=Q(this,T(this));this.a-=7},function(){W(this,this.m);D(this,16);this.a-=11},function(){K(this)&&(D(this,V(this)),this.a-=6);this.a-=5},Qb,function(){var a=U(this);K(this)&&D(this,a);this.a-=10},function(){for(var a=
T(this),b=this.o,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.o[a],g=b.C[a]||1,l=1==g?255:2==g?65535:-1,k=l;void 0!==h&&h[0]&&(k=h[0](a,c),void 0===k?k=l:k&=l);e|=k<<f;f+=g<<3;a+=g;d-=g}this.b=e&255;this.a-=10},function(){var a=U(this);K(this)&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=R(this,T(this));this.a-=7},function(){W(this,this.m);D(this,24);this.a-=11},function(){Lb(this)||(D(this,V(this)),this.a-=6);this.a-=5},function(){J(this,V(this));this.a-=10},function(){var a=
U(this);Lb(this)||D(this,a);this.a-=10},function(){var a=V(this);W(this,I(this));J(this,a);this.a-=18},function(){var a=U(this);Lb(this)||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,I(this));this.a-=11},function(){this.b=O(this,T(this));this.a-=7},function(){W(this,this.m);D(this,32);this.a-=11},function(){Lb(this)&&(D(this,V(this)),this.a-=6);this.a-=5},function(){D(this,I(this));this.a-=5},function(){var a=U(this);Lb(this)&&D(this,a);this.a-=10},function(){var a=I(this);J(this,
H(this));Kb(this,a);this.a-=5},function(){var a=U(this);Lb(this)&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=S(this,T(this));this.a-=7},function(){W(this,this.m);D(this,40);this.a-=11},function(){this.s&128||(D(this,V(this)),this.a-=6);this.a-=5},function(){var a=V(this);Fb(this,a);this.b=a>>8;this.a-=10},function(){var a=U(this);this.s&128||D(this,a);this.a-=10},function(){this.G&=-513;this.a-=4},function(){var a=U(this);this.s&128||(W(this,this.m),D(this,a),this.a-=6);
this.a-=11},function(){W(this,Hb(this)&255|this.b<<8);this.a-=11},function(){this.b=P(this,T(this));this.a-=7},function(){W(this,this.m);D(this,48);this.a-=11},function(){this.s&128&&(D(this,V(this)),this.a-=6);this.a-=5},function(){this.A=I(this)&65535;this.a-=5},function(){var a=U(this);this.s&128&&D(this,a);this.a-=10},function(){this.G|=512;this.a-=4},function(){var a=U(this);this.s&128&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Rb,function(){Q(this,T(this));this.a-=7},function(){W(this,
this.m);D(this,56);this.a-=11}];function Y(a){t.call(this,"ChipSet",a,Y);var b=a.model;b&&!Sb[b]&&r("Unrecognized ChipSet model: "+b);this.O=Sb[b]||Tb;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);B(this)}v(Y);var Tb=1978.1,Sb={SI1978:Tb};m=Y.prototype;m.R=function(){return!1};
m.aa=function(a,b,c,d){this.o=b;this.a=c;this.H=d;this.u=a;if(this.O==Tb){var e;a=Ub;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.o[g]?r("Input port 0x"+n(g,4)+" already registered"):c.o[g]=[h,!1]}var l;e=Vb;void 0===l&&(l=0);for(var k in e)if(f=b,a=+k+l,c=e[k].bind(this),void 0!==c)for(d=+k+l;d<=a;d++)void 0!==f.m[d]?r("Output port 0x"+n(d,4)+" already registered"):f.m[d]=[c,!1]}};
m.V=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.U=function(a){return a?this.save():!0};m.reset=function(){this.f=this.g=this.c=this.b=this.l=this.j=this.i=0};m.save=function(){var a=new E(this);this.O==Tb&&G(a,0,[this.i,this.j,this.l,this.b,this.c,this.f,this.g]);return a.data()};m.restore=function(a){a=a[0];this.O==Tb&&(this.i=a[0],this.j=a[1],this.l=a[2],this.b=a[3],this.c=a[4],this.f=a[5],this.g=a[6]);return!0};m.start=function(){};m.stop=function(){};
m.gb=function(){return this.i};m.hb=function(){return this.j};m.ib=function(){return this.l};m.fb=function(){return this.b>>8-this.c&255};m.kb=function(a,b){this.c=b};m.mb=function(a,b){this.f=b};m.lb=function(a,b){this.b=b<<8|this.b>>8};m.nb=function(a,b){this.g=b};m.ob=function(){};var Ub={0:Y.prototype.gb,1:Y.prototype.hb,2:Y.prototype.ib,3:Y.prototype.fb},Vb={2:Y.prototype.kb,3:Y.prototype.mb,4:Y.prototype.lb,5:Y.prototype.nb,6:Y.prototype.ob};
xa(function(){for(var a=y(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=x(c),d=new Y(d);La(d,c)}});function Wb(a){t.call(this,"ROM",a,Wb);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.g=a.file;this.m=ca(this.g);if(this.g){a=this.g;var b=da(this.m);"json"!=b&&"hex"!=b&&(a=ja()+"/api/v1/dump?file="+this.g+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){Xb(c,a,b,f)})}}v(Wb);var Yb=[0,5];
Wb.prototype.aa=function(a,b,c,d){this.o=b;this.a=c;this.H=d;Zb(this)};Wb.prototype.V=function(){this.i&&(this.H&&this.H.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Wb.prototype.U=function(){return!0};
function Xb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Ja(a.Oa,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){r("Empty ROM: "+b);return}if(1==a.b.length){r(a.b[0]);return}}catch(g){a.K("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=ba(b[e]);Zb(a)}}
function Zb(a){if(!Na(a))if(!a.g)B(a);else if(a.b&&a.o){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.c))+")";a.h.$=!0;a.K(b)}else if($b(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.o,h=d.c,g=[],l=d.j>>>f.c;0<h&&l<f.b.length;)g.push(f.b[l++]),h-=f.f;f=d.o;d=d.c;h=0;for(e>>>=f.c;0<d&&e<f.b.length;){l=g[h++];if(!l)break;f.b[e++]=l;d-=f.f}}delete a.b}B(a)}}
function $b(a,b){if(Va(a.o,b,a.c,a.l?1:eb)){var c;for(c=0;c<a.b.length;c++)Ya(a.o,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Yb.length;c++)Ya(a.o,Yb[c],118);Eb(a.a,function(a){return function(b){if(0<=Yb.indexOf(b)){var c=!1,h=a.a,g=a.H;if(5==b)switch(c=!0,h.v){case 2:ac(a,String.fromCharCode(h.w));break;case 9:for(var l=H(h),k="",A=255;A--;){var q=a.a.F(l++);if(36==q)break;k+=String.fromCharCode(q)}ac(a,k);break;default:c=!1}c?Qb.call(h):g&&(a.P("\nCP/M vector 0x"+n(b,4)),D(h,b),ub(g));b=!0}else b=!1;
return b}}(a));Gb(a.a,b)}return!0}return!1}function ac(a,b){b=b.replace(/\r/g,"");a.Z&&(a.Z.value+=b,a.Z.scrollTop=a.Z.scrollHeight)}xa(function(){for(var a=y(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=x(c),d=new Wb(d);La(d,c)}});function dc(a){t.call(this,"RAM",a,dc);this.f=a.addr;this.c=a.size;this.b=!1}v(dc);m=dc.prototype;m.aa=function(a,b,c,d){this.o=b;this.a=c;this.H=d;B(this)};m.V=function(a,b){b||this.reset();return!0};m.U=function(a){return a?this.save():!0};
m.reset=function(){!this.b&&this.c&&Va(this.o,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||r("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};xa(function(){for(var a=y(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=x(c),d=new dc(d);La(d,c)}});function ec(a){t.call(this,"Keyboard",a,ec);B(this)}v(ec);
xa(function(){for(var a=y(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=x(c),d=new ec(d);La(d,c)}});
function fc(a,b,c){t.call(this,"Video",a,fc);this.s=a.screenWidth;this.j=a.screenHeight;this.m=a.bufferAddr;this.c=a.bufferCols;this.g=a.bufferRows;this.D=a.bufferBits||1;this.Y=a.bufferLeft||0;this.G=a.bufferRotate;this.bb=a.interruptRate;this.W=a.refreshRate||60;this.f=c;this.O=a.screenRotate;90==this.O&&(this.f.translate(0,this.j),this.f.rotate(-this.O*Math.PI/180),this.f.scale(this.j/this.s,this.s/this.j));this.X=[[0,0,0,255],[255,255,255,255]];a=this.c;b=this.g;this.G&&(a=this.g,b=this.c);this.C=
this.f.createImageData(a,b);this.b=document.createElement("canvas");this.b.width=a;this.b.height=b;this.I=this.b.getContext("2d")}v(fc);fc.prototype.aa=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.l=(this.c*this.D>>3)*this.g;Va(this.o,this.m,this.l,3)&&(this.L=this.l>>1,this.N=16/this.D|0,this.A=!1,void 0===this.i||this.i.length!=this.L)&&(this.i=Array(this.L));B(this)};
xa(function(){for(var a=y(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=x(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<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ca.aspect);f&&.3<=f&&3.33>=f&&(wa("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");ra("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new fc(d,0,e);La(d,c)}});
function E(a,b,c){this.id=a.id;this.key=gc(a,b,c);this.H=a.H;hc(this,a.Ya)}function gc(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}
E.prototype={constructor:E,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){hc(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 hc(a,b){a[a.id]={};b&&G(a,"parms",b);a.a=!1}function ic(a){var b=!0;if(oa()){var c=JSON.stringify(a[a.id]);qa(a.key,c)||(r("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function jc(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){r(c.message||c),b=!1}return b}function kc(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:oa()&&(b=pa(a.key))?(a[a.id]=b,a.a=!0):!1}function lc(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
function mc(a,b,c){t.call(this,"Computer",a,mc);this.h.J=!1;nc(this,b);this.C=pb(this,"autoPower",a);this.f=0;this.N=a.busWidth||a.buswidth;this.b=oc;this.u=null;this.j=this.L=!1;this.O=pb(this,"url")||"";(Math.random()+.1).toString(36);this.c=pc(this);if(this.a=Ka("CPU",this.id)){this.H=Ka("Debugger",this.id);this.A=[];for(b=null;b=Ra(this,"Video",b);)this.A.push(b);this.o=new Ta({id:this.Oa+".bus",busWidth:this.N},this.a,this.H);var d,e=w(this.id);if((this.g=Ka("Panel",this.id))&&this.g.Z)for(b=
0;b<e.length;b++)d=e[b],d.K=this.g.K,d.P=this.g.P,d.Z=this.g.Z;for(b=0;b<e.length;b++)d=e[b],d.aa&&d.aa(this,this.o,this.a,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=pb(this,"state")||(f=!0,a.state))b=this.D=a,f||(this.j=!0,this.b=oc),this.b&&(this.s=new E(this,Z),kc(this.s)?b=null:delete this.s);!b&&this.b&&(b=qc(this))&&(this.j=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.m=null,h.j=!1,h.K("Unable to load machine state from server (error "+
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.u=b,h.L=!0);B(h)})}else B(this);this.B.power||(this.C=!0);!c&&this.C&&rc(this,this.sa)}else r("Unable to find CPU component")}v(mc);var Z="1.22.0",oc=0;function nc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){r(d.message+" ("+c+")")}}a.l=b}
function pb(a,b,c){var d=b.toLowerCase(),d=Ca[b]||Ca[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 rc(a,b,c){for(var d=w(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Na(f)){Na(f,function(){rc(a,b,c)});return}}b.call(a,c)}
function sc(a,b){var c=new E(a,Z,"validate");if(kc(c)&&jc(c)){var d=lc(c,"timestamp"),e=b?lc(b,"timestamp"):"unknown";d!=e&&(a.K("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=mc.prototype;
m.sa=function(a){void 0===a&&(a=this.b||(this.u?1:oc));if(!this.f){this.f++;var b=!1,c=!1;this.I=!1;var d=this.s||new E(this,Z);if(-1==a)b=!0;else if(a>oc){if(kc(d,this.u)){this.i=new E(this,Z,"failsafe");kc(this.i)&&(tc(this,d),a=2,hc(this.i));G(this.i,"timestamp",ia());ic(this.i);var e=this.b&&!this.j;if(1==a||ka("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=jc(d)){var f=lc(d,"code"),h=lc(d,"data");f&&("ok"==f?kc(d,h):("error"==f&&"no machine state"!=
h?(this.K("Error: "+h),"unable to verify user"==h&&(qa("user",""),this.c=null)):this.P(f+": "+h),hc(d),kc(d)?(c=jc(d),e=!0):c=!1))}e&&sc(this,c?d:null)}else 2==a&&d.clear()}else sc(this);delete this.u;delete this.s}e=w(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=uc(this,h,d,b,c));b=[d,a,c];-1!=a?rc(this,this.Pa,b):this.Pa(b)}};
function uc(a,b,c,d,e){if(!b.h.J){b.h.J=!0;if(b.V){var f=null;e&&((f=lc(c,b.id))||(f=lc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.V(f,d)&&f&&(r("Unable to restore state for "+b.type),a.D&&!a.L?(c.clear(),a.b=oc,window&&window.location.reload()):a.I=!0,b.V(null),e=!1)}if(!d&&b.ya)for(a=b.ya.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Pa=function(a){var b=a[0],c=0>a[1];a=a[2];this.h.J=!0;var d=this.B.power;d&&(d.textContent="Shutdown");this.G||(this.P("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.G=!0);this.a&&(uc(this,this.a,b,c,a),tb(this.a));this.I&&(tc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
function tc(a,b){if(ka("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.O,d=a.c||"",e=b.toString(),f={app:"PC8080"};f.ver=Z;f.url=c;f.user=d;f.type="bug";f.data=e;p("http://www.pcjs.org/api/v1/report",f,!0)}}
function vc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new E(a,Z),h=new E(a,Z,"validate"),g=ia();G(h,"timestamp",g);G(f,"timestamp",g);G(f,"version","1.22.0");G(f,"url",window?window.location.href:null);G(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.U&&(c&&ub(a.a),d=a.a.U(b,c),"object"===typeof d&&G(f,a.a.id,d),c&&(a.a.h.J=!1,!1===d&&(e=null)));for(var g=w(a.id),l=0;l<g.length;l++){var k=g[l];k.h.J&&(k.U&&(d=k.U(b,c),"object"===typeof d&&G(f,k.id,d)),c&&(k.h.J=!1,!1===d&&(e=
null)))}e&&(c?(g=d=!1,b?(a.c&&wc(a,a.c,f.toString()),ic(h)&&ic(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.h.J=!1,b=a.B.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.o&&this.o.reset&&this.o.reset();for(var a=w(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.o&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=w(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=w(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.R=function(a,b,c){var d=this;switch(b){case "power":return this.B[b]=c,c.onclick=function(){d.f||(d.h.J?vc(d,!1,!0):rc(d,d.sa))},!0;case "reset":return this.B[b]=c,c.onclick=function(){if(d.h.J&&!d.f)if(d.b&&!d.m){var a=ka("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");vc(d,a,!0);!a&&d.D?window&&window.location.reload():d.sa(oc)}else d.reset(),d.a&&tb(d.a)},!0;case "save":if(ea(ja(),"pcjs.org")){c.parentNode.removeChild(c);break}this.B[b]=
c;c.onclick=function(){var a=pc(d,!0);if(a){var b=!!(d.b&&!d.m||d.D),c=vc(d,b);b?wc(d,a,c):d.K("Resume disabled, machine state not saved")}};return!0}return!1};
function pc(a,b){var c=a.c;c||(c=pa("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=xc(a,c))||a.K("The user ID is invalid."))):b&&a.K("Browser local storage is not available"));return c}
function xc(a,b){a.c=null;var c=p(ja()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(qa("user",c.data),a.c=c.data)}catch(e){r(e.message+" ("+d+")")}return a.c}function qc(a){var b=null;a.c&&(b=ja()+"/api/v1/user?req=load&user="+a.c+"&state="+gc(a,Z));return b}
function wc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=gc(a,Z);d.data=c;b=p(ja()+"/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.K("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.K(c),qa("user",""),a.c=null)}}
function Ra(a,b,c){a=w(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.da=function(a){this.a&&this.a.da(a);this.g&&this.g.da(a)};
function Ab(a,b){for(var c=0;c<a.A.length;c++)a:{var d=a.A[c];if(0<=b){if(b&1){d=d.a;d.D=d.D&-8|10;break a}var e=d.a;e.D=e.D&-8|9;if(e=d.A){for(var e=d.o,f=d.l,h=!0,g=d.m>>>e.c;0<f&&g<e.b.length;)e.b[g].S&&(e.b[g].S=h=!1,e.b[g].Ra=!0),f-=e.f,g++;e=h}if(e)break a}var g=d.m,l=g+d.l,k=0,A=d.X,q=0,F=0,e=d.c,vb=0,f=d.g,bc=h=0,Fa=d.D,Dc=(1<<Fa)-1;d.Y&&(Fa=-Fa,bc=16+Fa);for(;g<l;){var z;z=d.o;var aa=g,sa=aa&z.g,L=(aa&z.i)>>>z.c;z=sa!=z.g?z.b[L].Za(sa,aa):z.b[L++].Ma(sa,aa)|z.b[L&z.u].Ma(0,aa+1)<<8;if(d.A&&
z===d.i[k])q+=d.N;else{d.i[k]=z;(aa=bc)&&(z=z>>8|(z&255)<<8);q<e&&(e=q);for(sa=0;sa<d.N;sa++){var ma=z>>aa&Dc,L=d.C,cc=q++,ma=A[ma],na=void 0,na=d.G?(L.height-cc-1)*L.width+F:cc+F*L.width,na=na*ma.length;L.data[na]=ma[0];L.data[na+1]=ma[1];L.data[na+2]=ma[2];L.data[na+3]=ma[3];aa+=Fa}q>vb&&(vb=q);F<f&&(f=F);F>=h&&(h=F+1)}g+=2;k++;if(q>=d.c&&(q=0,F++,F>d.g))break}d.A=!0;e<d.c&&(g=vb-e,h-=f,d.G?d.I.putImageData(d.C,0,0):d.I.putImageData(d.C,0,0,e,f,g,h),d.f.drawImage(d.b,0,0,d.b.width,d.b.height,0,
0,d.s,d.j))}}xa(function(){for(var a=y(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=x(c),c=y(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=x(f),h=new mc(h,d,!0);La(h,f);h.C&&rc(h,h.sa)}});ta.show.push(function(){for(var a=y(document,"pc8080","computer"),b=0;b<a.length;b++){var c=x(a[b]);(c=Ka("Computer",c.id))&&c.G&&!c.h.J&&c.sa(-1)}});
ta.exit.push(function(){for(var a=y(document,"pc8080","computer"),b=0;b<a.length;b++){var c=x(a[b]);(c=Ka("Computer",c.id))&&c.h.J&&vc(c,!(!c.b||c.m),!0)}});var yc=0;function zc(a,b,c,d,e,f){e("Loading "+a+"...");p(a,null,!0,function(h,g,l){l?(g||(g="unable to load "+a+" ("+l+")"),f(g,null)):Ac(g,a,b,c,d,e,f)})}
function Ac(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ja(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Bc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Bc(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=g[0],k,A=/( [a-z]+=)(['"])(.*?)\2/g;k=A.exec(f);)l=0>l.indexOf(k[1])?l.replace(">",k[0]+">"):l.replace(new RegExp(k[1]+"(['\"])(.*?)\\1"),k[0]);g[0]!=l&&(h=h.replace(g[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);Bc(a,b,c)}})}else c(a,null)}
function Cc(a,b,c,d){function e(a){if(void 0===g){var b=h&&y(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function f(a){e("Error: "+a);l&&(--yc||za(!0));l=!1}var h,g,l=!0;yc++;Ia[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var A=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=k:q.appendChild(document.createTextNode(k));A.appendChild(q)}c||
(c="/versions/pc8080/1.22.0/components.xsl");k=function(d,g){g?zc(c,null,null,!1,e,function(d,k){if(k)if(Ja(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--yc||za(!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),--yc||za(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?zc(b,a,d,!0,e,k):Ac(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(F){f(F.message)}return l}window.embedPC8080=function(a,b,c,d){za(!1);return Cc(a,b,c,d)};window.enableEvents=za;window.sendEvent=Aa;
function Ec(a,b,c,d){if(!c&&b){d.push(b);a=Ia[d[0]];b=null;for(var e in a)if(ea(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Fc(b,d)}):Fc(null,d)}else r("Error ("+c+") requesting "+a)}
function Fc(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=Ia[f],l={},k;for(k in g){var A=g[k],q=da(k);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[k]);){var F=d[2];F&&(g[F]||(A=A.replace(d[0],"")))}d=k=ca(k)}else"xsl"==q&&(e=k=ca(k));l[k]=A}a&&(l[k="css"]=a);b[2]&&(l[k="parms"]=b[2]);b[3]&&(l[k="state"]=b[3]);d&&e?(k=JSON.stringify(l),h+=".js",c=c[1]+"var resources="+k+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),k=h,g=null,l="data:application/javascript,",l=ra("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),k&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=l,g.download=k,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+k+"."):(window.open(l),c="Check your browser for a new window/tab containing the requested data"+(k?" ("+k+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",r(c)):r("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Ka("Computer",a),e=Ka("Debugger",a);if(d){var f=vc(d,!0),h=d.l?JSON.stringify(d.l):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Ya:h}))return!0;p(b,null,!0,function(c,d,e){Ec(c,d,e,[a,ca(b,!0),h,f])});return!0}r("Unable to identify machine '"+a+"'");return!1};})();