More VT100 video support (untested)

This commit is contained in:
Jeff Parsons 2016-07-29 18:03:00 -07:00 committed by Jeff Parsons
commit 21fc2e0639
9 changed files with 734 additions and 444 deletions

View file

@ -49,13 +49,17 @@ enabling support for the VT100's line data format; eg:
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="800" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
The VT100 screen displays 800 dots per horizontal scan, and a total of 240 horizontal scans, and by default,
it uses a 10x10 character cell, for a total of 80 columns and 24 rows of characters.
Ordinarily, the VT100 screen displays 800 dots per horizontal scan, and a total of 240 horizontal scans, and by default,
it uses a 10x10 character cell, for a total of 80 columns and 24 rows of characters. However, in 132-column mode, it
uses a 9x10 character cell instead, and assuming no AVO expansion card is present, there is only enough screen RAM available
for 14 rows of characters; this implies a total of 1188 dots displayed per horizontal scan, and a total of only 140 horizontal
scans. This means we will have to dynamically reallocate the buffer display context whenever the horizontal dimensions change
(ie, from 800 to 1188, or from 1188 back to 800).
For optimum scaling, I would normally define the virtual screen size using multiples of the VT100's "dot" dimensions;
eg, 1600x960 (a horizontal multiplier of 2 and a vertical multiplier of 4). However, that would give us a virtual screen
aspect ratio of 1.67, which is less than the (apparent) 2.0 aspect ratio of a physical screen, so I've changed the test
machine's screen dimensions to 1600x800.
aspect ratio of 1.67, which is less than the (apparent) 2.0 aspect ratio of a physical VT100 screen, so I've changed the
test machine's screen dimensions to 1600x800.
Regarding physical dimensions, a VT100 screen measures 12 inches diagonally, and in 80-column mode, characters measure
2.0mm x 3.35mm (in 132-column mode, they measure 1.3mm x 3.35mm). This means that the text area of the screen is roughly

View file

@ -6,7 +6,8 @@
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="rom" addr="0x0000" size="0x2000" file="/devices/pc8080/rom/vt100/VT100.json"/>
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="800" smoothing="false" fontROM="/devices/pc8080/rom/vt100/23-018E2.json"
<video id="video" screenWidth="1600" screenHeight="800" smoothing="false"
fontROM="/devices/pc8080/rom/vt100/23-018E2.json" fontColor="white" cellWidth="10" cellHeight="10"
bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" pos="left" padding="8px">
<menu>
<title>VT100 Screen</title>

View file

