First successful display of a VT100 test screen

This commit is contained in:
Jeff Parsons 2016-08-01 16:22:22 -07:00 committed by Jeff Parsons
commit 829fb48bdc
9 changed files with 520 additions and 410 deletions

View file

@ -47,7 +47,7 @@ to "true", indicating that existing RAM should be used, and a new property, *buf
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" ...>
<video id="video" screenWidth="1600" screenHeight="960" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
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
@ -56,14 +56,14 @@ for 14 rows of characters; this implies a total of 1188 dots displayed per horiz
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 VT100 screen, so I've changed the
test machine's screen dimensions to 1600x800.
For optimum scaling, I define the virtual screen size using multiples of the VT100's default "dot" dimensions; eg, 1600x960
(a horizontal multiplier of 2 and a vertical multiplier of 4). However, that gives us a virtual screen aspect ratio of 1.67,
which is less than the (apparent) 2.0 aspect ratio of a physical VT100 screen. But I'm resisting changing the test machine's
virtual screen dimensions (to, say, 1600x800) until I've done more "aspect ratio research".
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
160mm x 80mm, implying a screen aspect ratio of 2.0.
Here's what we know from the Technical Manual: a physical 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 160mm x 80mm, implying a screen aspect ratio of 2.0.
{% include machine.html id="vt100" %}

View file

@ -6,7 +6,7 @@
<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"
<video id="video" screenWidth="1600" screenHeight="960" 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>

View file

@ -72,4 +72,4 @@ var C1PJS = {
PRIVATE: PRIVATE, // shared
SITEHOST: SITEHOST, // shared
XMLVERSION: XMLVERSION // shared
}
};

View file