@ -1061,6 +1061,18 @@
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellWidth">
<xsl:choose>
<xsl:when test="@cellWidth"><xsl:value-of select="@cellWidth"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellHeight">
<xsl:choose>
<xsl:when test="@cellHeight"><xsl:value-of select="@cellHeight"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charCols">
<xsl:choose>
<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
@ -1083,6 +1095,12 @@
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fontColor">
<xsl:choose>
<xsl:when test="@fontColor"><xsl:value-of select="@fontColor"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="touchScreen">
<xsl:choose>
<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
@ -1125,7 +1143,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"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,smoothing:<xsl:value-of select="$smoothing"/>,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"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,cellWidth:<xsl:value-of select="$cellWidth"/>,cellHeight:<xsl:value-of select="$cellHeight"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',fontColor:'<xsl:value-of select="$fontColor"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,smoothing:<xsl:value-of select="$smoothing"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -63,6 +63,13 @@ if (NODE) {
* interruptRate: normally the same as (or some multiple of) refreshRate (eg, 120)
* refreshRate: how many times updateScreen() should be performed per second (eg, 60)
*
* In addition, if a text-only display is being emulated, define the following properties:
*
* fontROM: URL of font ROM
* fontColor: default is white
* cellWidth: number (eg, 10 for VT100)
* cellHeight: number (eg, 10 for VT100)
*
* We record all the above values now, but we defer creation of the frame buffer until our initBus()
* handler is called. At that point, we will also compute the extent of the frame buffer, determine the
* appropriate "cell" size (ie, the number of pixels that updateScreen() will fetch and process at once),
@ -77,7 +84,7 @@ if (NODE) {
* bufferRotate is an alternative to screenRotate; you may set one or the other (but not both) to -90 to
* enable different approaches to counter-clockwise 90-degree image rotation. screenRotate uses canvas
* transformation methods (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.
* of the off-screen buffer and then relies on setPixel() to "rotate" the data into the proper location.
*
* @constructor
* @extends Component
@ -104,10 +111,16 @@ function Video(parmsVideo, canvas, context, textarea, container)
var sFormat = parmsVideo['bufferFormat'];
this.nFormat = sFormat && Video.FORMATS[sFormat.toLowerCase()] || Video.FORMAT.UNKNOWN;
this.cxBuffer = parmsVideo['bufferCols'];
this.cyBuffer = parmsVideo['bufferRows'];
this.nColsBuffer = parmsVideo['bufferCols'];
this.nRowsBuffer = parmsVideo['bufferRows'];
this.cxCellDefault = this.cxCell = parmsVideo['cellWidth'] || 1;
this.cyCellDefault = this.cyCell = parmsVideo['cellHeight'] || 1;
this.abFontData = null;
this.nBitsPerPixel = parmsVideo['bufferBits'] || 1;
this.iBitFirstPixel = parmsVideo['bufferLeft'] || 0;
this.rotateBuffer = parmsVideo['bufferRotate'];
if (this.rotateBuffer) {
this.rotateBuffer = this.rotateBuffer % 360;
@ -126,6 +139,10 @@ function Video(parmsVideo, canvas, context, textarea, container)
this.textareaScreen = textarea;
this.inputScreen = textarea || canvas || null;
this.xScreenOffset = this.yScreenOffset = 0;
this.cxScreenCell = (this.cxScreen / this.nColsBuffer)|0;
this.cyScreenCell = (this.cyScreen / this.nRowsBuffer)|0;
/*
* Support for disabling (or, less commonly, enabling) image smoothing, which all browsers
* seem to support now (well, OK, I still have to test the latest MS Edge browser), despite
@ -155,6 +172,10 @@ function Video(parmsVideo, canvas, context, textarea, container)
if (this.rotateScreen) {
this.rotateScreen = this.rotateScreen % 360;
if (this.rotateScreen > 0) this.rotateScreen -= 360;
/*
* TODO: Consider also disallowing any rotateScreen value if bufferRotate was already set; setting
* both is most likely a mistake, but perhaps it's also a legitimate way of enabling 180-degree rotation?
*/
if (this.rotateScreen != -90) {
this.notice("unsupported screen rotation: " + this.rotateScreen);
this.rotateScreen = 0;
@ -165,23 +186,7 @@ function Video(parmsVideo, canvas, context, textarea, container)
}
}
this.initColors();
/*
* Allocate off-screen buffers.
*/
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 = cxBuffer;
this.canvasBuffer.height = cyBuffer;
this.contextBuffer = this.canvasBuffer.getContext("2d");
this.initBuffers();
/*
* Here's the gross code to handle full-screen support across all supported browsers. The lack of standards
@ -248,6 +253,61 @@ Video.FORMATS = {
"vt100": Video.FORMAT.VT100
};
Video.VT100 = {
FONT: {
NORML: 0,
DWIDE: 1,
DHIGH: 2
},
LINETERM: 0x7F,
LINEATTR: {
MASK: 0xE0,
SCROLL: 0x80,
ADDRMASK: 0x1F,
FONTMASK: 0x60,
NORML: 0x60,
DWIDE: 0x40,
DHIGH_TOP: 0x20,
DHIGH_BOT: 0x00
}
};
/**
* initBuffers()
*/
Video.prototype.initBuffers = function()
{
/*
* Allocate off-screen buffers now
*/
this.cxBuffer = this.nColsBuffer * this.cxCell;
this.cyBuffer = this.nRowsBuffer * this.cyCell;
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 = cxBuffer;
this.canvasBuffer.height = cyBuffer;
this.contextBuffer = this.canvasBuffer.getContext("2d");
this.initColors();
if (this.cxCell > 1) {
this.aFonts = {};
this.abLineBuffer = new Array(132);
this.aFonts[Video.VT100.FONT.NORML] = this.createFontVariation(this.cxCell, this.cyCell);
this.aFonts[Video.VT100.FONT.DWIDE] = this.createFontVariation(this.cxCell*2, this.cyCell);
this.aFonts[Video.VT100.FONT.DHIGH] = this.createFontVariation(this.cxCell*2, this.cyCell*2);
}
};
/**
* initBus(cmp, bus, cpu, dbg)
*
@ -336,74 +396,10 @@ Video.prototype.doneLoad = function(sURL, sFontData, nErrorCode)
}
/*
* Translate the character data into separate "fonts", each of which will be a separate canvas object, with all
* 256 characters arranged in a 16x16 grid.
* Minimal font data validation, just to make sure we're not getting garbage from the server...
*/
if (ab.length == 2048) {
/*
* The assumption here is that we're dealing with the original (IBM) MDA/CGA font data, which apparently
* was identical on both MDA and CGA cards (even though the former had no use for the latter, and vice versa).
*
* First, let's take a look at the MDA portion of the data. Here are the first few rows of MDA font data,
* at the 0K and 2K boundaries:
*
* 00000000 00 00 00 00 00 00 00 00 00 00 7e 81 a5 81 81 bd |..........~.....|
* 00000010 00 00 7e ff db ff ff c3 00 00 00 36 7f 7f 7f 7f |..~........6....|
* ...
* 00000800 00 00 00 00 00 00 00 00 99 81 7e 00 00 00 00 00 |..........~.....|
* 00000810 e7 ff 7e 00 00 00 00 00 3e 1c 08 00 00 00 00 00 |..~.....>.......|
*
* 8 bytes of data from a row in each of the 2K chunks are combined to form a 8-bit wide character with
* a maximum height of 16 bits. Assembling the bits for character 0x01 (a happy face), we observe the following:
*
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x0008
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x0009
* 0 1 1 1 1 1 1 0 <== 7e from offset 0x000A
* 1 0 0 0 0 0 0 1 <== 81 from offset 0x000B
* 1 0 1 0 0 1 0 1 <== a5 from offset 0x000C
* 1 0 0 0 0 0 0 1 <== 81 from offset 0x000D
* 1 0 0 0 0 0 0 1 <== 81 from offset 0x000E
* 1 0 1 1 1 1 0 1 <== bd from offset 0x000F
* 1 0 0 1 1 0 0 1 <== 99 from offset 0x0808
* 1 0 0 0 0 0 0 1 <== 81 from offset 0x0809
* 0 1 1 1 1 1 1 0 <== 7e from offset 0x080A
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x080B
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x080C
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x080D
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x080E
* 0 0 0 0 0 0 0 0 <== 00 from offset 0x080F
*
* In the second 2K chunk, we observe that the last two bytes of every font cell definition are zero;
* this confirms our understanding that MDA font cell size is 8x14.
*
* Finally, there's the issue of screen cell size, which is actually 9x14 on the MDA. We compensate for that
* by building a 9x14 font, even though there's only 8x14 bits of data. As http://www.seasip.info/VintagePC/mda.html
* explains:
*
* "For characters C0h-DFh, the ninth pixel column is a duplicate of the eighth; for others, it's blank."
*
* This last point is confirmed by "The IBM Personal Computer From The Inside Out", p.295:
*
* "Another unique feature of the monochrome adapter is a set of line-drawing and area-fill characters
* that give continuous lines and filled areas. This is unusual for a display with a 9x14 character box
* because the character generator provides a row only eight dots wide. On most displays, a blank 9th
* dot is then inserted between characters. On the monochrome display, there is circuitry that duplicates
* the 8th dot into the 9th dot position for characters whose ASCII codes are 0xB0 [sic] through 0xDF."
*
* However, the above text is mistaken about the start of the range. While there ARE line-drawing characters
* in the range 0xB0-0xBF, none of them extend all the way to the right edge; IBM carefully segregated them.
* And in fact, characters 0xB0-0xB2 contain hash patterns that you would NOT want extended into the 9th column.
*
* The CGA font is part of the same ROM. In fact, there are TWO CGA fonts in the ROM: a thin 5x7 "single dot"
* font located at offset 0x1000, and a thick 7x7 "double dot" font at offset 0x1800. The latter is the default
* font, unless overridden by a jumper setting on the CGA card, so it is our default CGA font as well (although
* someday we may provide a virtual jumper setting that allows you to select the thinner font).
*
* The first offset we must pass to setFontData() is the offset of the CGA font; we choose the thicker "double dot"
* CGA font at 0x1800 (which was the PC's default font as well), instead of the thinner "single dot" font at 0x1000.
* The second offset is for the MDA font.
*/
// this.setFontData(ab);
this.abFontdata = ab;
}
else {
this.notice("Unrecognized font data length (" + ab.length + ")");
@ -424,6 +420,87 @@ Video.prototype.doneLoad = function(sURL, sFontData, nErrorCode)
if (this.contextScreen || this.dbg) this.setReady();
};
/**
* createFontVariation(cxCell, cyCell, rgbOn, fUnderline, fReverse)
*
* This creates a 16x16 character grid for the requested font variation. Variations include:
*
* 1) no variation (cell size is this.cxCell x this.cyCell)
* 2) double-wide characters (cell size is this.cxCell*2 x this.cyCell)
* 3) double-high characters (cell size is this.cxCell x this.cyCell*2)
* 4) double-both characters (cell size is this.cxCell*2 x this.cyCell*2)
* 5) all of the above with underlining enabled
* 6) all of the above with reverse video enabled
*
* @this {Video}
* @param {number} cxCell is the target width of each character in the grid
* @param {number} cyCell is the target height of each character in the grid
* @param {Array} [rgbOn] contains the RGB values for the font (default is white)
* @param {boolean} [fUnderline]
* @param {boolean} [fReverse]
* @return {Object}
*/
Video.prototype.createFontVariation = function(cxCell, cyCell, rgbOn, fUnderline, fReverse)
{
/*
* On a VT100, cxCell,cyCell is initially 10,10, but may change to 9,10 for 132-column mode.
* However, regardless of mode, cxCellDefault,cyCellDefault retain the initial values of 10,10.
*/
this.assert(cxCell == this.cxCell || cxCell == this.cxCell*2);
this.assert(cyCell == this.cyCell || cyCell == this.cyCell*2);
/*
* Create a font canvas that is both 16 times the target character width and the target character height,
* ensuring that it will accommodate 16x16 characters (for a maximum of 256). Note that the VT100 font ROM
* defines only 128 characters, so that canvas will contain only 16x8 entries.
*/
var nFontBytesPerChar = this.cxCellDefault <= 8? 8 : 16;
var nFontByteOffset = nFontBytesPerChar > 8? 15 : 0;
var nChars = this.abFontData.length / nFontBytesPerChar;
var font = {cxCell: cxCell, cyCell: cyCell};
font.canvas = document.createElement("canvas");
font.canvas.width = cxCell * 16;
font.canvas.height = cyCell * (nChars / 16);
font.context = font.canvas.getContext("2d");
var imageChar = font.context.createImageData(cxCell, cyCell);
for (var iChar = 0; iChar < nChars; iChar++) {
for (var y = 0, yDst = y; y < this.cyCell; y++) {
var offFontData = iChar * nFontBytesPerChar + ((nFontByteOffset + y) & (nFontBytesPerChar - 1));
var b = this.abFontData[offFontData];
for (var nRows = 0; nRows < (cyCell / this.cyCell); nRows++) {
for (var x = 0, xDst = x; x < this.cxCell; x++) {
var bit = b & (0x80 >> x);
for (var nCols = 0; nCols < (cxCell / this.cxCell); nCols++) {
this.setPixel(imageChar, xDst, yDst, bit? 1 : 0);
xDst++;
}
}
yDst++;
}
}
/*
* (iChar >> 4) performs the integer equivalent of Math.floor(iChar / 16), and (iChar & 0xf) is the equivalent of (iChar % 16).
*/
font.context.putImageData(imageChar, (iChar & 0xf) * cxCell, (iChar >> 4) * cyCell);
}
/*
* Enable this code if you want to see what the generated font looks like....
*
if (MAXDEBUG) {
var iSrcColor = (iColor == 15? 0 : iColor + 1);
this.contextScreen.fillStyle = aCSSColors[iSrcColor];
this.contextScreen.fillRect(iColor*(font.cxCell<<2), 0, font.canvas.width>>2, font.cyCell<<4);
this.contextScreen.drawImage(font.canvas, 0, iColor*(font.cyCell<<4), font.canvas.width>>2, font.cyCell<<4, iColor*(font.cxCell<<2), 0, font.canvas.width>>2, font.cyCell<<4);
}
*/
return font;
};
/**
* setBinding(sHTMLType, sBinding, control, sValue)
*
@ -637,6 +714,47 @@ Video.prototype.setPixel = function(imageBuffer, x, y, bPixel)
imageBuffer.data[index+3] = rgb[3];
};
/**
* updateChar(font, col, row, data, context)
*
* Updates a particular character cell (row,col) in the associated window.
*
* @this {Video}
* @param {Object} font
* @param {number} col
* @param {number} row
* @param {number} data
* @param {Object} [context]
*/
Video.prototype.updateChar = function(font, col, row, data, context)
{
/*
* The caller MUST promise this.nFont is defined, and that the font in this.aFonts[this.nFont] has been loaded.
*/
var xDst, yDst;
var bChar = data & 0x7f;
if (context) {
xDst = col * font.cxCell;
yDst = row * font.cyCell;
} else {
xDst = col * this.cxScreenCell + this.xScreenOffset;
yDst = row * this.cyScreenCell + this.yScreenOffset;
}
/*
* (bChar & 0xf) is the equivalent of (bChar % 16), and (bChar >> 4) is the equivalent of Math.floor(bChar / 16)
*/
var xSrc = (bChar & 0xf) * font.cxCell;
var ySrc = (bChar >> 4) * font.cyCell;
if (context) {
context.drawImage(font.canvas, xSrc, ySrc, font.cxCell, font.cyCell, xDst, yDst, font.cxCell, font.cyCell);
} else {
this.contextScreen.drawImage(font.canvas, xSrc, ySrc, font.cxCell, font.cyCell, xDst, yDst, this.cxScreenCell, this.cyScreenCell);
}
};
/**
* updateScreen(n)
*
@ -657,19 +775,22 @@ Video.prototype.updateScreen = function(n)
var fUpdate = true;
if (n >= 0) {
if (!(n & 1)) {
/*
* On even updates, call cpu.requestINTR(1), and also update our copy of the screen.
*/
this.cpu.requestINTR(1);
} else {
/*
* On odd updates, call cpu.requestINTR(2), but do NOT update our copy of the screen, because
* the machine has presumably only updated the top half of the frame buffer at this point; it will
* update the bottom half of the frame buffer after acknowledging this interrupt.
*/
this.cpu.requestINTR(2);
fUpdate = false;
if (this.interruptRate) {
if (!(n & 1)) {
/*
* On even updates, call cpu.requestINTR(1), and also update our copy of the screen.
*/
this.cpu.requestINTR(1);
} else {
/*
* On odd updates, call cpu.requestINTR(2), but do NOT update our copy of the screen, because
* the machine has presumably only updated the top half of the frame buffer at this point; it will
* update the bottom half of the frame buffer after acknowledging this interrupt.
*/
this.cpu.requestINTR(2);
fUpdate = false;
}
}
/*
@ -688,8 +809,93 @@ Video.prototype.updateScreen = function(n)
this.nCyclesPrev = nCycles;
this.printMessage("updateScreen(" + n + "): clean=" + fClean + ", update=" + fUpdate + ", cycles=" + nCycles + ", delta=" + nCyclesDelta);
}
if (!fUpdate) return;
if (this.cxCell > 1) {
this.updateScreenText();
} else {
this.updateScreenGraphics();
}
};
/**
* updateScreenText()
*
* @this {Video}
*/
Video.prototype.updateScreenText = function()
{
switch(this.nFormat) {
case Video.FORMAT.VT100:
this.updateScreenVT100();
break;
}
};
/**
* updateScreenVT100()
*
* @this {Video}
*/
Video.prototype.updateScreenVT100 = function()
{
var addrNext = this.addrBuffer, attrNext = -1;
for (var iRow = 0; iRow < this.nRowsBuffer+1; iRow++) {
/*
* Fill the line buffer
*/
var cbCols = 0;
var addr = addrNext;
var attr = attrNext;
while (cbCols < this.abLineBuffer.length) {
var data = this.bus.getByteDirect(addr++);
if ((data & Video.VT100.LINETERM) == Video.VT100.LINETERM) {
var b = this.bus.getByteDirect(addr++);
attrNext = b & Video.VT100.LINEATTR.FONTMASK;
addrNext = this.addrBuffer | ((b & Video.VT100.LINEATTR.ADDRMASK) << 8) | this.bus.getByteDirect(addr);
break;
}
this.abLineBuffer[cbCols++] = data;
}
/*
* Display the line buffer
*/
if (attr >= 0) {
var idFont, cyClip = 0;
switch(attr) {
case Video.VT100.LINEATTR.NORML:
idFont = Video.VT100.FONT.NORML;
break;
case Video.VT100.LINEATTR.DWIDE:
idFont = Video.VT100.FONT.DWIDE;
break;
case Video.VT100.LINEATTR.DHIGH_TOP:
idFont = Video.VT100.FONT.DHIGH;
break;
case Video.VT100.LINEATTR.DHIGH_BOT:
idFont = Video.VT100.FONT.DHIGH;
cyClip = this.cyCell;
break;
}
var font = this.aFonts[idFont];
if (font) {
for (var iCol = 0; iCol < cbCols; iCol++) {
this.updateChar(font, iCol, iRow-1, this.abLineBuffer[iCol], this.contextBuffer);
}
}
}
}
};
/**
* updateScreenGraphics()
*
* @this {Video}
*/
Video.prototype.updateScreenGraphics = function()
{
var addr = this.addrBuffer;
var addrLimit = addr + this.sizeBuffer;

View file

@ -1068,6 +1068,18 @@
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellWidth">
<xsl:choose>
<xsl:when test="@cellWidth"><xsl:value-of select="@cellWidth"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellHeight">
<xsl:choose>
<xsl:when test="@cellHeight"><xsl:value-of select="@cellHeight"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charCols">
<xsl:choose>
<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
@ -1090,6 +1102,12 @@
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fontColor">
<xsl:choose>
<xsl:when test="@fontColor"><xsl:value-of select="@fontColor"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="touchScreen">
<xsl:choose>
<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
@ -1132,7 +1150,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"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,smoothing:<xsl:value-of select="$smoothing"/>,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"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,cellWidth:<xsl:value-of select="$cellWidth"/>,cellHeight:<xsl:value-of select="$cellHeight"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',fontColor:'<xsl:value-of select="$fontColor"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,smoothing:<xsl:value-of select="$smoothing"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -1061,6 +1061,18 @@
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellWidth">
<xsl:choose>
<xsl:when test="@cellWidth"><xsl:value-of select="@cellWidth"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellHeight">
<xsl:choose>
<xsl:when test="@cellHeight"><xsl:value-of select="@cellHeight"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charCols">
<xsl:choose>
<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
@ -1083,6 +1095,12 @@
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fontColor">
<xsl:choose>
<xsl:when test="@fontColor"><xsl:value-of select="@fontColor"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="touchScreen">
<xsl:choose>
<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
@ -1125,7 +1143,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"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,smoothing:<xsl:value-of select="$smoothing"/>,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"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,cellWidth:<xsl:value-of select="$cellWidth"/>,cellHeight:<xsl:value-of select="$cellHeight"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',fontColor:'<xsl:value-of select="$fontColor"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,smoothing:<xsl:value-of select="$smoothing"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

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

View file

@ -1,138 +1,141 @@
(function(){var m;function ca(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(){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 da(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 ea(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function fa(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ga={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ha(a){return a.replace(/[&<>"']/g,function(a){return ga[a]})}var ia=Date.now||function(){return+new Date};function ka(){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 fa(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ga={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ha(a){return a.replace(/[&<>"']/g,function(a){return ga[a]})}var ia=Date.now||function(){return+new Date};function ja(){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 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 la(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function r(a){window&&window.alert(a)}function ma(a){var b=!1;window&&(b=window.confirm(a));return b}var na=null;function oa(){if(null==na){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}na=a}return na}function pa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return 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 ka(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function u(a){window&&window.alert(a)}function la(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 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 sa={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){sa.init.push(a)}
function xa(a){if(ua)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 ya(a){!ua&&a?(ua=!0,ta&&za("init")):ua=a}function za(a){sa[a]&&xa(sa[a])}va("onload",function(){ta=!0;xa(sa.init)});va("onpageshow",function(){xa(sa.show)});va(ra("Opera")||ra("iOS")?"onunload":"onbeforeunload",function(){xa(sa.exit)});
function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Pa=b.comment;this.eb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.pa=this.id.substr(0,b),this.Ra=this.id.substr(b+1)):this.Ra=this.id;this[a]=c;this.h={ja:!1,ra:!1,Ja:!1,N:!1,ea:!1};this.Da=null;this.h.ea=!1;this.B={};this.J=null;v.push(this)}var Aa=void 0,Ba={};
function xa(a){if(ua)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u("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){sa[a]&&xa(sa[a])}va("onload",function(){ta=!0;xa(sa.init)});va("onpageshow",function(){xa(sa.show)});va(ra("Opera")||ra("iOS")?"onunload":"onbeforeunload",function(){xa(sa.exit)});
function w(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Va=b.comment;this.ob=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Na=this.id.substr(0,b),this.$a=this.id.substr(b+1)):this.$a=this.id;this[a]=c;this.h={la:!1,ta:!1,Pa:!1,N:!1,ga:!1};this.Fa=null;this.h.ga=!1;this.B={};this.J=null;x.push(this)}var Aa=void 0,Ba={};
if(window){Aa||(Aa=window.location.search.substr(1));for(var Ca,Da=/\+/g,Ea=/([^&=]+)=?([^&]*)/g;Ca=Ea.exec(Aa);)Ba[decodeURIComponent(Ca[1].replace(Da," "))]=decodeURIComponent(Ca[2].replace(Da," "))}function Fa(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=t);a.prototype=Fa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var v=[],Ga={};function Ha(a,b,c){Ga[a]&&b&&(Ga[a][b]=c)}function x(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 Ia(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<v.length;d++)if(c)c==v[d]&&(c=null);else if(!(a!=v[d].type||b&&v[d].id.indexOf(b)))return v[d]}return null}function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){r(c.message+" ("+a+")")}return b}
function Ja(a,b){for(var c=z(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.O(g.type,g.binding,h,g.value),k=l.length}}}}
function z(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},O: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.ba=this.B[b]=c,c.value="",this.R=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.I=function(a,b,c){this.R(a,"notice",c)}),!0;default:return!1}},log:function(){},R:function(){},status:function(a){this.R(this.Ra+": "+a)},I:function(a,b){b||r(a)},Y:function(){return this.h.N=!0},X:function(a,b){b&&(this.h.N=!1);return!0}};function Ma(a,b){if(a.h.Ja)return a.h.ra&&(a.h.ra=!1),a.h.Ja=!1;if(a.h.ea)return a.R(a.toString()+" error"),!1;a.h.ra=b;return a.h.ra}function B(a){if(!a.h.ea&&(a.h.ja=!0,a.h.ja)){var b=a.Da;a.Da=null;b&&b()}}
function Na(a,b){b&&(a.h.ja?b():a.Da=b);return a.h.ja}
function y(a,b){b||(b=w);a.prototype=Fa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var x=[],Ga={};function Ha(a,b,c){Ga[a]&&b&&(Ga[a][b]=c)}function z(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 Ia(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 A(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}
function Ja(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 l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=A(h))&&g.binding&&a.O(g.type,g.binding,h,g.value),k=l.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}
w.prototype={constructor:w,parent:null,toString:function(){return this.name?this.name:this.id||this.type},O: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.ea=this.B[b]=c,c.value="",this.U=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.I=function(a,b,c){this.U(a,"notice",c)}),!0;default:return!1}},log:function(){},U:function(){},status:function(a){this.U(this.$a+": "+a)},I:function(a,b){b||u(a)},aa:function(){return this.h.N=!0},$:function(a,b){b&&(this.h.N=!1);return!0}};function Ka(a,b){if(a.h.Pa)return a.h.ta&&(a.h.ta=!1),a.h.Pa=!1;if(a.h.ga)return a.U(a.toString()+" error"),!1;a.h.ta=b;return a.h.ta}function C(a){if(!a.h.ga&&(a.h.la=!0,a.h.la)){var b=a.Fa;a.Fa=null;b&&b()}}
function Na(a,b){b&&(a.h.la?b():a.Fa=b);return a.h.la}
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){t.call(this,"Panel",a,Qa)}w(Qa);m=Qa.prototype;m.O=function(a,b,c,d){return this.u&&this.u.O(a,b,c,d)||this.a&&this.a.O(a,b,c,d)||this.H&&this.H.O(a,b,c,d)?!0:this.parent.O.call(this,a,b,c,d)};m.ca=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.J=d;this.H=Ra(a,"Keyboard")};m.Y=function(a,b){b||Sa();return!0};m.X=function(){return!0};m.ha=function(){};
function Sa(){for(var a=!1,b=z(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<v.length;h++)if(v[h].id===f){f=v[h];break a}f=null}f||(a=!0,f=new Qa(e));Ja(f,d);a&&B(f)}}wa(Sa);
function Ta(a,b,c){t.call(this,"Bus",a,Ta);this.a=b;this.J=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.o=this.s/this.f|0;this.u=this.o-1;this.l=[];this.m=[];this.G=[];this.C=[];a=new C;Ua(a,this.J);this.b=Array(this.o);for(b=0;b<this.o;b++)this.b[b]=a;B(this)}w(Ta);Ta.prototype.reset=function(){};Ta.prototype.Y=function(a,b){b||this.reset();return!0};
function Va(a,b,c,d){for(var e=b,f=c,h=e>>>a.c;0<f&&h<a.b.length;){var g=a.b[h],l=h*a.f,k=a.f-(e-l);k>f&&(k=f);if(g&&g.size){if(g.type==d){if(e+f<=g.qa)return g.Ia+=g.qa-e,g.qa=e,!0;if(e>=g.qa+g.Ia){k=g.size-(e-l);k>f&&(k=f);g.Ia=e-g.qa+k;e=l+a.f;f-=k;h++;continue}}return Wa(1,e,f)}e=new C(e,k,a.f,d);Ua(e,a.J,g);a.b[h++]=e;e=l+a.f;f-=k}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+Xa[d]+" at "+("0x"+n(b,4))),!0):Wa(2,b,c)}
Ta.prototype.F=function(a){return this.b[(a&this.i)>>>this.c].za(a&this.g,a)};function Ya(a,b){var c=b&a.g,d=(b&a.i)>>>a.c;return c!=a.g?a.b[d].yb(c,b):a.b[d++].za(c,b)|a.b[d&a.u].za(0,b+1)<<8}Ta.prototype.P=function(a,b){this.b[(a&this.i)>>>this.c].Aa(a&this.g,b&255,a)};function Za(a,b,c){a.b[(b&a.i)>>>a.c].hb(b&a.g,c&255,b)}function ab(a,b,c){var d=b&a.g,e=(b&a.i)>>>a.c;d!=a.g?a.b[e].zb(d,c&65535,b):(a.b[e++].Aa(d,c&255,b),a.b[e&a.u].Aa(0,c>>8&255,b+1))}
function Wa(a,b,c){r("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var bb;if(Oa){var cb=new ArrayBuffer(2);(new DataView(cb)).setUint16(0,256,!0);bb=256===(new Uint16Array(cb))[0]}else bb=!1;var db=bb;
function C(a,b,c,d){this.id=eb+=2;this.a=null;this.qa=a;this.Ia=b;this.size=c||0;this.type=d||fb;this.g=d==gb;Ua(this);this.T=this.Xa=!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.o=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),hb(this,db?ib:jb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;hb(this,kb)}else hb(this)}var fb=0,gb=2,Xa=["NONE","RAM","ROM","VID","H/W"],eb=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.T=!0}return!1},l:function(){return 255},m:function(){},B:function(a,b){return this.za(a++,b++)|this.za(a,b)<<8},u:function(a,b,c){this.Aa(a++,b&255,c++);this.Aa(a,b>>8,c)},C:function(a){return this.a[a>>
2]>>>((a&3)<<3)&255},L: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},S:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.T=!0},pa: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.T=!0},A:function(a,b){return this.Na(a,b)},H:function(a,b){return this.fb(a,b)},Z:function(a,b,c){this.g||this.hb(a,b,c)},W:function(a,b,
c){this.g||this.aa(a,b,c)},s:function(a){return this.b[a]},G:function(a){return this.b[a]},D:function(a){return this.f.getUint16(a,!0)},K:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.o[a>>1]},M:function(a,b){this.b[a]=b;this.T=!0},$:function(a,b){this.b[a]=b;this.T=!0},V:function(a,b){this.f.setUint16(a,b,!0);this.T=!0},da:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.o[a>>1]=b;this.T=!0}};function Ua(a,b,c){a.J=b;a.i=a.j=0;c&&((a.i=c.i)&&lb(a,mb,!1),(a.j=c.j)&&nb(a,mb,!1))}
function nb(a,b,c){c&&a.j||(a.Aa=!a.g&&b[2]||a.m,a.zb=!a.g&&b[3]||a.u);if(c||void 0===c)a.hb=b[2]||a.m,a.aa=b[3]||a.u}function lb(a,b,c){c&&a.i||(a.za=b[0]||a.l,a.yb=b[1]||a.B);if(c||void 0===c)a.Na=b[0]||a.l,a.fb=b[1]||a.B}function hb(a,b){b||(b=ob);lb(a,b,void 0);nb(a,b,void 0)}var ob=[],kb=[C.prototype.C,C.prototype.L,C.prototype.S,C.prototype.pa],mb=[C.prototype.A,C.prototype.H,C.prototype.Z,C.prototype.W];
if(Oa)var jb=[C.prototype.s,C.prototype.D,C.prototype.M,C.prototype.V],ib=[C.prototype.G,C.prototype.K,C.prototype.$,C.prototype.da];
function pb(a,b){t.call(this,"CPU",a,pb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.oa=c;this.c.Ha=0;this.c.na=d;this.c.Ka=Math.round(this.c.oa/1E4)/100;this.c.ka=this.c.Ka*this.c.na;this.h.U=!1;this.h.Za=!1;this.h.Wa=a.autoStart;this.h.Ya=!1;this.h.Ba=!1;this.c.Fa=this.c.ma=0;this.c.Ga=a.csStart;this.c.sa=a.csInterval;this.c.ta=a.csStop;this.da=this.Oa.bind(this);B(this)}w(pb);var qb=["power","reset"];m=pb.prototype;
m.ca=function(a,b,c,d){this.u=a;this.o=b;this.J=d;for(b=0;b<qb.length;b++)(c=this.B[qb[b]])&&this.u.O(null,qb[b],c);this.$=(b=Ra(a,"Video"))&&Math.max(b.$,b.ib)||60;this.G=Ra(a,"ChipSet");a=rb(a,"autoStart");null!=a&&(this.h.Wa="true"==a?!0:"false"==a?!1:!!a);B(this)};m.reset=function(){this.c.Ha=0};m.save=function(){return null};m.restore=function(){return!1};
m.Y=function(a,b){if(!b){if(a&&this.restore){sb(this);if(!this.restore(a))return!1;tb(this)}else this.reset();this.R("No debugger detected")}ub(this);return!0};m.X=function(a){return a?this.save():!0};function vb(a){(a.h.Wa||void 0===a.B.run)&&a.Oa(!0)}m.$a=function(){return 0};function tb(a){void 0===a.c.Ga&&(a.c.Ga=0);void 0===a.c.sa&&(a.c.sa=-1);void 0===a.c.ta&&(a.c.ta=-1);a.h.Ba=0<=a.c.Ga&&0<a.c.sa;a.h.Ba&&(a.c.Fa=0,a.c.ma=a.c.Ga-a.M)}
m.O=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.N)a=!0;else{var b=null,c,g=x(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.h.ja);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.h.N);c++);c==g.length&&(b=a);r("The "+b.type+" component ("+b.id+") is not "+(b.h.ja?"powered yet":"ready yet"+(b.Da?" (waiting for notification)":""))+".");a=!1}a&&(d.h.U?wb(d,!0):d.Oa(!0))};a=!0;break;
case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(){xb(d,d.c.na<<1,!0)},c.textContent=this.c.ka.toFixed(2)+"Mhz",a=!0}return a};function yb(a,b,c){a.M+=b;c&&(a.L=a.a=0)}
function zb(a,b){var c=30;c<a.$&&(c=a.$);2>c&&(c=2);var d=1;b&&1<a.c.na&&a.c.fa&&(d=a.c.fa/a.c.Ka);a.c.ab=Math.round(1E3/30);a.c.sb=Math.floor(a.c.oa/c*d);a.c.La=Math.floor(a.c.oa/30*d);a.c.cb=Math.floor(a.c.oa/a.$*d);a.c.bb=Math.floor(a.c.oa/2*d);b||(a.c.wa=a.c.La,a.c.va=a.c.cb,a.c.ua=a.c.bb);a.c.Ma=0}function Ab(a){return a.M+a.K+a.L-a.a}function sb(a){a.c.fa=0;a.M=a.K=a.L=a.a=0;tb(a);xb(a,1)}
function xb(a,b,c){if(void 0!==b){.8>a.c.fa/a.c.ka&&(b=1);a.c.na=b;b=a.c.Ka*a.c.na;if(a.c.ka!=b){a.c.ka=b;b=a.c.ka.toFixed(2)+"Mhz";var d=a.B.setSpeed;d&&(d.textContent=b);a.R("target speed: "+b)}c&&a.u&&Bb(a.u)}yb(a,a.K);a.K=0;a.c.la=ia();a.c.ga=0;zb(a)}
m.Oa=function(a){if(Ma(this,!0)){if(!this.h.U){xb(this);this.u&&this.u.start(this.c.la,Ab(this));this.h.U=!0;this.h.Za=!0;this.G&&this.G.start();var b=this.B.run;b&&(b.textContent="Halt");this.u&&(this.u.ha(!0),a&&Bb(this.u,!0))}this.c.Ma>=this.c.oa&&zb(this,!0);this.c.xa=0;this.c.Ea=ia();this.c.ga&&(a=this.c.Ea-this.c.ga,a>this.c.ab&&(this.c.la+=a,this.c.la>this.c.Ea&&(this.c.la=this.c.Ea)));try{do{this.gb(this.h.Ba?1:this.c.sb);var c=this.L-this.a;this.K+=c;this.c.xa+=c;yb(this,0,!0);a=c;this.h.Ba&&
(b=!1,this.c.Fa=this.c.Fa+this.$a()|0,this.c.ma-=a,0>=this.c.ma&&(this.c.ma+=this.c.sa,b=!0),0<=this.c.ta&&this.c.ta<=Ab(this)&&(this.c.sa=this.c.ta=-1,tb(this),wb(this),b=!0),b&&this.R(Ab(this)+" cycles: checksum="+n(this.c.Fa)));this.c.va-=c;0>=this.c.va&&(this.c.va+=this.c.cb,this.u&&Cb(this.u,this.c.Ha++),this.c.Ha>this.$&&(this.c.Ha=0));this.c.ua-=c;0>=this.c.ua&&(this.c.ua+=this.c.bb,this.u&&this.u.ha());this.c.wa-=c;if(0>=this.c.wa){this.c.wa+=this.c.La;break}}while(this.h.U)}catch(e){wb(this);
ub(this);this.u&&this.u.stop(ia(),Ab(this));Ma(this,!1);c=e.stack||e.message;this.h.ea=!0;this.I(c);return}c=setTimeout;a=this.da;this.c.ga=ia();b=this.c.ab;this.c.xa&&(b=Math.round(b*this.c.xa/this.c.La));var b=b-(this.c.ga-this.c.Ea),d=this.c.ga-this.c.la;d&&(this.c.fa=Math.round(this.K/(10*d))/100,864E5<=d&&(this.M=0,xb(this)));if(0>b||this.c.fa<this.c.ka)b=0;this.c.Ma+=this.c.xa;this.c.ga+=b;c(a,b)}else ub(this),this.u&&this.u.stop(ia(),Ab(this))};m.gb=function(){return 0};
function wb(a,b){a.h.ra&&(a.h.Ja=!0);a.L-=a.a;a.a=0;yb(a,a.K);a.K=0;if(a.h.U){a.h.U=!1;a.G&&a.G.stop();var c=a.B.run;c&&(c.textContent="Run")}a.h.Ca=b}function ub(a){a.u&&(Cb(a.u,-1),a.u.ha(void 0))}function Db(a){this.Z=+a.model||8080;pb.call(this,a,1E6);this.V=Eb;sb(this);this.h.Ca=this.h.nb=!1;this.aa=0;this.S=[];this.W=0;Fb(this)}w(Db,pb);function Gb(a,b){a.S.push(b)}m=Db.prototype;m.reset=function(){this.h.U&&wb(this);Fb(this);sb(this);this.h.ea=!1;this.parent.reset.call(this)};
function Fb(a){a.b=0;a.f=0;a.v=0;a.g=0;a.w=0;a.i=0;a.j=0;a.A=0;D(a,a.W);Hb(a,0);a.D=0}function Ib(a,b){a.W=b;D(a,b)}m.$a=function(){var a=this.b+this.f+this.v+this.g+this.w+this.i+this.j|0;return a=a+this.A+this.m+Jb(this)|0};
m.save=function(){var a=new E(this);F(a,0,[this.b,this.f,this.v,this.g,this.w,this.i,this.j,this.A,this.m,Jb(this)]);F(a,1,[this.D,this.M,this.c.na]);for(var b=this.o,c=0,d=[],e=0;e<b.o;e++){var f=b.b[e];if(f.T||f.Xa){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var u=f[g],q=g+1;q<f.length&&f[q]===u;)q++;k[l++]=q-g;k[l++]=u;g=q}if(k.length<f.length){f=k;break a}}d[h]=f}}F(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.b=b[0];this.f=b[1];this.v=b[2];this.g=b[3];this.w=b[4];this.i=b[5];this.j=b[6];this.A=b[7]&65535;D(this,b[8]);Hb(this,b[9]);b=a[1];this.D=b[0];this.M=b[1];xb(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.O=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.B[b]=c;this.aa++;d=!0;break;default:d=this.parent.O.call(this,a,b,c)}return d};function Kb(a){return a.f<<8|a.v}function Lb(a,b){a.f=b>>8&255;a.v=b&255}function G(a){return a.g<<8|a.w}function Mb(a,b){a.g=b>>8&255;a.w=b&255}function H(a){return a.i<<8|a.j}
function J(a,b){a.i=b>>8&255;a.j=b&255}function D(a,b){a.m=b&65535}function K(a){return a.l&256?1:0}function L(a,b){a.l=a.l&255|b}function Nb(a){return Pa[a.s&255]?4:0}function Jb(a){return a.H&-214|(a.s&128?128:0)|(a.l&255?0:64)|((a.s^a.C)&16?16:0)|Nb(a)|K(a)}function Hb(a,b){a.l=a.s=a.C=0;b&1&&(a.l|=256);b&4||(a.s|=1);b&16&&(a.C|=16);b&64||(a.l|=255);b&128&&(a.s^=192);a.H=a.H&-726|b&512|2}function N(a,b){a.C=a.b^b;return a.s=(a.l=a.b+b)&255}
function O(a,b){a.C=a.b^b;return a.s=(a.l=a.b+b+(a.l&256?1:0))&255}function P(a,b){a.l=a.s=a.C=a.b&b;(a.b|b)&8&&(a.C^=16);return a.l}function Ob(a,b){a.C=b^255;b=a.s=b+255&255;a.l=a.l&-256|b;return b}function Pb(a,b){a.C=b;b=a.s=b+1&255;a.l=a.l&-256|b;return b}function Q(a,b){return a.s=a.l=a.C=a.b|b}function R(a,b){b^=255;a.C=a.b^b;return a.s=(a.l=a.b+b+1^256)&255}function S(a,b){b^=255;a.C=a.b^b;return a.s=(a.l=a.b+b+(a.l&256?0:1)^256)&255}function T(a,b){return a.s=a.l=a.C=a.b^b}m.F=function(a){return this.o.F(a)};
m.P=function(a,b){this.o.P(a,b)};function U(a){var b=a.F(a.m);D(a,a.m+1);return b}function V(a){var b=Ya(a.o,a.m);D(a,a.m+2);return b}function W(a){var b=Ya(a.o,a.A);a.A=a.A+2&65535;return b}function X(a,b){a.A=a.A-2&65535;ab(a.o,a.A,b)}function Y(a,b,c,d){d=d||2;a.B[b]&&(void 0===c&&(a.h.ea=!0,a.I("Value for "+b+" is invalid"),wb(a)),c=!a.h.U||a.h.Ya?n(c,d):"--------".substr(0,d),a.B[b].textContent!=c&&(a.B[b].textContent=c))}
m.ha=function(a){this.aa&&(a||!this.h.U||this.h.Ya)&&(Y(this,"A",this.b),Y(this,"B",this.f),Y(this,"C",this.v),Y(this,"BC",Kb(this),4),Y(this,"D",this.g),Y(this,"E",this.w),Y(this,"DE",G(this),4),Y(this,"H",this.i),Y(this,"L",this.j),Y(this,"HL",H(this),4),Y(this,"SP",this.A,4),Y(this,"PC",this.m,4),a=Jb(this),Y(this,"PS",a,4),Y(this,"IF",a&512?1:0,1),Y(this,"SF",a&128?1:0,1),Y(this,"ZF",a&64?1:0,1),Y(this,"AF",a&16?1:0,1),Y(this,"PF",a&4?1:0,1),Y(this,"CF",a&1?1:0,1));if(a=this.B.speed)a.textContent=
this.h.U&&this.c.fa?this.c.fa.toFixed(2)+"Mhz":"Stopped"};m.gb=function(a){this.h.Ca=!0;this.h.nb=!1;this.h.Za=!1;this.L=this.a=a;do{if(a=this.D)this.D&8&&this.H&512?(a=199|(this.D&7)<<3,this.D&=-16,this.H&=-513,this.V[a].call(this),a=!0):a=!1,a=!a;if(a&&this.D&16){this.a=0;break}this.V[U(this)].call(this)}while(0<this.a);return this.h.Ca?this.L-this.a:void 0===this.h.Ca?0:-1};wa(function(){for(var a=z(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Db(d);Ja(d,c)}});
function Qb(){this.a-=4}function Rb(){D(this,V(this));this.a-=10}function Sb(){D(this,W(this));this.a-=10}function Tb(){var a=V(this);X(this,this.m);D(this,a);this.a-=17}
var Eb=[Qb,function(){Lb(this,V(this));this.a-=10},function(){this.P(Kb(this),this.b);this.a-=7},function(){Lb(this,Kb(this)+1);this.a-=5},function(){this.f=Pb(this,this.f);this.a-=5},function(){this.f=Ob(this,this.f);this.a-=5},function(){this.f=U(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;L(this,a&256);this.a-=4},Qb,function(){var a;J(this,a=H(this)+Kb(this));L(this,a>>8&256);this.a-=10},function(){this.b=this.F(Kb(this));this.a-=7},function(){Lb(this,Kb(this)-1);this.a-=5},function(){this.v=
Pb(this,this.v);this.a-=5},function(){this.v=Ob(this,this.v);this.a-=5},function(){this.v=U(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;L(this,a);this.a-=4},Qb,function(){Mb(this,V(this));this.a-=10},function(){this.P(G(this),this.b);this.a-=7},function(){Mb(this,G(this)+1);this.a-=5},function(){this.g=Pb(this,this.g);this.a-=5},function(){this.g=Ob(this,this.g);this.a-=5},function(){this.g=U(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|K(this);L(this,a&256);this.a-=
4},Qb,function(){var a;J(this,a=H(this)+G(this));L(this,a>>8&256);this.a-=10},function(){this.b=this.F(G(this));this.a-=7},function(){Mb(this,G(this)-1);this.a-=5},function(){this.w=Pb(this,this.w);this.a-=5},function(){this.w=Ob(this,this.w);this.a-=5},function(){this.w=U(this);this.a-=7},function(){var a=this.b<<8;this.b=(K(this)<<8|this.b)>>1;L(this,a&256);this.a-=4},Qb,function(){J(this,V(this));this.a-=10},function(){var a=V(this);ab(this.o,a,H(this));this.a-=16},function(){J(this,H(this)+1);
this.a-=5},function(){this.i=Pb(this,this.i);this.a-=5},function(){this.i=Ob(this,this.i);this.a-=5},function(){this.i=U(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=N(this,a);L(this,b?256:0);this.a-=4},Qb,function(){var a;J(this,a=H(this)+H(this));L(this,a>>8&256);this.a-=10},function(){var a;a=V(this);a=Ya(this.o,a);J(this,a);this.a-=16},function(){J(this,H(this)-1);this.a-=5},function(){this.j=Pb(this,this.j);this.a-=
5},function(){this.j=Ob(this,this.j);this.a-=5},function(){this.j=U(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Qb,function(){this.A=V(this)&65535;this.a-=10},function(){this.P(V(this),this.b);this.a-=13},function(){this.A=this.A+1&65535;this.a-=5},function(){var a=H(this);this.P(a,Pb(this,this.F(a)));this.a-=10},function(){var a=H(this);this.P(a,Ob(this,this.F(a)));this.a-=10},function(){this.P(H(this),U(this));this.a-=10},function(){this.l|=256;this.a-=4},Qb,function(){var a;J(this,
a=H(this)+this.A);L(this,a>>8&256);this.a-=10},function(){this.b=this.F(V(this));this.a-=13},function(){this.A=this.A-1&65535;this.a-=5},function(){this.b=Pb(this,this.b);this.a-=5},function(){this.b=Ob(this,this.b);this.a-=5},function(){this.b=U(this);this.a-=7},function(){L(this,K(this)?0:256);this.a-=4},function(){this.a-=5},function(){this.f=this.v;this.a-=5},function(){this.f=this.g;this.a-=5},function(){this.f=this.w;this.a-=5},function(){this.f=this.i;this.a-=5},function(){this.f=this.j;this.a-=
5},function(){this.f=this.F(H(this));this.a-=7},function(){this.f=this.b;this.a-=5},function(){this.v=this.f;this.a-=5},function(){this.a-=5},function(){this.v=this.g;this.a-=5},function(){this.v=this.w;this.a-=5},function(){this.v=this.i;this.a-=5},function(){this.v=this.j;this.a-=5},function(){this.v=this.F(H(this));this.a-=7},function(){this.v=this.b;this.a-=5},function(){this.g=this.f;this.a-=5},function(){this.g=this.v;this.a-=5},function(){this.a-=5},function(){this.g=this.w;this.a-=5},function(){this.g=
this.i;this.a-=5},function(){this.g=this.j;this.a-=5},function(){this.g=this.F(H(this));this.a-=7},function(){this.g=this.b;this.a-=5},function(){this.w=this.f;this.a-=5},function(){this.w=this.v;this.a-=5},function(){this.w=this.g;this.a-=5},function(){this.a-=5},function(){this.w=this.i;this.a-=5},function(){this.w=this.j;this.a-=5},function(){this.w=this.F(H(this));this.a-=7},function(){this.w=this.b;this.a-=5},function(){this.i=this.f;this.a-=5},function(){this.i=this.v;this.a-=5},function(){this.i=
this.g;this.a-=5},function(){this.i=this.w;this.a-=5},function(){this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.F(H(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.j=this.f;this.a-=5},function(){this.j=this.v;this.a-=5},function(){this.j=this.g;this.a-=5},function(){this.j=this.w;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.a-=5},function(){this.j=this.F(H(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.P(H(this),
this.f);this.a-=7},function(){this.P(H(this),this.v);this.a-=7},function(){this.P(H(this),this.g);this.a-=7},function(){this.P(H(this),this.w);this.a-=7},function(){this.P(H(this),this.i);this.a-=7},function(){this.P(H(this),this.j);this.a-=7},function(){var a=this.m-1;if(this.S.length)for(var b=0;b<this.S.length;b++)if(this.S[b](a))return;this.D|=16;this.a-=7;this.H&512||wb(this)},function(){this.P(H(this),this.b);this.a-=7},function(){this.b=this.f;this.a-=5},function(){this.b=this.v;this.a-=5},
function(){this.b=this.g;this.a-=5},function(){this.b=this.w;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.F(H(this));this.a-=7},function(){this.a-=5},function(){this.b=N(this,this.f);this.a-=4},function(){this.b=N(this,this.v);this.a-=4},function(){this.b=N(this,this.g);this.a-=4},function(){this.b=N(this,this.w);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.F(H(this)));
this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){this.b=O(this,this.f);this.a-=4},function(){this.b=O(this,this.v);this.a-=4},function(){this.b=O(this,this.g);this.a-=4},function(){this.b=O(this,this.w);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.F(H(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){this.b=R(this,this.f);this.a-=4},function(){this.b=R(this,this.v);this.a-=
4},function(){this.b=R(this,this.g);this.a-=4},function(){this.b=R(this,this.w);this.a-=4},function(){this.b=R(this,this.i);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.F(H(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=S(this,this.f);this.a-=4},function(){this.b=S(this,this.v);this.a-=4},function(){this.b=S(this,this.g);this.a-=4},function(){this.b=S(this,this.w);this.a-=4},function(){this.b=S(this,this.i);this.a-=4},function(){this.b=
S(this,this.j);this.a-=4},function(){this.b=S(this,this.F(H(this)));this.a-=7},function(){this.b=S(this,this.b);this.a-=4},function(){this.b=P(this,this.f);this.a-=4},function(){this.b=P(this,this.v);this.a-=4},function(){this.b=P(this,this.g);this.a-=4},function(){this.b=P(this,this.w);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.F(H(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=
T(this,this.f);this.a-=4},function(){this.b=T(this,this.v);this.a-=4},function(){this.b=T(this,this.g);this.a-=4},function(){this.b=T(this,this.w);this.a-=4},function(){this.b=T(this,this.i);this.a-=4},function(){this.b=T(this,this.j);this.a-=4},function(){this.b=T(this,this.F(H(this)));this.a-=7},function(){this.b=T(this,this.b);this.a-=4},function(){this.b=Q(this,this.f);this.a-=4},function(){this.b=Q(this,this.v);this.a-=4},function(){this.b=Q(this,this.g);this.a-=4},function(){this.b=Q(this,this.w);
this.a-=4},function(){this.b=Q(this,this.i);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.F(H(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){R(this,this.f);this.a-=4},function(){R(this,this.v);this.a-=4},function(){R(this,this.g);this.a-=4},function(){R(this,this.w);this.a-=4},function(){R(this,this.i);this.a-=4},function(){R(this,this.j);this.a-=4},function(){R(this,this.F(H(this)));this.a-=7},function(){R(this,this.b);this.a-=4},
function(){this.l&255&&(D(this,W(this)),this.a-=6);this.a-=5},function(){Lb(this,W(this));this.a-=10},function(){var a=V(this);this.l&255&&D(this,a);this.a-=10},Rb,function(){var a=V(this);this.l&255&&(X(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){X(this,Kb(this));this.a-=11},function(){this.b=N(this,U(this));this.a-=7},function(){X(this,this.m);D(this,0);this.a-=11},function(){this.l&255||(D(this,W(this)),this.a-=6);this.a-=5},Sb,function(){var a=V(this);this.l&255||D(this,a);this.a-=
10},Rb,function(){var a=V(this);this.l&255||(X(this,this.m),D(this,a),this.a-=6);this.a-=11},Tb,function(){this.b=O(this,U(this));this.a-=7},function(){X(this,this.m);D(this,8);this.a-=11},function(){K(this)||(D(this,W(this)),this.a-=6);this.a-=5},function(){Mb(this,W(this));this.a-=10},function(){var a=V(this);K(this)||D(this,a);this.a-=10},function(){for(var a=U(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.C[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=V(this);K(this)||(X(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){X(this,G(this));this.a-=11},function(){this.b=R(this,U(this));this.a-=7},function(){X(this,this.m);D(this,16);this.a-=11},function(){K(this)&&(D(this,W(this)),this.a-=6);this.a-=5},Sb,function(){var a=V(this);K(this)&&D(this,a);this.a-=10},function(){for(var a=U(this),b=this.o,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.l[a],g=b.G[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=V(this);K(this)&&(X(this,this.m),D(this,a),this.a-=6);this.a-=11},Tb,function(){this.b=S(this,U(this));this.a-=7},function(){X(this,this.m);D(this,24);this.a-=11},function(){Nb(this)||(D(this,W(this)),this.a-=6);this.a-=5},function(){J(this,W(this));this.a-=10},function(){var a=V(this);Nb(this)||D(this,a);this.a-=10},function(){var a=W(this);X(this,H(this));J(this,a);this.a-=
18},function(){var a=V(this);Nb(this)||(X(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){X(this,H(this));this.a-=11},function(){this.b=P(this,U(this));this.a-=7},function(){X(this,this.m);D(this,32);this.a-=11},function(){Nb(this)&&(D(this,W(this)),this.a-=6);this.a-=5},function(){D(this,H(this));this.a-=5},function(){var a=V(this);Nb(this)&&D(this,a);this.a-=10},function(){var a=H(this);J(this,G(this));Mb(this,a);this.a-=5},function(){var a=V(this);Nb(this)&&(X(this,this.m),D(this,a),this.a-=
6);this.a-=11},Tb,function(){this.b=T(this,U(this));this.a-=7},function(){X(this,this.m);D(this,40);this.a-=11},function(){this.s&128||(D(this,W(this)),this.a-=6);this.a-=5},function(){var a=W(this);Hb(this,a&255|this.H&-256);this.b=a>>8;this.a-=10},function(){var a=V(this);this.s&128||D(this,a);this.a-=10},function(){this.H&=-513;this.a-=4},function(){var a=V(this);this.s&128||(X(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){X(this,Jb(this)&255|this.b<<8);this.a-=11},function(){this.b=
Q(this,U(this));this.a-=7},function(){X(this,this.m);D(this,48);this.a-=11},function(){this.s&128&&(D(this,W(this)),this.a-=6);this.a-=5},function(){this.A=H(this)&65535;this.a-=5},function(){var a=V(this);this.s&128&&D(this,a);this.a-=10},function(){this.H|=512;this.a-=4},function(){var a=V(this);this.s&128&&(X(this,this.m),D(this,a),this.a-=6);this.a-=11},Tb,function(){R(this,U(this));this.a-=7},function(){X(this,this.m);D(this,56);this.a-=11}];
function Z(a){t.call(this,"ChipSet",a,Z);var b=a.model;b&&!Ub[b]&&r("Unrecognized ChipSet model: "+b);this.Z=Ub[b]||Vb;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);B(this)}w(Z);var Vb=1978.1,Ub={SI1978:Vb};m=Z.prototype;m.O=function(){return!1};
m.ca=function(a,b,c,d){this.o=b;this.a=c;this.J=d;this.u=a;if(this.Z==Vb){var e;a=Wb;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.l[g]?r("Input port 0x"+n(g,4)+" already registered"):c.l[g]=[h,!1]}var l;e=Xb;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.Y=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.X=function(a){return a?this.save():!0};m.reset=function(){this.j=14;this.b=8;this.g=this.i=this.f=this.c=this.l=0};m.save=function(){var a=new E(this);this.Z==Vb&&F(a,0,[this.j,this.b,this.l,this.c,this.f,this.g,this.i]);return a.data()};m.restore=function(a){a=a[0];this.Z==Vb&&(this.j=a[0],this.b=a[1],this.l=a[2],this.c=a[3],this.f=a[4],this.g=a[5],this.i=a[6]);return!0};m.start=function(){};m.stop=function(){};
function Yb(a,b,c){a.b&=~b;c&&(a.b|=b)}m.pb=function(){return this.j};m.qb=function(){return this.b};m.rb=function(){return this.l};m.ob=function(){return this.c>>8-this.f&255};m.tb=function(a,b){this.f=b};m.vb=function(a,b){this.g=b};m.ub=function(a,b){this.c=b<<8|this.c>>8};m.wb=function(a,b){this.i=b};m.xb=function(){};var Wb={0:Z.prototype.pb,1:Z.prototype.qb,2:Z.prototype.rb,3:Z.prototype.ob},Xb={2:Z.prototype.tb,3:Z.prototype.vb,4:Z.prototype.ub,5:Z.prototype.wb,6:Z.prototype.xb};
wa(function(){for(var a=z(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Z(d);Ja(d,c)}});function Zb(a){t.call(this,"ROM",a,Zb);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=da(this.g);if(this.g){a=this.g;var b=ea(this.m);"json"!=b&&"hex"!=b&&(a=la()+"/api/v1/dump?file="+this.g+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){$b(c,a,b,f)})}}w(Zb);var ac=[0,5];
Zb.prototype.ca=function(a,b,c,d){this.o=b;this.a=c;this.J=d;bc(this)};Zb.prototype.Y=function(){this.i&&(this.J&&this.J.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Zb.prototype.X=function(){return!0};
function $b(a,b,c,d){if(d)a.I("Unable to load system ROM (error "+d+": "+b+")");else{Ha(a.pa,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.I("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]=ca(b[e]);bc(a)}}
function bc(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.ea=!0;a.I(b)}else if(cc(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 cc(a,b){if(Va(a.o,b,a.c,a.l?1:gb)){var c;for(c=0;c<a.b.length;c++)Za(a.o,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<ac.length;c++)Za(a.o,ac[c],118);Gb(a.a,function(a){return function(b){if(0<=ac.indexOf(b)){var c=!1,h=a.a,g=a.J;if(5==b)switch(c=!0,h.v){case 2:dc(a,String.fromCharCode(h.w));break;case 9:for(var l=G(h),k="",u=255;u--;){var q=a.a.F(l++);if(36==q)break;k+=String.fromCharCode(q)}dc(a,k);break;default:c=!1}c?Sb.call(h):g&&(a.R("\nCP/M vector 0x"+n(b,4)),D(h,b),wb(g));b=!0}else b=!1;
return b}}(a));Ib(a.a,b)}return!0}return!1}function dc(a,b){b=b.replace(/\r/g,"");a.ba&&(a.ba.value+=b,a.ba.scrollTop=a.ba.scrollHeight)}wa(function(){for(var a=z(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Zb(d);Ja(d,c)}});function ec(a){t.call(this,"RAM",a,ec);this.f=a.addr;this.c=a.size;this.b=!1}w(ec);m=ec.prototype;m.ca=function(a,b,c,d){this.o=b;this.a=c;this.J=d;B(this)};m.Y=function(a,b){b||this.reset();return!0};m.X=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.b||r("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};wa(function(){for(var a=z(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new ec(d);Ja(d,c)}});function fc(a){t.call(this,"Keyboard",a,fc);this.reset();B(this)}w(fc);var gc={"1p":49,"2p":50,coin:51,left:37,right:39,fire:32},hc={65:37,68:39,76:32};fc.prototype.reset=function(){this.a={}};
fc.prototype.O=function(a,b,c){var d=this;a=a+"-"+b;if(void 0===this.B[a])switch(b){case "kbd":return c.onkeydown=function(a){return jc(d,a,!0)},c.onkeyup=function(a){return jc(d,a,!1)},!0;default:if(void 0!==gc[b])return this.B[a]=c,a=function(a,b){return function(){kc(a,b,!0)}}(this,b),b=function(a,b){return function(){kc(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}return!1};
fc.prototype.ca=function(a,b,c,d){this.J=d;this.G=Ra(a,"ChipSet")};function jc(a,b,c){var d=!0,e;a:{e=b.keyCode;e=hc[e]||e;for(var f in gc)if(gc[f]===e){e=f;break a}e=null}e&&(d=kc(a,e,c));d||b.preventDefault();return d}function kc(a,b,c){a.a[b]=c;if(a.G)switch(b){case "1p":Yb(a.G,4,c);break;case "2p":Yb(a.G,2,c);break;case "coin":Yb(a.G,1,c);break;case "left":Yb(a.G,32,c);break;case "right":Yb(a.G,64,c);break;case "fire":Yb(a.G,16,c)}return!1}
wa(function(){for(var a=z(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new fc(d);Ja(d,c)}});
function lc(a,b,c,d,e){var f=this;this.Qa=ra("Gecko/");var h=["","moz","ms","webkit"];t.call(this,"Video",a,lc);this.M=a.screenWidth;this.C=a.screenHeight;this.aa=a.bufferAddr;this.kb=a.bufferRAM;var g=a.bufferFormat;this.V=g&&mc[g.toLowerCase()]||nc;this.j=a.bufferCols;this.A=a.bufferRows;this.S=a.bufferBits||1;this.lb=a.bufferLeft||0;if(this.c=a.bufferRotate)this.c=this.c%360,0<this.c&&(this.c-=360),-90!=this.c&&(this.I("unsupported buffer rotation: "+this.c),this.c=0);this.ib=a.interruptRate;this.$=
a.refreshRate||60;this.i=b;this.g=c;this.D=(this.mb=d)||b||null;b=a.smoothing;(c=Ba.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.g[d]){this.g[d]=b;break}if(this.f=a.screenRotate)this.f=this.f%360,0<this.f&&(this.f-=360),-90!=this.f?(this.I("unsupported screen rotation: "+this.f),this.f=0):(this.g.translate(0,this.C),this.g.rotate(this.f*Math.PI/180),this.g.scale(this.C/this.M,this.M/this.C));oc(this);b=this.j;
c=this.A;this.c&&(b=this.A,c=this.j);this.Sa=this.g.createImageData(b,c);this.l=document.createElement("canvas");this.l.width=b;this.l.height=c;this.jb=this.l.getContext("2d");if(this.b=e)if(this.b.ia=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.b.ia){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){pc(f,document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||
document.webkitFullscreenElement?!0:!1)},!1);break}for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){pc(f,null)},!1);break}}if(this.m=a.fontROM)"json"!=ea(this.m)&&(this.m=la()+"/api/v1/dump?file="+this.m+"&format=bytes"),p(this.m,null,!0,function(a,b,c){qc(f,a,b,c)})}w(lc);var nc=0,mc={vt100:2};
lc.prototype.ca=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.J=d;this.V||(this.G=Ra(a,"ChipSet"))&&this.G.Z==Vb&&(this.V=1,oc(this));!this.kb&&(this.W=(this.j*this.S>>3)*this.A,Va(this.o,this.aa,this.W,3)&&(this.Ta=this.W>>1,this.Ua=16/this.S|0,this.da=!1,void 0===this.L||this.L.length!=this.Ta))&&(this.L=Array(this.Ta));(this.H=Ra(a,"Keyboard"))&&this.i&&this.H.O(this.mb?"textarea":"canvas","kbd",this.D);this.m||B(this)};
function qc(a,b,c,d){if(d)a.I("Unable to load font ROM (error "+d+": "+b+")");else{Ha(a.pa,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f.length){r("Empty font ROM: "+b);return}if(1==f.length){r(f[0]);return}if(2048!=f.length){a.I("Unrecognized font data length ("+f.length+")");return}}catch(h){a.I("Font ROM data error: "+h.message);return}(a.g||a.J)&&B(a)}}
lc.prototype.O=function(a,b,c){var d=this;switch(b){case "fullScreen":return this.B[b]=c,this.b&&this.b.ia?c.onclick=function(){d.ia()}:c.parentNode.removeChild(c),!0}return!1};
lc.prototype.ia=function(){var a=!1;if(this.b){if(this.b.ia){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.M/this.C;b>c&&(a=Math.round(c/b*100)+"%")}this.Qa?(this.i.style.width=a,this.i.style.width=a,this.i.style.display="block",this.i.style.margin="auto"):(this.b.style.width=a,this.b.style.height="auto");this.b.style.backgroundColor="black";this.b.ia();a=!0}this.D&&this.D.focus()}return a};
function pc(a,b){!b&&a.b&&(a.Qa?a.i.style.width=a.i.style.height="":a.b.style.width=a.b.style.height="")}function oc(a){a.K=1<<a.S;a.s=Array(a.K+2);a.s[0]=[0,0,0,255];a.s[1]=[255,255,255,255];1==a.V&&(a.s[a.K+0]=[255,255,0,255],a.s[a.K+1]=[0,255,0,255])}
wa(function(){for(var a=z(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<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(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){w.call(this,"Panel",a,Qa)}y(Qa);m=Qa.prototype;m.O=function(a,b,c,d){return this.u&&this.u.O(a,b,c,d)||this.a&&this.a.O(a,b,c,d)||this.L&&this.L.O(a,b,c,d)?!0:this.parent.O.call(this,a,b,c,d)};m.fa=function(a,b,c,d){this.u=a;this.m=b;this.a=c;this.J=d;this.L=Ra(a,"Keyboard")};m.aa=function(a,b){b||Sa();return!0};m.$=function(){return!0};m.ja=function(){};
function Sa(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=A(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<x.length;h++)if(x[h].id===f){f=x[h];break a}f=null}f||(a=!0,f=new Qa(e));Ja(f,d);a&&C(f)}}wa(Sa);
function Ta(a,b,c){w.call(this,"Bus",a,Ta);this.a=b;this.J=c;this.i=a.busWidth||16;this.s=Math.pow(2,this.i);this.g=this.s-1|0;this.c=16>=this.i?10:20>=this.i?12:24>=this.i?14:15;this.m=1<<this.c;this.A=this.m>>2;this.f=this.m-1;this.j=this.s/this.m|0;this.u=this.j-1;this.l=[];this.o=[];this.G=[];this.C=[];a=new D;Ua(a,this.J);this.b=Array(this.j);for(b=0;b<this.j;b++)this.b[b]=a;C(this)}y(Ta);Ta.prototype.reset=function(){};Ta.prototype.aa=function(a,b){b||this.reset();return!0};
function Va(a,b,c,d){for(var e=b,f=c,h=e>>>a.c;0<f&&h<a.b.length;){var g=a.b[h],l=h*a.m,k=a.m-(e-l);k>f&&(k=f);if(g&&g.size){if(g.type==d){if(e+f<=g.sa)return g.La+=g.sa-e,g.sa=e,!0;if(e>=g.sa+g.La){k=g.size-(e-l);k>f&&(k=f);g.La=e-g.sa+k;e=l+a.m;f-=k;h++;continue}}return Wa(1,e,f)}e=new D(e,k,a.m,d);Ua(e,a.J,g);a.b[h++]=e;e=l+a.m;f-=k}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+Xa[d]+" at "+("0x"+n(b,4))),!0):Wa(2,b,c)}
Ta.prototype.F=function(a){return this.b[(a&this.g)>>>this.c].Ba(a&this.f,a)};function Ya(a,b){return a.b[(b&a.g)>>>a.c].Ka(b&a.f,b)}function Za(a,b){var c=b&a.f,d=(b&a.g)>>>a.c;return c!=a.f?a.b[d].Hb(c,b):a.b[d++].Ba(c,b)|a.b[d&a.u].Ba(0,b+1)<<8}Ta.prototype.P=function(a,b){this.b[(a&this.g)>>>this.c].Ca(a&this.f,b&255,a)};function $a(a,b,c){a.b[(b&a.g)>>>a.c].rb(b&a.f,c&255,b)}
function ab(a,b,c){var d=b&a.f,e=(b&a.g)>>>a.c;d!=a.f?a.b[e].Ib(d,c&65535,b):(a.b[e++].Ca(d,c&255,b),a.b[e&a.u].Ca(0,c>>8&255,b+1))}function Wa(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var bb;if(Oa){var cb=new ArrayBuffer(2);(new DataView(cb)).setUint16(0,256,!0);bb=256===(new Uint16Array(cb))[0]}else bb=!1;var db=bb;
function D(a,b,c,d){this.id=eb+=2;this.a=null;this.sa=a;this.La=b;this.size=c||0;this.type=d||fb;this.f=d==gb;Ua(this);this.V=this.hb=!1;if(c)if(Oa)this.c=new ArrayBuffer(c),this.m=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.j=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),hb(this,db?ib:jb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;hb(this,kb)}else hb(this)}var fb=0,gb=2,Xa=["NONE","RAM","ROM","VID","H/W"],eb=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.m.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.m.setInt32(b<<2,a[b],!0);else this.a=a;return this.V=!0}return!1},l:function(){return 255},o:function(){},B:function(a,b){return this.Ba(a++,b++)|this.Ba(a,b)<<8},u:function(a,b,c){this.Ca(a++,b&255,c++);this.Ca(a,b>>8,c)},C:function(a){return this.a[a>>
2]>>>((a&3)<<3)&255},L: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},S:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.V=!0},ra: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.V=!0},A:function(a,b){return this.Ka(a,b)},H:function(a,b){return this.pb(a,b)},ba:function(a,b,c){this.f||this.rb(a,b,c)},Y:function(a,
b,c){this.f||this.Z(a,b,c)},s:function(a){return this.b[a]},G:function(a){return this.b[a]},D:function(a){return this.m.getUint16(a,!0)},K:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.j[a>>1]},M:function(a,b){this.b[a]=b;this.V=!0},ca:function(a,b){this.b[a]=b;this.V=!0},X:function(a,b){this.m.setUint16(a,b,!0);this.V=!0},da:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.j[a>>1]=b;this.V=!0}};function Ua(a,b,c){a.J=b;a.g=a.i=0;c&&((a.g=c.g)&&lb(a,mb,!1),(a.i=c.i)&&nb(a,mb,!1))}
function nb(a,b,c){c&&a.i||(a.Ca=!a.f&&b[2]||a.o,a.Ib=!a.f&&b[3]||a.u);if(c||void 0===c)a.rb=b[2]||a.o,a.Z=b[3]||a.u}function lb(a,b,c){c&&a.g||(a.Ba=b[0]||a.l,a.Hb=b[1]||a.B);if(c||void 0===c)a.Ka=b[0]||a.l,a.pb=b[1]||a.B}function hb(a,b){b||(b=ob);lb(a,b,void 0);nb(a,b,void 0)}var ob=[],kb=[D.prototype.C,D.prototype.L,D.prototype.S,D.prototype.ra],mb=[D.prototype.A,D.prototype.H,D.prototype.ba,D.prototype.Y];
if(Oa)var jb=[D.prototype.s,D.prototype.D,D.prototype.M,D.prototype.X],ib=[D.prototype.G,D.prototype.K,D.prototype.ca,D.prototype.da];
function pb(a,b){w.call(this,"CPU",a,pb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.qa=c;this.c.Ja=0;this.c.pa=d;this.c.Qa=Math.round(this.c.qa/1E4)/100;this.c.ma=this.c.Qa*this.c.pa;this.h.W=!1;this.h.jb=!1;this.h.gb=a.autoStart;this.h.ib=!1;this.h.Da=!1;this.c.Ha=this.c.oa=0;this.c.Ia=a.csStart;this.c.ua=a.csInterval;this.c.va=a.csStop;this.da=this.Ta.bind(this);C(this)}y(pb);var qb=["power","reset"];m=pb.prototype;
m.fa=function(a,b,c,d){this.u=a;this.m=b;this.J=d;for(b=0;b<qb.length;b++)(c=this.B[qb[b]])&&this.u.O(null,qb[b],c);this.ca=(b=Ra(a,"Video"))&&Math.max(b.ca,b.ab)||60;this.G=Ra(a,"ChipSet");a=rb(a,"autoStart");null!=a&&(this.h.gb="true"==a?!0:"false"==a?!1:!!a);C(this)};m.reset=function(){this.c.Ja=0};m.save=function(){return null};m.restore=function(){return!1};
m.aa=function(a,b){if(!b){if(a&&this.restore){sb(this);if(!this.restore(a))return!1;tb(this)}else this.reset();this.U("No debugger detected")}ub(this);return!0};m.$=function(a){return a?this.save():!0};function vb(a){(a.h.gb||void 0===a.B.run)&&a.Ta(!0)}m.kb=function(){return 0};function tb(a){void 0===a.c.Ia&&(a.c.Ia=0);void 0===a.c.ua&&(a.c.ua=-1);void 0===a.c.va&&(a.c.va=-1);a.h.Da=0<=a.c.Ia&&0<a.c.ua;a.h.Da&&(a.c.Ha=0,a.c.oa=a.c.Ia-a.M)}
m.O=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.N)a=!0;else{var b=null,c,g=z(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.h.la);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.h.N);c++);c==g.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.h.la?"powered yet":"ready yet"+(b.Fa?" (waiting for notification)":""))+".");a=!1}a&&(d.h.W?wb(d,!0):d.Ta(!0))};a=!0;break;
case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(){xb(d,d.c.pa<<1,!0)},c.textContent=this.c.ma.toFixed(2)+"Mhz",a=!0}return a};function yb(a,b,c){a.M+=b;c&&(a.L=a.a=0)}
function zb(a,b){var c=30;c<a.ca&&(c=a.ca);2>c&&(c=2);var d=1;b&&1<a.c.pa&&a.c.ha&&(d=a.c.ha/a.c.Qa);a.c.lb=Math.round(1E3/30);a.c.Bb=Math.floor(a.c.qa/c*d);a.c.Ra=Math.floor(a.c.qa/30*d);a.c.nb=Math.floor(a.c.qa/a.ca*d);a.c.mb=Math.floor(a.c.qa/2*d);b||(a.c.ya=a.c.Ra,a.c.xa=a.c.nb,a.c.wa=a.c.mb);a.c.Sa=0}function Ab(a){return a.M+a.K+a.L-a.a}function sb(a){a.c.ha=0;a.M=a.K=a.L=a.a=0;tb(a);xb(a,1)}
function xb(a,b,c){if(void 0!==b){.8>a.c.ha/a.c.ma&&(b=1);a.c.pa=b;b=a.c.Qa*a.c.pa;if(a.c.ma!=b){a.c.ma=b;b=a.c.ma.toFixed(2)+"Mhz";var d=a.B.setSpeed;d&&(d.textContent=b);a.U("target speed: "+b)}c&&a.u&&Bb(a.u)}yb(a,a.K);a.K=0;a.c.na=ia();a.c.ia=0;zb(a)}
m.Ta=function(a){if(Ka(this,!0)){if(!this.h.W){xb(this);this.u&&this.u.start(this.c.na,Ab(this));this.h.W=!0;this.h.jb=!0;this.G&&this.G.start();var b=this.B.run;b&&(b.textContent="Halt");this.u&&(this.u.ja(!0),a&&Bb(this.u,!0))}this.c.Sa>=this.c.qa&&zb(this,!0);this.c.za=0;this.c.Ga=ia();this.c.ia&&(a=this.c.Ga-this.c.ia,a>this.c.lb&&(this.c.na+=a,this.c.na>this.c.Ga&&(this.c.na=this.c.Ga)));try{do{this.qb(this.h.Da?1:this.c.Bb);var c=this.L-this.a;this.K+=c;this.c.za+=c;yb(this,0,!0);a=c;this.h.Da&&
(b=!1,this.c.Ha=this.c.Ha+this.kb()|0,this.c.oa-=a,0>=this.c.oa&&(this.c.oa+=this.c.ua,b=!0),0<=this.c.va&&this.c.va<=Ab(this)&&(this.c.ua=this.c.va=-1,tb(this),wb(this),b=!0),b&&this.U(Ab(this)+" cycles: checksum="+n(this.c.Ha)));this.c.xa-=c;0>=this.c.xa&&(this.c.xa+=this.c.nb,this.u&&Cb(this.u,this.c.Ja++),this.c.Ja>this.ca&&(this.c.Ja=0));this.c.wa-=c;0>=this.c.wa&&(this.c.wa+=this.c.mb,this.u&&this.u.ja());this.c.ya-=c;if(0>=this.c.ya){this.c.ya+=this.c.Ra;break}}while(this.h.W)}catch(e){wb(this);
ub(this);this.u&&this.u.stop(ia(),Ab(this));Ka(this,!1);c=e.stack||e.message;this.h.ga=!0;this.I(c);return}c=setTimeout;a=this.da;this.c.ia=ia();b=this.c.lb;this.c.za&&(b=Math.round(b*this.c.za/this.c.Ra));var b=b-(this.c.ia-this.c.Ga),d=this.c.ia-this.c.na;d&&(this.c.ha=Math.round(this.K/(10*d))/100,864E5<=d&&(this.M=0,xb(this)));if(0>b||this.c.ha<this.c.ma)b=0;this.c.Sa+=this.c.za;this.c.ia+=b;c(a,b)}else ub(this),this.u&&this.u.stop(ia(),Ab(this))};m.qb=function(){return 0};
function wb(a,b){a.h.ta&&(a.h.Pa=!0);a.L-=a.a;a.a=0;yb(a,a.K);a.K=0;if(a.h.W){a.h.W=!1;a.G&&a.G.stop();var c=a.B.run;c&&(c.textContent="Run")}a.h.Ea=b}function ub(a){a.u&&(Cb(a.u,-1),a.u.ja(void 0))}function Db(a){this.ba=+a.model||8080;pb.call(this,a,1E6);this.X=Eb;sb(this);this.h.Ea=this.h.tb=!1;this.Z=0;this.S=[];this.Y=0;Fb(this)}y(Db,pb);function Gb(a,b){a.S.push(b)}m=Db.prototype;m.reset=function(){this.h.W&&wb(this);Fb(this);sb(this);this.h.ga=!1;this.parent.reset.call(this)};
function Fb(a){a.b=0;a.f=0;a.v=0;a.g=0;a.w=0;a.i=0;a.j=0;a.A=0;E(a,a.Y);Hb(a,0);a.D=0}function Ib(a,b){a.Y=b;E(a,b)}m.kb=function(){var a=this.b+this.f+this.v+this.g+this.w+this.i+this.j|0;return a=a+this.A+this.o+Jb(this)|0};
m.save=function(){var a=new F(this);G(a,0,[this.b,this.f,this.v,this.g,this.w,this.i,this.j,this.A,this.o,Jb(this)]);G(a,1,[this.D,this.M,this.c.pa]);for(var b=this.m,c=0,d=[],e=0;e<b.j;e++){var f=b.b[e];if(f.V||f.hb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var q=f[g],r=g+1;r<f.length&&f[r]===q;)r++;k[l++]=r-g;k[l++]=q;g=r}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.f=b[1];this.v=b[2];this.g=b[3];this.w=b[4];this.i=b[5];this.j=b[6];this.A=b[7]&65535;E(this,b[8]);Hb(this,b[9]);b=a[1];this.D=b[0];this.M=b[1];xb(this,b[3]);a:{b=this.m;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)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.O=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.B[b]=c;this.Z++;d=!0;break;default:d=this.parent.O.call(this,a,b,c)}return d};function Kb(a){return a.f<<8|a.v}function Lb(a,b){a.f=b>>8&255;a.v=b&255}function I(a){return a.g<<8|a.w}function Mb(a,b){a.g=b>>8&255;a.w=b&255}function J(a){return a.i<<8|a.j}
function K(a,b){a.i=b>>8&255;a.j=b&255}function E(a,b){a.o=b&65535}function L(a){return a.l&256?1:0}function M(a,b){a.l=a.l&255|b}function Nb(a){return Pa[a.s&255]?4:0}function Jb(a){return a.H&-214|(a.s&128?128:0)|(a.l&255?0:64)|((a.s^a.C)&16?16:0)|Nb(a)|L(a)}function Hb(a,b){a.l=a.s=a.C=0;b&1&&(a.l|=256);b&4||(a.s|=1);b&16&&(a.C|=16);b&64||(a.l|=255);b&128&&(a.s^=192);a.H=a.H&-726|b&512|2}function N(a,b){a.C=a.b^b;return a.s=(a.l=a.b+b)&255}
function O(a,b){a.C=a.b^b;return a.s=(a.l=a.b+b+(a.l&256?1:0))&255}function P(a,b){a.l=a.s=a.C=a.b&b;(a.b|b)&8&&(a.C^=16);return a.l}function Ob(a,b){a.C=b^255;b=a.s=b+255&255;a.l=a.l&-256|b;return b}function Pb(a,b){a.C=b;b=a.s=b+1&255;a.l=a.l&-256|b;return b}function Q(a,b){return a.s=a.l=a.C=a.b|b}function R(a,b){b^=255;a.C=a.b^b;return a.s=(a.l=a.b+b+1^256)&255}function S(a,b){b^=255;a.C=a.b^b;return a.s=(a.l=a.b+b+(a.l&256?0:1)^256)&255}function Qb(a,b){return a.s=a.l=a.C=a.b^b}m.F=function(a){return this.m.F(a)};
m.P=function(a,b){this.m.P(a,b)};function U(a){var b=a.F(a.o);E(a,a.o+1);return b}function V(a){var b=Za(a.m,a.o);E(a,a.o+2);return b}function W(a){var b=Za(a.m,a.A);a.A=a.A+2&65535;return b}function X(a,b){a.A=a.A-2&65535;ab(a.m,a.A,b)}function Y(a,b,c,d){d=d||2;a.B[b]&&(void 0===c&&(a.h.ga=!0,a.I("Value for "+b+" is invalid"),wb(a)),c=!a.h.W||a.h.ib?n(c,d):"--------".substr(0,d),a.B[b].textContent!=c&&(a.B[b].textContent=c))}
m.ja=function(a){this.Z&&(a||!this.h.W||this.h.ib)&&(Y(this,"A",this.b),Y(this,"B",this.f),Y(this,"C",this.v),Y(this,"BC",Kb(this),4),Y(this,"D",this.g),Y(this,"E",this.w),Y(this,"DE",I(this),4),Y(this,"H",this.i),Y(this,"L",this.j),Y(this,"HL",J(this),4),Y(this,"SP",this.A,4),Y(this,"PC",this.o,4),a=Jb(this),Y(this,"PS",a,4),Y(this,"IF",a&512?1:0,1),Y(this,"SF",a&128?1:0,1),Y(this,"ZF",a&64?1:0,1),Y(this,"AF",a&16?1:0,1),Y(this,"PF",a&4?1:0,1),Y(this,"CF",a&1?1:0,1));if(a=this.B.speed)a.textContent=
this.h.W&&this.c.ha?this.c.ha.toFixed(2)+"Mhz":"Stopped"};m.qb=function(a){this.h.Ea=!0;this.h.tb=!1;this.h.jb=!1;this.L=this.a=a;do{if(a=this.D)this.D&8&&this.H&512?(a=199|(this.D&7)<<3,this.D&=-16,this.H&=-513,this.X[a].call(this),a=!0):a=!1,a=!a;if(a&&this.D&16){this.a=0;break}this.X[U(this)].call(this)}while(0<this.a);return this.h.Ea?this.L-this.a:void 0===this.h.Ea?0:-1};wa(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Db(d);Ja(d,c)}});
function Rb(){this.a-=4}function Sb(){E(this,V(this));this.a-=10}function Tb(){E(this,W(this));this.a-=10}function Ub(){var a=V(this);X(this,this.o);E(this,a);this.a-=17}
var Eb=[Rb,function(){Lb(this,V(this));this.a-=10},function(){this.P(Kb(this),this.b);this.a-=7},function(){Lb(this,Kb(this)+1);this.a-=5},function(){this.f=Pb(this,this.f);this.a-=5},function(){this.f=Ob(this,this.f);this.a-=5},function(){this.f=U(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;M(this,a&256);this.a-=4},Rb,function(){var a;K(this,a=J(this)+Kb(this));M(this,a>>8&256);this.a-=10},function(){this.b=this.F(Kb(this));this.a-=7},function(){Lb(this,Kb(this)-1);this.a-=5},function(){this.v=
Pb(this,this.v);this.a-=5},function(){this.v=Ob(this,this.v);this.a-=5},function(){this.v=U(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;M(this,a);this.a-=4},Rb,function(){Mb(this,V(this));this.a-=10},function(){this.P(I(this),this.b);this.a-=7},function(){Mb(this,I(this)+1);this.a-=5},function(){this.g=Pb(this,this.g);this.a-=5},function(){this.g=Ob(this,this.g);this.a-=5},function(){this.g=U(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|L(this);M(this,a&256);this.a-=
4},Rb,function(){var a;K(this,a=J(this)+I(this));M(this,a>>8&256);this.a-=10},function(){this.b=this.F(I(this));this.a-=7},function(){Mb(this,I(this)-1);this.a-=5},function(){this.w=Pb(this,this.w);this.a-=5},function(){this.w=Ob(this,this.w);this.a-=5},function(){this.w=U(this);this.a-=7},function(){var a=this.b<<8;this.b=(L(this)<<8|this.b)>>1;M(this,a&256);this.a-=4},Rb,function(){K(this,V(this));this.a-=10},function(){var a=V(this);ab(this.m,a,J(this));this.a-=16},function(){K(this,J(this)+1);
this.a-=5},function(){this.i=Pb(this,this.i);this.a-=5},function(){this.i=Ob(this,this.i);this.a-=5},function(){this.i=U(this);this.a-=7},function(){var a=0,b=L(this);if((this.s^this.C)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=N(this,a);M(this,b?256:0);this.a-=4},Rb,function(){var a;K(this,a=J(this)+J(this));M(this,a>>8&256);this.a-=10},function(){var a;a=V(this);a=Za(this.m,a);K(this,a);this.a-=16},function(){K(this,J(this)-1);this.a-=5},function(){this.j=Pb(this,this.j);this.a-=
5},function(){this.j=Ob(this,this.j);this.a-=5},function(){this.j=U(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Rb,function(){this.A=V(this)&65535;this.a-=10},function(){this.P(V(this),this.b);this.a-=13},function(){this.A=this.A+1&65535;this.a-=5},function(){var a=J(this);this.P(a,Pb(this,this.F(a)));this.a-=10},function(){var a=J(this);this.P(a,Ob(this,this.F(a)));this.a-=10},function(){this.P(J(this),U(this));this.a-=10},function(){this.l|=256;this.a-=4},Rb,function(){var a;K(this,
a=J(this)+this.A);M(this,a>>8&256);this.a-=10},function(){this.b=this.F(V(this));this.a-=13},function(){this.A=this.A-1&65535;this.a-=5},function(){this.b=Pb(this,this.b);this.a-=5},function(){this.b=Ob(this,this.b);this.a-=5},function(){this.b=U(this);this.a-=7},function(){M(this,L(this)?0:256);this.a-=4},function(){this.a-=5},function(){this.f=this.v;this.a-=5},function(){this.f=this.g;this.a-=5},function(){this.f=this.w;this.a-=5},function(){this.f=this.i;this.a-=5},function(){this.f=this.j;this.a-=
5},function(){this.f=this.F(J(this));this.a-=7},function(){this.f=this.b;this.a-=5},function(){this.v=this.f;this.a-=5},function(){this.a-=5},function(){this.v=this.g;this.a-=5},function(){this.v=this.w;this.a-=5},function(){this.v=this.i;this.a-=5},function(){this.v=this.j;this.a-=5},function(){this.v=this.F(J(this));this.a-=7},function(){this.v=this.b;this.a-=5},function(){this.g=this.f;this.a-=5},function(){this.g=this.v;this.a-=5},function(){this.a-=5},function(){this.g=this.w;this.a-=5},function(){this.g=
this.i;this.a-=5},function(){this.g=this.j;this.a-=5},function(){this.g=this.F(J(this));this.a-=7},function(){this.g=this.b;this.a-=5},function(){this.w=this.f;this.a-=5},function(){this.w=this.v;this.a-=5},function(){this.w=this.g;this.a-=5},function(){this.a-=5},function(){this.w=this.i;this.a-=5},function(){this.w=this.j;this.a-=5},function(){this.w=this.F(J(this));this.a-=7},function(){this.w=this.b;this.a-=5},function(){this.i=this.f;this.a-=5},function(){this.i=this.v;this.a-=5},function(){this.i=
this.g;this.a-=5},function(){this.i=this.w;this.a-=5},function(){this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.F(J(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.j=this.f;this.a-=5},function(){this.j=this.v;this.a-=5},function(){this.j=this.g;this.a-=5},function(){this.j=this.w;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.a-=5},function(){this.j=this.F(J(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.P(J(this),
this.f);this.a-=7},function(){this.P(J(this),this.v);this.a-=7},function(){this.P(J(this),this.g);this.a-=7},function(){this.P(J(this),this.w);this.a-=7},function(){this.P(J(this),this.i);this.a-=7},function(){this.P(J(this),this.j);this.a-=7},function(){var a=this.o-1;if(this.S.length)for(var b=0;b<this.S.length;b++)if(this.S[b](a))return;this.D|=16;this.a-=7;this.H&512||wb(this)},function(){this.P(J(this),this.b);this.a-=7},function(){this.b=this.f;this.a-=5},function(){this.b=this.v;this.a-=5},
function(){this.b=this.g;this.a-=5},function(){this.b=this.w;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.F(J(this));this.a-=7},function(){this.a-=5},function(){this.b=N(this,this.f);this.a-=4},function(){this.b=N(this,this.v);this.a-=4},function(){this.b=N(this,this.g);this.a-=4},function(){this.b=N(this,this.w);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.F(J(this)));
this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){this.b=O(this,this.f);this.a-=4},function(){this.b=O(this,this.v);this.a-=4},function(){this.b=O(this,this.g);this.a-=4},function(){this.b=O(this,this.w);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.F(J(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){this.b=R(this,this.f);this.a-=4},function(){this.b=R(this,this.v);this.a-=
4},function(){this.b=R(this,this.g);this.a-=4},function(){this.b=R(this,this.w);this.a-=4},function(){this.b=R(this,this.i);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.F(J(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=S(this,this.f);this.a-=4},function(){this.b=S(this,this.v);this.a-=4},function(){this.b=S(this,this.g);this.a-=4},function(){this.b=S(this,this.w);this.a-=4},function(){this.b=S(this,this.i);this.a-=4},function(){this.b=
S(this,this.j);this.a-=4},function(){this.b=S(this,this.F(J(this)));this.a-=7},function(){this.b=S(this,this.b);this.a-=4},function(){this.b=P(this,this.f);this.a-=4},function(){this.b=P(this,this.v);this.a-=4},function(){this.b=P(this,this.g);this.a-=4},function(){this.b=P(this,this.w);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.F(J(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=
Qb(this,this.f);this.a-=4},function(){this.b=Qb(this,this.v);this.a-=4},function(){this.b=Qb(this,this.g);this.a-=4},function(){this.b=Qb(this,this.w);this.a-=4},function(){this.b=Qb(this,this.i);this.a-=4},function(){this.b=Qb(this,this.j);this.a-=4},function(){this.b=Qb(this,this.F(J(this)));this.a-=7},function(){this.b=Qb(this,this.b);this.a-=4},function(){this.b=Q(this,this.f);this.a-=4},function(){this.b=Q(this,this.v);this.a-=4},function(){this.b=Q(this,this.g);this.a-=4},function(){this.b=
Q(this,this.w);this.a-=4},function(){this.b=Q(this,this.i);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.F(J(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){R(this,this.f);this.a-=4},function(){R(this,this.v);this.a-=4},function(){R(this,this.g);this.a-=4},function(){R(this,this.w);this.a-=4},function(){R(this,this.i);this.a-=4},function(){R(this,this.j);this.a-=4},function(){R(this,this.F(J(this)));this.a-=7},function(){R(this,this.b);
this.a-=4},function(){this.l&255&&(E(this,W(this)),this.a-=6);this.a-=5},function(){Lb(this,W(this));this.a-=10},function(){var a=V(this);this.l&255&&E(this,a);this.a-=10},Sb,function(){var a=V(this);this.l&255&&(X(this,this.o),E(this,a),this.a-=6);this.a-=11},function(){X(this,Kb(this));this.a-=11},function(){this.b=N(this,U(this));this.a-=7},function(){X(this,this.o);E(this,0);this.a-=11},function(){this.l&255||(E(this,W(this)),this.a-=6);this.a-=5},Tb,function(){var a=V(this);this.l&255||E(this,
a);this.a-=10},Sb,function(){var a=V(this);this.l&255||(X(this,this.o),E(this,a),this.a-=6);this.a-=11},Ub,function(){this.b=O(this,U(this));this.a-=7},function(){X(this,this.o);E(this,8);this.a-=11},function(){L(this)||(E(this,W(this)),this.a-=6);this.a-=5},function(){Mb(this,W(this));this.a-=10},function(){var a=V(this);L(this)||E(this,a);this.a-=10},function(){for(var a=U(this),b=this.m,c=this.b,d=this.o+-2&65535,e=1,f=0;0<e;){var h=b.o[a],g=b.C[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=V(this);L(this)||(X(this,this.o),E(this,a),this.a-=6);this.a-=11},function(){X(this,I(this));this.a-=11},function(){this.b=R(this,U(this));this.a-=7},function(){X(this,this.o);E(this,16);this.a-=11},function(){L(this)&&(E(this,W(this)),this.a-=6);this.a-=5},Tb,function(){var a=V(this);L(this)&&E(this,a);this.a-=10},function(){for(var a=U(this),b=this.m,c=this.o+-2&65535,d=1,e=0,f=0;0<d;){var h=b.l[a],g=b.G[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=V(this);L(this)&&(X(this,this.o),E(this,a),this.a-=6);this.a-=11},Ub,function(){this.b=S(this,U(this));this.a-=7},function(){X(this,this.o);E(this,24);this.a-=11},function(){Nb(this)||(E(this,W(this)),this.a-=6);this.a-=5},function(){K(this,W(this));this.a-=10},function(){var a=V(this);Nb(this)||E(this,a);this.a-=10},function(){var a=W(this);X(this,J(this));K(this,a);this.a-=
18},function(){var a=V(this);Nb(this)||(X(this,this.o),E(this,a),this.a-=6);this.a-=11},function(){X(this,J(this));this.a-=11},function(){this.b=P(this,U(this));this.a-=7},function(){X(this,this.o);E(this,32);this.a-=11},function(){Nb(this)&&(E(this,W(this)),this.a-=6);this.a-=5},function(){E(this,J(this));this.a-=5},function(){var a=V(this);Nb(this)&&E(this,a);this.a-=10},function(){var a=J(this);K(this,I(this));Mb(this,a);this.a-=5},function(){var a=V(this);Nb(this)&&(X(this,this.o),E(this,a),this.a-=
6);this.a-=11},Ub,function(){this.b=Qb(this,U(this));this.a-=7},function(){X(this,this.o);E(this,40);this.a-=11},function(){this.s&128||(E(this,W(this)),this.a-=6);this.a-=5},function(){var a=W(this);Hb(this,a&255|this.H&-256);this.b=a>>8;this.a-=10},function(){var a=V(this);this.s&128||E(this,a);this.a-=10},function(){this.H&=-513;this.a-=4},function(){var a=V(this);this.s&128||(X(this,this.o),E(this,a),this.a-=6);this.a-=11},function(){X(this,Jb(this)&255|this.b<<8);this.a-=11},function(){this.b=
Q(this,U(this));this.a-=7},function(){X(this,this.o);E(this,48);this.a-=11},function(){this.s&128&&(E(this,W(this)),this.a-=6);this.a-=5},function(){this.A=J(this)&65535;this.a-=5},function(){var a=V(this);this.s&128&&E(this,a);this.a-=10},function(){this.H|=512;this.a-=4},function(){var a=V(this);this.s&128&&(X(this,this.o),E(this,a),this.a-=6);this.a-=11},Ub,function(){R(this,U(this));this.a-=7},function(){X(this,this.o);E(this,56);this.a-=11}];
function Z(a){w.call(this,"ChipSet",a,Z);var b=a.model;b&&!Vb[b]&&u("Unrecognized ChipSet model: "+b);this.ba=Vb[b]||Wb;a.sound&&(this.o=null,window&&(this.o=window.AudioContext||window.webkitAudioContext),this.o&&new this.o);C(this)}y(Z);var Wb=1978.1,Vb={SI1978:Wb};m=Z.prototype;m.O=function(){return!1};
m.fa=function(a,b,c,d){this.m=b;this.a=c;this.J=d;this.u=a;if(this.ba==Wb){var e;a=Xb;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.l[g]?u("Input port 0x"+n(g,4)+" already registered"):c.l[g]=[h,!1]}var l;e=Yb;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.o[d]?u("Output port 0x"+n(d,4)+" already registered"):f.o[d]=[c,!1]}};
m.aa=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.$=function(a){return a?this.save():!0};m.reset=function(){this.j=14;this.b=8;this.g=this.i=this.f=this.c=this.l=0};m.save=function(){var a=new F(this);this.ba==Wb&&G(a,0,[this.j,this.b,this.l,this.c,this.f,this.g,this.i]);return a.data()};m.restore=function(a){a=a[0];this.ba==Wb&&(this.j=a[0],this.b=a[1],this.l=a[2],this.c=a[3],this.f=a[4],this.g=a[5],this.i=a[6]);return!0};m.start=function(){};m.stop=function(){};
function Zb(a,b,c){a.b&=~b;c&&(a.b|=b)}m.yb=function(){return this.j};m.zb=function(){return this.b};m.Ab=function(){return this.l};m.xb=function(){return this.c>>8-this.f&255};m.Cb=function(a,b){this.f=b};m.Eb=function(a,b){this.g=b};m.Db=function(a,b){this.c=b<<8|this.c>>8};m.Fb=function(a,b){this.i=b};m.Gb=function(){};var Xb={0:Z.prototype.yb,1:Z.prototype.zb,2:Z.prototype.Ab,3:Z.prototype.xb},Yb={2:Z.prototype.Cb,3:Z.prototype.Eb,4:Z.prototype.Db,5:Z.prototype.Fb,6:Z.prototype.Gb};
wa(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Z(d);Ja(d,c)}});function $b(a){w.call(this,"ROM",a,$b);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.g=a.file;this.o=da(this.g);if(this.g){a=this.g;var b=ea(this.o);"json"!=b&&"hex"!=b&&(a=ka()+"/api/v1/dump?file="+this.g+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){ac(c,a,b,f)})}}y($b);var bc=[0,5];
$b.prototype.fa=function(a,b,c,d){this.m=b;this.a=c;this.J=d;cc(this)};$b.prototype.aa=function(){this.i&&(this.J&&this.J.a(this.id,this.j,this.c,this.i),delete this.i);return!0};$b.prototype.$=function(){return!0};
function ac(a,b,c,d){if(d)a.I("Unable to load system ROM (error "+d+": "+b+")");else{Ha(a.Na,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){u("Empty ROM: "+b);return}if(1==a.b.length){u(a.b[0]);return}}catch(g){a.I("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]);cc(a)}}
function cc(a){if(!Na(a))if(!a.g)C(a);else if(a.b&&a.m){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.ga=!0;a.I(b)}else if(dc(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.m,h=d.c,g=[],l=d.j>>>f.c;0<h&&l<f.b.length;)g.push(f.b[l++]),h-=f.m;f=d.m;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.m}}delete a.b}C(a)}}
function dc(a,b){if(Va(a.m,b,a.c,a.l?1:gb)){var c;for(c=0;c<a.b.length;c++)$a(a.m,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<bc.length;c++)$a(a.m,bc[c],118);Gb(a.a,function(a){return function(b){if(0<=bc.indexOf(b)){var c=!1,h=a.a,g=a.J;if(5==b)switch(c=!0,h.v){case 2:ec(a,String.fromCharCode(h.w));break;case 9:for(var l=I(h),k="",q=255;q--;){var r=a.a.F(l++);if(36==r)break;k+=String.fromCharCode(r)}ec(a,k);break;default:c=!1}c?Tb.call(h):g&&(a.U("\nCP/M vector 0x"+n(b,4)),E(h,b),wb(g));b=!0}else b=!1;
return b}}(a));Ib(a.a,b)}return!0}return!1}function ec(a,b){b=b.replace(/\r/g,"");a.ea&&(a.ea.value+=b,a.ea.scrollTop=a.ea.scrollHeight)}wa(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new $b(d);Ja(d,c)}});function fc(a){w.call(this,"RAM",a,fc);this.f=a.addr;this.c=a.size;this.b=!1}y(fc);m=fc.prototype;m.fa=function(a,b,c,d){this.m=b;this.a=c;this.J=d;C(this)};m.aa=function(a,b){b||this.reset();return!0};m.$=function(a){return a?this.save():!0};
m.reset=function(){!this.b&&this.c&&Va(this.m,this.f,this.c,1)&&(this.b=!0);this.b||u("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=A(c),d=new fc(d);Ja(d,c)}});function gc(a){w.call(this,"Keyboard",a,gc);this.reset();C(this)}y(gc);var hc={"1p":49,"2p":50,coin:51,left:37,right:39,fire:32},ic={65:37,68:39,76:32};gc.prototype.reset=function(){this.a={}};
gc.prototype.O=function(a,b,c){var d=this;a=a+"-"+b;if(void 0===this.B[a])switch(b){case "kbd":return c.onkeydown=function(a){return jc(d,a,!0)},c.onkeyup=function(a){return jc(d,a,!1)},!0;default:if(void 0!==hc[b])return this.B[a]=c,a=function(a,b){return function(){kc(a,b,!0)}}(this,b),b=function(a,b){return function(){kc(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}return!1};
gc.prototype.fa=function(a,b,c,d){this.J=d;this.G=Ra(a,"ChipSet")};function jc(a,b,c){var d=!0,e;a:{e=b.keyCode;e=ic[e]||e;for(var f in hc)if(hc[f]===e){e=f;break a}e=null}e&&(d=kc(a,e,c));d||b.preventDefault();return d}function kc(a,b,c){a.a[b]=c;if(a.G)switch(b){case "1p":Zb(a.G,4,c);break;case "2p":Zb(a.G,2,c);break;case "coin":Zb(a.G,1,c);break;case "left":Zb(a.G,32,c);break;case "right":Zb(a.G,64,c);break;case "fire":Zb(a.G,16,c)}return!1}
wa(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new gc(d);Ja(d,c)}});
function lc(a,b,c,d,e){var f=this;this.Za=ra("Gecko/");var h=["","moz","ms","webkit"];w.call(this,"Video",a,lc);this.D=a.screenWidth;this.o=a.screenHeight;this.C=a.bufferAddr;this.ub=a.bufferRAM;var g=a.bufferFormat;this.S=g&&mc[g.toLowerCase()]||nc;this.cb=a.bufferCols;this.Oa=a.bufferRows;this.sb=this.R=a.cellWidth||1;this.T=a.cellHeight||1;this.Z=a.bufferBits||1;this.vb=a.bufferLeft||0;if(this.c=a.bufferRotate)this.c=this.c%360,0<this.c&&(this.c-=360),-90!=this.c&&(this.I("unsupported buffer rotation: "+
this.c),this.c=0);this.ab=a.interruptRate;this.ca=a.refreshRate||60;this.i=b;this.g=c;this.K=(this.wb=d)||b||null;this.Xa=this.D/this.cb|0;this.Ya=this.o/this.Oa|0;b=a.smoothing;(c=Ba.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.g[d]){this.g[d]=b;break}if(this.f=a.screenRotate)this.f=this.f%360,0<this.f&&(this.f-=360),-90!=this.f?(this.I("unsupported screen rotation: "+this.f),this.f=0):(this.g.translate(0,
this.o),this.g.rotate(this.f*Math.PI/180),this.g.scale(this.o/this.D,this.D/this.o));oc(this);if(this.b=e)if(this.b.ka=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.b.ka){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){pc(f,document.fullscreenElement||document.msFullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement?!0:!1)},!1);break}for(c=0;c<h.length;c++)if(d=
h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){pc(f,null)},!1);break}}if(this.s=a.fontROM)"json"!=ea(this.s)&&(this.s=ka()+"/api/v1/dump?file="+this.s+"&format=bytes"),p(this.s,null,!0,function(a,b,c){qc(f,a,b,c)})}y(lc);var nc=0,mc={vt100:2};
function oc(a){a.j=a.cb*a.R;a.H=a.Oa*a.T;var b=a.j,c=a.H;a.c&&(b=a.H,c=a.j);a.Ua=a.g.createImageData(b,c);a.l=document.createElement("canvas");a.l.width=b;a.l.height=c;a.Wa=a.l.getContext("2d");rc(a);1<a.R&&(a.Y={},a.ra=Array(132),a.Y[0]=sc(a,a.R,a.T),a.Y[1]=sc(a,2*a.R,a.T),a.Y[2]=sc(a,2*a.R,2*a.T))}
lc.prototype.fa=function(a,b,c,d){this.u=a;this.m=b;this.a=c;this.J=d;this.S||(this.G=Ra(a,"ChipSet"))&&this.G.ba==Wb&&(this.S=1,rc(this));!this.ub&&(this.da=(this.j*this.Z>>3)*this.H,Va(this.m,this.C,this.da,3)&&(this.bb=this.da>>1,this.eb=16/this.Z|0,this.Ma=!1,void 0===this.X||this.X.length!=this.bb))&&(this.X=Array(this.bb));(this.L=Ra(a,"Keyboard"))&&this.i&&this.L.O(this.wb?"textarea":"canvas","kbd",this.K);this.s||C(this)};
function qc(a,b,c,d){if(d)a.I("Unable to load font ROM (error "+d+": "+b+")");else{Ha(a.Na,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f.length){u("Empty font ROM: "+b);return}if(1==f.length){u(f[0]);return}if(2048!=f.length){a.I("Unrecognized font data length ("+f.length+")");return}}catch(h){a.I("Font ROM data error: "+h.message);return}(a.g||a.J)&&C(a)}}
function sc(a,b,c){var d=8>=a.sb?8:16,e=8<d?15:0,f=null.length/d,h={R:b,T:c};h.canvas=document.createElement("canvas");h.canvas.width=16*b;h.canvas.height=f/16*c;h.context=h.canvas.getContext("2d");for(var g=h.context.createImageData(b,c),l=0;l<f;l++){for(var k=0,q=k;k<a.T;k++)for(var r=null[l*d+(e+k&d-1)],t=0;t<c/a.T;t++){for(var v=0,T=v;v<a.R;v++)for(var ba=r&128>>v,H=0;H<b/a.R;H++)tc(a,g,T,q,ba?1:0),T++;q++}h.context.putImageData(g,(l&15)*b,(l>>4)*c)}return h}
lc.prototype.O=function(a,b,c){var d=this;switch(b){case "fullScreen":return this.B[b]=c,this.b&&this.b.ka?c.onclick=function(){d.ka()}:c.parentNode.removeChild(c),!0}return!1};
lc.prototype.ka=function(){var a=!1;if(this.b){if(this.b.ka){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.D/this.o;b>c&&(a=Math.round(c/b*100)+"%")}this.Za?(this.i.style.width=a,this.i.style.width=a,this.i.style.display="block",this.i.style.margin="auto"):(this.b.style.width=a,this.b.style.height="auto");this.b.style.backgroundColor="black";this.b.ka();a=!0}this.K&&this.K.focus()}return a};
function pc(a,b){!b&&a.b&&(a.Za?a.i.style.width=a.i.style.height="":a.b.style.width=a.b.style.height="")}function rc(a){a.M=1<<a.Z;a.A=Array(a.M+2);a.A[0]=[0,0,0,255];a.A[1]=[255,255,255,255];1==a.S&&(a.A[a.M+0]=[255,255,0,255],a.A[a.M+1]=[0,255,0,255])}function tc(a,b,c,d,e){d=a.c?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.S&&(208<=c&&236>c?e=a.M+0:28<=c&&72>c&&(e=a.M+1));a=a.A[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
wa(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=A(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(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");ra("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new lc(d,e,h,f,c);Ja(d,c)}});
function E(a,b,c){this.id=a.id;this.key=rc(a,b,c);this.J=a.J;sc(this,a.eb)}function rc(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){sc(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 sc(a,b){a[a.id]={};b&&F(a,"parms",b);a.a=!1}function tc(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 uc(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){r(c.message||c),b=!1}return b}function vc(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 wc(a,b){return a[a.id][b]||null}function F(a,b,c){try{a[a.id][b]=c}catch(d){}}
function xc(a,b,c){t.call(this,"Computer",a,xc);this.h.N=!1;yc(this,b);this.G=rb(this,"autoPower",a);this.f=0;this.K=a.busWidth||a.buswidth;this.b=zc;this.s=null;this.l=this.H=!1;this.L=rb(this,"url")||"";(Math.random()+.1).toString(36);this.c=Ac(this);if(this.a=Ia("CPU",this.id)){this.J=Ia("Debugger",this.id);this.j=[];for(b=null;b=Ra(this,"Video",b);)this.j.push(b);this.o=new Ta({id:this.pa+".bus",busWidth:this.K},this.a,this.J);var d,e=x(this.id);if((this.g=Ia("Panel",this.id))&&this.g.ba)for(b=
0;b<e.length;b++)d=e[b],d.I=this.g.I,d.R=this.g.R,d.ba=this.g.ba;this.R("PC8080 v1.23.3\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.ca&&d.ca(this,this.o,this.a,this.J);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.u=d:this.b=parseInt(d,10));var f;if(a=rb(this,"state")||(f=!0,a.state))b=this.C=a,f||(this.l=!0,this.b=zc),this.b&&(this.A=new E(this,"1.23.3"),vc(this.A)?b=null:delete this.A);
!b&&this.b&&(b=Bc(this))&&(this.l=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.u=null,h.l=!1,h.I("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.s=b,h.H=!0);B(h)})}else B(this);this.B.power||(this.G=!0);!c&&this.G&&Cc(this,this.ya)}else r("Unable to find CPU component")}w(xc);var zc=0;
function yc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){r(d.message+" ("+c+")")}}a.m=b}function rb(a,b,c){var d=b.toLowerCase(),d=Ba[b]||Ba[d];void 0===d&&a.m&&(d=a.m[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Cc(a,b,c){for(var d=x(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Na(f)){Na(f,function(){Cc(a,b,c)});return}}b.call(a,c)}
function Dc(a,b){var c=new E(a,"1.23.3","validate");if(vc(c)&&uc(c)){var d=wc(c,"timestamp"),e=b?wc(b,"timestamp"):"unknown";d!=e&&(a.I("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=xc.prototype;
m.ya=function(a){void 0===a&&(a=this.b||(this.s?1:zc));if(!this.f){this.f++;var b=!1,c=!1;this.D=!1;var d=this.A||new E(this,"1.23.3");if(-1==a)b=!0;else if(a>zc){if(vc(d,this.s)){this.i=new E(this,"1.23.3","failsafe");vc(this.i)&&(Ec(this,d),a=2,sc(this.i));F(this.i,"timestamp",ka());tc(this.i);var e=this.b&&!this.l;if(1==a||ma("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=uc(d)){var f=wc(d,"code"),h=wc(d,"data");f&&("ok"==f?vc(d,h):("error"==f&&
"no machine state"!=h?(this.I("Error: "+h),"unable to verify user"==h&&(qa("user",""),this.c=null)):this.R(f+": "+h),sc(d),vc(d)?(c=uc(d),e=!0):c=!1))}e&&Dc(this,c?d:null)}else 2==a&&d.clear()}else Dc(this);delete this.s;delete this.A}e=x(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=Fc(this,h,d,b,c));b=[d,a,c];-1!=a?Cc(this,this.Va,b):this.Va(b)}};
function Fc(a,b,c,d,e){if(!b.h.N){b.h.N=!0;if(b.Y){var f=null;e&&((f=wc(c,b.id))||(f=wc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Y(f,d)&&f&&(r("Unable to restore state for "+b.type),a.C&&!a.H?(c.clear(),a.b=zc,window&&window.location.reload()):a.D=!0,b.Y(null),e=!1)}if(!d&&b.Pa)for(a=b.Pa.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Va=function(a){var b=a[0],c=0>a[1];a=a[2];this.M=!0;this.h.N=!0;var d=this.B.power;d&&(d.textContent="Shutdown");this.a&&(Fc(this,this.a,b,c,a),vb(this.a));this.D&&(Ec(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
function Ec(a,b){if(ma("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.c||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.L;e.user=c;e.type="bug";e.data=d;p("http://www.pcjs.org/api/v1/report",e,!0)}}
function Gc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new E(a,"1.23.3"),h=new E(a,"1.23.3","validate"),g=ka();F(h,"timestamp",g);F(f,"timestamp",g);F(f,"version","1.23.3");F(f,"url",window?window.location.href:null);F(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.X&&(c&&wb(a.a),d=a.a.X(b,c),"object"===typeof d&&F(f,a.a.id,d),c&&(a.a.h.N=!1,!1===d&&(e=null)));for(var g=x(a.id),l=0;l<g.length;l++){var k=g[l];k.h.N&&(k.X&&(d=k.X(b,c),"object"===typeof d&&F(f,k.id,d)),c&&(k.h.N=
!1,!1===d&&(e=null)))}e&&(c?(g=d=!1,b?(a.c&&Hc(a,a.c,f.toString()),tc(h)&&tc(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.h.N=!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=x(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=x(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=x(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.O=function(a,b,c){var d=this;switch(b){case "power":return this.B[b]=c,c.onclick=function(){d.f||(d.h.N?Gc(d,!1,!0):Cc(d,d.ya))},!0;case "reset":return this.B[b]=c,c.onclick=function(){if(d.h.N&&!d.f)if(d.b&&!d.u){var a=ma("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Gc(d,a,!0);!a&&d.C?window&&window.location.reload():d.ya(zc)}else d.reset(),d.a&&vb(d.a)},!0;case "save":if(fa(la(),"pcjs.org")){c.parentNode.removeChild(c);break}this.B[b]=
c;c.onclick=function(){var a=Ac(d,!0);if(a){var b=!!(d.b&&!d.u||d.C),c=Gc(d,b);b?Hc(d,a,c):d.I("Resume disabled, machine state not saved")}};return!0}return!1};
function Ac(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=Ic(a,c))||a.I("The user ID is invalid."))):b&&a.I("Browser local storage is not available"));return c}
function Ic(a,b){a.c=null;var c=p(la()+"/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 Bc(a){var b=null;a.c&&(b=la()+"/api/v1/user?req=load&user="+a.c+"&state="+rc(a,"1.23.3"));return b}
function Hc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=rc(a,"1.23.3");d.data=c;b=p(la()+"/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.I("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.I(c),qa("user",""),a.c=null)}}
function Ra(a,b,c){a=x(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}function Bb(a,b){if(a.j.length){var c=0,d=0;b&&window&&(c=window.scrollX,d=window.scrollY);var e=a.j[0];e.D&&e.D.focus();b&&window&&window.scrollTo(c,d)}}m.ha=function(a){this.a&&this.a.ha(a);this.g&&this.g.ha(a)};
function Cb(a,b){for(var c=0;c<a.j.length;c++){var d=a.j[c],e=!0;if(0<=b){if(b&1)e=d.a,e.D=e.D&-8|10,e=!1;else{var f=d.a;f.D=f.D&-8|9}if(f=e&&d.da){for(var f=d.o,h=d.W,g=!0,l=d.aa>>>f.c;0<h&&l<f.b.length;)f.b[l].T&&(f.b[l].T=g=!1,f.b[l].Xa=!0),h-=f.f,l++;f=g}f&&(e=!1)}if(e){var g=d.aa,l=g+d.W,k=0,u=0,q=0,e=d.j,ja=0,f=d.A,ic=h=0,Ka=d.S,Oc=(1<<Ka)-1;d.lb&&(Ka=-Ka,ic=16+Ka);for(;g<l;){var A;A=d.o;var aa=g,La=aa&A.g,M=(aa&A.i)>>>A.c;A=La!=A.g?A.b[M].fb(La,aa):A.b[M++].Na(La,aa)|A.b[M&A.u].Na(0,aa+1)<<
8;if(d.da&&A===d.L[k])u+=d.Ua;else{d.L[k]=A;(aa=ic)&&(A=A>>8|(A&255)<<8);u<e&&(e=u);for(La=d.Ua;La--;){var ba=A>>aa&Oc,M=d.Sa,I=u++,$a=ba,ba=void 0,ba=d.c?(M.height-I-1)*M.width+q:I+q*M.width;$a&&1==d.V&&(208<=I&&236>I?$a=d.K+0:28<=I&&72>I&&($a=d.K+1));I=d.s[$a];ba*=I.length;M.data[ba]=I[0];M.data[ba+1]=I[1];M.data[ba+2]=I[2];M.data[ba+3]=I[3];aa+=Ka}u>ja&&(ja=u);q<f&&(f=q);q>=h&&(h=q+1)}g+=2;k++;if(u>=d.j&&(u=0,q++,q>d.A))break}d.da=!0;e<d.j&&(g=ja-e,h-=f,d.c&&(l=e,k=g,e=f,g=h,f=d.j-(l+k),h=k),d.jb.putImageData(d.Sa,
0,0,e,f,g,h),d.g.drawImage(d.l,0,0,d.l.width,d.l.height,0,0,d.M,d.C))}}}wa(function(){for(var a=z(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=y(c),c=z(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=y(f),h=new xc(h,d,!0);Ja(h,f);h.G&&Cc(h,h.ya)}});sa.show.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=Ia("Computer",c.id))&&c.M&&!c.h.N&&c.ya(-1)}});
sa.exit.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=Ia("Computer",c.id))&&c.h.N&&Gc(c,!(!c.b||c.u),!0)}});var Jc=0;function Kc(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)):Lc(g,a,b,c,d,e,f)})}
function Lc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ha(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?Mc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Mc(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,u=/( [a-z]+=)(['"])(.*?)\2/g;k=u.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);Mc(a,b,c)}})}else c(a,null)}
function Nc(a,b,c,d){function e(a){if(void 0===g){var b=h&&z(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ha(a))}function f(a){e("Error: "+a);l&&(--Jc||ya(!0));l=!1}var h,g,l=!0;Jc++;Ga[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var u=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));u.appendChild(q)}c||
(c="/versions/pc8080/1.23.3/components.xsl");k=function(d,g){g?Kc(c,null,null,!1,e,function(d,k){if(k)if(Ha(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--Jc||ya(!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),--Jc||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)?Kc(b,a,d,!0,e,k):Lc(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(ja){f(ja.message)}return l}window.embedPC8080=function(a,b,c,d){ya(!1);return Nc(a,b,c,d)};window.enableEvents=ya;window.sendEvent=za;
function Pc(a,b,c,d){if(!c&&b){d.push(b);a=Ga[d[0]];b=null;for(var e in a)if(fa(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Qc(b,d)}):Qc(null,d)}else r("Error ("+c+") requesting "+a)}
function Qc(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=Ga[f],l={},k;for(k in g){var u=g[k],q=ea(k);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[k]);){var ja=d[2];ja&&(g[ja]||(u=u.replace(d[0],"")))}d=k=da(k)}else"xsl"==q&&(e=k=da(k));l[k]=u}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,
function F(a,b,c){this.id=a.id;this.key=uc(a,b,c);this.J=a.J;vc(this,a.ob)}function uc(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){vc(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 vc(a,b){a[a.id]={};b&&G(a,"parms",b);a.a=!1}function wc(a){var b=!0;if(na()){var c=JSON.stringify(a[a.id]);qa(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function xc(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function yc(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 zc(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Ac(a,b,c){w.call(this,"Computer",a,Ac);this.h.N=!1;Bc(this,b);this.G=rb(this,"autoPower",a);this.f=0;this.K=a.busWidth||a.buswidth;this.b=Cc;this.s=null;this.l=this.H=!1;this.L=rb(this,"url")||"";(Math.random()+.1).toString(36);this.c=Dc(this);if(this.a=Ia("CPU",this.id)){this.J=Ia("Debugger",this.id);this.j=[];for(b=null;b=Ra(this,"Video",b);)this.j.push(b);this.m=new Ta({id:this.Na+".bus",busWidth:this.K},this.a,this.J);var d,e=z(this.id);if((this.g=Ia("Panel",this.id))&&this.g.ea)for(b=
0;b<e.length;b++)d=e[b],d.I=this.g.I,d.U=this.g.U,d.ea=this.g.ea;this.U("PC8080 v1.23.3\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.fa&&d.fa(this,this.m,this.a,this.J);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.u=d:this.b=parseInt(d,10));var f;if(a=rb(this,"state")||(f=!0,a.state))b=this.C=a,f||(this.l=!0,this.b=Cc),this.b&&(this.A=new F(this,"1.23.3"),yc(this.A)?b=null:delete this.A);
!b&&this.b&&(b=Ec(this))&&(this.l=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.u=null,h.l=!1,h.I("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.s=b,h.H=!0);C(h)})}else C(this);this.B.power||(this.G=!0);!c&&this.G&&Fc(this,this.Aa)}else u("Unable to find CPU component")}y(Ac);var Cc=0;
function Bc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.o=b}function rb(a,b,c){var d=b.toLowerCase(),d=Ba[b]||Ba[d];void 0===d&&a.o&&(d=a.o[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Fc(a,b,c){for(var d=z(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Na(f)){Na(f,function(){Fc(a,b,c)});return}}b.call(a,c)}
function Gc(a,b){var c=new F(a,"1.23.3","validate");if(yc(c)&&xc(c)){var d=zc(c,"timestamp"),e=b?zc(b,"timestamp"):"unknown";d!=e&&(a.I("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Ac.prototype;
m.Aa=function(a){void 0===a&&(a=this.b||(this.s?1:Cc));if(!this.f){this.f++;var b=!1,c=!1;this.D=!1;var d=this.A||new F(this,"1.23.3");if(-1==a)b=!0;else if(a>Cc){if(yc(d,this.s)){this.i=new F(this,"1.23.3","failsafe");yc(this.i)&&(Hc(this,d),a=2,vc(this.i));G(this.i,"timestamp",ja());wc(this.i);var e=this.b&&!this.l;if(1==a||la("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=xc(d)){var f=zc(d,"code"),h=zc(d,"data");f&&("ok"==f?yc(d,h):("error"==f&&
"no machine state"!=h?(this.I("Error: "+h),"unable to verify user"==h&&(qa("user",""),this.c=null)):this.U(f+": "+h),vc(d),yc(d)?(c=xc(d),e=!0):c=!1))}e&&Gc(this,c?d:null)}else 2==a&&d.clear()}else Gc(this);delete this.s;delete this.A}e=z(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=Ic(this,h,d,b,c));b=[d,a,c];-1!=a?Fc(this,this.fb,b):this.fb(b)}};
function Ic(a,b,c,d,e){if(!b.h.N){b.h.N=!0;if(b.aa){var f=null;e&&((f=zc(c,b.id))||(f=zc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.aa(f,d)&&f&&(u("Unable to restore state for "+b.type),a.C&&!a.H?(c.clear(),a.b=Cc,window&&window.location.reload()):a.D=!0,b.aa(null),e=!1)}if(!d&&b.Va)for(a=b.Va.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.fb=function(a){var b=a[0],c=0>a[1];a=a[2];this.M=!0;this.h.N=!0;var d=this.B.power;d&&(d.textContent="Shutdown");this.a&&(Ic(this,this.a,b,c,a),vb(this.a));this.D&&(Hc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
function Hc(a,b){if(la("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.c||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.L;e.user=c;e.type="bug";e.data=d;p("http://www.pcjs.org/api/v1/report",e,!0)}}
function Jc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new F(a,"1.23.3"),h=new F(a,"1.23.3","validate"),g=ja();G(h,"timestamp",g);G(f,"timestamp",g);G(f,"version","1.23.3");G(f,"url",window?window.location.href:null);G(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.$&&(c&&wb(a.a),d=a.a.$(b,c),"object"===typeof d&&G(f,a.a.id,d),c&&(a.a.h.N=!1,!1===d&&(e=null)));for(var g=z(a.id),l=0;l<g.length;l++){var k=g[l];k.h.N&&(k.$&&(d=k.$(b,c),"object"===typeof d&&G(f,k.id,d)),c&&(k.h.N=
!1,!1===d&&(e=null)))}e&&(c?(g=d=!1,b?(a.c&&Kc(a,a.c,f.toString()),wc(h)&&wc(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.h.N=!1,b=a.B.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.m&&this.m.reset&&this.m.reset();for(var a=z(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.m&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=z(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=z(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.O=function(a,b,c){var d=this;switch(b){case "power":return this.B[b]=c,c.onclick=function(){d.f||(d.h.N?Jc(d,!1,!0):Fc(d,d.Aa))},!0;case "reset":return this.B[b]=c,c.onclick=function(){if(d.h.N&&!d.f)if(d.b&&!d.u){var a=la("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Jc(d,a,!0);!a&&d.C?window&&window.location.reload():d.Aa(Cc)}else d.reset(),d.a&&vb(d.a)},!0;case "save":if(fa(ka(),"pcjs.org")){c.parentNode.removeChild(c);break}this.B[b]=
c;c.onclick=function(){var a=Dc(d,!0);if(a){var b=!!(d.b&&!d.u||d.C),c=Jc(d,b);b?Kc(d,a,c):d.I("Resume disabled, machine state not saved")}};return!0}return!1};
function Dc(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=Lc(a,c))||a.I("The user ID is invalid."))):b&&a.I("Browser local storage is not available"));return c}
function Lc(a,b){a.c=null;var c=p(ka()+"/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){u(e.message+" ("+d+")")}return a.c}function Ec(a){var b=null;a.c&&(b=ka()+"/api/v1/user?req=load&user="+a.c+"&state="+uc(a,"1.23.3"));return b}
function Kc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=uc(a,"1.23.3");d.data=c;b=p(ka()+"/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.I("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.I(c),qa("user",""),a.c=null)}}
function Ra(a,b,c){a=z(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}function Bb(a,b){if(a.j.length){var c=0,d=0;b&&window&&(c=window.scrollX,d=window.scrollY);var e=a.j[0];e.K&&e.K.focus();b&&window&&window.scrollTo(c,d)}}m.ja=function(a){this.a&&this.a.ja(a);this.g&&this.g.ja(a)};
function Cb(a,b){for(var c=0;c<a.j.length;c++){var d=a.j[c],e=!0;if(0<=b){if(d.ab)if(b&1)e=d.a,e.D=e.D&-8|10,e=!1;else{var f=d.a;f.D=f.D&-8|9}if(f=e&&d.Ma){for(var f=d.m,h=d.da,g=!0,l=d.C>>>f.c;0<h&&l<f.b.length;)f.b[l].V&&(f.b[l].V=g=!1,f.b[l].hb=!0),h-=f.m,l++;f=g}f&&(e=!1)}if(e)if(1<d.R)switch(d.S){case 2:for(g=d.C,e=-1,f=0;f<d.Oa+1;f++){for(var h=0,l=g,k=e;h<d.ra.length;){var q=Ya(d.m,l++);if(127==(q&127)){g=Ya(d.m,l++);e=g&96;g=d.C|(g&31)<<8|Ya(d.m,l);break}d.ra[h++]=q}if(0<=k){var r;switch(k){case 96:r=
0;break;case 64:r=1;break;case 32:r=2;break;case 0:r=2}if(l=d.Y[r])for(k=0;k<h;k++){var q=d,t=l,v=f-1,T=d.Wa,ba=void 0,H=void 0,pa=d.ra[k]&127;T?(ba=k*t.R,H=v*t.T):(ba=k*q.Xa+0,H=v*q.Ya+0);v=(pa&15)*t.R;pa=(pa>>4)*t.T;T?T.drawImage(t.canvas,v,pa,t.R,t.T,ba,H,t.R,t.T):q.g.drawImage(t.canvas,v,pa,t.R,t.T,ba,H,q.Xa,q.Ya)}}}}else{g=d.C;l=g+d.da;t=q=k=0;e=d.j;T=0;f=d.H;ba=h=0;H=d.Z;pa=(1<<H)-1;d.vb&&(H=-H,ba=16+H);for(;g<l;){var v=d.m,ca=g,La=ca&v.f,Ma=(ca&v.g)>>>v.c,v=La!=v.f?v.b[Ma].pb(La,ca):v.b[Ma++].Ka(La,
ca)|v.b[Ma&v.u].Ka(0,ca+1)<<8;if(d.Ma&&v===d.X[k])q+=d.eb;else{d.X[k]=v;(ca=ba)&&(v=v>>8|(v&255)<<8);q<e&&(e=q);for(La=d.eb;La--;)Ma=v>>ca&pa,tc(d,d.Ua,q++,t,Ma),ca+=H;q>T&&(T=q);t<f&&(f=t);t>=h&&(h=t+1)}g+=2;k++;if(q>=d.j&&(q=0,t++,t>d.H))break}d.Ma=!0;e<d.j&&(g=T-e,h-=f,d.c&&(l=e,k=g,e=f,g=h,f=d.j-(l+k),h=k),d.Wa.putImageData(d.Ua,0,0,e,f,g,h),d.g.drawImage(d.l,0,0,d.l.width,d.l.height,0,0,d.D,d.o))}}}
wa(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=A(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=A(f),h=new Ac(h,d,!0);Ja(h,f);h.G&&Fc(h,h.Aa)}});sa.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=Ia("Computer",c.id))&&c.M&&!c.h.N&&c.Aa(-1)}});
sa.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=Ia("Computer",c.id))&&c.h.N&&Jc(c,!(!c.b||c.u),!0)}});var Mc=0;function Nc(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)):Oc(g,a,b,c,d,e,f)})}
function Oc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ha(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?Pc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Pc(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,q=/( [a-z]+=)(['"])(.*?)\2/g;k=q.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);Pc(a,b,c)}})}else c(a,null)}
function Qc(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=ha(a))}function f(a){e("Error: "+a);l&&(--Mc||ya(!0));l=!1}var h,g,l=!0;Mc++;Ga[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=k:r.appendChild(document.createTextNode(k));q.appendChild(r)}c||
(c="/versions/pc8080/1.23.3/components.xsl");k=function(d,g){g?Nc(c,null,null,!1,e,function(d,k){if(k)if(Ha(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--Mc||ya(!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),--Mc||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)?Nc(b,a,d,!0,e,k):Oc(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(t){f(t.message)}return l}window.embedPC8080=function(a,b,c,d){ya(!1);return Qc(a,b,c,d)};window.enableEvents=ya;window.sendEvent=za;
function Rc(a,b,c,d){if(!c&&b){d.push(b);a=Ga[d[0]];b=null;for(var e in a)if(fa(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Sc(b,d)}):Sc(null,d)}else u("Error ("+c+") requesting "+a)}
function Sc(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=Ga[f],l={},k;for(k in g){var q=g[k],r=ea(k);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(g[k]);){var t=d[2];t&&(g[t]||(q=q.replace(d[0],"")))}d=k=da(k)}else"xsl"==r&&(e=k=da(k));l[k]=q}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=Ia("Computer",a),e=Ia("Debugger",a);if(d){var f=Gc(d,!0),h=d.m?JSON.stringify(d.m):null;b||(b="/versions/pcjs/1.23.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,eb:h}))return!0;p(b,null,!0,function(c,d,e){Pc(c,d,e,[a,da(b,!0),h,f])});return!0}r("Unable to identify machine '"+a+"'");return!1};})();
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.",u(c)):u("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Ia("Computer",a),e=Ia("Debugger",a);if(d){var f=Jc(d,!0),h=d.o?JSON.stringify(d.o):null;b||(b="/versions/pcjs/1.23.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,ob:h}))return!0;p(b,null,!0,function(c,d,e){Rc(c,d,e,[a,da(b,!0),h,f])});return!0}u("Unable to identify machine '"+a+"'");return!1};})();

View file

@ -1061,6 +1061,18 @@
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellWidth">
<xsl:choose>
<xsl:when test="@cellWidth"><xsl:value-of select="@cellWidth"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="cellHeight">
<xsl:choose>
<xsl:when test="@cellHeight"><xsl:value-of select="@cellHeight"/></xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charCols">
<xsl:choose>
<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
@ -1083,6 +1095,12 @@
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="fontColor">
<xsl:choose>
<xsl:when test="@fontColor"><xsl:value-of select="@fontColor"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="touchScreen">
<xsl:choose>
<xsl:when test="@touchscreen"><xsl:value-of select="@touchscreen"/></xsl:when>
@ -1125,7 +1143,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"/>',screenRotate:<xsl:value-of select="$screenRotate"/>,bufferAddr:<xsl:value-of select="$bufferAddr"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,smoothing:<xsl:value-of select="$smoothing"/>,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"/>,bufferRAM:<xsl:value-of select="$bufferRAM"/>,bufferFormat:'<xsl:value-of select="$bufferFormat"/>',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"/>,cellWidth:<xsl:value-of select="$cellWidth"/>,cellHeight:<xsl:value-of select="$cellHeight"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,fontROM:'<xsl:value-of select="$fontROM"/>',fontColor:'<xsl:value-of select="$fontColor"/>',touchScreen:'<xsl:value-of select="$touchScreen"/>',autoLock:<xsl:value-of select="$autoLock"/>,aspectRatio:<xsl:value-of select="$aspectRatio"/>,smoothing:<xsl:value-of select="$smoothing"/>,interruptRate:<xsl:value-of select="$interruptRate"/>,refreshRate:<xsl:value-of select="$refreshRate"/></xsl:with-param>
</xsl:call-template>
</xsl:template>