@ -38,6 +38,10 @@ if (NODE) {
var UserAPI = require("../../shared/lib/userapi");
var ReportAPI = require("../../shared/lib/reportapi");
var Component = require("../../shared/lib/component");
/*
* TODO: I'm confused why WebStorm complains if the following require() is missing in THIS file but not other files.
*/
var PC8080 = require("./defines");
var Messages = require("./messages");
var Bus = require("./bus");
var State = require("./state");

View file

@ -92,7 +92,7 @@ var PC8080 = {
TYPEDARRAYS: TYPEDARRAYS,
SITEHOST: SITEHOST, // shared
XMLVERSION: XMLVERSION // shared
}
};
if (NODE) {
global.APPCLASS = APPCLASS;

View file

@ -131,8 +131,8 @@ function Video(parmsVideo, canvas, context, textarea, container)
}
}
this.interruptRate = parmsVideo['interruptRate'];
this.refreshRate = parmsVideo['refreshRate'] || 60;
this.rateInterrupt = parmsVideo['interruptRate'];
this.rateRefresh = parmsVideo['refreshRate'] || 60;
this.canvasScreen = canvas;
this.contextScreen = context;
@ -267,13 +267,13 @@ Video.FORMATS = {
Video.VT100 = {
/*
* The following font IDs are nothing more than all the possible LINEATTR values masked with FONTMASK;
* it's also worth noting that double-high implies double-wide; the VT100 doesn't support double-high single-wide.
* also, note that double-high implies double-wide; the VT100 doesn't support a double-high single-wide font.
*/
FONT: {
NORML: 0x60,
DWIDE: 0x40,
DHIGH_TOP: 0x20,
DHIGH_BOT: 0x00
NORML: 0x60, // normal font (eg, 10x10)
DWIDE: 0x40, // double-wide, single-high font (eg, 20x10)
DHIGH: 0x20, // technically, this means display only the TOP half of the double-high font (eg, 20x20)
DHIGH_BOT: 0x00 // technically, this means display only the BOTTOM half of the double-high font (eg, 20x20)
},
LINETERM: 0x7F,
LINEATTR: {
@ -325,19 +325,16 @@ Video.prototype.initBuffers = function()
this.canvasBuffer.height = cyBuffer;
this.contextBuffer = this.canvasBuffer.getContext("2d");
this.aFonts = {};
this.initColors();
if (this.nFormat == Video.FORMAT.VT100) {
this.aFonts = {};
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_TOP] = this.aFonts[Video.VT100.FONT.DHIGH_BOT] = this.createFontVariation(this.cxCell*2, this.cyCell*2);
/*
* Beyond fonts, VT100 support requires that we maintain a number of additional properties:
*
* nRefreshRate: must be either 50 or 60 (defaults to 60); we don't emulate any particular refresh rate,
* but we do need to keep track of which rate has been selected, because that affects the number of "fill
* lines" that are present at the top of the VT100's frame buffer: 2 lines for 60Hz, 5 lines for 50Hz.
* rateMonitor: must be either 50 or 60 (defaults to 60); we don't emulate the monitor refresh rate,
* but we do need to keep track of which rate has been selected, because that affects the number of
* "fill lines" present at the top of the VT100's frame buffer: 2 lines for 60Hz, 5 lines for 50Hz.
*
* The VT100 July 1982 Technical Manual, p. 4-89, shows the following sample frame buffer layout:
*
@ -358,15 +355,16 @@ Video.prototype.initBuffers = function()
*
* ERRATA: The manual claims that if you change the byte at 0x2002 from 03 to 09, the number of "fill
* lines" will change from 2 to 5 (for 50Hz operation), but it shows 06 instead of 0C at location 0x200B;
* if you follow the links, it's pretty clear that byte has to be 0C to yield a 5-line delay. Since the
* address following the terminator at 0x2006 points to itself, it only makes sense for that terminator
* to be used at the end of the frame buffer.
* if you follow the links, it's pretty clear that byte has to be 0C to yield 5 "fill lines". Since the
* address following the terminator at 0x2006 points to itself, it never makes sense for that terminator
* to be used EXCEPT at the end of the frame buffer.
*
* As an alternative to tracking the refresh rate setting, we could hard-code some knowledge about how
* the VT100's 8080 code uses memory, and simply ignore lines below address 0x22D0. But that seems cheesy.
* As an alternative to tracking the monitor refresh rate, we could hard-code some knowledge about how
* the VT100's 8080 code uses memory, and simply ignore lines below address 0x22D0. But the VT100 Video
* Processor makes no such assumption, and it would also break our test code in createFonts(), which
* builds a contiguous screen of test data starting at the default frame buffer address (0x2000).
*/
this.nRefreshRate = 60;
this.rateMonitor = 60;
this.abLineBuffer = new Array(this.nColsBuffer);
}
};
@ -395,7 +393,7 @@ Video.prototype.initBus = function(cmp, bus, cpu, dbg)
}
/*
* Allocate the frame buffer (as needed) along with all other buffers
* Allocate the frame buffer (as needed) along with all other buffers.
*/
this.initBuffers();
@ -430,29 +428,29 @@ Video.prototype.doneLoad = function(sURL, sFontData, nErrorCode)
try {
/*
* The most likely source of any exception will be right here, where we're parsing the JSON-encoded data.
* The most likely source of any exception will be here: parsing the JSON-encoded data.
*/
var abFontData = eval("(" + sFontData + ")");
var ab = eval("(" + sFontData + ")");
var ab = abFontData['bytes'] || abFontData;
var abFontData = ab['bytes'] || ab;
if (!ab.length) {
if (!abFontData || !abFontData.length) {
Component.error("Empty font ROM: " + sURL);
return;
}
else if (ab.length == 1) {
Component.error(ab[0]);
else if (abFontData.length == 1) {
Component.error(abFontData[0]);
return;
}
/*
* Minimal font data validation, just to make sure we're not getting garbage from the server...
*/
if (ab.length == 2048) {
this.abFontdata = ab;
if (abFontData.length == 2048) {
this.createFonts(abFontData);
}
else {
this.notice("Unrecognized font data length (" + ab.length + ")");
this.notice("Unrecognized font data length (" + abFontData.length + ")");
return;
}
@ -471,7 +469,24 @@ Video.prototype.doneLoad = function(sURL, sFontData, nErrorCode)
};
/**
* createFontVariation(cxCell, cyCell, rgbOn, fUnderline, fReverse)
* createFonts(abFontData)
*
* @this {Video}
* @param {Array.<number>} abFontData
*/
Video.prototype.createFonts = function(abFontData)
{
/*
* We retain abFontData in case we have to rebuild the fonts (eg, we switch from 80 to 132 columns)
*/
this.abFontData = abFontData;
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.aFonts[Video.VT100.FONT.DHIGH_BOT] = this.createFontVariation(this.cxCell*2, this.cyCell*2);
};
/**
* createFontVariation(cxCell, cyCell, rgbOn, fReverse, fUnderline)
*
* This creates a 16x16 character grid for the requested font variation. Variations include:
*
@ -479,18 +494,18 @@ Video.prototype.doneLoad = function(sURL, sFontData, nErrorCode)
* 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
* 5) all of the above with reverse video enabled
* 6) all of the above with underlining 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]
* @param {boolean} [fUnderline]
* @return {Object}
*/
Video.prototype.createFontVariation = function(cxCell, cyCell, rgbOn, fUnderline, fReverse)
Video.prototype.createFontVariation = function(cxCell, cyCell, rgbOn, fReverse, fUnderline)
{
/*
* On a VT100, cxCell,cyCell is initially 10,10, but may change to 9,10 for 132-column mode.
@ -541,21 +556,100 @@ Video.prototype.createFontVariation = function(cxCell, cyCell, rgbOn, fUnderline
*/
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;
};
/**
* powerUp(data, fRepower)
*
* @this {Video}
* @param {Object|null} data
* @param {boolean} [fRepower]
* @return {boolean} true if successful, false if failure
*/
Video.prototype.powerUp = function(data, fRepower)
{
/*
* Because the VT100 frame buffer can be located anywhere in RAM (above 0x2000), we must defer this
* test code until the powerUp() notification handler is called, when all RAM has (hopefully) been allocated.
*/
if (DEBUG && this.nFormat == Video.FORMAT.VT100) {
/*
* Build a test screen in the VT100 frame buffer; we'll mimic the "SET-UP A" screen, since it uses
* all the font variations.
*/
var aLineData = {
0: [Video.VT100.FONT.DHIGH, 'SET-UP A'],
2: [Video.VT100.FONT.DWIDE, 'TO EXIT PRESS "SET-UP"'],
/*
3: [Video.VT100.FONT.NORML, '4'],
4: [Video.VT100.FONT.NORML, '5'],
5: [Video.VT100.FONT.NORML, '6'],
6: [Video.VT100.FONT.NORML, '7'],
7: [Video.VT100.FONT.NORML, '8'],
8: [Video.VT100.FONT.NORML, '9'],
9: [Video.VT100.FONT.NORML, '10'],
10: [Video.VT100.FONT.NORML, '11'],
11: [Video.VT100.FONT.NORML, '12'],
12: [Video.VT100.FONT.NORML, '13'],
13: [Video.VT100.FONT.NORML, '14'],
14: [Video.VT100.FONT.NORML, '15'],
15: [Video.VT100.FONT.NORML, '16'],
16: [Video.VT100.FONT.NORML, '17'],
17: [Video.VT100.FONT.NORML, '18'],
18: [Video.VT100.FONT.NORML, '19'],
19: [Video.VT100.FONT.NORML, '20'],
20: [Video.VT100.FONT.NORML, '21'],
21: [Video.VT100.FONT.NORML, '22'],
*/
22: [Video.VT100.FONT.NORML, ' T T T T T T T T T'],
23: [Video.VT100.FONT.NORML, '1234567890', '1234567890', '1234567890', '1234567890', '1234567890', '1234567890', '1234567890', '1234567890'],
24: []
};
var addr = this.addrBuffer;
var addrNext = -1, font = -1;
var b, nFill = (this.rateMonitor == 60? 2 : 5);
for (var iRow = -nFill; iRow < this.nRowsBuffer; iRow++) {
var lineData = aLineData[iRow];
if (addrNext >= 0) {
var fBreak = false;
addrNext = addr + 2;
if (!lineData) {
if (font == Video.VT100.FONT.DHIGH) {
lineData = aLineData[iRow-1];
font = Video.VT100.FONT.DHIGH_BOT;
}
}
else {
if (lineData.length) {
font = lineData[0];
} else {
addrNext = addr - 1;
fBreak = true;
}
}
b = (font & Video.VT100.LINEATTR.FONTMASK) | ((addrNext >> 8) & Video.VT100.LINEATTR.ADDRMASK);
this.bus.setByteDirect(addr++, b);
this.bus.setByteDirect(addr++, addrNext & 0xff);
if (fBreak) break;
}
if (lineData) {
var attr = 0;
for (var j = 1; j < lineData.length; j++) {
var s = lineData[j];
for (var k = 0; k < s.length; k++) {
this.bus.setByteDirect(addr++, s.charCodeAt(k) | attr);
}
attr ^= 0x80;
}
}
this.bus.setByteDirect(addr++, Video.VT100.LINETERM);
addrNext = addr;
}
}
return true;
};
/**
* setBinding(sHTMLType, sBinding, control, sValue)
*
@ -695,7 +789,7 @@ Video.prototype.setFocus = function()
*/
Video.prototype.getRefreshRate = function()
{
return Math.max(this.refreshRate, this.interruptRate);
return Math.max(this.rateRefresh, this.rateInterrupt);
};
/**
@ -788,6 +882,7 @@ Video.prototype.updateChar = function(idFont, col, row, data, context)
{
var bChar = data & 0x7f;
var font = this.aFonts[idFont];
if (!font) return;
var xSrc = (bChar & 0xf) * font.cxCell;
var ySrc = (bChar >> 4) * font.cyCell;
@ -848,7 +943,7 @@ Video.prototype.updateVT100 = function()
var addrNext = this.addrBuffer, fontNext = -1;
var nRows = 0;
var nFill = (this.nRefreshRate == 60? 2 : 5);
var nFill = (this.rateMonitor == 60? 2 : 5);
this.assert(this.abLineBuffer.length == this.nColsBuffer);
var iCell = 0, cUpdated = 0;
@ -859,7 +954,7 @@ Video.prototype.updateVT100 = function()
var nCols = 0;
var addr = addrNext;
var font = fontNext;
while (nCols < this.abLineBuffer.length) {
while (true) {
var data = this.bus.getByteDirect(addr++);
if ((data & Video.VT100.LINETERM) == Video.VT100.LINETERM) {
var b = this.bus.getByteDirect(addr++);
@ -867,7 +962,11 @@ Video.prototype.updateVT100 = function()
addrNext = this.addrBuffer | ((b & Video.VT100.LINEATTR.ADDRMASK) << 8) | this.bus.getByteDirect(addr);
break;
}
this.abLineBuffer[nCols++] = data;
if (nCols < this.abLineBuffer.length) {
this.abLineBuffer[nCols++] = data;
} else {
break; // ideally, we would wait for a LINETERM byte, but it's not safe to loop without limit
}
}
/*
@ -894,7 +993,11 @@ Video.prototype.updateVT100 = function()
for (var iCol = 0; iCol < nCols; iCol++) {
data = this.abLineBuffer[iCol];
if (!this.fCellCacheValid || data !== this.aCellCache[iCell]) {
this.updateChar(font, iCol, nRows, data, this.contextBuffer);
/*
* TODO: If bit 8 is set, we must select a different font variation, depending on which per-character
* screen attribute is currently enabled (ie, reverse video or underline).
*/
this.updateChar(font, iCol, nRows, data & 0x7f, this.contextBuffer);
cUpdated++;
}
iCell++;
@ -905,7 +1008,11 @@ Video.prototype.updateVT100 = function()
this.fCellCacheValid = true;
if (cUpdated && this.contextBuffer) {
this.contextScreen.drawImage(this.canvasBuffer, 0, 0, this.cxBuffer, this.cyBuffer, this.xScreenOffset, this.yScreenOffset, this.cxScreenOffset, this.cyScreenOffset);
/*
* NOTE: We must subtract cyCell from cyBuffer to avoid displaying the extra row that we normally buffer
* in support of smooth-scrolling.
*/
this.contextScreen.drawImage(this.canvasBuffer, 0, 0, this.cxBuffer, this.cyBuffer - this.cyCell, this.xScreenOffset, this.yScreenOffset, this.cxScreenOffset, this.cyScreenOffset);
}
};
@ -930,7 +1037,7 @@ Video.prototype.updateScreen = function(n)
if (n >= 0) {
if (this.interruptRate) {
if (this.rateInterrupt) {
if (!(n & 1)) {
/*
* On even updates, call cpu.requestINTR(1), and also update our copy of the screen.

View file

@ -172,7 +172,7 @@ var PCX86 = {
SITEHOST: SITEHOST, // shared
SYMBOLS: SYMBOLS,
XMLVERSION: XMLVERSION // shared
}
};
if (NODE) {
global.APPCLASS = APPCLASS;

View file

@ -1,221 +1,220 @@
(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 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)}
(function(){var m;function ba(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 t(a){return"0x"+q(a,4)}function ca(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ea(a,b){return-1!==a.indexOf(b,a.length-b.length)}var fa={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}function ha(a,b){return(a+" ").slice(0,b)}function ia(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function ja(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var ka=Date.now||function(){return+new Date};function la(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
function 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 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 pa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function qa(){return window?window.navigator.userAgent:""}function w(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){w("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 y(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Sb=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={ab:!1,Ya:!1,Gb:!1,ma:!1,$a:!1};this.wb=null;this.A.$a=!1;this.L={};this.G=null;this.ja=d||0;Na.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=y);a.prototype=Va(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Na=[],Xa={};function Ya(a,b,c){Xa[a]&&b&&(Xa[a][b]=c)}function Za(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Na.length;b++){var d=Na[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function $a(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Na.length;d++)if(c)c==Na[d]&&(c=null);else if(!(a!=Na[d].type||b&&Na[d].id.indexOf(b)))return Na[d]}return null}function A(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){w(c.message+" ("+a+")")}return b}
function ab(a,b){for(var c=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.oa(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}
y.prototype={constructor:y,parent:null,toString:function(){return this.name?this.name:this.id||this.type},oa: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.za=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.ha=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)},ha:function(a,b){b||w(a)},Ea:function(){return this.A.ma=!0},Ha:function(a,b){b&&(this.A.ma=!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.Gb)return a.A.Ya&&(a.A.Ya=!1),a.A.Gb=!1;if(a.A.$a)return a.g(a.toString()+" error"),!1;a.A.Ya=b;return a.A.Ya}function ib(a,b){a.A.Ya&&(b?a.A.Gb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.A.Ya}function C(a){if(!a.A.$a&&(a.A.ab=!0,a.A.ab)){var b=a.wb;a.wb=null;b&&b()}}function jb(a,b){b&&(a.A.ab?b():a.wb=b);return a.A.ab}function kb(a,b){a.A.$a=!0;a.ha(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){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]}
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)}Wa(nb);m=nb.prototype;m.oa=function(a,b,c,d){return this.u&&this.u.oa(a,b,c,d)||this.b&&this.b.oa(a,b,c,d)||this.ya&&this.ya.oa(a,b,c,d)||this.G&&this.G.oa(a,b,c,d)?!0:this.parent.oa.call(this,a,b,c,d)};m.Ka=function(a,b,c,d){this.u=a;this.B=b;this.b=c;this.G=d;this.ya=ob(a,"Keyboard")};m.Ea=function(a,b){b||pb();return!0};m.Ha=function(){return!0};m.Ba=function(){};
function pb(){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<Na.length;h++)if(Na[h].id===f){f=Na[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){y.call(this,"Bus",a,qb);this.b=b;this.G=c;this.I=a.busWidth||16;this.N=Math.pow(2,this.I);this.w=this.N-1|0;this.ga=16>=this.I?10:20>=this.I?12:24>=this.I?14:15;this.Aa=1<<this.ga;this.X=this.Aa>>2;this.B=this.Aa-1;this.K=this.N/this.Aa|0;this.J=this.K-1;this.u=[];this.C=[];this.F=this.H=!1;this.Z=[];this.ba=[];a=new E;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.Ea=function(a,b){b||this.reset();return!0};
function sb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ga;0<f&&h<a.U.length;){var g=a.U[h],l=h*a.Aa,k=a.Aa-(e-l);k>f&&(k=f);if(g&&g.size){if(g.type==d){if(e+f<=g.D)return g.tb+=g.D-e,g.D=e,!0;if(e>=g.D+g.tb){k=g.size-(e-l);k>f&&(k=f);g.tb=e-g.D+k;e=l+a.Aa;f-=k;h++;continue}}return tb(1,e,f)}e=new E(e,k,a.Aa,d);rb(e,a.G,g);a.U[h++]=e;e=l+a.Aa;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.ga].ib(a&this.B,a)};
function vb(a,b){return a.U[(b&a.w)>>>a.ga].rb(b&a.B,b)}m.La=function(a){var b=a&this.B,c=(a&this.w)>>>this.ga;return b!=this.B?this.U[c].bc(b,a):this.U[c++].ib(b,a)|this.U[c&this.J].ib(0,a+1)<<8};function wb(a,b){var c=b&a.B,d=(b&a.w)>>>a.ga;return c!=a.B?a.U[d].Lb(c,b):a.U[d++].rb(c,b)|a.U[d&a.J].rb(0,b+1)<<8}m.ka=function(a,b){this.U[(a&this.w)>>>this.ga].kb(a&this.B,b&255,a)};function xb(a,b,c){a.U[(b&a.w)>>>a.ga].ub(b&a.B,c&255,b)}
m.Cb=function(a,b){var c=a&this.B,d=(a&this.w)>>>this.ga;c!=this.B?this.U[d].dc(c,b&65535,a):(this.U[d++].kb(c,b&255,a),this.U[d&this.J].kb(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)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.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],
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 Nb;if(lb){var Ob=new ArrayBuffer(2);(new DataView(Ob)).setUint16(0,256,!0);Nb=256===(new Uint16Array(Ob))[0]}else Nb=!1;var Pb=Nb;
function E(a,b,c,d){this.id=Qb+=2;this.b=null;this.D=a;this.tb=b;this.size=c||0;this.type=d||Rb;this.L=d==Sb;rb(this);this.Fa=this.Qb=!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),Tb(this,Pb?Ub:Vb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Tb(this,Wb)}else Tb(this)}var Rb=0,Sb=2,ub=["NONE","RAM","ROM","VID","H/W"],Qb=0;
E.prototype={constructor:E,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.Fa=!0}return!1},Oa:function(a,b){b?0===this.C++&&Xb(this,Yb,!1):0===this.u++&&Zb(this,Yb,!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)},N:function(a,b){return this.ib(a++,b++)|this.ib(a,b)<<8},I:function(a,b,c){this.kb(a++,b&255,c++);this.kb(a,b>>8,c)},ca:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},qa:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},xa:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Fa=!0},Ia:function(a,
b){var c=a>>2,d=(a&3)<<3;24>d?this.b[c]=this.b[c]&~(65535<<d)|b<<d:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.Fa=!0},Z:function(a,b){if(this.G&&null!=this.D){var c=this.G;$b(c,this.D+a,1,c.Z)&&c.ea(!0)}return this.rb(a,b)},ia:function(a,b){if(this.G&&null!=this.D){var c=this.G;$b(c,this.D+a,2,c.Z)&&c.ea(!0)}return this.Lb(a,b)},va:function(a,b,c){if(this.G&&null!=this.D){var d=this.G;$b(d,this.D+a,1,d.H)&&d.ea(!0)}this.L?this.w(a,b,c):this.ub(a,b,c)},Ca:function(a,
b,c){if(this.G&&null!=this.D){var d=this.G;$b(d,this.D+a,2,d.H)&&d.ea(!0)}this.L?this.w(a,b,c):this.Mb(a,b,c)},X:function(a){return this.B[a]},ba:function(a){return this.B[a]},fa:function(a){return this.H.getUint16(a,!0)},pa:function(a){return a&1?this.B[a]|this.B[a+1]<<8:this.J[a>>1]},ta:function(a,b){this.B[a]=b;this.Fa=!0},wa:function(a,b){this.B[a]=b;this.Fa=!0},ya:function(a,b){this.H.setUint16(a,b,!0);this.Fa=!0},Da:function(a,b){a&1?(this.B[a]=b,this.B[a+1]=b>>8):this.J[a>>1]=b;this.Fa=!0}};
function rb(a,b,c){a.G=b;a.u=a.C=0;c&&((a.u=c.u)&&Zb(a,Yb,!1),(a.C=c.C)&&Xb(a,Yb,!1))}function ac(a,b){b?0===--a.C&&(a.kb=a.L?a.w:a.ub,a.dc=a.L?a.I:a.Mb):0===--a.u&&(a.ib=a.rb,a.bc=a.Lb)}function Xb(a,b,c){c&&a.C||(a.kb=!a.L&&b[2]||a.w,a.dc=!a.L&&b[3]||a.I);if(c||void 0===c)a.ub=b[2]||a.w,a.Mb=b[3]||a.I}function Zb(a,b,c){c&&a.u||(a.ib=b[0]||a.K,a.bc=b[1]||a.N);if(c||void 0===c)a.rb=b[0]||a.K,a.Lb=b[1]||a.N}function Tb(a,b){b||(b=bc);Zb(a,b,void 0);Xb(a,b,void 0)}
var bc=[],Wb=[E.prototype.ca,E.prototype.qa,E.prototype.xa,E.prototype.Ia],Yb=[E.prototype.Z,E.prototype.ia,E.prototype.va,E.prototype.Ca];if(lb)var Vb=[E.prototype.X,E.prototype.fa,E.prototype.ta,E.prototype.ya],Ub=[E.prototype.ba,E.prototype.pa,E.prototype.wa,E.prototype.Da];
function cc(a,b){y.call(this,"CPU",a,cc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.hb=c;this.i.Bb=0;this.i.Ta=d;this.i.Ib=Math.round(this.i.hb/1E4)/100;this.i.Qa=this.i.Ib*this.i.Ta;this.A.ra=!1;this.A.Hb=!1;this.A.Pb=a.autoStart;this.A.Rb=!1;this.A.Za=!1;this.i.lb=this.i.eb=0;this.i.mb=a.csStart;this.i.cb=a.csInterval;this.i.fb=a.csStop;this.ba=this.Ua.bind(this);C(this)}Wa(cc);var dc=["power","reset"];m=cc.prototype;
m.Ka=function(a,b,c,d){this.u=a;this.B=b;this.G=d;for(b=0;b<dc.length;b++)(c=this.L[dc[b]])&&this.u.oa(null,dc[b],c);this.K=(b=ob(a,"Video"))&&Math.max(b.yc,b.Xb)||60;this.C=ob(a,"ChipSet");a=ec(a,"autoStart");null!=a&&(this.A.Pb="true"==a?!0:"false"==a?!1:!!a);C(this)};m.reset=function(){this.i.Bb=0};m.save=function(){return null};m.restore=function(){return!1};
m.Ea=function(a,b){if(!b){if(a&&this.restore){fc(this);if(!this.restore(a))return!1;gc(this)}else this.reset();if(this.G){var c=this.G;c.g("Type ? for help with PC8080 Debugger commands");c.Ba();if(c.Da){var d=c.Da;c.Da=null;sc(c,d)}}else this.g("No debugger detected")}tc(this);return!0};m.Ha=function(a){return a?this.save():!0};function uc(a){(a.A.Pb||!a.G&&void 0===a.L.run)&&a.Ua(!0)}m.Tb=function(){return 0};
function gc(a){void 0===a.i.mb&&(a.i.mb=0);void 0===a.i.cb&&(a.i.cb=-1);void 0===a.i.fb&&(a.i.fb=-1);a.A.Za=0<=a.i.mb&&0<a.i.cb;a.A.Za&&(a.i.lb=0,a.i.eb=a.i.mb-a.I)}function vc(a,b){if(a.A.Za){var c=!1;a.i.lb=a.i.lb+a.Tb()|0;a.i.eb-=b;0>=a.i.eb&&(a.i.eb+=a.i.cb,c=!0);0<=a.i.fb&&a.i.fb<=wc(a)&&(a.i.cb=a.i.fb=-1,gc(a),a.ea(),c=!0);c&&a.g(wc(a)+" cycles: checksum="+q(a.i.lb))}}
m.oa=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.ma)a=!0;else{var b=null,c,g=Za(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.A.ab);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.A.ma);c++);c==g.length&&(b=a);w("The "+b.type+" component ("+b.id+") is not "+(b.A.ab?"powered yet":"ready yet"+(b.wb?" (waiting for notification)":""))+".");a=!1}a&&(d.A.ra?d.ea(!0):d.Ua(!0))};a=
!0;break;case "speed":this.L[b]=c;a=!0;break;case "setSpeed":this.L[b]=c,c.onclick=function(){xc(d,d.i.Ta<<1,!0)},c.textContent=this.i.Qa.toFixed(2)+"Mhz",a=!0}return a};function yc(a,b,c){a.I+=b;c&&(a.F=a.b=0)}
function zc(a,b){var c=30;c<a.K&&(c=a.K);2>c&&(c=2);var d=1;b&&1<a.i.Ta&&a.i.Pa&&(d=a.i.Pa/a.i.Ib);a.i.Yb=Math.round(1E3/30);a.i.mc=Math.floor(a.i.hb/c*d);a.i.Jb=Math.floor(a.i.hb/30*d);a.i.$b=Math.floor(a.i.hb/a.K*d);a.i.Zb=Math.floor(a.i.hb/2*d);b||(a.i.gb=a.i.Jb,a.i.ob=a.i.$b,a.i.nb=a.i.Zb);a.i.Kb=0}function wc(a){return a.I+a.H+a.F-a.b}function fc(a){a.i.Pa=0;a.I=a.H=a.F=a.b=0;gc(a);xc(a,1)}
function xc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Pa/a.i.Qa?b=1:d=!0;a.i.Ta=b;b=a.i.Ib*a.i.Ta;if(a.i.Qa!=b){a.i.Qa=b;b=a.i.Qa.toFixed(2)+"Mhz";var e=a.L.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.u&&a.u.sb()}yc(a,a.H);a.H=0;a.i.bb=ka();a.i.Sa=0;zc(a);return d}
m.Ua=function(a){if(hb(this,!0)){if(!this.A.ra){xc(this);this.u&&this.u.start(this.i.bb,wc(this));this.A.ra=!0;this.A.Hb=!0;this.C&&this.C.start();var b=this.L.run;b&&(b.textContent="Halt");this.u&&(this.u.Ba(!0),a&&this.u.sb(!0))}this.i.Kb>=this.i.hb&&zc(this,!0);this.i.pb=0;this.i.Ab=ka();this.i.Sa&&(a=this.i.Ab-this.i.Sa,a>this.i.Yb&&(this.i.bb+=a,this.i.bb>this.i.Ab&&(this.i.bb=this.i.Ab)));try{do{this.jb(this.A.Za?1:this.i.mc);var c=this.F-this.b;this.H+=c;this.i.pb+=c;yc(this,0,!0);vc(this,
c);this.i.ob-=c;0>=this.i.ob&&(this.i.ob+=this.i.$b,this.u&&Ac(this.u,this.i.Bb++),this.i.Bb>this.K&&(this.i.Bb=0));this.i.nb-=c;0>=this.i.nb&&(this.i.nb+=this.i.Zb,this.u&&this.u.Ba());this.i.gb-=c;if(0>=this.i.gb){this.i.gb+=this.i.Jb;break}}while(this.A.ra)}catch(e){this.ea();tc(this);this.u&&this.u.stop(ka(),wc(this));hb(this,!1);kb(this,e.stack||e.message);return}c=setTimeout;a=this.ba;this.i.Sa=ka();b=this.i.Yb;this.i.pb&&(b=Math.round(b*this.i.pb/this.i.Jb));var b=b-(this.i.Sa-this.i.Ab),d=
this.i.Sa-this.i.bb;d&&(this.i.Pa=Math.round(this.H/(10*d))/100,864E5<=d&&(this.I=0,xc(this)));if(0>b||this.i.Pa<this.i.Qa)b=0;this.i.Kb+=this.i.pb;this.i.Sa+=b;c(a,b)}else tc(this),this.u&&this.u.stop(ka(),wc(this))};m.jb=function(){return 0};m.ea=function(a){ib(this,!0);this.F-=this.b;this.b=0;yc(this,this.H);this.H=0;if(this.A.ra){this.A.ra=!1;this.C&&this.C.stop();var b=this.L.run;b&&(b.textContent="Run")}this.A.vb=a};function tc(a,b){a.u&&(Ac(a.u,-1),a.u.Ba(b))}
function Bc(a){this.Ra=+a.model||8080;cc.call(this,a,1E6);this.N=Cc;fc(this);this.A.vb=this.A.gc=!1;this.Z=0;this.J=[];this.X=0;Dc(this)}Wa(Bc,cc);function Ec(a,b){a.J.push(b)}m=Bc.prototype;m.reset=function(){this.A.ra&&this.ea();Dc(this);fc(this);this.A.$a=!1;this.parent.reset.call(this)};function Dc(a){a.j=0;a.O=0;a.P=0;a.R=0;a.S=0;a.T=0;a.V=0;a.da=0;F(a,a.X);Fc(a,0);a.w=0}function Gc(a,b){a.X=b;F(a,b)}
m.Tb=function(){var a=this.j+this.O+this.P+this.R+this.S+this.T+this.V|0;return a=a+this.da+this.M+Hc(this)|0};
m.save=function(){var a=new Ic(this);G(a,0,[this.j,this.O,this.P,this.R,this.S,this.T,this.V,this.da,this.M,Hc(this)]);G(a,1,[this.w,this.I,this.i.Ta]);for(var b=this.B,c=0,d=[],e=0;e<b.K;e++){var f=b.U[e];if(f.Fa||f.Qb){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}}G(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.j=b[0];this.O=b[1];this.P=b[2];this.R=b[3];this.S=b[4];this.T=b[5];this.V=b[6];this.da=b[7]&65535;F(this,b[8]);Fc(this,b[9]);b=a[1];this.w=b[0];this.I=b[1];xc(this,b[3]);a:{b=this.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.oa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.L[b]=c;this.Z++;d=!0;break;default:d=this.parent.oa.call(this,a,b,c)}return d};function Jc(a){return a.O<<8|a.P}function Kc(a,b){a.O=b>>8&255;a.P=b&255}function Lc(a){return a.R<<8|a.S}function Mc(a,b){a.R=b>>8&255;a.S=b&255}function I(a){return a.T<<8|a.V}
function Nc(a,b){a.T=b>>8&255;a.V=b&255}function F(a,b){a.M=b&65535}function J(a){return a.Y&256?1:0}function Oc(a,b){a.Y=a.Y&255|b}function Pc(a){return mb[a.aa&255]?4:0}function Qc(a){return(a.aa^a.na)&16?16:0}function Rc(a){return a.Y&255?0:64}function Sc(a){return a.aa&128?128:0}function Hc(a){return a.sa&-214|Sc(a)|Rc(a)|Qc(a)|Pc(a)|J(a)}function Fc(a,b){a.Y=a.aa=a.na=0;b&1&&(a.Y|=256);b&4||(a.aa|=1);b&16&&(a.na|=16);b&64||(a.Y|=255);b&128&&(a.aa^=192);a.sa=a.sa&-726|b&512|2}
function Tc(a,b){a.na=a.j^b;return a.aa=(a.Y=a.j+b)&255}function Uc(a,b){a.na=a.j^b;return a.aa=(a.Y=a.j+b+(a.Y&256?1:0))&255}function Vc(a,b){a.Y=a.aa=a.na=a.j&b;(a.j|b)&8&&(a.na^=16);return a.Y}function Wc(a,b){a.na=b^255;b=a.aa=b+255&255;a.Y=a.Y&-256|b;return b}function Xc(a,b){a.na=b;b=a.aa=b+1&255;a.Y=a.Y&-256|b;return b}function Yc(a,b){return a.aa=a.Y=a.na=a.j|b}function K(a,b){b^=255;a.na=a.j^b;return a.aa=(a.Y=a.j+b+1^256)&255}
function Zc(a,b){b^=255;a.na=a.j^b;return a.aa=(a.Y=a.j+b+(a.Y&256?0:1)^256)&255}function rd(a,b){return a.aa=a.Y=a.na=a.j^b}m.W=function(a){return this.B.W(a)};m.ka=function(a,b){this.B.ka(a,b)};function L(a){var b=a.W(a.M);F(a,a.M+1);return b}function O(a){var b=a.B.La(a.M);F(a,a.M+2);return b}function P(a){var b=a.B.La(a.da);a.da=a.da+2&65535;return b}function Q(a,b){a.da=a.da-2&65535;a.B.Cb(a.da,b)}
function S(a,b,c,d){d=d||2;a.L[b]&&(void 0===c&&(kb(a,"Value for "+b+" is invalid"),a.ea()),c=!a.A.ra||a.A.Rb?q(c,d):"--------".substr(0,d),a.L[b].textContent!=c&&(a.L[b].textContent=c))}
m.Ba=function(a){this.Z&&(a||!this.A.ra||this.A.Rb)&&(S(this,"A",this.j),S(this,"B",this.O),S(this,"C",this.P),S(this,"BC",Jc(this),4),S(this,"D",this.R),S(this,"E",this.S),S(this,"DE",Lc(this),4),S(this,"H",this.T),S(this,"L",this.V),S(this,"HL",I(this),4),S(this,"SP",this.da,4),S(this,"PC",this.M,4),a=Hc(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.ra&&this.i.Pa?this.i.Pa.toFixed(2)+"Mhz":"Stopped"};
m.jb=function(a){this.A.vb=!0;var b=this.A.gc=this.G&&sd(this.G),c=a?this.A.Hb?0:1:-1;this.A.Hb=!1;this.F=this.b=a;do{if(this.w){var d;this.w&8&&this.sa&512?(d=199|(this.w&7)<<3,this.w&=-16,this.sa&=-513,this.N[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(td(this.G,this.M,c)){this.ea();break}c=1}this.N[L(this)].call(this)}while(0<this.b);return this.A.vb?this.F-this.b:void 0===this.A.vb?0:-1};
Ja(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Bc(d);ab(d,c)}});function ud(){this.b-=4}function vd(){F(this,O(this));this.b-=10}function wd(){F(this,P(this));this.b-=10}function xd(){var a=O(this);Q(this,this.M);F(this,a);this.b-=17}
var Cc=[ud,function(){Kc(this,O(this));this.b-=10},function(){this.ka(Jc(this),this.j);this.b-=7},function(){Kc(this,Jc(this)+1);this.b-=5},function(){this.O=Xc(this,this.O);this.b-=5},function(){this.O=Wc(this,this.O);this.b-=5},function(){this.O=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Oc(this,a&256);this.b-=4},ud,function(){var a;Nc(this,a=I(this)+Jc(this));Oc(this,a>>8&256);this.b-=10},function(){this.j=this.W(Jc(this));this.b-=7},function(){Kc(this,Jc(this)-1);this.b-=
5},function(){this.P=Xc(this,this.P);this.b-=5},function(){this.P=Wc(this,this.P);this.b-=5},function(){this.P=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Oc(this,a);this.b-=4},ud,function(){Mc(this,O(this));this.b-=10},function(){this.ka(Lc(this),this.j);this.b-=7},function(){Mc(this,Lc(this)+1);this.b-=5},function(){this.R=Xc(this,this.R);this.b-=5},function(){this.R=Wc(this,this.R);this.b-=5},function(){this.R=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
J(this);Oc(this,a&256);this.b-=4},ud,function(){var a;Nc(this,a=I(this)+Lc(this));Oc(this,a>>8&256);this.b-=10},function(){this.j=this.W(Lc(this));this.b-=7},function(){Mc(this,Lc(this)-1);this.b-=5},function(){this.S=Xc(this,this.S);this.b-=5},function(){this.S=Wc(this,this.S);this.b-=5},function(){this.S=L(this);this.b-=7},function(){var a=this.j<<8;this.j=(J(this)<<8|this.j)>>1;Oc(this,a&256);this.b-=4},ud,function(){Nc(this,O(this));this.b-=10},function(){var a=O(this);this.B.Cb(a,I(this));this.b-=
16},function(){Nc(this,I(this)+1);this.b-=5},function(){this.T=Xc(this,this.T);this.b-=5},function(){this.T=Wc(this,this.T);this.b-=5},function(){this.T=L(this);this.b-=7},function(){var a=0,b=J(this);if(Qc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Tc(this,a);Oc(this,b?256:0);this.b-=4},ud,function(){var a;Nc(this,a=I(this)+I(this));Oc(this,a>>8&256);this.b-=10},function(){var a;a=O(this);a=this.B.La(a);Nc(this,a);this.b-=16},function(){Nc(this,I(this)-1);this.b-=5},function(){this.V=
Xc(this,this.V);this.b-=5},function(){this.V=Wc(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},ud,function(){this.da=O(this)&65535;this.b-=10},function(){this.ka(O(this),this.j);this.b-=13},function(){this.da=this.da+1&65535;this.b-=5},function(){var a=I(this);this.ka(a,Xc(this,this.W(a)));this.b-=10},function(){var a=I(this);this.ka(a,Wc(this,this.W(a)));this.b-=10},function(){this.ka(I(this),L(this));this.b-=10},function(){this.Y|=256;this.b-=
4},ud,function(){var a;Nc(this,a=I(this)+this.da);Oc(this,a>>8&256);this.b-=10},function(){this.j=this.W(O(this));this.b-=13},function(){this.da=this.da-1&65535;this.b-=5},function(){this.j=Xc(this,this.j);this.b-=5},function(){this.j=Wc(this,this.j);this.b-=5},function(){this.j=L(this);this.b-=7},function(){Oc(this,J(this)?0:256);this.b-=4},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.T;this.b-=
5},function(){this.O=this.V;this.b-=5},function(){this.O=this.W(I(this));this.b-=7},function(){this.O=this.j;this.b-=5},function(){this.P=this.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.T;this.b-=5},function(){this.P=this.V;this.b-=5},function(){this.P=this.W(I(this));this.b-=7},function(){this.P=this.j;this.b-=5},function(){this.R=this.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.T;this.b-=5},function(){this.R=this.V;this.b-=5},function(){this.R=this.W(I(this));this.b-=7},function(){this.R=this.j;this.b-=5},function(){this.S=this.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.T;this.b-=5},function(){this.S=this.V;this.b-=5},function(){this.S=this.W(I(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.T=this.O;this.b-=5},function(){this.T=
this.P;this.b-=5},function(){this.T=this.R;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=this.V;this.b-=5},function(){this.T=this.W(I(this));this.b-=7},function(){this.T=this.j;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.V=this.T;this.b-=5},function(){this.b-=5},function(){this.V=this.W(I(this));this.b-=7},function(){this.V=this.j;
this.b-=5},function(){this.ka(I(this),this.O);this.b-=7},function(){this.ka(I(this),this.P);this.b-=7},function(){this.ka(I(this),this.R);this.b-=7},function(){this.ka(I(this),this.S);this.b-=7},function(){this.ka(I(this),this.T);this.b-=7},function(){this.ka(I(this),this.V);this.b-=7},function(){var a=this.M-1;if(this.J.length)for(var b=0;b<this.J.length;b++)if(this.J[b](a))return;this.w|=16;this.b-=7;this.G&&eb(this,-2147483648)?(F(this,a),this.G.ea()):this.sa&512||(this.G&&F(this,a),this.ea())},
function(){this.ka(I(this),this.j);this.b-=7},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.T;this.b-=5},function(){this.j=this.V;this.b-=5},function(){this.j=this.W(I(this));this.b-=7},function(){this.b-=5},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.T);this.b-=4},function(){this.j=Tc(this,this.V);this.b-=4},function(){this.j=Tc(this,this.W(I(this)));this.b-=7},function(){this.j=Tc(this,this.j);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.T);this.b-=4},function(){this.j=Uc(this,this.V);this.b-=4},function(){this.j=Uc(this,this.W(I(this)));
this.b-=7},function(){this.j=Uc(this,this.j);this.b-=4},function(){this.j=K(this,this.O);this.b-=4},function(){this.j=K(this,this.P);this.b-=4},function(){this.j=K(this,this.R);this.b-=4},function(){this.j=K(this,this.S);this.b-=4},function(){this.j=K(this,this.T);this.b-=4},function(){this.j=K(this,this.V);this.b-=4},function(){this.j=K(this,this.W(I(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=Zc(this,this.O);this.b-=4},function(){this.j=Zc(this,this.P);this.b-=
4},function(){this.j=Zc(this,this.R);this.b-=4},function(){this.j=Zc(this,this.S);this.b-=4},function(){this.j=Zc(this,this.T);this.b-=4},function(){this.j=Zc(this,this.V);this.b-=4},function(){this.j=Zc(this,this.W(I(this)));this.b-=7},function(){this.j=Zc(this,this.j);this.b-=4},function(){this.j=Vc(this,this.O);this.b-=4},function(){this.j=Vc(this,this.P);this.b-=4},function(){this.j=Vc(this,this.R);this.b-=4},function(){this.j=Vc(this,this.S);this.b-=4},function(){this.j=Vc(this,this.T);this.b-=
4},function(){this.j=Vc(this,this.V);this.b-=4},function(){this.j=Vc(this,this.W(I(this)));this.b-=7},function(){this.j=Vc(this,this.j);this.b-=4},function(){this.j=rd(this,this.O);this.b-=4},function(){this.j=rd(this,this.P);this.b-=4},function(){this.j=rd(this,this.R);this.b-=4},function(){this.j=rd(this,this.S);this.b-=4},function(){this.j=rd(this,this.T);this.b-=4},function(){this.j=rd(this,this.V);this.b-=4},function(){this.j=rd(this,this.W(I(this)));this.b-=7},function(){this.j=rd(this,this.j);
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.T);this.b-=4},function(){this.j=Yc(this,this.V);this.b-=4},function(){this.j=Yc(this,this.W(I(this)));this.b-=7},function(){this.j=Yc(this,this.j);this.b-=4},function(){K(this,this.O);this.b-=4},function(){K(this,this.P);this.b-=4},function(){K(this,this.R);this.b-=4},function(){K(this,
this.S);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.V);this.b-=4},function(){K(this,this.W(I(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){Rc(this)||(F(this,P(this)),this.b-=6);this.b-=5},function(){Kc(this,P(this));this.b-=10},function(){var a=O(this);Rc(this)||F(this,a);this.b-=10},vd,function(){var a=O(this);Rc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,Jc(this));this.b-=11},function(){this.j=Tc(this,L(this));this.b-=
7},function(){Q(this,this.M);F(this,0);this.b-=11},function(){Rc(this)&&(F(this,P(this)),this.b-=6);this.b-=5},wd,function(){var a=O(this);Rc(this)&&F(this,a);this.b-=10},vd,function(){var a=O(this);Rc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},xd,function(){this.j=Uc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,8);this.b-=11},function(){J(this)||(F(this,P(this)),this.b-=6);this.b-=5},function(){Mc(this,P(this));this.b-=10},function(){var a=O(this);J(this)||F(this,a);this.b-=
10},function(){var a=L(this);Cb(this.B,a,this.j,this.M+-2&65535);this.b-=10},function(){var a=O(this);J(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,Lc(this));this.b-=11},function(){this.j=K(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,16);this.b-=11},function(){J(this)&&(F(this,P(this)),this.b-=6);this.b-=5},wd,function(){var a=O(this);J(this)&&F(this,a);this.b-=10},function(){var a=L(this);this.j=zb(this.B,a,this.M+-2&65535)&255;this.b-=10},function(){var a=
O(this);J(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},xd,function(){this.j=Zc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,24);this.b-=11},function(){Pc(this)||(F(this,P(this)),this.b-=6);this.b-=5},function(){Nc(this,P(this));this.b-=10},function(){var a=O(this);Pc(this)||F(this,a);this.b-=10},function(){var a=P(this);Q(this,I(this));Nc(this,a);this.b-=18},function(){var a=O(this);Pc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,I(this));this.b-=
11},function(){this.j=Vc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,32);this.b-=11},function(){Pc(this)&&(F(this,P(this)),this.b-=6);this.b-=5},function(){F(this,I(this));this.b-=5},function(){var a=O(this);Pc(this)&&F(this,a);this.b-=10},function(){var a=I(this);Nc(this,Lc(this));Mc(this,a);this.b-=5},function(){var a=O(this);Pc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},xd,function(){this.j=rd(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,40);this.b-=11},
function(){Sc(this)||(F(this,P(this)),this.b-=6);this.b-=5},function(){var a=P(this);Fc(this,a&255|this.sa&-256);this.j=a>>8;this.b-=10},function(){var a=O(this);Sc(this)||F(this,a);this.b-=10},function(){this.sa&=-513;this.b-=4},function(){var a=O(this);Sc(this)||(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},function(){Q(this,Hc(this)&255|this.j<<8);this.b-=11},function(){this.j=Yc(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,48);this.b-=11},function(){Sc(this)&&(F(this,P(this)),
this.b-=6);this.b-=5},function(){this.da=I(this)&65535;this.b-=5},function(){var a=O(this);Sc(this)&&F(this,a);this.b-=10},function(){this.sa|=512;this.b-=4},function(){var a=O(this);Sc(this)&&(Q(this,this.M),F(this,a),this.b-=6);this.b-=11},xd,function(){K(this,L(this));this.b-=7},function(){Q(this,this.M);F(this,56);this.b-=11}];
function T(a){y.call(this,"ChipSet",a,T,32768);var b=a.model;b&&!yd[b]&&w("Unrecognized ChipSet model: "+b);this.Ra=yd[b]||zd;a.sound&&(this.N=null,window&&(this.N=window.AudioContext||window.webkitAudioContext),this.N&&new this.N);C(this)}Wa(T);var zd=1978.1,yd={SI1978:zd};m=T.prototype;m.oa=function(){return!1};
m.Ka=function(a,b,c,d){this.B=b;this.b=c;this.G=d;this.u=a;if(this.Ra==zd){var e;a=Ad;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=Bd;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.Ea=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.Ha=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 Ic(this);this.Ra==zd&&G(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.Ra==zd&&(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 Cd(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 Ad={0:T.prototype.ic,1:T.prototype.jc,2:T.prototype.kc,3:T.prototype.hc},Bd={2:T.prototype.pc,3:T.prototype.rc,4:T.prototype.qc,5:T.prototype.sc,6:T.prototype.tc};Ja(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new T(d);ab(d,c)}});
function Dd(a){y.call(this,"ROM",a,Dd);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=ca(this.F);if(this.F){a=this.F;var b=da(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){Ed(c,a,b,f)})}}Wa(Dd);var Fd=[0,5];Dd.prototype.Ka=function(a,b,c,d){this.B=b;this.b=c;this.G=d;Gd(this)};
Dd.prototype.Ea=function(){if(this.Ja){if(this.G){var a=this.G,b=this.id,c=this.H,d=this.C,e=this.Ja,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var l=g.o,k=g.a;if(void 0!==l){var n=f,l=[l>>>0,h],p=ja(n,l,a.Ma);0>p&&n.splice(-(p+1),0,l)}k&&(g.a=k.replace(/''/g,'"'))}a.I.push({Ac:b,D:c,lc:d,Ja:e,Nb:f})}delete this.Ja}return!0};Dd.prototype.Ha=function(){return!0};
function Ed(a,b,c,d){if(d)a.ha("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.Ja=e.symbols;if(!a.u.length){w("Empty ROM: "+b);return}if(1==a.u.length){w(a.u[0]);return}}catch(g){a.ha("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]=ba(b[e],16);Gd(a)}}
function Gd(a){if(!jb(a))if(!a.F)C(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(Hd(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.ga;0<h&&l<f.U.length;)g.push(f.U[l++]),h-=f.Aa;f=d.B;d=d.C;h=0;for(e>>>=f.ga;0<d&&e<f.U.length;){l=g[h++];if(!l)break;f.U[e++]=l;d-=f.Aa}}delete a.u}C(a)}}
function Hd(a,b){if(sb(a.B,b,a.C,a.I?1:Sb)){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<Fd.length;c++)xb(a.B,Fd[c],118);Ec(a.b,function(a){return function(b){if(0<=Fd.indexOf(b)){var c=!1,h=a.b,g=a.G;if(5==b)switch(c=!0,h.P){case 2:Id(a,String.fromCharCode(h.S));break;case 9:for(var l=Lc(h),k="",n=255;n--;){var p=a.b.W(l++);if(36==p)break;k+=String.fromCharCode(p)}Id(a,k);break;default:c=!1}c?wd.call(h):g&&(a.g("\nCP/M vector "+t(b)),F(h,b),g.ea());b=!0}else b=!1;return b}}(a));
Gc(a.b,b)}return!0}return!1}function Id(a,b){b=b.replace(/\r/g,"");a.za&&(a.za.value+=b,a.za.scrollTop=a.za.scrollHeight)}Ja(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Dd(d);ab(d,c)}});function Jd(a){y.call(this,"RAM",a,Jd);this.w=a.addr;this.C=a.size;this.u=!1}Wa(Jd);m=Jd.prototype;m.Ka=function(a,b,c,d){this.B=b;this.b=c;this.G=d;C(this)};m.Ea=function(a,b){b||this.reset();return!0};m.Ha=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};Ja(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Jd(d);ab(d,c)}});function Kd(a){y.call(this,"Keyboard",a,Kd,65536);this.reset();C(this)}Wa(Kd);var Ld={"1p":49,"2p":50,coin:51,left:37,right:39,fire:32},Md={65:37,68:39,76:32};Kd.prototype.reset=function(){this.b={}};
Kd.prototype.oa=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 Nd(d,a,!0)},c.onkeyup=function(a){return Nd(d,a,!1)},!0;default:if(void 0!==Ld[b])return this.L[a]=c,a=function(a,b){return function(){Od(a,b,!0)}}(this,b),b=function(a,b){return function(){Od(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}return!1};
Kd.prototype.Ka=function(a,b,c,d){this.G=d;this.C=ob(a,"ChipSet")};function Nd(a,b,c){var d=!0,e;a:{e=b.keyCode;e=Md[e]||e;for(var f in Ld)if(Ld[f]===e){e=f;break a}e=null}e&&(d=Od(a,e,c));d||b.preventDefault();return d}function Od(a,b,c){a.b[b]=c;if(a.C)switch(b){case "1p":Cd(a.C,4,c);break;case "2p":Cd(a.C,2,c);break;case "coin":Cd(a.C,1,c);break;case "left":Cd(a.C,32,c);break;case "right":Cd(a.C,64,c);break;case "fire":Cd(a.C,16,c)}return!1}
Ja(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Kd(d);ab(d,c)}});
function Pd(a,b,c,d,e){var f=this;this.zb=wa("Gecko/");var h=["","moz","ms","webkit"];y.call(this,"Video",a,Pd,262144);this.Z=a.screenWidth;this.X=a.screenHeight;this.va=a.bufferAddr;this.vc=a.bufferRAM;var g=a.bufferFormat;this.ca=g&&Qd[g.toLowerCase()]||Rd;this.Ma=a.bufferCols;this.Da=a.bufferRows;this.nc=this.ua=a.cellWidth||1;this.la=a.cellHeight||1;this.Va=null;this.Ia=a.bufferBits||1;this.wc=a.bufferLeft||0;if(this.F=a.bufferRotate)this.F=this.F%360,0<this.F&&(this.F-=360),-90!=this.F&&(this.ha("unsupported buffer rotation: "+
this.F),this.F=0);this.Xb=a.interruptRate;this.yc=a.refreshRate||60;this.N=b;this.H=c;this.xa=(this.zc=d)||b||null;this.oc=this.Z;this.uc=this.X;this.xb=this.Z/this.Ma|0;this.yb=this.X/this.Da|0;1<this.la&&this.Da++;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.H[d]){this.H[d]=b;break}if(this.I=a.screenRotate)this.I=this.I%360,0<this.I&&(this.I-=360),-90!=this.I?(this.ha("unsupported screen rotation: "+
this.I),this.I=0):(this.H.translate(0,this.X),this.H.rotate(this.I*Math.PI/180),this.H.scale(this.X/this.Z,this.Z/this.X));if(this.w=e)if(this.w.Xa=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.w.Xa){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.fa=a.fontROM)"json"!=da(this.fa)&&(this.fa=pa()+"/api/v1/dump?file="+this.fa+"&format=bytes"),oa(this.fa,null,!0,function(a,b,c){Td(f,a,b,c)})}Wa(Pd);var Rd=0,Qd={vt100:2};
Pd.prototype.Ka=function(a,b,c,d){this.u=a;this.B=b;this.b=c;this.G=d;this.ca||(this.C=ob(a,"ChipSet"))&&this.C.Ra==zd&&(this.ca=1);this.J=this.Ma*this.ua;this.ba=this.Da*this.la;b=this.J;c=this.ba;this.F&&(b=this.ba,c=this.J);this.Na=(this.J*this.Ia>>3)*this.ba;if(this.vc||sb(this.B,this.va,this.Na,3))1<this.ua?Ud(this,this.Ma*this.Da):(this.Ub=this.H.createImageData(b,c),this.Wb=16/this.Ia|0,Ud(this,this.Na>>1)),this.K=document.createElement("canvas"),this.K.width=b,this.K.height=c,this.Wa=this.K.getContext("2d"),
this.pa={},this.Ca=1<<this.Ia,this.qa=Array(this.Ca+2),this.qa[0]=[0,0,0,255],this.qa[1]=[255,255,255,255],1==this.ca&&(this.qa[this.Ca+0]=[255,255,0,255],this.qa[this.Ca+1]=[0,255,0,255]),2==this.ca&&(this.xc=60,this.ta=Array(this.Ma));(this.ya=ob(a,"Keyboard"))&&this.N&&this.ya.oa(this.zc?"textarea":"canvas","kbd",this.xa);this.fa||C(this)};
function Td(a,b,c,d){if(d)a.ha("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||!f.length){w("Empty font ROM: "+b);return}if(1==f.length){w(f[0]);return}if(2048==f.length)Vd(a,f);else{a.ha("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ha("Font ROM data error: "+h.message);return}(a.H||a.G)&&C(a)}}function Vd(a,b){a.Va=b;a.pa[96]=Wd(a,a.ua,a.la);a.pa[64]=Wd(a,2*a.ua,a.la);a.pa[32]=a.pa[0]=Wd(a,2*a.ua,2*a.la)}
function Wd(a,b,c){var d=8>=a.nc?8:16,e=8<d?15:0,f=a.Va.length/d,h={ua:b,la: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.la;k++)for(var p=a.Va[l*d+(e+k&d-1)],v=0;v<c/a.la;v++){for(var u=0,r=u;u<a.ua;u++)for(var D=p&128>>(7<u?7:u),x=0;x<b/a.ua;x++)Xd(a,g,r,n,D?1:0),r++;n++}h.context.putImageData(g,(l&15)*b,(l>>4)*c)}return h}Pd.prototype.Ea=function(){return!0};
Pd.prototype.oa=function(a,b,c){var d=this;switch(b){case "fullScreen":return this.L[b]=c,this.w&&this.w.Xa?c.onclick=function(){d.Xa()}:c.parentNode.removeChild(c),!0}return!1};
Pd.prototype.Xa=function(){var a=!1;if(this.w){if(this.w.Xa){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.Z/this.X;b>c&&(a=Math.round(c/b*100)+"%")}this.zb?(this.N.style.width=a,this.N.style.width=a,this.N.style.display="block",this.N.style.margin="auto"):(this.w.style.width=a,this.w.style.height="auto");this.w.style.backgroundColor="black";this.w.Xa();a=!0}this.xa&&this.xa.focus()}return a};
function Sd(a,b){!b&&a.w&&(a.zb?a.N.style.width=a.N.style.height="":a.w.style.width=a.w.style.height="");db(a,"notifyFullScreen("+b+")",!0)}function Ud(a,b){a.Vb=b;a.wa=!1;if(void 0===a.ia||a.ia.length!=a.Vb)a.ia=Array(a.Vb)}function Xd(a,b,c,d,e){d=a.F?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.ca&&(208<=c&&236>c?e=a.Ca+0:28<=c&&72>c&&(e=a.Ca+1));a=a.qa[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]}
Ja(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<=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 Pd(d,e,h,f,c);ab(d,c)}});
function Yd(a){y.call(this,"Debugger",a,Yd);this.style=Zd;this.ca=this.ya=this.K=0;this.X=U();this.Na=U();this.F=-1;this.w=[];this.ia=!1;this.fa=U();this.I=[];this.pa={};this.C=this.Z=this.H=[];$d(this);this.va=0;ae(this);this.Ca=[];be(this,a.messages);this.Da=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return sc(b,a)}):void 0===global.$&&(global.$=function(a){return sc(b,a)})}Wa(Yd);
var ce={"?":"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"},Zd=8080,de="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(" "),
ee="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(" "),fe="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),ge=[[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]],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)}};
18193,33],[65,128]],he={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=Yd.prototype;
m.Ka=function(a,b,c,d){this.B=b;this.b=c;this.u=a;(a=ec(a,"messages"))&&be(this,a);this.Ia=ge;ie(this,function(a){a:{var b=d.B.U,c=a[0],g=a=0,l=b.length;if(c){a=X(Y(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.B.ga;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.ga)+" %%"+q(n.D)+" "+t(n.tb)+" "+t(n.size)+
" "+k),c!=Rb&&(c=-1),k=0);a+=d.B.Aa;g++}}});C(this)};
m.oa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ta=this.L[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",sc(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.ta){var a=d.ta.value;d.ta.value=
"";sc(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.jb(a?1:0),hb(d,!1));return b}),!0}return!1};m.sb=function(){this.ta&&this.ta.focus()};function X(a){a=a&&a.D;null==a&&(a=-1);return a}m.W=function(a,b){var c=255,d=X(a);-1!==d&&(c=vb(this.B,d),b&&je(a,b));return c};m.La=function(a,b){var c=65535,d=X(a);-1!==d&&(c=wb(this.B,d),b&&je(a,b));return c};m.ka=function(a,b,c){var d=X(a);-1!==d&&(xb(this.B,d,b),c&&je(a,c),tc(this.b,!0))};
m.Cb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.B,f=d&e.B,h=(d&e.w)>>>e.ga;f!=e.B?e.U[h].Mb(f,b&65535,d):(e.U[h++].ub(f,b&255,d),e.U[h&e.J].ub(0,b>>8&255,d+1));c&&je(a,c);tc(this.b,!0)}};function U(a){return{D:a,Ga:!1}}function ke(a){return[a.D,a.Ga]}function le(a){return{D:a[0],Ga:a[1]}}
function Y(a,b,c){var d;c=(c?a.X:a.Na).D;if(void 0!==b){d=b=me(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].Ja[d];if(void 0!==f){d=f.o;void 0!==d&&(e=U(d));break}}if(d=e)return d;c=ne(a,b,void 0)}null!=c&&(d=U(c));return d}function oe(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.ec=pe(a,b.cc=c[2]))}function je(a,b){null!=a.D&&(a.D+=b||1)}function Z(a){return q(a,4)}
function qe(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 be(a,b){a.G=a;a.ja=a.fc=536870912;a.wa=null;a.xa=[];var c=pe(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in he)0<=ma(c,d)&&(a.ja|=he[d],a.g(d+" messages enabled"))}function ie(a,b){for(var c in he)if(64==he[c]){a.Ca[c]=b;break}}
function re(a,b){var c;a=a.toUpperCase();null==b?c=ma(fe,a):(c=ma(fe,a.substr(b,2)),0>c&&(c=ma(fe,a.substr(b,1))));return c}function se(a,b){var c=0,d=te(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 te(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.O;break;case 1:c=d.P;break;case 8:c=Jc(d);break;case 2:c=d.R;break;case 3:c=d.S;break;case 9:c=Lc(d);break;case 4:c=d.T;break;case 5:c=d.V;break;case 10:c=I(d);break;case 6:c=d.W(I(d));break;case 11:c=d.da;break;case 12:c=d.M;break;case 13:c=Hc(d);break;case 14:c=Hc(d)&255|d.j<<8}}return c}
function ue(a,b){b=me(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=re(b,c+1),0<=e&&(b=b.substr(0,c)+se(a,e)+b.substr(c+1+fe[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=ba(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+' "'+qe(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))?(je(d),d=e+' "'+
qe(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(U(this.b.M).D));if(this.ja&1073741824)this.xa.push(a);else if(!this.wa||a!=this.wa)if(this.wa=a,this.ja&-2147483648&&(this.ea(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.gb=0;c.F-=c.b;c.b=0;tc(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;
function ae(a){var b;if(sd(a)){if(!a.N||!a.N.length){a.N=Array(1E3);for(b=0;b<a.N.length;b++)a.N[b]=U();a.qa=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.N&&a.N.length&&a.g("instruction history buffer freed"),a.qa=0,a.N=[],a.J=[]}m.Ua=function(a){if(!ve(this))return!1;this.b.Ua(a);return!0};
m.jb=function(a,b,c){if(!ve(this))return!1;this.K=0;a||sd(this)&&td(this,this.b.M,0);try{var d=this.b.jb(a);0<d&&(this.K+=d,yc(this.b,d,!0),vc(this.b,d),this.ca++)}catch(e){"number"!=typeof e&&(this.K=0,kb(this.b,e.stack||e.message))}!1!==c&&tc(this.b);this.Ba(b||!1);return 0<this.K};m.ea=function(a){this.b&&this.b.ea(a)};m.Ba=function(a){void 0===a&&(a=!0);this.X=U(this.b.M);a&&1!=this.ba?we(this):xe(this)};
function ve(a){var b;if(b=a.b&&jb(a.b))b=a.b,b.A.ma?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!ib(a.b)?(a=a.b,a.A.$a?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.Ea=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Ha=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){ae(this);this.ca=this.ya=0;this.wa=null;this.K=0;this.X=U(this.b.M);this.A.ra=!1;ye(this);a||this.Ba()};
m.save=function(){var a=new Ic(this);G(a,0,ke(this.X));G(a,1,ke(this.fa));G(a,2,[this.w,this.ia,this.ja]);G(a,3,this.I);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.X=le(a[b++]),this.fa=le(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.ra=!0;this.xb=a;this.yb=b};
m.stop=function(a,b){if(this.A.ra){this.A.ra=!1;this.K=b-this.yb;if(!this.ba){var c="stopped";if(this.K){var d=a-this.xb,e=0<d?Math.round(1E3*this.K/d):0,c=c+" (";sd(this)&&(c+=this.ca+" opcodes, ",this.ya-=this.ca,this.ca=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.Ba(!0);this.sb();ye(this,this.b.M)}};function sd(a){return 1<a.C.length||!!a.va}
function td(a,b,c){var d=a.b;if(0<c&&(a.va&&!--a.va||$b(a,b,1,a.C)))return!0;0<=c&&a.J.length&&(a.ca++,b=vb(a.B,b),null!=b&&(a.J[b][1]++,b=a.N[a.qa],b.D=d.M,b.Ga=!1,++a.qa==a.N.length&&(a.qa=0)));return!1}function Ab(a,b,c){a.g("break on input from port "+t(b)+": "+q(c));a.ea(!0)}function Db(a,b,c){a.g("break on output to port "+t(b)+": "+q(c));a.ea(!0)}
function $d(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;ac(d.U[X(c)>>>d.ga],!1)}a.Z=["br"];if(void 0!==a.H)for(b=1;b<a.H.length;b++)c=a.H[b],d=a.B,ac(d.U[X(c)>>>d.ga],!0);a.H=["bw"];a.Va=0}m.Oa=function(a,b,c){var d=!0;c||Xe(this,a,b,!1,!0);if(a!=this.C){var e=X(b);if(-1===e)this.g("invalid address: "+Z(b.D)),d=!1;else{var f=this.B;f.U[e>>>f.ga].Oa(e&f.B,a==this.H)}}d&&(a.push(b),c?b.Ga=!0:(Ye(this,a,a.length-1,"set"),ae(this)));return d};
function Xe(a,b,c,d,e){var f=!1;c=X(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==X(g)&&(!d||g.Ga)){f=!0;g.Ga||e||Ye(a,b,h,"cleared");b.splice(h,1);b!=a.C&&(d=a.B,ac(d.U[c>>>d.ga],b==a.H));g.Ga||ae(a);break}}return f}function Ze(a,b){for(var c=1;c<b.length;c++)Ye(a,b,c);return b.length-1}function Ye(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.D)+(d?" "+d:c.cc?' "'+c.cc+'"':""))}
function ye(a,b){if(void 0!==b)$b(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.Ga){if(!Xe(a,a.C,d,!0))break;c=0}}}
function $b(a,b,c,d,e){var f=!1;if(!a.Va++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Ga)for(var l=X(g),k=0;k<c;k++)if(b+k==l){var n,f=!0;g.Ga&&(Xe(a,d,g,!0),e=!0);if(n=g.ec){for(var f=!1,p=0;p<n.length;p++)if(!$e(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var v=p+1;v<n.length&&n[v].indexOf("else");v++)p++;if(v==n.length){f=!0;break}}a.b.A.ra||(f=!0)}if(f){e||Ye(a,d,h,"hit");break}}}a.Va--;return f}
function af(a,b,c,d){for(var e=U(b.D),f=a.W(b,1),h=a.Ia[f],g="",l=(8086!=a.style?de:ee)[h[0]],k=h.length-1,n=0,p,v=1;v<=k;v++){var u="";p=h[v];if(void 0!==p&&!(p&16384&&a.style==Zd)){var r=p&240;if(r){var D=p&15;D?n=D:p|=n;p&61440||(p|=1==v?8192:4096);if(r&32)a:{var u=a,r=p,D=b,x=" ";switch(r&15){case 1:x=q(u.W(D,1),2);break;case 2:x=q(u.W(D,1)<<24>>24,4);break;case 3:x=q(u.La(D,2),4);break;default:u="imm("+t(r)+")";break a}8086==u.style&&r&64?x="["+x+"]":r&16||(x=(u.style==Zd?"$":"0x")+x);u=x}else r&
16?(u=(p&3840)>>8,r=fe[u],8086==a.style&&p&64&&(6==u&&(r="HL"),r="["+r+"]"),u=r):r&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+=ha(f,10);h=h+(p&32768?"*":" ")+ha(l,7);g&&(h+=" "+g);c&&(h=ha(h,40)+";"+c,h=a.b.A.Za?h+("cycles="+wc(a.b).toString()+" cs="+q(a.b.i.lb)):h+(null!=d?"="+d.toString():""));return h}
function bf(a,b){var c;switch(b){case "IF":c=a.b.sa&512;break;case "SF":c=Sc(a.b);break;case "ZF":c=Rc(a.b);break;case "AF":c=Qc(a.b);break;case "PF":c=Pc(a.b);break;case "CF":c=J(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function cf(a,b){return fe[b]+"="+se(a,b)+" "}function df(a){return cf(a,7)+cf(a,8)+cf(a,9)+cf(a,10)+cf(a,11)+bf(a,"IF")+bf(a,"SF")+bf(a,"ZF")+bf(a,"AF")+bf(a,"PF")+bf(a,"CF")}
var ef={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function ff(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 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())}};
function ne(a,b,c){var d;if(b){b=me(a,b);for(var e=0,f=!1,h=b,g=[],l=[],k=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<k.length;){var n=k[e++],p=n.length,n=ia(n);if(!n){f=!0;break}n=gf(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++],v=n.length;l.length&&ef[n]<ef[l[l.length-1]]&&ff(g,l,1);l.push(n);b=b.substr(p+v)}ff(g,l)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&hf(a,null,
d))}return d}function me(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=ne(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.ca-a.ya}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function gf(a,b,c,d){var e;void 0!==b?(e=re(b),0<=e?e=te(a,e):(e=a.pa[b],void 0===e&&(e=ba(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
function hf(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 jf(a,b){if(b)return hf(a,b,a.pa[b]);var c=0;for(b in a.pa)hf(a,b,a.pa[b]),c++;return 0<c}Yd.prototype.Ma=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function kf(a,b,c){var d=[],e=X(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=ja(f.Nb,[e-h],a.Ma);0<=e?lf(a,b,e,d):c&&(e=~e,lf(a,b,e-1,d),lf(a,b,e,d));break}}return d}function lf(a,b,c,d){var e={},f=a.I[b].Nb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.I[b].Ja[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function mf(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?de:ee;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Ia[h][0]]+" ").substr(0,5)+" ("+("0x"+q(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function nf(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return jf(a)||a.g("no variables"),!0;if(!c[2])return jf(a,c[1]);if(!c[3])return delete a.pa[c[1]],!0;var d=ne(a,c[3]);return void 0!==d?(a.pa[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function of(a,b,c){var d=null;if(b=Y(a,b,!0)){var e=kf(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 pf(a,b){switch(b[1]){case "8080":a.style=Zd;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.cb=c;break;case "start":a.b.i.mb=c;break;case "stop":a.b.i.fb=c;break;default:a.g("unknown cs option");return}void 0!==c&&gc(a.b);a.g("checksums "+(a.b.A.Za?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(xc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Qa.toFixed(2)+"Mhz")+
" ("+a.b.i.Ta+"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 we(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=ne(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.O=g&255;break;case "BC":d.O=g>>8&255;case "C":d.P=g&255;break;case "D":d.R=
g&255;break;case "DE":d.R=g>>8&255;case "E":d.S=g&255;break;case "H":d.T=g&255;break;case "HL":d.T=g>>8&255;case "L":d.V=g&255;break;case "SP":d.da=g&65535;break;case "PC":F(d,g);a.X=U(d.M);break;case "PS":Fc(d,g);break;case "PSW":Fc(d,g&255|d.sa&-256);d.j=g>>8;break;case "CF":d.Y=g?d.Y|256:d.Y&255;break;case "PF":g?Pc(d)||(d.aa^=1):Pc(d)&&(d.aa^=1);break;case "AF":d.na=g?~d.aa&16|d.na&-17:d.aa&16|d.na&-17;break;case "ZF":d.Y=g?d.Y&-256:d.Y|255;break;case "SF":g?Sc(d)||(d.aa^=192):Sc(d)&&(d.aa^=192);
break;case "IF":d.sa=g?d.sa|512:d.sa&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}tc(d);a.g("updated registers:")}a.g(df(a));c&&(a.X=U(d.M),xe(a,Z(a.X.D)))}}function qf(a,b){b=ia(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(ue(a,c[2])):ne(a,b,!0)}function rf(a,b,c){var d="t"!=b;c=gf(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.jb(e,d,!1)},function(){tc(a.b);hb(a,!1)})}
function xe(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=kf(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=af(a,b,h,f);a.g(f);a.X=b;e-=b.D-l;c++}}}
function pe(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 $e(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ia&&(a.g("ended assemble at "+Z(a.fa.D)),a.X=a.fa,a.ia=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.wa=null;if(jb(a)&&0<b.length){a.ia&&(b="a "+Z(a.fa.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.fa=
n,void 0===f[2])a.g("begin assemble at "+Z(n.D)),a.ia=!0,tc(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var v=0;v<p.length;v++)a.ka(n,p[v],1);a.g(af(a,a.fa))}}break;case "b":a:{var u=f[0],r=f[1],D=b;if("?"==r)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 M=0,M=M+Ze(a,a.C),M=M+Ze(a,a.Z);(M+=Ze(a,a.H))||a.g("no breakpoints")}else if("n"==x)a.va=gf(a,r),a.g("break after "+a.va+" instruction(s)");else if(void 0===r)a.g("missing breakpoint address");else{var z=U();if("*"!=r&&(z=Y(a,r,!0),!z))break a;r=t(z.D);"c"==x?null==z.D?($d(a),a.g("all breakpoints cleared")):Xe(a,a.C,z)||Xe(a,a.Z,z)||
Xe(a,a.H,z)||a.g("breakpoint missing: "+Z(z.D)):"i"==x?a.g("breakpoint "+(yb(a.B,z.D)?"enabled":"cleared")+": port "+r+" (input)"):"o"==x?a.g("breakpoint "+(Bb(a.B,z.D)?"enabled":"cleared")+": port "+r+" (output)"):null!=z.D&&(oe(a,z,D),"p"==x?a.Oa(a.C,z):"r"==x?a.Oa(a.Z,z):"w"==x?a.Oa(a.H,z):a.g("unknown breakpoint command: "+x))}}}break;case "c":a.za&&(a.za.value="");break;case "d":a:{var N,V=f[0],R=f[1],na=f[2],Eb=f[3];if("?"==R){var xa="";for(N in he)a.Ca[N]&&(xa&&(xa+=","),xa+=N);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"==R){var ze=sf(a.u,!0);"console"==na?console.log(ze):(a.za&&(a.za.value=""),a.g(ze))}else if("symbols"==R)for(var $c=0;$c<a.I.length;$c++){var ad=a.I[$c],fb;for(fb in ad.Ja)if("."!=fb.charAt(0)){var Ae=ad.Ja[fb].o;
if(void 0!==Ae){var Be=ad.Ja[fb].l;Be&&(fb=Be);a.g(Z(Ae)+" "+fb)}}}else{if("d"==V){for(N in he)if(f[1]==N){var Ce=a.Ca[N];Ce?(f.shift(),f.shift(),Ce(f)):a.g("no dump registered for "+R);break a}R||(V=a.zb||"db")}else a.zb=V;if("dh"==V){var De=R,Ee=na,Fe="",Ge=0,W=a.qa,ya=a.N;if(ya.length){var aa=+De||a.Wa,gb=+Ee||10;isNaN(aa)?aa=gb:Fe="more ";aa>ya.length&&(a.g("note: only "+ya.length+" available"),aa=ya.length);W-=aa;0>W&&(null==ya[ya.length-1].D?(aa=W+aa,W=0):W+=ya.length);var bd=[];"call"==Ee&&
(gb=1E5,bd=["CALL"]);for(void 0!==De&&a.g(aa+" instructions earlier:");0<gb&&W!=a.qa;){var He=ya[W++];if(null==He.D)break;var Fb=U(He.D),Mf=aa--,Ie=af(a,Fb,"history",Mf);(!bd.length||0<=Ie.indexOf(bd[0]))&&a.g(Ie);Fb.Db&&(W+=Fb.Db,gb-=Fb.Db,aa-=Fb.Db);W>=ya.length&&(W=0);a.Wa=aa;Ge++;gb--}}Ge||(a.g("no "+Fe+"history available"),a.Wa=void 0)}else{var hc=Y(a,R);if(hc){var ic=0;na&&("l"==na.charAt(0)&&(na=na.substr(1)||Eb),ic=gf(a,na)>>>0,65536<ic&&(ic=65536));for(var Oa="",jc="dd"==V?4:"dw"==V?2:1,
kc=jc*ic||128,Nf=kc+15>>4||1;Nf--&&0<kc;){var lc=0,cd=0,Gb,Hb="",dd="",R=Z(hc.D);for(Gb=16;0<Gb&&0<kc;Gb--){var mc=a.W(hc,1),lc=lc|mc<<(cd++<<3);cd==jc&&(Hb+=q(lc,2*jc),Hb+=1==jc?9==Gb?"-":" ":" ",lc=cd=0);dd+=32<=mc&&128>mc?String.fromCharCode(mc):".";kc--}Oa&&(Oa+="\n");Oa+=R+" "+Hb+(0==Gb?" "+dd:"")}Oa&&a.g(Oa);a.Na=hc}}}}break;case "e":if("else"==f[0])break;var nc=1,Je=255,Ke=a.W,Le=a.ka;"ew"==f[0]&&(nc=2,Je=65535,Ke=a.La,Le=a.Cb);var Me=nc<<1,Ne=f[1];if(null==Ne)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 oc=Y(a,Ne);if(oc)for(var pc=2;pc<f.length;pc++){var Ib=ne(a,f[pc]);if(void 0===Ib){a.g("unrecognized value: "+f[pc]);break}Ib&~Je&&a.g("warning: "+q(Ib)+" exceeds "+nc+"-byte value");var Of=Ke.call(a,oc);a.g("changing "+Z(oc.D)+" from 0x"+q(Of,Me)+" to 0x"+q(Ib,Me));Le.call(a,oc,Ib,nc)}}break;case "f":mf(a,f[1]);break;case "g":a:{var Oe=f[1],Pf=b;if(void 0!==Oe){var ed=Y(a,Oe,!0);if(!ed)break a;
oe(a,ed,Pf);a.Oa(a.C,ed,!0)}a.Ua(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var fd;if(a.A.ra)fd="halting",a.ea();else{if(ib(a,!0))break a;fd="already halted"}c||a.g(fd)}break;case "i":if("if"==f[0]){var gd;var Jb=b.substr(2),Jb=ia(Jb);ne(a,Jb)?(c||a.g("true: "+Jb),gd=!0):(c||a.g("false: "+Jb),gd=!1);gd||(d=!1);break}var hd=f[1];if(hd&&"?"!=hd){var id=gf(a,hd);if(void 0!==id){var Qf=zb(a.B,id);a.g(t(id)+": "+("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 jd=0,Pe=U(),Kb=U(a.b.da);for(a.g("stack trace for "+Z(Kb.D));10>jd;){for(var Pa=null,Sf=256;65536>Kb.D>>>0;){Pe.D=a.La(Kb,2);if(null==Kb.D||!Sf--)break;for(var Tf=a,qc=Pe,Qe=null,Lb=qc.D,Re=Lb,kd=1;6>=kd&&Lb;kd++){if(2<kd){qc.D=Lb;var rc=af(Tf,qc);if(0<=rc.indexOf("CALL")){var Se=rc.indexOf(" ");
if(Lb+(rc.indexOf(" ",Se+1)-Se-1)/2==Re){Qe=rc;break}}}Lb--}qc.D=Re;if(Pa=Qe)break}if(!Pa||null==Pa)break;var Te=null;if("ks"==Rf){var Ue=Pa.match(/[0-9A-F]+$/);Ue&&(Te=of(a,Ue[0]))}Pa=ha(Pa,50)+" ;"+(Te||"stack="+Z(Kb.D));a.g(Pa);jd++}jd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){of(a,f[1],!0);break}break;case "m":a:{var za,Aa=null,H=f[1];"?"==H&&(H=void 0);if(void 0!==H){var Ha=0;if("all"==H)Ha=1878917119,H=null;else if("on"==H)Aa=!0,H=null;else if("off"==H)Aa=!1,H=null;else{"keys"==
H&&(H="key");"kbd"==H&&(H="keyboard");for(za in he)if(H==za){Ha=he[za];Aa=!!(a.ja&Ha);break}if(!Ha){a.g("unknown message category: "+H);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 ld=0;ld<a.xa.length;ld++)a.g(a.xa[ld]);a.xa=[]}}var Uf=0,Ia="";for(za in he)if(!H||H==za){var Vf=!!(a.ja&he[za]);if(null===Aa||Aa==Vf)Ia&&(Ia+=","),++Uf%10||(Ia+="\n\t"),"key"==za&&(za="keys"),Ia+=za}void 0===H&&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"));ae(a)}break;case "o":var md=f[1],Wf=f[2];if(md&&"?"!=md){var nd=gf(a,md,"port #"),od=gf(a,Wf);void 0!==nd&&void 0!==od&&(Cb(a.B,nd,od),a.g(t(nd)+": "+("0x"+q(od,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]){qf(a,b.substr(5));break}var Ve="pr"==f[0]?1:0,Xf=1+Ve;if(a.ba)a.g("step in progress");
else{var pd=U(a.b.M);switch(a.W(pd)){case 205:a.ba=Xf,je(pd,3)}a.ba?(a.Oa(a.C,pd,!0),a.Ua()||(a.u&&a.u.sb(),a.ba=0)):rf(a,Ve?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}we(a,f);break;case "s":pf(a,f);break;case "t":rf(a,f[0],f[1]);break;case "u":xe(a,f[1],f[2],8);break;case "v":if("var"==f[0]){nf(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.23.3 ("+a.b.Ra+",RELEASE"+(lb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(qa());break;case "?":if(f[1]){qf(a,b.substr(1));break}var Mb="commands:",
qd;for(qd in ce)Mb+="\n"+ha(qd,7)+ce[qd];sd(a)||(Mb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Mb);break;default:a.g("unknown command: "+b),d=!1}}}catch(We){a.g("debugger error: "+(We.stack||We.message)),d=!1}return d}function sc(a,b,c){b=pe(a,b,c);for(var d in b)if(!$e(a,b[d]))return!1;return!0}Ja(function(){for(var a=B(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Yd(d);ab(d,c)}});
function Ic(a,b,c){this.id=a.id;this.key=tf(a,b,c);this.G=a.G;uf(this,a.ac)}function tf(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
Ic.prototype={constructor:Ic,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){uf(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 uf(a,b){a[a.id]={};b&&G(a,"parms",b);a.b=!1}function vf(a){var b=!0;if(ta()){var c=JSON.stringify(a[a.id]);va(a.key,c)||(w("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function wf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){w(c.message||c),b=!1}return b}function xf(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 yf(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
function zf(a,b,c){y.call(this,"Computer",a,zf,67108864);this.A.ma=!1;Af(this,b);this.ba=ec(this,"autoPower",a);this.w=0;this.pa=a.busWidth||a.buswidth;this.u=Bf;this.X=null;this.J=this.ia=!1;this.qa=ec(this,"url")||"";(Math.random()+.1).toString(36);this.C=Cf(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.pa},this.b,this.G);var d,e=Za(this.id);if((this.F=$a("Panel",this.id))&&
this.F.za)for(b=0;b<e.length;b++)d=e[b],d.ha=this.F.ha,d.g=this.F.g,d.za=this.F.za;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.Ka&&d.Ka(this,this.B,this.b,this.G);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.N=d:this.u=parseInt(d,10));var f;if(a=ec(this,"state")||(f=!0,a.state))b=this.ca=a,f||(this.J=!0,this.u=Bf),this.u&&(this.Z=new Ic(this,"1.23.3"),xf(this.Z)?
b=null:delete this.Z);!b&&this.u&&(b=Df(this))&&(this.J=!0);if(b){var h=this;oa(b,null,!0,function(a,b,c){c?(h.N=null,h.J=!1,h.ha("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&&Ef(this,this.qb)}else w("Unable to find CPU component")}Wa(zf);var Bf=0;function Af(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 ec(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 Ef(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(){Ef(a,b,c)});return}}b.call(a,c)}
function Ff(a,b){var c=new Ic(a,"1.23.3","validate");if(xf(c)&&wf(c)){var d=yf(c,"timestamp"),e=b?yf(b,"timestamp"):"unknown";d!=e&&(a.ha("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=zf.prototype;
m.qb=function(a){void 0===a&&(a=this.u||(this.X?1:Bf));if(!this.w){this.w++;var b=!1,c=!1;this.fa=!1;var d=this.Z||new Ic(this,"1.23.3");if(-1==a)b=!0;else if(a>Bf){if(xf(d,this.X)){this.H=new Ic(this,"1.23.3","failsafe");xf(this.H)&&(Gf(this,d),a=2,uf(this.H));G(this.H,"timestamp",la());vf(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=wf(d)){var f=yf(d,"code"),h=yf(d,"data");f&&("ok"==f?xf(d,h):("error"==
f&&"no machine state"!=h?(this.ha("Error: "+h),"unable to verify user"==h&&(va("user",""),this.C=null)):this.g(f+": "+h),uf(d),xf(d)?(c=wf(d),e=!0):c=!1))}e&&Ff(this,c?d:null)}else 2==a&&d.clear()}else Ff(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=Hf(this,h,d,b,c));b=[d,a,c];-1!=a?Ef(this,this.Ob,b):this.Ob(b)}};
function Hf(a,b,c,d,e){if(!b.A.ma){b.A.ma=!0;if(b.Ea){var f=null;e&&((f=yf(c,b.id))||(f=yf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ea(f,d)&&f&&(w("Unable to restore state for "+b.type),a.ca&&!a.ia?(c.clear(),a.u=Bf,window&&window.location.reload()):a.fa=!0,b.Ea(null),e=!1)}if(!d&&b.Sb)for(a=b.Sb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Ob=function(a){var b=a[0],c=0>a[1];a=a[2];this.ta=!0;this.A.ma=!0;var d=this.L.power;d&&(d.textContent="Shutdown");this.b&&(Hf(this,this.b,b,c,a),uc(this.b));this.fa&&(Gf(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.w=0};
function Gf(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.C||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.qa;e.user=c;e.type="bug";e.data=d;oa("http://www.pcjs.org/api/v1/report",e,!0)}}
function sf(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new Ic(a,"1.23.3"),h=new Ic(a,"1.23.3","validate"),g=la();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",qa());a.b&&a.b.Ha&&(c&&a.b.ea(),d=a.b.Ha(b,c),"object"===typeof d&&G(f,a.b.id,d),c&&(a.b.A.ma=!1,!1===d&&(e=null)));for(var g=Za(a.id),l=0;l<g.length;l++){var k=g[l];k.A.ma&&(k.Ha&&(d=k.Ha(b,c),"object"===typeof d&&G(f,k.id,d)),c&&(k.A.ma=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.C&&If(a,a.C,f.toString()),vf(h)&&vf(f)||(e=null,d=g=!0)):a.u&&(d=!0,g=3==a.u),d&&f.clear(g)):e=f.toString());c&&(a.A.ma=!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?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)})}
m.oa=function(a,b,c){var d=this;switch(b){case "power":return this.L[b]=c,c.onclick=function(){d.w||(d.A.ma?sf(d,!1,!0):Ef(d,d.qb))},!0;case "reset":return this.L[b]=c,c.onclick=function(){if(d.A.ma&&!d.w)if(d.u&&!d.N){var a=ra("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");sf(d,a,!0);!a&&d.ca?window&&window.location.reload():d.qb(Bf)}else d.reset(),d.b&&uc(d.b)},!0;case "save":if(ea(pa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.L[b]=c;c.onclick=function(){var a=Cf(d,!0);if(a){var b=!!(d.u&&!d.N||d.ca),c=sf(d,b);b?If(d,a,c):d.ha("Resume disabled, machine state not saved")}};return!0}return!1};
function Cf(a,b){var c=a.C;c||(c=ua("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=Jf(a,c))||a.ha("The user ID is invalid."))):b&&a.ha("Browser local storage is not available"));return c}
function Jf(a,b){a.C=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.C=c.data)}catch(e){w(e.message+" ("+d+")")}return a.C}function Df(a){var b=null;a.C&&(b=pa()+"/api/v1/user?req=load&user="+a.C+"&state="+tf(a,"1.23.3"));return b}
function If(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=tf(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.ha("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.ha(c),va("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.sb=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.xa&&d.xa.focus();a&&window&&window.scrollTo(b,c)}};m.Ba=function(a){this.b&&this.b.Ba(a);this.F&&this.F.Ba(a)};
function Ac(a,b){for(var c=0;c<a.I.length;c++){var d=a.I[c],e=!0;if(0<=b){if(d.Xb)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.wa){for(var f=d.B,h=d.Na,g=!0,l=d.va>>>f.ga;0<h&&l<f.U.length;)f.U[l].Fa&&(f.U[l].Fa=g=!1,f.U[l].Qb=!0),h-=f.Aa,l++;f=g}f&&(e=!1)}if(e)if(1<d.ua)switch(d.ca){case 2:for(var k=d.va,e=-1,f=0,h=60==d.xc?2:5,l=g=0;f<d.Da;){for(var n=0,p=k,v=e;;){var u=vb(d.B,p++);if(127==(u&127)){k=vb(d.B,p++);e=k&96;k=d.va|(k&31)<<8|vb(d.B,p);break}if(n<d.ta.length)d.ta[n++]=
u;else break}if(h)h--;else{for(;n<d.ta.length;)d.ta[n++]=0;for(p=0;p<n;p++){u=d.ta[p];if(!d.wa||u!==d.ia[g]){var r=d,D=d.Wa,x=u&127;if(u=r.pa[v]){var M=(x&15)*u.ua,x=(x>>4)*u.la,z=void 0,N=void 0,V=void 0,R=void 0,na=u.ua,Eb=u.la;D?(z=p*r.ua,N=f*r.la,V=r.ua,R=r.la):(z=p*r.xb,N=f*r.yb,V=r.xb,R=r.yb);u.ua>r.ua&&(z*=2,V*=2);u.la>r.la&&(0==v&&(x+=r.la),Eb=r.la);D?D.drawImage(u.canvas,M,x,na,Eb,z,N,V,R):(z+=0,N+=0,r.H.drawImage(u.canvas,M,x,na,Eb,z,N,V,R))}l++}g++}f++}}d.wa=!0;l&&d.Wa&&d.H.drawImage(d.K,
0,0,d.J,d.ba-d.la,0,0,d.oc,d.uc)}else{g=d.va;l=g+d.Na;k=v=n=0;e=d.J;p=0;f=d.ba;r=h=0;D=d.Ia;u=(1<<D)-1;d.wc&&(D=-D,r=16+D);for(;g<l;){M=wb(d.B,g);if(d.wa&&M===d.ia[n])v+=d.Wb;else{d.ia[n]=M;(x=r)&&(M=M>>8|(M&255)<<8);v<e&&(e=v);for(z=d.Wb;z--;)N=M>>x&u,Xd(d,d.Ub,v++,k,N),x+=D;v>p&&(p=v);k<f&&(f=k);k>=h&&(h=k+1)}g+=2;n++;if(v>=d.J&&(v=0,k++,k>d.ba))break}d.wa=!0;e<d.J&&(g=p-e,h-=f,d.F&&(l=e,n=g,e=f,g=h,f=d.J-(l+n),h=n),d.Wa.putImageData(d.Ub,0,0,e,f,g,h),d.H.drawImage(d.K,0,0,d.K.width,d.K.height,
0,0,d.Z,d.X))}}}Ja(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 zf(h,d,!0);ab(h,f);h.ba&&Ef(h,h.qb)}});Da.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=$a("Computer",c.id))&&c.ta&&!c.A.ma&&c.qb(-1)}});
Da.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=$a("Computer",c.id))&&c.A.ma&&sf(c,!(!c.u||c.N),!0)}});var Kf=0;function Lf(a,b,c,d,e,f){e("Loading "+a+"...");oa(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]*/,
function Zf(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 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',
function $f(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=ga(a))}function f(a){e("Error: "+a);l&&(--Kf||La(!0));l=!1}var h,g,l=!0;Kf++;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?Lf(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,--Kf||La(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--Kf||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)?Lf(b,a,d,!0,e,k):Yf(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(v){f(v.message)}return l}window.embedPC8080=function(a,b,c,d){La(!1);return $f(a,b,c,d)};window.enableEvents=La;window.sendEvent=Ma;
function ag(a,b,c,d){if(!c&&b){d.push(b);a=Xa[d[0]];b=null;for(var e in a)if(ea(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?oa(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=da(k);if("xml"==p){for(p=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=p.exec(g[k]);){var v=d[2];v&&(g[v]||(n=n.replace(d[0],"")))}d=k=ca(k)}else"xsl"==p&&(e=k=ca(k));l[k]=n}a&&(l[k="css"]=a);b[2]&&(l[k="parms"]=b[2]);b[3]&&(l[k="state"]=b[3]);d&&e?(k=JSON.stringify(l),h+=".js",c=c[1]+"var resources="+k+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),k=h,g=null,l="data:application/javascript,",l=wa("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};})();
window.savePC=function(a,b,c){var d=$a("Computer",a),e=$a("Debugger",a);if(d){var f=sf(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;oa(b,null,!0,function(c,d,e){ag(c,d,e,[a,ca(b,!0),h,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();

View file

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