Merge branch 'master' into gh-pages

This commit is contained in:
Jeff Parsons 2016-08-17 14:09:51 -07:00
commit 96bcb94ea9
12 changed files with 715 additions and 474 deletions

View file

@ -13,4 +13,4 @@ The following 8080-based machines are currently available:
* [Space Invaders (1978)](invaders/) (with [Debugger](invaders/debugger/))
* [DEC VT100 Terminal](vt100/) (with [Debugger](vt100/debugger/))
And check out the [Dual VT100 Terminals](vt100/dual/) for a demo of two PCjs machines communicating over a *virtual* serial connection.
Check out the [Dual VT100 Terminals](vt100/dual/) for a demo of two PCjs machines communicating over a *virtual* serial connection.

View file

@ -14,7 +14,8 @@ This is a PCjs work-in-progress emulation of another 8080-based machine: the VT1
Unlike other VT100 emulators, it is not simply an emulation of VT100 protocols. It is a simulation of the original VT100
machine, running the [VT100 Firmware](/devices/pc8080/rom/vt100/) inside the [PC8080](/modules/pc8080/) CPU emulator.
A [Debugger Configuration](/devices/pc8080/machine/vt100/debugger/) is also available.
A [Debugger Configuration](debugger/) is also available, along with a [Dual VT100 Terminals](dual/) demo.
Admittedly, terminals aren't that useful in isolation, since they're designed to be connected to other (host) machines.
But once this PCjs VT100 Terminal simulation is fully operational, you can expect to see it used in conjunction with a variety

View file

@ -20,6 +20,8 @@ This is a test of two [VT100 Terminals](../) whose serial ports are *virtually*
terminal should appear on the screen of the second, and vice versa. Click or tap on the screen of the desired terminal before
you begin typing.
A [Dual Debugger Configuration](debugger/) is also available.
If either terminal becomes LOCKED, press the SET-UP key (mapped to your F9 function key) twice to unlock it.
{% include machine.html id="vt100a" %}

View file

@ -0,0 +1,29 @@
---
layout: page
title: Dual VT100 Terminals with Debuggers
permalink: /devices/pc8080/machine/vt100/dual/debugger/
machines:
- id: vt100a
type: pc8080
debugger: true
autoStart: true
messages: serial|mem|port
config: /devices/pc8080/machine/vt100/debugger/machine.xml
connection: serialPort=vt100b.serialPort
- id: vt100b
type: pc8080
debugger: true
autoStart: true
messages: serial|mem|port
config: /devices/pc8080/machine/vt100/debugger/machine.xml
connection: serialPort=vt100a.serialPort
---
Dual VT100 Terminals with Debuggers
-----------------------------------
[Dual VT100 Terminals](../) with Debuggers attached.
{% include machine.html id="vt100a" %}
{% include machine.html id="vt100b" %}

View file

@ -122,6 +122,11 @@ function CPU(parmsCPU, nCyclesDefault)
this.aCounts.nCyclesChecksumInterval = parmsCPU["csInterval"];
this.aCounts.nCyclesChecksumStop = parmsCPU["csStop"];
/*
* Array of countdown timers managed by addTimer() and setTimer().
*/
this.aTimers = [];
this.onRunTimeout = this.runCPU.bind(this); // function onRunTimeout() { cpu.runCPU(); };
this.setReady();
@ -536,6 +541,9 @@ CPU.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
* in anticipation of the timer requiring an update sooner than the normal nCyclesPerYield
* period in runCPU() would normally provide.
*
* NOTE: In this context, "timer" refers to a timer chip (eg, an Intel 8253) being emulated by
* by the ChipSet component, not the timers managed by the CPU (eg, addTimer(), setTimer(), etc).
*
* @this {CPU}
* @param {number} nCycles is the target number of cycles to drop the current burst to
* @return {boolean}
@ -754,14 +762,14 @@ CPU.prototype.getSpeedTarget = function()
*
* NOTE: This used to return the target speed, in mhz, but no callers appear to care at this point.
*
* @desc Whenever the speed is changed, the running cycle count and corresponding start time must be reset,
* so that the next effective speed calculation obtains sensible results. In fact, when runCPU() initially calls
* setSpeed() with no parameters, that's all this function does (it doesn't change the current speed setting).
*
* @this {CPU}
* @param {number} [nMultiplier] is the new proposed multiplier (reverts to 1 if the target was too high)
* @param {boolean} [fUpdateFocus] is true to update Computer focus
* @return {boolean} true if successful, false if not
*
* @desc Whenever the speed is changed, the running cycle count and corresponding start time must be reset,
* so that the next effective speed calculation obtains sensible results. In fact, when runCPU() initially calls
* setSpeed() with no parameters, that's all this function does (it doesn't change the current speed setting).
*/
CPU.prototype.setSpeed = function(nMultiplier, fUpdateFocus)
{
@ -939,6 +947,104 @@ CPU.prototype.calcRemainingTime = function()
return msRemainsThisRun;
};
/**
* addTimer(callBack)
*
* Components that want to have timers that periodically fire after some number of milliseconds call
* addTimer() to create the timer, and then setTimer() every time they want to arm it. There is currently
* no removeTimer() because these are generally used for the entire lifetime of a component.
*
* Internally, each timer entry is a preallocated Array with two entries: a cycle countdown in element [0]
* and a callback function in element [1]. A timer is initially dormant; dormant timers have a countdown
* value of -1 (although any negative number will suffice) and active timers have a non-negative value.
*
* Why not use JavaScript's setTimeout() instead? Good question. For a good answer, see setTimer() below.
*
* @this {CPU}
* @param {function()} callBack
* @return {number} timer index
*/
CPU.prototype.addTimer = function(callBack)
{
var iTimer = this.aTimers.length;
this.aTimers.push([-1, callBack]);
return iTimer;
};
/**
* setTimer(iTimer, ms)
*
* Using the timer index from a previous addTimer() call, this sets that timer to fire after the
* specified number of milliseconds.
*
* This is preferred over JavaScript's setTimeout(), because all our timers are effectively paused when
* the CPU is paused (eg, when the Debugger halts execution). Moreover, setTimeout() handlers only run after
* runCPU() yields, which is far too granular for some components (eg, when the SerialPort tries to simulate
* receiver interrupts at 9600 baud).
*
* Ideally, the only function that would use setTimeout() is runCPU(), while the rest of the components would
* use setTimer(); however, due to legacy code (ie, code that predates these functions) and/or laziness,
* that's currently not the case. TODO: Fix.
*
* @this {CPU}
* @param {number} iTimer
* @param {number} ms (converted into a cycle countdown internally)
* @return {number} (number of cycles used to arm timer, or -1 if error)
*/
CPU.prototype.setTimer = function(iTimer, ms)
{
var nCycles = -1;
if (iTimer >= 0 && iTimer < this.aTimers.length) {
nCycles = (this.aCounts.nCyclesPerSecond * this.aCounts.nCyclesMultiplier) / 1000 * ms;
this.aTimers[iTimer][0] = nCycles;
}
return nCycles;
};
/**
* getTimerBurst(nCycles)
*
* Used by runCPU() to either accept or shorten the current burst if any timers need to fire soon.
*
* @this {CPU}
* @param {number} nCycles (number of cycles about to execute)
* @return {number} (either nCycles or less if a timer needs to fire)
*/
CPU.prototype.getTimerBurst = function(nCycles)
{
for (var i = 0; i < this.aTimers.length; i++) {
var timer = this.aTimers[i];
if (timer[0] < 0) continue;
if (nCycles > timer[0]) {
nCycles = timer[0];
}
}
return nCycles;
};
/**
* updateTimers(nCycles)
*
* Used by runCPU() to reduce all active timer countdown values by the number of cycles just executed;
* this is the function that actually "fires" any timer(s) whose countdown has reached (or dropped below)
* zero, invoking their callback function.
*
* @this {CPU}
* @param {number} nCycles (number of cycles actually executed)
*/
CPU.prototype.updateTimers = function(nCycles)
{
for (var i = 0; i < this.aTimers.length; i++) {
var timer = this.aTimers[i];
if (timer[0] < 0) continue;
timer[0] -= nCycles;
if (timer[0] <= 0) {
timer[0] = -1; // zero is technically an "active" value, so ensure the timer is dormant now
timer[1](); // safe to invoke the callback function now
}
}
};
/**
* runCPU(fUpdateFocus)
*
@ -962,22 +1068,37 @@ CPU.prototype.runCPU = function(fUpdateFocus)
this.calcStartTime();
try {
do {
var nCyclesPerBurst = (this.flags.fChecksum? 1 : this.aCounts.nCyclesPerBurst);
/*
* nCyclesPerBurst is how many cycles we WANT to run on each iteration of stepCPU(), but it may run
* significantly less (or slightly more, since we can't execute partial instructions).
*/
var nCyclesPerBurst = (this.flags.fChecksum? 1 : this.aCounts.nCyclesPerBurst);
/*
* Adjust nCyclesPerBurst if there are any CPU timers that need to fire within the current burst.
*/
nCyclesPerBurst = this.getTimerBurst(nCyclesPerBurst);
/*
* Execute the burst.
*/
this.stepCPU(nCyclesPerBurst);
/*
* nBurstCycles, less any remaining nStepCycles, is how many cycles stepCPU() ACTUALLY ran (nCycles).
* We add that to nCyclesThisRun, as well as nRunCycles, which is the cycle count since the CPU first
* started running.
* nCycles is how many cycles stepCPU() actually ran (nBurstCycles less any remaining nStepCycles).
*/
var nCycles = this.nBurstCycles - this.nStepCycles;
this.nRunCycles += nCycles;
/*
* Update any/all timers, firing those whose cycle countdowns have reached (or dropped below) zero.
*/
this.updateTimers(nCycles);
/*
* Add nCycles to nCyclesThisRun, as well as nRunCycles (the cycle count since the CPU first started).
*/
this.aCounts.nCyclesThisRun += nCycles;
this.nRunCycles += nCycles;
this.addCycles(0, true);
this.updateChecksum(nCycles);

View file

@ -60,17 +60,17 @@ var CPUDef = {
* Processor Status flag definitions (stored in regPS)
*/
PS: {
CF: 0x0001, // bit 0: Carry flag
CF: 0x0001, // bit 0: Carry Flag
BIT1: 0x0002, // bit 1: reserved, always set
PF: 0x0004, // bit 2: Parity flag
PF: 0x0004, // bit 2: Parity Flag
BIT3: 0x0008, // bit 3: reserved, always clear
AF: 0x0010, // bit 4: Auxiliary Carry flag
AF: 0x0010, // bit 4: Auxiliary Carry Flag
BIT5: 0x0020, // bit 5: reserved, always clear
ZF: 0x0040, // bit 6: Zero flag
SF: 0x0080, // bit 7: Sign flag
ZF: 0x0040, // bit 6: Zero Flag
SF: 0x0080, // bit 7: Sign Flag
ALL: 0x00D5, // all "arithmetic" flags (CF, PF, AF, ZF, SF)
MASK: 0x00FF, //
IF: 0x0200 // bit 9: Interrupt flag (set if interrupts enabled; for internal use only)
IF: 0x0200 // bit 9: Interrupt Flag (set if interrupts enabled; Intel calls this the INTE bit)
},
PARITY: [ // 256-byte array with a 1 wherever the number of set bits of the array index is EVEN
1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
@ -94,10 +94,9 @@ var CPUDef = {
* Interrupt-related flags (stored in intFlags)
*/
INTFLAG: {
NONE: 0x00,
INTL: 0x07, // last interrupt level requested
INTR: 0x08, // set if interrupt has been requested
HALT: 0x10 // halt requested; see opHLT()
NONE: 0x0000,
INTR: 0x00ff, // mask for 8 bits, representing interrupt levels 0-7
HALT: 0x0100 // halt requested; see opHLT()
},
/*
* Opcode definitions

View file

@ -938,47 +938,50 @@ CPUState.prototype.pushWord = function(w)
CPUState.prototype.checkINTR = function()
{
if ((this.intFlags & CPUDef.INTFLAG.INTR) && this.getIF()) {
var bRST = CPUDef.OPCODE.RST0 | ((this.intFlags & CPUDef.INTFLAG.INTL) << 3);
this.intFlags &= ~CPUDef.INTFLAG.HALT;
this.clearINTR();
for (var nLevel = 0; nLevel < 8; nLevel++) {
if (this.intFlags & (1 << nLevel)) break;
}
this.clearINTR(nLevel);
this.clearIF();
this.aOps[bRST].call(this);
this.intFlags &= ~CPUDef.INTFLAG.HALT;
this.aOps[CPUDef.OPCODE.RST0 | (nLevel << 3)].call(this);
return true;
}
return false;
};
/**
* clearINTR()
* clearINTR(nLevel)
*
* Clear the corresponding interrupt level.
*
* nLevel can either be a valid interrupt level (0-7), or -1 to clear all pending interrupts
* (eg, in the event of a system-wide reset).
*
* @this {CPUState}
* @param {number} nLevel (0-7, or -1 for all)
*/
CPUState.prototype.clearINTR = function()
CPUState.prototype.clearINTR = function(nLevel)
{
this.intFlags &= ~(CPUDef.INTFLAG.INTL | CPUDef.INTFLAG.INTR);
var bitsClear = nLevel < 0? 0xff : (1 << nLevel);
this.intFlags &= ~bitsClear;
};
/**
* requestINTR(nLevel)
*
* This is called by any component that wants to request a h/w interrupt.
* Request the corresponding interrupt level.
*
* NOTE: We allow INTR to be set regardless of the current state of interrupt flag (IF), on the theory
* that if/when the CPU briefly turns interrupts off, it shouldn't lose the last h/w interrupt requested.
* So instead of ignoring INTR here, checkINTR() ignores INTR as long as the interrupt flag (IF) is clear.
*
* The downside is that, as long as the CPU has interrupts disabled, an active INTR state will slow stepCPU()
* down slightly. We could avoid that by introducing a two-stage interrupt tracking system, where a separate
* variable keeps track of the last interrupt requested whenever the interrupt flag (IF) is clear, and when
* setIF() finally occurs, that interrupt is propagated to intFlags. But for now, we're going to assume that
* scenario is rare.
* Each interrupt level (0-7) has its own intFlags bit (0-7). If one or more of those bits are set,
* and the Interrupt Flag (IF) is also set, indicating that interrupts are enabled, then checkINTR()
* chooses one of those bits, clears it, clears IF, and executes the corresponding RST opcode.
*
* @this {CPUState}
* @param {number} nLevel (0-7)
*/
CPUState.prototype.requestINTR = function(nLevel)
{
this.intFlags = (this.intFlags & ~CPUDef.INTFLAG.INTL) | nLevel | CPUDef.INTFLAG.INTR;
this.intFlags |= (1 << nLevel);
};
/**

View file

@ -115,15 +115,6 @@ function SerialPort(parmsSerial) {
Component.bindExternalControl(this, sBinding, SerialPort.sIOBuffer);
}
/*
* Define a setTimeout() function that receiveData() can use when there's more data to receive.
*/
this.fnCheckDataReceived = function(serial) {
return function() {
serial.receiveData();
}
}(this);
/*
* No connection until initBus() invokes initConnection().
*/
@ -368,10 +359,24 @@ SerialPort.prototype.initBus = function(cmp, bus, cpu, dbg)
this.bus = bus;
this.cpu = cpu;
this.dbg = dbg;
var serial = this;
this.timerReceiveNext = this.cpu.addTimer(function() {
serial.printMessage("timerReceiveNext()");
serial.receiveData();
});
this.timerTransmitNext = this.cpu.addTimer(function() {
serial.printMessage("timerTransmitNext()");
serial.transmitData();
});
this.chipset = /** @type {ChipSet} */ (cmp.getMachineComponent("ChipSet"));
bus.addPortInputTable(this, SerialPort.aPortInput, this.portBase);
bus.addPortOutputTable(this, SerialPort.aPortOutput, this.portBase);
this.initConnection();
this.setReady();
};
@ -555,9 +560,11 @@ SerialPort.prototype.getBaudTimeout = function(maskRate)
*/
SerialPort.prototype.receiveByte = function(b)
{
this.printMessage("receiveByte(" + str.toHexByte(b) + "): " + str.toHexByte(this.bStatus));
if (!(this.bStatus & SerialPort.UART8251.STATUS.RECV_FULL)) {
this.bDataIn = b;
this.bStatus |= SerialPort.UART8251.STATUS.RECV_FULL;
this.printMessage("receiveByte(" + str.toHexByte(b) + "): " + str.toHexByte(this.bStatus) + " (requesting interrupt)");
this.cpu.requestINTR(this.nIRQ);
return true;
}
@ -567,6 +574,11 @@ SerialPort.prototype.receiveByte = function(b)
/**
* receiveData()
*
* Helper for clocking received data at the expected RECV_RATE.
*
* Currently, this is only use for test data that we "cram" down the terminal's throat, ensuring that we don't
* cram it too rapidly.
*
* @this {SerialPort}
*/
SerialPort.prototype.receiveData = function()
@ -575,21 +587,8 @@ SerialPort.prototype.receiveData = function()
if (this.receiveByte(this.sDataReceived.charCodeAt(0))) {
this.sDataReceived = this.sDataReceived.substr(1);
}
/*
* TODO: If data has become undeliverable for some reason (eg, the Debugger has paused execution),
* we should stop setting timeouts, and add one or more notification mechanisms to kickstart it again.
*/
if (this.sDataReceived) {
/*
* TODO: setTimeout() is a less-than-ideal solution, because it's too slow; timeouts won't fire until
* the end of a CPU burst. So instead of calculating a number of milliseconds, we should calculate a
* number of CPU cycles, and create a CPU notification mechanism that calls us back after that many cycles
* have elapsed (and which will automatically shorten the current CPU burst as needed).
*
* This will also solve the other issue noted above, because if the CPU has been halted, it won't be
* generating any notifications either.
*/
setTimeout(this.fnCheckDataReceived, this.getBaudTimeout(SerialPort.UART8251.BAUDRATES.RECV_RATE));
if (this.sDataReceived && this.cpu) {
this.cpu.setTimer(this.timerReceiveNext, this.getBaudTimeout(SerialPort.UART8251.BAUDRATES.RECV_RATE));
}
}
};
@ -612,10 +611,7 @@ SerialPort.prototype.transmitByte = function(b)
}
if (this.controlIOBuffer) {
if (b == 0x0D) {
this.iLogicalCol = 0;
}
else if (b == 0x08) {
if (b == 0x08) {
this.controlIOBuffer.value = this.controlIOBuffer.value.slice(0, -1);
/*
* TODO: Back up the correct number of columns if the character erased was a tab.
@ -623,13 +619,17 @@ SerialPort.prototype.transmitByte = function(b)
if (this.iLogicalCol > 0) this.iLogicalCol--;
}
else {
var s = String.fromCharCode(b);
var nChars = (b >= 0x20? 1 : 0);
var s = str.toASCIICode(b);
var nChars = s.length;
if (b == 0x09) {
var tabSize = this.tabSize || 8;
nChars = tabSize - (this.iLogicalCol % tabSize);
if (this.tabSize) s = str.pad("", nChars);
}
else if (b == 0x0D) {
this.iLogicalCol = nChars = 0;
s = "\n";
}
if (this.charBOL && !this.iLogicalCol && nChars) s = String.fromCharCode(this.charBOL) + s;
this.controlIOBuffer.value += s;
this.controlIOBuffer.scrollTop = this.controlIOBuffer.scrollHeight;
@ -651,6 +651,21 @@ SerialPort.prototype.transmitByte = function(b)
return fTransmitted;
};
/**
* transmitData()
*
* Helper for clocking transmitted data at the expected XMIT_RATE.
*
* When timerTransmitNext fires, we have honored the programmed XMIT_RATE period, so we can
* set XMIT_READY (and XMIT_EMPTY), which signals the firmware that another byte can be transmitted.
*
* @this {SerialPort}
*/
SerialPort.prototype.transmitData = function()
{
this.bStatus |= (SerialPort.UART8251.STATUS.XMIT_READY | SerialPort.UART8251.STATUS.XMIT_EMPTY);
};
/**
* isTransmitterReady()
*
@ -708,8 +723,20 @@ SerialPort.prototype.outData = function(port, bOut, addrFrom)
this.printMessageIO(port, bOut, addrFrom, "DATA");
this.bDataOut = bOut;
this.bStatus &= ~(SerialPort.UART8251.STATUS.XMIT_READY | SerialPort.UART8251.STATUS.XMIT_EMPTY);
if (this.transmitByte(bOut)) {
this.bStatus |= (SerialPort.UART8251.STATUS.XMIT_READY | SerialPort.UART8251.STATUS.XMIT_EMPTY);
/*
* If we're transmitting to a virtual device that has no measurable delay, this code may clear XMIT_READY
* too quickly.
*
* if (this.transmitByte(bOut)) {
* this.bStatus |= (SerialPort.UART8251.STATUS.XMIT_READY | SerialPort.UART8251.STATUS.XMIT_EMPTY);
* }
*
* A better solution is to arm a timer based on the XMIT_RATE baud rate, and clear the above bits when that
* timer fires. Consequently, we no longer care what transmitByte() reports.
*/
this.transmitByte(bOut);
if (this.cpu) {
this.cpu.setTimer(this.timerTransmitNext, this.getBaudTimeout(SerialPort.UART8251.BAUDRATES.XMIT_RATE));
}
};

View file

@ -1115,7 +1115,7 @@ Video.prototype.updateVT100 = function(fForced)
/*
* Cell cache logic is complicated by the fact that a line may be single-width one frame and double-width
* the next. So we store the visible line length at the start of each row in the cache, which must match if
* the cache is considered valid for the current line.
* the cache can be considered valid for the current line.
*/
var fLineCacheValid = this.fCellCacheValid && (this.aCellCache[iCell] == nColsVisible);
this.aCellCache[iCell++] = nColsVisible;
@ -1153,6 +1153,9 @@ Video.prototype.updateVT100 = function(fForced)
* cache entry, to guarantee that it's redrawn on the next update.
*/
this.assert(iCellUpdated >= 0);
if (DEBUG && (this.aCellCache[iCellUpdated] & 0x7f) == 0x48) {
console.log("spurious character?");
}
this.aCellCache[iCellUpdated] = -1;
cUpdated = 0;
}

View file

@ -381,7 +381,7 @@ str.replaceArray = function(a, s)
* @param {string} s is a string
* @param {number} cch is desired length
* @param {boolean} [fPadLeft] (default is padding on the right)
* @returns {string} the original string (s) with spaces padding it to the specified length
* @return {string} the original string (s) with spaces padding it to the specified length
*/
str.pad = function(s, cch, fPadLeft)
{
@ -393,7 +393,7 @@ str.pad = function(s, cch, fPadLeft)
* trim(s)
*
* @param {string} s
* @returns {string}
* @return {string}
*/
str.trim = function(s)
{
@ -403,4 +403,56 @@ str.trim = function(s)
return s.replace(/^\s+|\s+$/g, "");
};
str.aASCIICodes = {
0x00: "NUL",
0x01: "SOH", // Start of Heading
0x02: "STX", // Start of Text
0x03: "ETX", // End of Text
0x04: "EOT", // End of Transmission
0x05: "ENQ", // Enquiry
0x06: "ACK", // Acknowledge
0x07: "BEL", // Bell
0x08: "BS", // Backspace
0x09: "TAB", // Horizontal Tab
0x0A: "LF", // Line Feed (New Line)
0x0B: "VT", // Vertical Tab
0x0C: "FF", // Form Feed (New Page)
0x0D: "CR", // Carriage Return
0x0E: "SO", // Shift Out
0x0F: "SI", // Shift In
0x10: "DLE", // Data Link Escape
0x11: "DC1", // Device Control 1
0x12: "DC2", // Device Control 2
0x13: "DC3", // Device Control 3
0x14: "DC4", // Device Control 4
0x15: "NAK", // Negative Acknowledge
0x16: "SYN", // Synchronous Idle
0x17: "ETB", // End of Transmission Block
0x18: "CAN", // Cancel
0x19: "EM", // End of Medium
0x1A: "SUB", // Substitute
0x1B: "ESC", // Escape
0x1C: "FS", // File Separator
0x1D: "GS", // Group Separator
0x1E: "RS", // Record Separator
0x1F: "US" // Unit Separator
};
/**
* toASCIICode(b)
*
* @param {number} b
* @return {string}
*/
str.toASCIICode = function(b)
{
var s = str.aASCIICodes[b];
if (s) {
s = '<' + s + '>';
} else {
s = String.fromCharCode(b);
}
return s;
};
if (NODE) module.exports = str;

View file

@ -1,247 +1,249 @@
(function(){var m;function ca(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 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 t(a){return"0x"+n(a,4)}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 ha={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ia(a){return a.replace(/[&<>"']/g,function(a){return ha[a]})}function ja(a,b){return(a+" ").slice(0,b)}function ka(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function la(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 ma=Date.now||function(){return+new Date};function na(){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 oa(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 pa(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function qa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function ra(){return window?window.navigator.userAgent:""}function u(a){window&&window.alert(a)}function sa(a){var b=!1;window&&(b=window.confirm(a));return b}var ta=null;function ua(){if(null==ta){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}ta=a}return ta}
function wa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function xa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ya(a){if(window){var b=ra();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 za(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Aa(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 Ba={init:[],show:[],exit:[]},Ca=!1,Da=!0;function Ia(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ja(a){Ba.init.push(a)}
function Ka(a){if(Da)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){La("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Ma(a){!Da&&a?(Da=!0,Ca&&Na("init")):Da=a}function Na(a){Ba[a]&&Ka(Ba[a])}Ia("onload",function(){Ca=!0;Ka(Ba.init)});Ia("onpageshow",function(){Ka(Ba.show)});Ia(ya("Opera")||ya("iOS")?"onunload":"onbeforeunload",function(){Ka(Ba.exit)});
function x(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.yc=b.comment;this.Ic=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Yb=this.id.substr(0,b),this.Xa=this.id.substr(b+1)):this.Xa=this.id;this[a]=c;this.D={Ma:!1,kb:!1,Wb:!1,ua:!1,mb:!1};this.Ob=null;this.D.mb=!1;this.M={};this.I=null;this.sa=d||0;Oa.push(this)}var Pa=void 0,Sa={};
if(window){Pa||(Pa=window.location.search.substr(1));for(var Ta,Ua=/\+/g,Va=/([^&=]+)=?([^&]*)/g;Ta=Va.exec(Pa);)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 Xa(a,b){b||(b=x);a.prototype=Wa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Oa=[],$a={};function ab(a,b,c){$a[a]&&b&&($a[a][b]=c)}function La(a,b,c){b||u((c?c+": ":"")+a)}function bb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Oa.length;b++){var d=Oa[b];a&&d.id.indexOf(a)||c.push(d)}return c}function cb(a){if(void 0!==a){var b;for(b=0;b<Oa.length;b++)if(Oa[b].id===a)return Oa[b]}return null}
function db(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<Oa.length;d++)if(c)c==Oa[d]&&(c=null);else if(!(a!=Oa[d].type||b&&Oa[d].id.indexOf(b)))return Oa[d]}return null}function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}function eb(a,b){var c,d=fb;b&&(void 0===c&&(c="Panel"),(c=db(c,a.id))&&(c=c.M[b])&&a.ma(null,d,c))}
function gb(a,b){for(var c=B(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.ma(g.type,g.binding,h,g.value),l=k.length}}}}
(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 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){return"0x"+n(a,2)}function t(a){return"0x"+n(a,4)}function ea(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 fa(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ga(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ia={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ja(a){return a.replace(/[&<>"']/g,function(a){return ia[a]})}function ka(a,b){return(a+" ").slice(0,b)}function la(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
var ma={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"DC1",18:"DC2",19:"DC3",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"};function na(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 oa=Date.now||function(){return+new Date};
function pa(){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 qa(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 ra(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function sa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function ta(){return window?window.navigator.userAgent:""}function u(a){window&&window.alert(a)}function ua(a){var b=!1;window&&(b=window.confirm(a));return b}var va=null;function xa(){if(null==va){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}va=a}return va}
function ya(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function za(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Aa(a){if(window){var b=ta();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,Ja=!0;function Ka(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function La(a){Da.init.push(a)}
function Ma(a){if(Ja)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Na("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Oa(a){!Ja&&a?(Ja=!0,Ea&&Pa("init")):Ja=a}function Pa(a){Da[a]&&Ma(Da[a])}Ka("onload",function(){Ea=!0;Ma(Da.init)});Ka("onpageshow",function(){Ma(Da.show)});Ka(Aa("Opera")||Aa("iOS")?"onunload":"onbeforeunload",function(){Ma(Da.exit)});
function x(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.yc=b.comment;this.Ic=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Yb=this.id.substr(0,b),this.Ya=this.id.substr(b+1)):this.Ya=this.id;this[a]=c;this.D={Ma:!1,lb:!1,Wb:!1,va:!1,nb:!1};this.Ob=null;this.D.nb=!1;this.N={};this.I=null;this.sa=d||0;Qa.push(this)}var Ta=void 0,Ua={};
if(window){Ta||(Ta=window.location.search.substr(1));for(var Va,Wa=/\+/g,Xa=/([^&=]+)=?([^&]*)/g;Va=Xa.exec(Ta);)Ua[decodeURIComponent(Va[1].replace(Wa," "))]=decodeURIComponent(Va[2].replace(Wa," "))}function Ya(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 ab(a,b){b||(b=x);a.prototype=Ya(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Qa=[],bb={};function cb(a,b,c){bb[a]&&b&&(bb[a][b]=c)}function Na(a,b,c){b||u((c?c+": ":"")+a)}function db(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Qa.length;b++){var d=Qa[b];a&&d.id.indexOf(a)||c.push(d)}return c}function eb(a){if(void 0!==a){var b;for(b=0;b<Qa.length;b++)if(Qa[b].id===a)return Qa[b]}return null}
function fb(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<Qa.length;d++)if(c)c==Qa[d]&&(c=null);else if(!(a!=Qa[d].type||b&&Qa[d].id.indexOf(b)))return Qa[d]}return null}function z(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}
function gb(a,b){for(var c=B(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=z(h))&&g.binding&&a.ma(g.type,g.binding,h,g.value),l=k.length}}}}
function B(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
x.prototype={constructor:x,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ma:function(a,b,c){switch(b){case "clear":return this.M[b]||(this.M[b]=c,c.onclick=function(a){return function(){a.M.print&&(a.M.print.value="")}}(this)),!0;case "print":return this.M[b]||(this.Fa=this.M[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.ja=function(a){this.g(a,this.Xa)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Xa+": "+a)},ja:function(a,b,c){La(a,b,c||this.type)},Ea:function(){return this.D.ua=!0},Ha:function(a,b){b&&(this.D.ua=!1);return!0}};function D(a,b,c,d,e,f,h){a.I&&(!0===h?h=0:null==h&&(h=a.sa),hb(a.I,a,b,c,d,e,f,h))}function ib(a,b){a.I&&jb(a,0)&&a.I.message(b,void 0)}function jb(a,b){if(a.I){a===a.I?b|=0:b=b||a.sa;var c=a.I.sa&b;return!!b&&c===b||!!(c&a.I.wd)}return!1}
function kb(a,b){if(a.D.Wb)return a.D.kb&&(a.D.kb=!1),a.D.Wb=!1;if(a.D.mb)return a.g(a.toString()+" error"),!1;a.D.kb=b;return a.D.kb}function lb(a,b){a.D.kb&&(b?a.D.Wb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.D.kb}function E(a){if(!a.D.mb&&(a.D.Ma=!0,a.D.Ma)){var b=a.Ob;a.Ob=null;b&&b()}}function mb(a,b){b&&(a.D.Ma?b():a.Ob=b);return a.D.Ma}function nb(a,b){a.D.mb=!0;a.ja(b)}
var qb="undefined"!==typeof ArrayBuffer,rb=[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 sb(a){x.call(this,"Panel",a,sb)}Xa(sb);m=sb.prototype;m.ma=function(a,b,c,d){return this.A&&this.A.ma(a,b,c,d)||this.b&&this.b.ma(a,b,c,d)||this.L&&this.L.ma(a,b,c,d)||this.I&&this.I.ma(a,b,c,d)?!0:this.parent.ma.call(this,a,b,c,d)};m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;this.L=tb(a,"Keyboard")};m.Ea=function(a,b){b||ub();return!0};m.Ha=function(){return!0};m.Ia=function(){};
function ub(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=y(d),f=cb(e.id);f||(a=!0,f=new sb(e));gb(f,d);a&&E(f)}}Ja(ub);
function vb(a,b,c){x.call(this,"Bus",a,vb);this.b=b;this.I=c;this.H=a.busWidth||16;this.N=Math.pow(2,this.H);this.B=this.N-1|0;this.pa=16>=this.H?10:20>=this.H?12:24>=this.H?14:15;this.Ga=1<<this.pa;this.O=this.Ga>>2;this.w=this.Ga-1;this.K=this.N/this.Ga|0;this.L=this.K-1;this.A=[];this.u=[];this.J=this.F=!1;this.P=[];this.X=[];a=new F;wb(a,this.I);this.Y=Array(this.K);for(b=0;b<this.K;b++)this.Y[b]=a;E(this)}Xa(vb);m=vb.prototype;m.reset=function(){};m.Ea=function(a,b){b||this.reset();return!0};
function xb(a,b,c,d){for(var e=b,f=c,h=e>>>a.pa;0<f&&h<a.Y.length;){var g=a.Y[h],k=h*a.Ga,l=a.Ga-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.G)return g.Ib+=g.G-e,g.G=e,!0;if(e>=g.G+g.Ib){l=g.size-(e-k);l>f&&(l=f);g.Ib=e-g.G+l;e=k+a.Ga;f-=l;h++;continue}}return yb(1,e,f)}e=new F(e,l,a.Ga,d);wb(e,a.I,g);a.Y[h++]=e;e=k+a.Ga;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+zb[d]+" at "+t(b)),!0):yb(2,b,c)}m.aa=function(a){return this.Y[(a&this.B)>>>this.pa].tb(a&this.w,a)};
function Ab(a,b){return a.Y[(b&a.B)>>>a.pa].Hb(b&a.w,b)}m.Sa=function(a){var b=a&this.w,c=(a&this.B)>>>this.pa;return b!=this.w?this.Y[c].Lc(b,a):this.Y[c++].tb(b,a)|this.Y[c&this.L].tb(0,a+1)<<8};function Bb(a,b){var c=b&a.w,d=(b&a.B)>>>a.pa;return c!=a.w?a.Y[d].fc(c,b):a.Y[d++].Hb(c,b)|a.Y[d&a.L].Hb(0,b+1)<<8}m.ta=function(a,b){this.Y[(a&this.B)>>>this.pa].vb(a&this.w,b&255,a)};function Cb(a,b,c){a.Y[(b&a.B)>>>a.pa].Jb(b&a.w,c&255,b)}
m.Ub=function(a,b){var c=a&this.w,d=(a&this.B)>>>this.pa;c!=this.w?this.Y[d].Oc(c,b&65535,a):(this.Y[d++].vb(c,b&255,a),this.Y[d&this.L].vb(0,b>>8&255,a+1))};function Db(a,b){if(void 0===b)return a.J=!a.J,a.J;void 0===a.A[b]&&(a.A[b]=[null,!1]);a.A[b][1]=!a.A[b][1];return a.A[b][1]}function Eb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.A[k]?u("Input port "+t(k)+" already registered"):f.A[k]=[g,!1]}}
function Fb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.A[b],g=a.P[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.I&&a.J!=h[1]&&Gb(a.I,b,l)):a.I&&(hb(a.I,a,b,null,c),a.J&&Gb(a.I,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Ib(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 Jb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.u[k]?u("Output port "+t(k)+" already registered"):f.u[k]=[g,!1]}}function Kb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.X[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.I&&a.F!=h[1]&&Tb(a.I,b,k)}else a.I&&(hb(a.I,a,b,k,d),a.F&&Tb(a.I,b,k));f+=g<<3;b+=g;e-=g}}
function yb(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Ub;if(qb){var Vb=new ArrayBuffer(2);(new DataView(Vb)).setUint16(0,256,!0);Ub=256===(new Uint16Array(Vb))[0]}else Ub=!1;var Wb=Ub;
function F(a,b,c,d){this.id=Xb+=2;this.b=null;this.G=a;this.Ib=b;this.size=c||0;this.type=d||Yb;this.A=d==Zb;wb(this);this.Oa=this.vc=!1;if(c)if(qb)this.J=new ArrayBuffer(c),this.F=new DataView(this.J,0,c),this.w=new Uint8Array(this.J,0,c),this.L=new Uint16Array(this.J,0,c>>1),this.b=new Int32Array(this.J,0,c>>2),$b(this,Wb?ac:bc);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;$b(this,cc)}else $b(this)}var Yb=0,Zb=2,zb=["NONE","RAM","ROM","VID","H/W"],Xb=0;
F.prototype={constructor:F,parent:null,save:function(){var a,b;if(qb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.F.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(qb)for(b=0;b<a.length;b++)this.F.setInt32(b<<2,a[b],!0);else this.b=a;return this.Oa=!0}return!1},Za:function(a,b){b?0===this.u++&&dc(this,ec,!1):0===this.M++&&fc(this,ec,!1)},K:function(){this.I&&jb(this.I,129)&&this.I.message("attempt to read invalid block %"+n(this.G),!0);
return 255},B:function(a,b){this.I&&jb(this.I,129)&&this.I.message("attempt to write "+t(b)+" to invalid block %"+n(this.G),!0)},N:function(a,b){return this.tb(a++,b++)|this.tb(a,b)<<8},H:function(a,b,c){this.vb(a++,b&255,c++);this.vb(a,b>>8,c)},ca:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ha:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},ya:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Oa=!0},Da: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.Oa=!0},P:function(a,b){if(this.I&&null!=this.G){var c=this.I;gc(c,this.G+a,1,c.P)&&c.na(!0)}return this.Hb(a,b)},ea:function(a,b){if(this.I&&null!=this.G){var c=this.I;gc(c,this.G+a,2,c.P)&&c.na(!0)}return this.fc(a,b)},qa:function(a,b,c){if(this.I&&null!=this.G){var d=this.I;gc(d,this.G+a,1,d.F)&&d.na(!0)}this.A?this.B(a,b,c):this.Jb(a,b,c)},Xa:function(a,
b,c){if(this.I&&null!=this.G){var d=this.I;gc(d,this.G+a,2,d.F)&&d.na(!0)}this.A?this.B(a,b,c):this.hc(a,b,c)},O:function(a){return this.w[a]},X:function(a){return this.w[a]},da:function(a){return this.F.getUint16(a,!0)},ga:function(a){return a&1?this.w[a]|this.w[a+1]<<8:this.L[a>>1]},ia:function(a,b){this.w[a]=b;this.Oa=!0},ra:function(a,b){this.w[a]=b;this.Oa=!0},za:function(a,b){this.F.setUint16(a,b,!0);this.Oa=!0},Ca:function(a,b){a&1?(this.w[a]=b,this.w[a+1]=b>>8):this.L[a>>1]=b;this.Oa=!0}};
function wb(a,b,c){a.I=b;a.M=a.u=0;c&&((a.M=c.M)&&fc(a,ec,!1),(a.u=c.u)&&dc(a,ec,!1))}function hc(a,b){b?0===--a.u&&(a.vb=a.A?a.B:a.Jb,a.Oc=a.A?a.H:a.hc):0===--a.M&&(a.tb=a.Hb,a.Lc=a.fc)}function dc(a,b,c){c&&a.u||(a.vb=!a.A&&b[2]||a.B,a.Oc=!a.A&&b[3]||a.H);if(c||void 0===c)a.Jb=b[2]||a.B,a.hc=b[3]||a.H}function fc(a,b,c){c&&a.M||(a.tb=b[0]||a.K,a.Lc=b[1]||a.N);if(c||void 0===c)a.Hb=b[0]||a.K,a.fc=b[1]||a.N}function $b(a,b){b||(b=ic);fc(a,b,void 0);dc(a,b,void 0)}
var ic=[],cc=[F.prototype.ca,F.prototype.ha,F.prototype.ya,F.prototype.Da],ec=[F.prototype.P,F.prototype.ea,F.prototype.qa,F.prototype.Xa];if(qb)var bc=[F.prototype.O,F.prototype.da,F.prototype.ia,F.prototype.za],ac=[F.prototype.X,F.prototype.ga,F.prototype.ra,F.prototype.Ca];
function jc(a,b){x.call(this,"CPU",a,jc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.sb=c;this.i.Qb=0;this.i.eb=d;this.i.bc=Math.round(this.i.sb/1E4)/100;this.i.bb=this.i.bc*this.i.eb;this.D.xa=!1;this.D.Xb=!1;this.D.uc=a.autoStart;this.D.wc=!1;this.D.lb=!1;this.i.Bb=this.i.pb=0;this.i.Cb=a.csStart;this.i.ob=a.csInterval;this.i.qb=a.csStop;this.X=this.fb.bind(this);E(this)}Xa(jc);var kc=["power","reset"];m=jc.prototype;
m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.I=d;for(b=0;b<kc.length;b++)(c=this.M[kc[b]])&&this.A.ma(null,kc[b],c);this.K=(b=tb(a,"Video"))&&Math.max(b.Zd,b.Zb)||60;this.J=tb(a,"ChipSet");a=lc(a,"autoStart");null!=a&&(this.D.uc="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.Qb=0};m.save=function(){return null};m.restore=function(){return!1};
m.Ea=function(a,b){if(!b){if(a&&this.restore){mc(this);if(!this.restore(a))return!1;nc(this)}else this.reset();if(this.I){var c=this.I;c.g("Type ? for help with PC8080 Debugger commands");c.Ia();if(c.Da){var d=c.Da;c.Da=null;oc(c,d)}}else this.g("No debugger detected")}Bc(this);return!0};m.Ha=function(a){return a?this.save():!0};function Cc(a){(a.D.uc||!a.I&&void 0===a.M.run)&&a.fb(!0)}m.xc=function(){return 0};
function nc(a){void 0===a.i.Cb&&(a.i.Cb=0);void 0===a.i.ob&&(a.i.ob=-1);void 0===a.i.qb&&(a.i.qb=-1);a.D.lb=0<=a.i.Cb&&0<a.i.ob;a.D.lb&&(a.i.Bb=0,a.i.pb=a.i.Cb-a.H)}function Dc(a,b){if(a.D.lb){var c=!1;a.i.Bb=a.i.Bb+a.xc()|0;a.i.pb-=b;0>=a.i.pb&&(a.i.pb+=a.i.ob,c=!0);0<=a.i.qb&&a.i.qb<=Ec(a)&&(a.i.ob=a.i.qb=-1,nc(a),a.na(),c=!0);c&&a.g(Ec(a)+" cycles: checksum="+n(a.i.Bb))}}
m.ma=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.M[b]=c;a=!0;break;case "run":this.M[b]=c;c.onclick=function(){var a;if(a=d.A)if(a=d.A,a.D.ua)a=!0;else{var b=null,c,g=bb(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.D.Ma);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.D.ua);c++);c==g.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.D.Ma?"powered yet":"ready yet"+(b.Ob?" (waiting for notification)":""))+".");a=!1}a&&(d.D.xa?d.na(!0):d.fb(!0))};a=
!0;break;case "speed":this.M[b]=c;a=!0;break;case "setSpeed":this.M[b]=c,c.onclick=function(){Fc(d,d.i.eb<<1,!0)},c.textContent=this.i.bb.toFixed(2)+"Mhz",a=!0}return a};function Gc(a,b,c){a.H+=b;c&&(a.B=a.b=0)}
function Hc(a,b){var c=30;c<a.K&&(c=a.K);2>c&&(c=2);var d=1;b&&1<a.i.eb&&a.i.ab&&(d=a.i.ab/a.i.bc);a.i.Cc=Math.round(1E3/30);a.i.Hd=Math.floor(a.i.sb/c*d);a.i.dc=Math.floor(a.i.sb/30*d);a.i.Ec=Math.floor(a.i.sb/a.K*d);a.i.Dc=Math.floor(a.i.sb/2*d);b||(a.i.rb=a.i.dc,a.i.Eb=a.i.Ec,a.i.Db=a.i.Dc);a.i.ec=0}function Ec(a){return a.H+a.F+a.B-a.b}function mc(a){a.i.ab=0;a.H=a.F=a.B=a.b=0;nc(a);Fc(a,1)}
function Fc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.ab/a.i.bb?b=1:d=!0;a.i.eb=b;b=a.i.bc*a.i.eb;if(a.i.bb!=b){a.i.bb=b;b=a.i.bb.toFixed(2)+"Mhz";var e=a.M.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.A&&a.A.gb()}Gc(a,a.F);a.F=0;a.i.nb=ma();a.i.cb=0;Hc(a);return d}
m.fb=function(a){if(kb(this,!0)){if(!this.D.xa){Fc(this);this.A&&this.A.start(this.i.nb,Ec(this));this.D.xa=!0;this.D.Xb=!0;this.J&&this.J.start();var b=this.M.run;b&&(b.textContent="Halt");this.A&&(this.A.Ia(!0),a&&this.A.gb(!0))}this.i.ec>=this.i.sb&&Hc(this,!0);this.i.Fb=0;this.i.Pb=ma();this.i.cb&&(a=this.i.Pb-this.i.cb,a>this.i.Cc&&(this.i.nb+=a,this.i.nb>this.i.Pb&&(this.i.nb=this.i.Pb)));try{do{this.ub(this.D.lb?1:this.i.Hd);var c=this.B-this.b;this.F+=c;this.i.Fb+=c;Gc(this,0,!0);Dc(this,
c);this.i.Eb-=c;0>=this.i.Eb&&(this.i.Eb+=this.i.Ec,this.A&&Ic(this.A,this.i.Qb++),this.i.Qb>this.K&&(this.i.Qb=0));this.i.Db-=c;0>=this.i.Db&&(this.i.Db+=this.i.Dc,this.A&&this.A.Ia());this.i.rb-=c;if(0>=this.i.rb){this.i.rb+=this.i.dc;break}}while(this.D.xa)}catch(e){this.na();Bc(this);this.A&&this.A.stop(ma(),Ec(this));kb(this,!1);nb(this,e.stack||e.message);return}c=setTimeout;a=this.X;this.i.cb=ma();b=this.i.Cc;this.i.Fb&&(b=Math.round(b*this.i.Fb/this.i.dc));var b=b-(this.i.cb-this.i.Pb),d=
this.i.cb-this.i.nb;d&&(this.i.ab=Math.round(this.F/(10*d))/100,864E5<=d&&(this.H=0,Fc(this)));if(0>b||this.i.ab<this.i.bb)b=0;this.i.ec+=this.i.Fb;this.i.cb+=b;c(a,b)}else Bc(this),this.A&&this.A.stop(ma(),Ec(this))};m.ub=function(){return 0};m.na=function(a){lb(this,!0);this.B-=this.b;this.b=0;Gc(this,this.F);this.F=0;if(this.D.xa){this.D.xa=!1;this.J&&this.J.stop();var b=this.M.run;b&&(b.textContent="Run")}this.D.Nb=a};function Bc(a,b){a.A&&(Ic(a.A,-1),a.A.Ia(b))}
function Jc(a){this.Bc=+a.model||8080;jc.call(this,a,1E6);this.N=Kc;mc(this);this.D.Nb=this.D.xd=!1;this.P=0;this.L=[];this.O=0;Lc(this)}Xa(Jc,jc);function Mc(a,b){a.L.push(b)}m=Jc.prototype;m.reset=function(){this.D.xa&&this.na();Lc(this);mc(this);this.D.mb=!1;this.parent.reset.call(this)};function Lc(a){a.j=0;a.S=0;a.T=0;a.U=0;a.V=0;a.W=0;a.Z=0;a.la=0;G(a,a.O);Nc(a,0);a.u=0}function Oc(a,b){a.O=b;G(a,b)}
m.xc=function(){var a=this.j+this.S+this.T+this.U+this.V+this.W+this.Z|0;return a=a+this.la+this.R+Pc(this)|0};
m.save=function(){var a=new H(this);I(a,0,[this.j,this.S,this.T,this.U,this.V,this.W,this.Z,this.la,this.R,Pc(this)]);I(a,1,[this.u,this.H,this.i.eb]);for(var b=this.w,c=0,d=[],e=0;e<b.K;e++){var f=b.Y[e];if(f.Oa||f.vc){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var p=f[g],q=g+1;q<f.length&&f[q]===p;)q++;l[k++]=q-g;l[k++]=p;g=q}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.j=b[0];this.S=b[1];this.T=b[2];this.U=b[3];this.V=b[4];this.W=b[5];this.Z=b[6];this.la=b[7]&65535;G(this,b[8]);Nc(this,b[9]);b=a[1];this.u=b[0];this.H=b[1];Fc(this,b[3]);a:{b=this.w;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.O){for(var f=0,h=Array(b.O),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.Y[d];if(!f||!f.restore(e)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.ma=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.M[b]=c;this.P++;d=!0;break;default:d=this.parent.ma.call(this,a,b,c)}return d};function Qc(a){return a.S<<8|a.T}function Rc(a,b){a.S=b>>8&255;a.T=b&255}function Sc(a){return a.U<<8|a.V}function Tc(a,b){a.U=b>>8&255;a.V=b&255}function J(a){return a.W<<8|a.Z}
function Uc(a,b){a.W=b>>8&255;a.Z=b&255}function G(a,b){a.R=b&65535}function Vc(a){return a.ba&256?1:0}function Wc(a,b){a.ba=a.ba&255|b}function Xc(a){return rb[a.fa&255]?4:0}function Yc(a){return(a.fa^a.wa)&16?16:0}function Zc(a){return a.ba&255?0:64}function $c(a){return a.fa&128?128:0}function Pc(a){return a.va&-214|$c(a)|Zc(a)|Yc(a)|Xc(a)|Vc(a)}function Nc(a,b){a.ba=a.fa=a.wa=0;b&1&&(a.ba|=256);b&4||(a.fa|=1);b&16&&(a.wa|=16);b&64||(a.ba|=255);b&128&&(a.fa^=192);a.va=a.va&-726|b&512|2}
function ad(a,b){a.wa=a.j^b;return a.fa=(a.ba=a.j+b)&255}function bd(a,b){a.wa=a.j^b;return a.fa=(a.ba=a.j+b+(a.ba&256?1:0))&255}function cd(a,b){a.ba=a.fa=a.wa=a.j&b;(a.j|b)&8&&(a.wa^=16);return a.ba}function dd(a,b){a.wa=b^255;b=a.fa=b+255&255;a.ba=a.ba&-256|b;return b}function ed(a,b){a.wa=b;b=a.fa=b+1&255;a.ba=a.ba&-256|b;return b}function fd(a,b){return a.fa=a.ba=a.wa=a.j|b}function K(a,b){b^=255;a.wa=a.j^b;return a.fa=(a.ba=a.j+b+1^256)&255}
function zd(a,b){b^=255;a.wa=a.j^b;return a.fa=(a.ba=a.j+b+(a.ba&256?0:1)^256)&255}function Ad(a,b){return a.fa=a.ba=a.wa=a.j^b}m.aa=function(a){return this.w.aa(a)};m.ta=function(a,b){this.w.ta(a,b)};function L(a){var b=a.aa(a.R);G(a,a.R+1);return b}function M(a){var b=a.w.Sa(a.R);G(a,a.R+2);return b}function O(a){var b=a.w.Sa(a.la);a.la=a.la+2&65535;return b}function P(a,b){a.la=a.la-2&65535;a.w.Ub(a.la,b)}function Bd(a,b){a.u=a.u&-8|b|8}
function R(a,b,c,d){d=d||2;a.M[b]&&(void 0===c&&(nb(a,"Value for "+b+" is invalid"),a.na()),c=!a.D.xa||a.D.wc?n(c,d):"--------".substr(0,d),a.M[b].textContent!=c&&(a.M[b].textContent=c))}
m.Ia=function(a){this.P&&(a||!this.D.xa||this.D.wc)&&(R(this,"A",this.j),R(this,"B",this.S),R(this,"C",this.T),R(this,"BC",Qc(this),4),R(this,"D",this.U),R(this,"E",this.V),R(this,"DE",Sc(this),4),R(this,"H",this.W),R(this,"L",this.Z),R(this,"HL",J(this),4),R(this,"SP",this.la,4),R(this,"PC",this.R,4),a=Pc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.M.speed)a.textContent=
this.D.xa&&this.i.ab?this.i.ab.toFixed(2)+"Mhz":"Stopped"};m.ub=function(a){this.D.Nb=!0;var b=this.D.xd=this.I&&Cd(this.I),c=a?this.D.Xb?0:1:-1;this.D.Xb=!1;this.B=this.b=a;do{if(this.u){if(a&&this.u&8&&this.va&512){var d=199|(this.u&7)<<3;this.u&=-17;this.u&=-16;this.va&=-513;this.N[d].call(this)}if(this.u&16){this.b=0;break}}if(b){if(Dd(this.I,this.R,c)){this.na();break}c=1}this.N[L(this)].call(this)}while(0<this.b);return this.D.Nb?this.B-this.b:void 0===this.D.Nb?0:-1};
Ja(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Jc(d);gb(d,c)}});function Ed(){this.b-=4}function Fd(){G(this,M(this));this.b-=10}function Gd(){G(this,O(this));this.b-=10}function Hd(){var a=M(this);P(this,this.R);G(this,a);this.b-=17}
var Kc=[Ed,function(){Rc(this,M(this));this.b-=10},function(){this.ta(Qc(this),this.j);this.b-=7},function(){Rc(this,Qc(this)+1);this.b-=5},function(){this.S=ed(this,this.S);this.b-=5},function(){this.S=dd(this,this.S);this.b-=5},function(){this.S=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Wc(this,a&256);this.b-=4},Ed,function(){var a;Uc(this,a=J(this)+Qc(this));Wc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(Qc(this));this.b-=7},function(){Rc(this,Qc(this)-1);this.b-=
5},function(){this.T=ed(this,this.T);this.b-=5},function(){this.T=dd(this,this.T);this.b-=5},function(){this.T=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Wc(this,a);this.b-=4},Ed,function(){Tc(this,M(this));this.b-=10},function(){this.ta(Sc(this),this.j);this.b-=7},function(){Tc(this,Sc(this)+1);this.b-=5},function(){this.U=ed(this,this.U);this.b-=5},function(){this.U=dd(this,this.U);this.b-=5},function(){this.U=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
Vc(this);Wc(this,a&256);this.b-=4},Ed,function(){var a;Uc(this,a=J(this)+Sc(this));Wc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(Sc(this));this.b-=7},function(){Tc(this,Sc(this)-1);this.b-=5},function(){this.V=ed(this,this.V);this.b-=5},function(){this.V=dd(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){var a=this.j<<8;this.j=(Vc(this)<<8|this.j)>>1;Wc(this,a&256);this.b-=4},Ed,function(){Uc(this,M(this));this.b-=10},function(){var a=M(this);this.w.Ub(a,J(this));
this.b-=16},function(){Uc(this,J(this)+1);this.b-=5},function(){this.W=ed(this,this.W);this.b-=5},function(){this.W=dd(this,this.W);this.b-=5},function(){this.W=L(this);this.b-=7},function(){var a=0,b=Vc(this);if(Yc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=ad(this,a);Wc(this,b?256:0);this.b-=4},Ed,function(){var a;Uc(this,a=J(this)+J(this));Wc(this,a>>8&256);this.b-=10},function(){var a;a=M(this);a=this.w.Sa(a);Uc(this,a);this.b-=16},function(){Uc(this,J(this)-1);this.b-=5},function(){this.Z=
ed(this,this.Z);this.b-=5},function(){this.Z=dd(this,this.Z);this.b-=5},function(){this.Z=L(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},Ed,function(){this.la=M(this)&65535;this.b-=10},function(){this.ta(M(this),this.j);this.b-=13},function(){this.la=this.la+1&65535;this.b-=5},function(){var a=J(this);this.ta(a,ed(this,this.aa(a)));this.b-=10},function(){var a=J(this);this.ta(a,dd(this,this.aa(a)));this.b-=10},function(){this.ta(J(this),L(this));this.b-=10},function(){this.ba|=256;this.b-=
4},Ed,function(){var a;Uc(this,a=J(this)+this.la);Wc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(M(this));this.b-=13},function(){this.la=this.la-1&65535;this.b-=5},function(){this.j=ed(this,this.j);this.b-=5},function(){this.j=dd(this,this.j);this.b-=5},function(){this.j=L(this);this.b-=7},function(){Wc(this,Vc(this)?0:256);this.b-=4},function(){this.b-=5},function(){this.S=this.T;this.b-=5},function(){this.S=this.U;this.b-=5},function(){this.S=this.V;this.b-=5},function(){this.S=this.W;
this.b-=5},function(){this.S=this.Z;this.b-=5},function(){this.S=this.aa(J(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=this.U;this.b-=5},function(){this.T=this.V;this.b-=5},function(){this.T=this.W;this.b-=5},function(){this.T=this.Z;this.b-=5},function(){this.T=this.aa(J(this));this.b-=7},function(){this.T=this.j;this.b-=5},function(){this.U=this.S;this.b-=5},function(){this.U=this.T;this.b-=5},function(){this.b-=
5},function(){this.U=this.V;this.b-=5},function(){this.U=this.W;this.b-=5},function(){this.U=this.Z;this.b-=5},function(){this.U=this.aa(J(this));this.b-=7},function(){this.U=this.j;this.b-=5},function(){this.V=this.S;this.b-=5},function(){this.V=this.T;this.b-=5},function(){this.V=this.U;this.b-=5},function(){this.b-=5},function(){this.V=this.W;this.b-=5},function(){this.V=this.Z;this.b-=5},function(){this.V=this.aa(J(this));this.b-=7},function(){this.V=this.j;this.b-=5},function(){this.W=this.S;
this.b-=5},function(){this.W=this.T;this.b-=5},function(){this.W=this.U;this.b-=5},function(){this.W=this.V;this.b-=5},function(){this.b-=5},function(){this.W=this.Z;this.b-=5},function(){this.W=this.aa(J(this));this.b-=7},function(){this.W=this.j;this.b-=5},function(){this.Z=this.S;this.b-=5},function(){this.Z=this.T;this.b-=5},function(){this.Z=this.U;this.b-=5},function(){this.Z=this.V;this.b-=5},function(){this.Z=this.W;this.b-=5},function(){this.b-=5},function(){this.Z=this.aa(J(this));this.b-=
7},function(){this.Z=this.j;this.b-=5},function(){this.ta(J(this),this.S);this.b-=7},function(){this.ta(J(this),this.T);this.b-=7},function(){this.ta(J(this),this.U);this.b-=7},function(){this.ta(J(this),this.V);this.b-=7},function(){this.ta(J(this),this.W);this.b-=7},function(){this.ta(J(this),this.Z);this.b-=7},function(){var a=this.R-1;if(this.L.length)for(var b=0;b<this.L.length;b++)if(this.L[b](a))return;this.u|=16;this.b-=7;this.I&&jb(this,-2147483648)?(G(this,a),this.I.na()):this.va&512||(this.I&&
G(this,a),this.na())},function(){this.ta(J(this),this.j);this.b-=7},function(){this.j=this.S;this.b-=5},function(){this.j=this.T;this.b-=5},function(){this.j=this.U;this.b-=5},function(){this.j=this.V;this.b-=5},function(){this.j=this.W;this.b-=5},function(){this.j=this.Z;this.b-=5},function(){this.j=this.aa(J(this));this.b-=7},function(){this.b-=5},function(){this.j=ad(this,this.S);this.b-=4},function(){this.j=ad(this,this.T);this.b-=4},function(){this.j=ad(this,this.U);this.b-=4},function(){this.j=
ad(this,this.V);this.b-=4},function(){this.j=ad(this,this.W);this.b-=4},function(){this.j=ad(this,this.Z);this.b-=4},function(){this.j=ad(this,this.aa(J(this)));this.b-=7},function(){this.j=ad(this,this.j);this.b-=4},function(){this.j=bd(this,this.S);this.b-=4},function(){this.j=bd(this,this.T);this.b-=4},function(){this.j=bd(this,this.U);this.b-=4},function(){this.j=bd(this,this.V);this.b-=4},function(){this.j=bd(this,this.W);this.b-=4},function(){this.j=bd(this,this.Z);this.b-=4},function(){this.j=
bd(this,this.aa(J(this)));this.b-=7},function(){this.j=bd(this,this.j);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.U);this.b-=4},function(){this.j=K(this,this.V);this.b-=4},function(){this.j=K(this,this.W);this.b-=4},function(){this.j=K(this,this.Z);this.b-=4},function(){this.j=K(this,this.aa(J(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=zd(this,this.S);this.b-=4},function(){this.j=
zd(this,this.T);this.b-=4},function(){this.j=zd(this,this.U);this.b-=4},function(){this.j=zd(this,this.V);this.b-=4},function(){this.j=zd(this,this.W);this.b-=4},function(){this.j=zd(this,this.Z);this.b-=4},function(){this.j=zd(this,this.aa(J(this)));this.b-=7},function(){this.j=zd(this,this.j);this.b-=4},function(){this.j=cd(this,this.S);this.b-=4},function(){this.j=cd(this,this.T);this.b-=4},function(){this.j=cd(this,this.U);this.b-=4},function(){this.j=cd(this,this.V);this.b-=4},function(){this.j=
cd(this,this.W);this.b-=4},function(){this.j=cd(this,this.Z);this.b-=4},function(){this.j=cd(this,this.aa(J(this)));this.b-=7},function(){this.j=cd(this,this.j);this.b-=4},function(){this.j=Ad(this,this.S);this.b-=4},function(){this.j=Ad(this,this.T);this.b-=4},function(){this.j=Ad(this,this.U);this.b-=4},function(){this.j=Ad(this,this.V);this.b-=4},function(){this.j=Ad(this,this.W);this.b-=4},function(){this.j=Ad(this,this.Z);this.b-=4},function(){this.j=Ad(this,this.aa(J(this)));this.b-=7},function(){this.j=
Ad(this,this.j);this.b-=4},function(){this.j=fd(this,this.S);this.b-=4},function(){this.j=fd(this,this.T);this.b-=4},function(){this.j=fd(this,this.U);this.b-=4},function(){this.j=fd(this,this.V);this.b-=4},function(){this.j=fd(this,this.W);this.b-=4},function(){this.j=fd(this,this.Z);this.b-=4},function(){this.j=fd(this,this.aa(J(this)));this.b-=7},function(){this.j=fd(this,this.j);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.U);this.b-=
4},function(){K(this,this.V);this.b-=4},function(){K(this,this.W);this.b-=4},function(){K(this,this.Z);this.b-=4},function(){K(this,this.aa(J(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){Zc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Rc(this,O(this));this.b-=10},function(){var a=M(this);Zc(this)||G(this,a);this.b-=10},Fd,function(){var a=M(this);Zc(this)||(P(this,this.R),G(this,a),this.b-=6);this.b-=11},function(){P(this,Qc(this));this.b-=11},function(){this.j=ad(this,
L(this));this.b-=7},function(){P(this,this.R);G(this,0);this.b-=11},function(){Zc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},Gd,function(){var a=M(this);Zc(this)&&G(this,a);this.b-=10},Fd,function(){var a=M(this);Zc(this)&&(P(this,this.R),G(this,a),this.b-=6);this.b-=11},Hd,function(){this.j=bd(this,L(this));this.b-=7},function(){P(this,this.R);G(this,8);this.b-=11},function(){Vc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Tc(this,O(this));this.b-=10},function(){var a=M(this);Vc(this)||
G(this,a);this.b-=10},function(){var a=L(this);Kb(this.w,a,this.j,this.R+-2&65535);this.b-=10},function(){var a=M(this);Vc(this)||(P(this,this.R),G(this,a),this.b-=6);this.b-=11},function(){P(this,Sc(this));this.b-=11},function(){this.j=K(this,L(this));this.b-=7},function(){P(this,this.R);G(this,16);this.b-=11},function(){Vc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},Gd,function(){var a=M(this);Vc(this)&&G(this,a);this.b-=10},function(){var a=L(this);this.j=Fb(this.w,a,this.R+-2&65535)&255;this.b-=
10},function(){var a=M(this);Vc(this)&&(P(this,this.R),G(this,a),this.b-=6);this.b-=11},Hd,function(){this.j=zd(this,L(this));this.b-=7},function(){P(this,this.R);G(this,24);this.b-=11},function(){Xc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Uc(this,O(this));this.b-=10},function(){var a=M(this);Xc(this)||G(this,a);this.b-=10},function(){var a=O(this);P(this,J(this));Uc(this,a);this.b-=18},function(){var a=M(this);Xc(this)||(P(this,this.R),G(this,a),this.b-=6);this.b-=11},function(){P(this,
J(this));this.b-=11},function(){this.j=cd(this,L(this));this.b-=7},function(){P(this,this.R);G(this,32);this.b-=11},function(){Xc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},function(){G(this,J(this));this.b-=5},function(){var a=M(this);Xc(this)&&G(this,a);this.b-=10},function(){var a=J(this);Uc(this,Sc(this));Tc(this,a);this.b-=5},function(){var a=M(this);Xc(this)&&(P(this,this.R),G(this,a),this.b-=6);this.b-=11},Hd,function(){this.j=Ad(this,L(this));this.b-=7},function(){P(this,this.R);G(this,
40);this.b-=11},function(){$c(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Nc(this,a&255|this.va&-256);this.j=a>>8;this.b-=10},function(){var a=M(this);$c(this)||G(this,a);this.b-=10},function(){this.va&=-513;this.b-=4},function(){var a=M(this);$c(this)||(P(this,this.R),G(this,a),this.b-=6);this.b-=11},function(){P(this,Pc(this)&255|this.j<<8);this.b-=11},function(){this.j=fd(this,L(this));this.b-=7},function(){P(this,this.R);G(this,48);this.b-=11},function(){$c(this)&&(G(this,
O(this)),this.b-=6);this.b-=5},function(){this.la=J(this)&65535;this.b-=5},function(){var a=M(this);$c(this)&&G(this,a);this.b-=10},function(){this.va|=512;this.b-=4},function(){var a=M(this);$c(this)&&(P(this,this.R),G(this,a),this.b-=6);this.b-=11},Hd,function(){K(this,L(this));this.b-=7},function(){P(this,this.R);G(this,56);this.b-=11}];
function S(a){x.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!Id[b]&&La("Unrecognized ChipSet model: "+b);this.B=Id[b]||{};a.sound&&(this.ha=null,window&&(this.ha=window.AudioContext||window.webkitAudioContext),this.ha&&new this.ha);E(this)}Xa(S);
var T={Aa:1978.1,sd:{Ba:0,ee:1,ie:16,pe:32,ye:64,xe:128,wb:14},Wa:{Ba:1,Tc:1,md:2,hd:4,jd:16,kd:32,ld:64,wb:8},td:{Ba:2,de:3,Ge:4,fe:8,te:16,ue:32,ve:64,ge:128,wb:0},Ce:{Ba:3},Ae:{Ba:2,qe:7},Ee:{Ba:3,He:1,De:2,we:4,ne:8,he:16,ae:32},Be:{Ba:4},Fe:{Ba:5,je:1,ke:2,le:4,me:8,Ie:16}},U={Aa:100,Ja:{Ba:66,rc:1,nc:2,gd:4,se:8,re:16,pc:32,oc:64,kc:128},Sc:{Ba:66,INIT:0},Ua:{Ba:194,ce:0,jc:16,nd:32,qc:48,Xc:0,Yc:32},Kb:{Ba:162,ze:0,$c:0,Wc:0,Zc:0,Vc:0},Ka:{oe:{Ba:98},Ta:{Qc:0,Pc:1,pd:2,ud:4,Uc:5,od:6,qd:7},
Lb:16383}},Id={SI1978:T,VT100:U};S.prototype.ma=function(){return!1};S.prototype.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;this.A=a;this.L=tb(a,"Keyboard");this.Na=tb(a,"SerialPort");this.video=tb(a,"Video");Eb(b,this,this.B.Rb);Jb(b,this,this.B.Sb)};S.prototype.Ea=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};S.prototype.Ha=function(a){return a?this.save():!0};T.INIT=[[T.sd.wb,T.Wa.wb,T.td.wb,0,0,0,0]];
U.INIT=[[U.Sc.INIT,U.Ja.nc|U.Ja.gd],[U.Ua.Xc,U.Ua.Yc],[U.Kb.$c,U.Kb.Wc,U.Kb.Zc,U.Kb.Vc],[0,0,0,0,[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11776,11856,11824,11840,11808,11776,12E3,12E3,11857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]];
m=S.prototype;m.reset=function(){this.B.INIT&&!this.restore(this.B.INIT)&&this.ja("reset error")};m.save=function(){var a=new H(this);switch(this.B.Aa){case T.Aa:I(a,0,[this.Ca,this.F,this.Da,this.ca,this.ga,this.ya,this.za]);break;case U.Aa:I(a,0,[this.ia,this.H]),I(a,1,[this.N,this.O]),I(a,2,[this.J,this.da,this.ra,this.qa]),I(a,3,[this.X,this.u,this.P,this.ea,this.K])}return a.data()};
m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.B.Aa){case T.Aa:return this.Ca=b[0],this.F=b[1],this.Da=b[2],this.ca=b[3],this.ga=b[4],this.ya=b[5],this.za=b[6],!0;case U.Aa:return this.ia=b[0],this.H=b[1],b=a[1],this.N=b[0],this.O=b[1],b=a[2],this.J=b[0],this.da=b[1],this.ra=b[2],this.qa=b[3],b=a[3],this.X=b[0],this.u=b[1],this.P=b[2],this.ea=b[3],this.K=b[4],!0}return!1};m.start=function(){};m.stop=function(){};m.Bd=function(a,b){var c=this.Ca;D(this,a,null,b,"STATUS0",c,!0);return c};
m.Cd=function(a,b){var c=this.F;D(this,a,null,b,"STATUS1",c,!0);return c};m.Dd=function(a,b){var c=this.Da;D(this,a,null,b,"STATUS2",c,!0);return c};m.Ad=function(a,b){var c=this.ca>>8-this.ga&255;D(this,a,null,b,"SHIFT.RESULT",c,!0);return c};m.Ld=function(a,b,c){D(this,a,b,c,"SHIFT.COUNT",null,!0);this.ga=b};m.Nd=function(a,b,c){D(this,a,b,c,"SOUND1",null,!0);this.ya=b};m.Md=function(a,b,c){D(this,a,b,c,"SHIFT.DATA",null,!0);this.ca=b<<8|this.ca>>8};
m.Od=function(a,b,c){D(this,a,b,c,"SOUND2",null,!0);this.za=b};m.Pd=function(a,b,c){D(this,a,b,c,"WATCHDOG",null,!0)};function Jd(a){var b=0,c=0,d=~a.X;for(a=0;10>a;a++)d&1&&(b=9-a),d>>=1;for(a=0;10>a;a++)d&1&&(c=9-a),d>>=1;return 10*b+c}
m.Ed=function(a,b){var c=this.H,c=c&~U.Ja.oc;if((Ec(this.b)&64)<<1&&(c|=U.Ja.oc,c!=this.H)){var d,e;d=this.P&1;e=this.P>>1&7;switch(e){case U.Ka.Ta.qd:break;case U.Ka.Ta.Pc:this.X=this.X<<1|d;break;case U.Ka.Ta.Uc:d=Jd(this);this.K[d]=U.Ka.Lb;ib(this,"doNVRCommand(): erase data at addr "+t(d));break;case U.Ka.Ta.Qc:this.u=this.u<<1|d;break;case U.Ka.Ta.ud:d=Jd(this);e=this.u&U.Ka.Lb;this.K[d]=e;ib(this,"doNVRCommand(): write data "+t(e)+" to addr "+t(d));break;case U.Ka.Ta.od:d=Jd(this);e=this.K[d];
null==e&&(e=U.Ka.Lb);this.u=e;ib(this,"doNVRCommand(): read data "+t(e)+" from addr "+t(d));break;case U.Ka.Ta.pd:this.u<<=1;this.ea=this.u&U.Ka.Lb+1;break;default:ib(this,"doNVRCommand(): unrecognized command 0x"+n(e,2))}}c&=~U.Ja.pc;this.ea&&(c|=U.Ja.pc);c&=~U.Ja.kc;this.L&&this.L.$b()&&(c|=U.Ja.kc);c&=~U.Ja.rc;this.Na&&this.Na.$b()&&(c|=U.Ja.rc);this.H=c;D(this,a,null,b,"FLAGS",c);return c};m.Qd=function(a,b,c){D(this,a,b,c,"BRIGHTNESS");this.ia=b};
m.Td=function(a,b,c){D(this,a,b,c,"NVR.LATCH");this.P=b};m.Sd=function(a,b,c){D(this,a,b,c,"DC012");a=b&3;switch(b>>2&3){case 0:this.J=this.J&-4|a;break;case 1:this.J=this.J&-13|a<<2;this.video&&(b=this.video,a=this.J,ib(b,"updateScrollOffset("+a+")"),b.hb!==a&&((b.hb=a)?Kd(b,-1):b.yb=!0));break;case 2:switch(a){case 0:this.da=~this.da;break;case 2:case 3:this.ra=3-a}break;case 3:this.qa=a}};
m.Rd=function(a,b,c){D(this,a,b,c,"DC011");b&U.Ua.nd?(b&=U.Ua.qc,this.O!=b&&(this.O=b,this.video&&(a=this.video,b=this.O==U.Ua.qc?50:60,ib(a,"updateRate("+b+")"),a.ac=b))):(b&=U.Ua.jc,this.N!=b&&(this.N=b,this.video&&(a=this.N==U.Ua.jc?132:80,b=this.video,ib(b,"updateDimensions("+a+","+(80<a&&this.H&U.Ja.nc?14:24)+")"),b.ea=a,b.oa=b.zc,80<a&&b.oa--,Ld(b)&&Md(b))))};T.Rb={0:S.prototype.Bd,1:S.prototype.Cd,2:S.prototype.Dd,3:S.prototype.Ad};
T.Sb={2:S.prototype.Ld,3:S.prototype.Nd,4:S.prototype.Md,5:S.prototype.Od,6:S.prototype.Pd};U.Rb={66:S.prototype.Ed};U.Sb={66:S.prototype.Qd,98:S.prototype.Td,162:S.prototype.Sd,194:S.prototype.Rd};Ja(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new S(d);gb(d,c)}});
function Nd(a){x.call(this,"ROM",a,Nd);this.A=null;this.F=a.addr;this.u=a.size;this.H=a.writable;this.B=a.alias;this.J=a.file;this.L=da(this.J);if(this.J){a=this.J;var b=ea(this.L);"json"!=b&&"hex"!=b&&(a=qa()+"/api/v1/dump?file="+this.J+"&format=bytes&decimal=true");var c=this;pa(a,null,!0,function(a,b,f){Od(c,a,b,f)})}}Xa(Nd);var Pd=[0,5];Nd.prototype.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;Qd(this)};
Nd.prototype.Ea=function(){if(this.Ra){if(this.I){var a=this.I,b=this.id,c=this.F,d=this.u,e=this.Ra,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var p=f,k=[k>>>0,h],q=la(p,k,a.Ya);0>q&&p.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.H.push({Je:b,G:c,Gd:d,Ra:e,sc:f})}delete this.Ra}return!0};Nd.prototype.Ha=function(){return!0};
function Od(a,b,c,d){if(d)a.ja("Unable to load system ROM (error "+d+": "+b+")");else{ab(a.Yb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.A=f;else if(h)for(a.A=Array(4*h.length),d=c=0;c<h.length;c++)a.A[d++]=h[c]&255,a.A[d++]=h[c]>>8&255,a.A[d++]=h[c]>>16&255,a.A[d++]=h[c]>>24&255;else a.A=e;a.Ra=e.symbols;if(!a.A.length){u("Empty ROM: "+b);return}if(1==a.A.length){u(a.A[0]);return}}catch(g){a.ja("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.A=Array(b.length),e=0;e<b.length;e++)a.A[e]=ca(b[e],16);Qd(a)}}
function Qd(a){if(!mb(a))if(!a.J)E(a);else if(a.A&&a.w){a.u||(a.u=a.A.length);if(a.A.length!=a.u)nb(a,"ROM size (0x"+n(a.A.length)+") does not match specified size ("+("0x"+n(a.u))+")");else if(Rd(a,a.F)){var b=[];"number"==typeof a.B?b.push(a.B):null!=a.B&&a.B.length&&(b=a.B);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.w,h=d.u,g=[],k=d.F>>>f.pa;0<h&&k<f.Y.length;)g.push(f.Y[k++]),h-=f.Ga;f=d.w;d=d.u;h=0;for(e>>>=f.pa;0<d&&e<f.Y.length;){k=g[h++];if(!k)break;f.Y[e++]=k;d-=f.Ga}}delete a.A}E(a)}}
function Rd(a,b){if(xb(a.w,b,a.u,a.H?1:Zb)){var c;for(c=0;c<a.A.length;c++)Cb(a.w,b+c,a.A[c]);if(a.H&&256==b){for(c=0;c<Pd.length;c++)Cb(a.w,Pd[c],118);Mc(a.b,function(a){return function(b){if(0<=Pd.indexOf(b)){var c=!1,h=a.b,g=a.I;if(5==b)switch(c=!0,h.T){case 2:Sd(a,String.fromCharCode(h.V));break;case 9:for(var k=Sc(h),l="",p=255;p--;){var q=a.b.aa(k++);if(36==q)break;l+=String.fromCharCode(q)}Sd(a,l);break;default:c=!1}c?Gd.call(h):g&&(a.g("\nCP/M vector "+t(b)),G(h,b),g.na());b=!0}else b=!1;
return b}}(a));Oc(a.b,b)}return!0}return!1}function Sd(a,b){b=b.replace(/\r/g,"");a.Fa&&(a.Fa.value+=b,a.Fa.scrollTop=a.Fa.scrollHeight)}Ja(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Nd(d);gb(d,c)}});function Td(a){x.call(this,"RAM",a,Td);this.B=a.addr;this.u=a.size;this.A=!1}Xa(Td);m=Td.prototype;m.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;E(this)};m.Ea=function(a,b){b||this.reset();return!0};m.Ha=function(a){return a?this.save():!0};
m.reset=function(){!this.A&&this.u&&xb(this.w,this.B,this.u,1)&&(this.A=!0);this.A||u("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=y(c),d=new Td(d);gb(d,c)}});function Ud(a){x.call(this,"Keyboard",a,Ud,65536);(a=a.model)&&!Vd[a]&&La("Unrecognized Keyboard model: "+a);this.w=Vd[a]||{};this.reset();E(this)}Xa(Ud);
var Wd={Aa:1978.1,C:{},ic:{65:37,68:39,76:32},xb:{},Va:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},V={Aa:100,C:{},ic:{},xb:{},Va:{setup:120},Rc:{Ba:130,INIT:127},La:{Ba:130,ed:1,dd:2,cd:4,bd:8,fd:16,mc:32,lc:63,rd:64,be:128,INIT:0},ad:127};V.C[46]=3;V.C[80]=5;V.C[79]=6;V.C[89]=7;V.C[84]=8;V.C[87]=9;V.C[81]=10;V.C[39]=16;V.C[221]=20;V.C[219]=21;V.C[73]=22;V.C[85]=23;V.C[82]=24;V.C[69]=25;V.C[49]=26;V.C[37]=32;V.C[40]=34;V.C[117]=35;V.C[19]=35;V.C[192]=36;V.C[189]=37;V.C[57]=38;V.C[55]=39;
x.prototype={constructor:x,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ma:function(a,b,c){switch(b){case "clear":return this.N[b]||(this.N[b]=c,c.onclick=function(a){return function(){a.N.print&&(a.N.print.value="")}}(this)),!0;case "print":return this.N[b]||(this.Fa=this.N[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.ja=function(a){this.g(a,this.Ya)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Ya+": "+a)},ja:function(a,b,c){Na(a,b,c||this.type)},Ea:function(){return this.D.va=!0},Ha:function(a,b){b&&(this.D.va=!1);return!0}};function D(a,b,c,d,e,f,h){a.I&&(!0===h?h=0:null==h&&(h=a.sa),hb(a.I,a,b,c,d,e,f,h))}function E(a,b){a.I&&ib(a,0)&&a.I.message(b,void 0)}function ib(a,b){if(a.I){a===a.I?b|=0:b=b||a.sa;var c=a.I.sa&b;return!!b&&c===b||!!(c&a.I.wd)}return!1}
function jb(a,b){if(a.D.Wb)return a.D.lb&&(a.D.lb=!1),a.D.Wb=!1;if(a.D.nb)return a.g(a.toString()+" error"),!1;a.D.lb=b;return a.D.lb}function kb(a,b){a.D.lb&&(b?a.D.Wb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.D.lb}function F(a){if(!a.D.nb&&(a.D.Ma=!0,a.D.Ma)){var b=a.Ob;a.Ob=null;b&&b()}}function lb(a,b){b&&(a.D.Ma?b():a.Ob=b);return a.D.Ma}function mb(a,b){a.D.nb=!0;a.ja(b)}
var nb="undefined"!==typeof ArrayBuffer,ob=[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 rb(a){x.call(this,"Panel",a,rb)}ab(rb);m=rb.prototype;m.ma=function(a,b,c,d){return this.A&&this.A.ma(a,b,c,d)||this.b&&this.b.ma(a,b,c,d)||this.K&&this.K.ma(a,b,c,d)||this.I&&this.I.ma(a,b,c,d)?!0:this.parent.ma.call(this,a,b,c,d)};m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;this.K=sb(a,"Keyboard")};m.Ea=function(a,b){b||tb();return!0};m.Ha=function(){return!0};m.Ia=function(){};
function tb(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=z(d),f=eb(e.id);f||(a=!0,f=new rb(e));gb(f,d);a&&F(f)}}La(tb);
function ub(a,b,c){x.call(this,"Bus",a,ub);this.b=b;this.I=c;this.H=a.busWidth||16;this.M=Math.pow(2,this.H);this.B=this.M-1|0;this.pa=16>=this.H?10:20>=this.H?12:24>=this.H?14:15;this.Ga=1<<this.pa;this.O=this.Ga>>2;this.w=this.Ga-1;this.L=this.M/this.Ga|0;this.K=this.L-1;this.A=[];this.u=[];this.F=this.J=!1;this.P=[];this.S=[];a=new G;vb(a,this.I);this.Y=Array(this.L);for(b=0;b<this.L;b++)this.Y[b]=a;F(this)}ab(ub);m=ub.prototype;m.reset=function(){};m.Ea=function(a,b){b||this.reset();return!0};
function wb(a,b,c,d){for(var e=b,f=c,h=e>>>a.pa;0<f&&h<a.Y.length;){var g=a.Y[h],k=h*a.Ga,l=a.Ga-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.G)return g.Ib+=g.G-e,g.G=e,!0;if(e>=g.G+g.Ib){l=g.size-(e-k);l>f&&(l=f);g.Ib=e-g.G+l;e=k+a.Ga;f-=l;h++;continue}}return xb(1,e,f)}e=new G(e,l,a.Ga,d);vb(e,a.I,g);a.Y[h++]=e;e=k+a.Ga;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+yb[d]+" at "+t(b)),!0):xb(2,b,c)}m.aa=function(a){return this.Y[(a&this.B)>>>this.pa].tb(a&this.w,a)};
function zb(a,b){return a.Y[(b&a.B)>>>a.pa].Hb(b&a.w,b)}m.Sa=function(a){var b=a&this.w,c=(a&this.B)>>>this.pa;return b!=this.w?this.Y[c].Lc(b,a):this.Y[c++].tb(b,a)|this.Y[c&this.K].tb(0,a+1)<<8};function Ab(a,b){var c=b&a.w,d=(b&a.B)>>>a.pa;return c!=a.w?a.Y[d].fc(c,b):a.Y[d++].Hb(c,b)|a.Y[d&a.K].Hb(0,b+1)<<8}m.ta=function(a,b){this.Y[(a&this.B)>>>this.pa].vb(a&this.w,b&255,a)};function Bb(a,b,c){a.Y[(b&a.B)>>>a.pa].Jb(b&a.w,c&255,b)}
m.Ub=function(a,b){var c=a&this.w,d=(a&this.B)>>>this.pa;c!=this.w?this.Y[d].Oc(c,b&65535,a):(this.Y[d++].vb(c,b&255,a),this.Y[d&this.K].vb(0,b>>8&255,a+1))};function Cb(a,b){if(void 0===b)return a.F=!a.F,a.F;void 0===a.A[b]&&(a.A[b]=[null,!1]);a.A[b][1]=!a.A[b][1];return a.A[b][1]}function Db(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.A[k]?u("Input port "+t(k)+" already registered"):f.A[k]=[g,!1]}}
function Eb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.A[b],g=a.P[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.I&&a.F!=h[1]&&Fb(a.I,b,l)):a.I&&(hb(a.I,a,b,null,c),a.F&&Fb(a.I,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Gb(a,b){if(void 0===b)return a.J=!a.J,a.J;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
function Hb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.u[k]?u("Output port "+t(k)+" already registered"):f.u[k]=[g,!1]}}function Jb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.S[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.I&&a.J!=h[1]&&Kb(a.I,b,k)}else a.I&&(hb(a.I,a,b,k,d),a.J&&Kb(a.I,b,k));f+=g<<3;b+=g;e-=g}}
function xb(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Lb;if(nb){var Ub=new ArrayBuffer(2);(new DataView(Ub)).setUint16(0,256,!0);Lb=256===(new Uint16Array(Ub))[0]}else Lb=!1;var Vb=Lb;
function G(a,b,c,d){this.id=Wb+=2;this.b=null;this.G=a;this.Ib=b;this.size=c||0;this.type=d||Xb;this.A=d==Yb;vb(this);this.Oa=this.vc=!1;if(c)if(nb)this.F=new ArrayBuffer(c),this.J=new DataView(this.F,0,c),this.w=new Uint8Array(this.F,0,c),this.K=new Uint16Array(this.F,0,c>>1),this.b=new Int32Array(this.F,0,c>>2),Zb(this,Vb?$b:ac);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Zb(this,bc)}else Zb(this)}var Xb=0,Yb=2,yb=["NONE","RAM","ROM","VID","H/W"],Wb=0;
G.prototype={constructor:G,parent:null,save:function(){var a,b;if(nb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.J.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(nb)for(b=0;b<a.length;b++)this.J.setInt32(b<<2,a[b],!0);else this.b=a;return this.Oa=!0}return!1},$a:function(a,b){b?0===this.u++&&cc(this,dc,!1):0===this.N++&&ec(this,dc,!1)},L:function(){this.I&&ib(this.I,129)&&this.I.message("attempt to read invalid block %"+n(this.G),!0);
return 255},B:function(a,b){this.I&&ib(this.I,129)&&this.I.message("attempt to write "+t(b)+" to invalid block %"+n(this.G),!0)},M:function(a,b){return this.tb(a++,b++)|this.tb(a,b)<<8},H:function(a,b,c){this.vb(a++,b&255,c++);this.vb(a,b>>8,c)},ba:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ha:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},ua:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Oa=!0},Da: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.Oa=!0},P:function(a,b){if(this.I&&null!=this.G){var c=this.I;fc(c,this.G+a,1,c.P)&&c.na(!0)}return this.Hb(a,b)},ea:function(a,b){if(this.I&&null!=this.G){var c=this.I;fc(c,this.G+a,2,c.P)&&c.na(!0)}return this.fc(a,b)},qa:function(a,b,c){if(this.I&&null!=this.G){var d=this.I;fc(d,this.G+a,1,d.J)&&d.na(!0)}this.A?this.B(a,b,c):this.Jb(a,b,c)},Ya:function(a,
b,c){if(this.I&&null!=this.G){var d=this.I;fc(d,this.G+a,2,d.J)&&d.na(!0)}this.A?this.B(a,b,c):this.hc(a,b,c)},O:function(a){return this.w[a]},S:function(a){return this.w[a]},da:function(a){return this.J.getUint16(a,!0)},ga:function(a){return a&1?this.w[a]|this.w[a+1]<<8:this.K[a>>1]},ia:function(a,b){this.w[a]=b;this.Oa=!0},ra:function(a,b){this.w[a]=b;this.Oa=!0},za:function(a,b){this.J.setUint16(a,b,!0);this.Oa=!0},Ca:function(a,b){a&1?(this.w[a]=b,this.w[a+1]=b>>8):this.K[a>>1]=b;this.Oa=!0}};
function vb(a,b,c){a.I=b;a.N=a.u=0;c&&((a.N=c.N)&&ec(a,dc,!1),(a.u=c.u)&&cc(a,dc,!1))}function gc(a,b){b?0===--a.u&&(a.vb=a.A?a.B:a.Jb,a.Oc=a.A?a.H:a.hc):0===--a.N&&(a.tb=a.Hb,a.Lc=a.fc)}function cc(a,b,c){c&&a.u||(a.vb=!a.A&&b[2]||a.B,a.Oc=!a.A&&b[3]||a.H);if(c||void 0===c)a.Jb=b[2]||a.B,a.hc=b[3]||a.H}function ec(a,b,c){c&&a.N||(a.tb=b[0]||a.L,a.Lc=b[1]||a.M);if(c||void 0===c)a.Hb=b[0]||a.L,a.fc=b[1]||a.M}function Zb(a,b){b||(b=hc);ec(a,b,void 0);cc(a,b,void 0)}
var hc=[],bc=[G.prototype.ba,G.prototype.ha,G.prototype.ua,G.prototype.Da],dc=[G.prototype.P,G.prototype.ea,G.prototype.qa,G.prototype.Ya];if(nb)var ac=[G.prototype.O,G.prototype.da,G.prototype.ia,G.prototype.za],$b=[G.prototype.S,G.prototype.ga,G.prototype.ra,G.prototype.Ca];
function ic(a,b){x.call(this,"CPU",a,ic,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.fb=c;this.i.Qb=0;this.i.Ta=d;this.i.bc=Math.round(this.i.fb/1E4)/100;this.i.cb=this.i.bc*this.i.Ta;this.D.ya=!1;this.D.Xb=!1;this.D.uc=a.autoStart;this.D.wc=!1;this.D.mb=!1;this.i.Bb=this.i.qb=0;this.i.Cb=a.csStart;this.i.pb=a.csInterval;this.i.rb=a.csStop;this.F=[];this.ba=this.gb.bind(this);F(this)}ab(ic);var jc=["power","reset"];m=ic.prototype;
m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.I=d;for(b=0;b<jc.length;b++)(c=this.N[jc[b]])&&this.A.ma(null,jc[b],c);this.M=(b=sb(a,"Video"))&&Math.max(b.Zd,b.Zb)||60;this.J=sb(a,"ChipSet");a=kc(a,"autoStart");null!=a&&(this.D.uc="true"==a?!0:"false"==a?!1:!!a);F(this)};m.reset=function(){this.i.Qb=0};m.save=function(){return null};m.restore=function(){return!1};
m.Ea=function(a,b){if(!b){if(a&&this.restore){lc(this);if(!this.restore(a))return!1;mc(this)}else this.reset();if(this.I){var c=this.I;c.g("Type ? for help with PC8080 Debugger commands");c.Ia();if(c.Da){var d=c.Da;c.Da=null;nc(c,d)}}else this.g("No debugger detected")}oc(this);return!0};m.Ha=function(a){return a?this.save():!0};function pc(a){(a.D.uc||!a.I&&void 0===a.N.run)&&a.gb(!0)}m.xc=function(){return 0};
function mc(a){void 0===a.i.Cb&&(a.i.Cb=0);void 0===a.i.pb&&(a.i.pb=-1);void 0===a.i.rb&&(a.i.rb=-1);a.D.mb=0<=a.i.Cb&&0<a.i.pb;a.D.mb&&(a.i.Bb=0,a.i.qb=a.i.Cb-a.K)}function Cc(a,b){if(a.D.mb){var c=!1;a.i.Bb=a.i.Bb+a.xc()|0;a.i.qb-=b;0>=a.i.qb&&(a.i.qb+=a.i.pb,c=!0);0<=a.i.rb&&a.i.rb<=Dc(a)&&(a.i.pb=a.i.rb=-1,mc(a),a.na(),c=!0);c&&a.g(Dc(a)+" cycles: checksum="+n(a.i.Bb))}}
m.ma=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.N[b]=c;a=!0;break;case "run":this.N[b]=c;c.onclick=function(){var a;if(a=d.A)if(a=d.A,a.D.va)a=!0;else{var b=null,c,g=db(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.D.Ma);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.D.va);c++);c==g.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.D.Ma?"powered yet":"ready yet"+(b.Ob?" (waiting for notification)":""))+".");a=!1}a&&(d.D.ya?d.na(!0):d.gb(!0))};a=
!0;break;case "speed":this.N[b]=c;a=!0;break;case "setSpeed":this.N[b]=c,c.onclick=function(){Ec(d,d.i.Ta<<1,!0)},c.textContent=this.i.cb.toFixed(2)+"Mhz",a=!0}return a};function Fc(a,b,c){a.K+=b;c&&(a.B=a.b=0)}
function Gc(a,b){var c=30;c<a.M&&(c=a.M);2>c&&(c=2);var d=1;b&&1<a.i.Ta&&a.i.bb&&(d=a.i.bb/a.i.bc);a.i.Cc=Math.round(1E3/30);a.i.Hd=Math.floor(a.i.fb/c*d);a.i.dc=Math.floor(a.i.fb/30*d);a.i.Ec=Math.floor(a.i.fb/a.M*d);a.i.Dc=Math.floor(a.i.fb/2*d);b||(a.i.sb=a.i.dc,a.i.Eb=a.i.Ec,a.i.Db=a.i.Dc);a.i.ec=0}function Dc(a){return a.K+a.H+a.B-a.b}function lc(a){a.i.bb=0;a.K=a.H=a.B=a.b=0;mc(a);Ec(a,1)}
function Ec(a,b,c){var d=!1;if(void 0!==b){.8>a.i.bb/a.i.cb?b=1:d=!0;a.i.Ta=b;b=a.i.bc*a.i.Ta;if(a.i.cb!=b){a.i.cb=b;b=a.i.cb.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.A&&a.A.hb()}Fc(a,a.H);a.H=0;a.i.ob=oa();a.i.eb=0;Gc(a);return d}function Hc(a,b){var c=a.F.length;a.F.push([-1,b]);return c}function Ic(a,b,c){var d=-1;0<=b&&b<a.F.length&&(d=a.i.fb*a.i.Ta/1E3*c,a.F[b][0]=d)}
m.gb=function(a){if(jb(this,!0)){if(!this.D.ya){Ec(this);this.A&&this.A.start(this.i.ob,Dc(this));this.D.ya=!0;this.D.Xb=!0;this.J&&this.J.start();var b=this.N.run;b&&(b.textContent="Halt");this.A&&(this.A.Ia(!0),a&&this.A.hb(!0))}this.i.ec>=this.i.fb&&Gc(this,!0);this.i.Fb=0;this.i.Pb=oa();this.i.eb&&(a=this.i.Pb-this.i.eb,a>this.i.Cc&&(this.i.ob+=a,this.i.ob>this.i.Pb&&(this.i.ob=this.i.Pb)));try{do{var c=this.D.mb?1:this.i.Hd;a=c;for(b=0;b<this.F.length;b++){var d=this.F[b];0>d[0]||a>d[0]&&(a=
d[0])}c=a;this.ub(c);var e=this.B-this.b;a=e;for(b=0;b<this.F.length;b++){var f=this.F[b];0>f[0]||(f[0]-=a,0>=f[0]&&(f[0]=-1,f[1]()))}this.i.Fb+=e;this.H+=e;Fc(this,0,!0);Cc(this,e);this.i.Eb-=e;0>=this.i.Eb&&(this.i.Eb+=this.i.Ec,this.A&&Jc(this.A,this.i.Qb++),this.i.Qb>this.M&&(this.i.Qb=0));this.i.Db-=e;0>=this.i.Db&&(this.i.Db+=this.i.Dc,this.A&&this.A.Ia());this.i.sb-=e;if(0>=this.i.sb){this.i.sb+=this.i.dc;break}}while(this.D.ya)}catch(h){this.na();oc(this);this.A&&this.A.stop(oa(),Dc(this));
jb(this,!1);mb(this,h.stack||h.message);return}c=setTimeout;d=this.ba;this.i.eb=oa();e=this.i.Cc;this.i.Fb&&(e=Math.round(e*this.i.Fb/this.i.dc));e-=this.i.eb-this.i.Pb;if(f=this.i.eb-this.i.ob)this.i.bb=Math.round(this.H/(10*f))/100,864E5<=f&&(this.K=0,Ec(this));if(0>e||this.i.bb<this.i.cb)e=0;this.i.ec+=this.i.Fb;this.i.eb+=e;c(d,e)}else oc(this),this.A&&this.A.stop(oa(),Dc(this))};m.ub=function(){return 0};
m.na=function(a){kb(this,!0);this.B-=this.b;this.b=0;Fc(this,this.H);this.H=0;if(this.D.ya){this.D.ya=!1;this.J&&this.J.stop();var b=this.N.run;b&&(b.textContent="Run")}this.D.Nb=a};function oc(a,b){a.A&&(Jc(a.A,-1),a.A.Ia(b))}function Kc(a){this.Bc=+a.model||8080;ic.call(this,a,1E6);this.O=Lc;lc(this);this.D.Nb=this.D.xd=!1;this.S=0;this.L=[];this.P=0;Mc(this)}ab(Kc,ic);function Nc(a,b){a.L.push(b)}m=Kc.prototype;m.reset=function(){this.D.ya&&this.na();Mc(this);lc(this);this.D.nb=!1;this.parent.reset.call(this)};
function Mc(a){a.j=0;a.T=0;a.U=0;a.V=0;a.W=0;a.X=0;a.Z=0;a.la=0;H(a,a.P);Oc(a,0);a.u=0}function Pc(a,b){a.P=b;H(a,b)}m.xc=function(){var a=this.j+this.T+this.U+this.V+this.W+this.X+this.Z|0;return a=a+this.la+this.R+Qc(this)|0};
m.save=function(){var a=new Rc(this);I(a,0,[this.j,this.T,this.U,this.V,this.W,this.X,this.Z,this.la,this.R,Qc(this)]);I(a,1,[this.u,this.K,this.i.Ta]);for(var b=this.w,c=0,d=[],e=0;e<b.L;e++){var f=b.Y[e];if(f.Oa||f.vc){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var p=f[g],q=g+1;q<f.length&&f[q]===p;)q++;l[k++]=q-g;l[k++]=p;g=q}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.j=b[0];this.T=b[1];this.U=b[2];this.V=b[3];this.W=b[4];this.X=b[5];this.Z=b[6];this.la=b[7]&65535;H(this,b[8]);Oc(this,b[9]);b=a[1];this.u=b[0];this.K=b[1];Ec(this,b[3]);a:{b=this.w;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.O){for(var f=0,h=Array(b.O),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.Y[d];if(!f||!f.restore(e)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.ma=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.N[b]=c;this.S++;d=!0;break;default:d=this.parent.ma.call(this,a,b,c)}return d};function Sc(a){return a.T<<8|a.U}function Tc(a,b){a.T=b>>8&255;a.U=b&255}function Uc(a){return a.V<<8|a.W}function Vc(a,b){a.V=b>>8&255;a.W=b&255}function J(a){return a.X<<8|a.Z}
function Wc(a,b){a.X=b>>8&255;a.Z=b&255}function H(a,b){a.R=b&65535}function Xc(a){return a.ca&256?1:0}function Yc(a,b){a.ca=a.ca&255|b}function Zc(a){return ob[a.fa&255]?4:0}function $c(a){return(a.fa^a.xa)&16?16:0}function ad(a){return a.ca&255?0:64}function bd(a){return a.fa&128?128:0}function Qc(a){return a.wa&-214|bd(a)|ad(a)|$c(a)|Zc(a)|Xc(a)}function Oc(a,b){a.ca=a.fa=a.xa=0;b&1&&(a.ca|=256);b&4||(a.fa|=1);b&16&&(a.xa|=16);b&64||(a.ca|=255);b&128&&(a.fa^=192);a.wa=a.wa&-726|b&512|2}
function cd(a,b){a.xa=a.j^b;return a.fa=(a.ca=a.j+b)&255}function dd(a,b){a.xa=a.j^b;return a.fa=(a.ca=a.j+b+(a.ca&256?1:0))&255}function ed(a,b){a.ca=a.fa=a.xa=a.j&b;(a.j|b)&8&&(a.xa^=16);return a.ca}function fd(a,b){a.xa=b^255;b=a.fa=b+255&255;a.ca=a.ca&-256|b;return b}function gd(a,b){a.xa=b;b=a.fa=b+1&255;a.ca=a.ca&-256|b;return b}function Ad(a,b){return a.fa=a.ca=a.xa=a.j|b}function K(a,b){b^=255;a.xa=a.j^b;return a.fa=(a.ca=a.j+b+1^256)&255}
function Bd(a,b){b^=255;a.xa=a.j^b;return a.fa=(a.ca=a.j+b+(a.ca&256?0:1)^256)&255}function Cd(a,b){return a.fa=a.ca=a.xa=a.j^b}m.aa=function(a){return this.w.aa(a)};m.ta=function(a,b){this.w.ta(a,b)};function L(a){var b=a.aa(a.R);H(a,a.R+1);return b}function M(a){var b=a.w.Sa(a.R);H(a,a.R+2);return b}function O(a){var b=a.w.Sa(a.la);a.la=a.la+2&65535;return b}function P(a,b){a.la=a.la-2&65535;a.w.Ub(a.la,b)}function Dd(a,b){a.u|=1<<b}
function R(a,b,c,d){d=d||2;a.N[b]&&(void 0===c&&(mb(a,"Value for "+b+" is invalid"),a.na()),c=!a.D.ya||a.D.wc?n(c,d):"--------".substr(0,d),a.N[b].textContent!=c&&(a.N[b].textContent=c))}
m.Ia=function(a){this.S&&(a||!this.D.ya||this.D.wc)&&(R(this,"A",this.j),R(this,"B",this.T),R(this,"C",this.U),R(this,"BC",Sc(this),4),R(this,"D",this.V),R(this,"E",this.W),R(this,"DE",Uc(this),4),R(this,"H",this.X),R(this,"L",this.Z),R(this,"HL",J(this),4),R(this,"SP",this.la,4),R(this,"PC",this.R,4),a=Qc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.N.speed)a.textContent=
this.D.ya&&this.i.bb?this.i.bb.toFixed(2)+"Mhz":"Stopped"};
m.ub=function(a){this.D.Nb=!0;var b=this.D.xd=this.I&&Ed(this.I),c=a?this.D.Xb?0:1:-1;this.D.Xb=!1;this.B=this.b=a;do{if(this.u){if(a&&this.u&255&&this.wa&512){for(var d=0;8>d&&!(this.u&1<<d);d++);this.u&=~(0>d?255:1<<d);this.wa&=-513;this.u&=-257;this.O[199|d<<3].call(this)}if(this.u&256){this.b=0;break}}if(b){if(Fd(this.I,this.R,c)){this.na();break}c=1}this.O[L(this)].call(this)}while(0<this.b);return this.D.Nb?this.B-this.b:void 0===this.D.Nb?0:-1};
La(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Kc(d);gb(d,c)}});function Gd(){this.b-=4}function Hd(){H(this,M(this));this.b-=10}function Id(){H(this,O(this));this.b-=10}function Jd(){var a=M(this);P(this,this.R);H(this,a);this.b-=17}
var Lc=[Gd,function(){Tc(this,M(this));this.b-=10},function(){this.ta(Sc(this),this.j);this.b-=7},function(){Tc(this,Sc(this)+1);this.b-=5},function(){this.T=gd(this,this.T);this.b-=5},function(){this.T=fd(this,this.T);this.b-=5},function(){this.T=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Yc(this,a&256);this.b-=4},Gd,function(){var a;Wc(this,a=J(this)+Sc(this));Yc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(Sc(this));this.b-=7},function(){Tc(this,Sc(this)-1);this.b-=
5},function(){this.U=gd(this,this.U);this.b-=5},function(){this.U=fd(this,this.U);this.b-=5},function(){this.U=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Yc(this,a);this.b-=4},Gd,function(){Vc(this,M(this));this.b-=10},function(){this.ta(Uc(this),this.j);this.b-=7},function(){Vc(this,Uc(this)+1);this.b-=5},function(){this.V=gd(this,this.V);this.b-=5},function(){this.V=fd(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
Xc(this);Yc(this,a&256);this.b-=4},Gd,function(){var a;Wc(this,a=J(this)+Uc(this));Yc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(Uc(this));this.b-=7},function(){Vc(this,Uc(this)-1);this.b-=5},function(){this.W=gd(this,this.W);this.b-=5},function(){this.W=fd(this,this.W);this.b-=5},function(){this.W=L(this);this.b-=7},function(){var a=this.j<<8;this.j=(Xc(this)<<8|this.j)>>1;Yc(this,a&256);this.b-=4},Gd,function(){Wc(this,M(this));this.b-=10},function(){var a=M(this);this.w.Ub(a,J(this));
this.b-=16},function(){Wc(this,J(this)+1);this.b-=5},function(){this.X=gd(this,this.X);this.b-=5},function(){this.X=fd(this,this.X);this.b-=5},function(){this.X=L(this);this.b-=7},function(){var a=0,b=Xc(this);if($c(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=cd(this,a);Yc(this,b?256:0);this.b-=4},Gd,function(){var a;Wc(this,a=J(this)+J(this));Yc(this,a>>8&256);this.b-=10},function(){var a;a=M(this);a=this.w.Sa(a);Wc(this,a);this.b-=16},function(){Wc(this,J(this)-1);this.b-=5},function(){this.Z=
gd(this,this.Z);this.b-=5},function(){this.Z=fd(this,this.Z);this.b-=5},function(){this.Z=L(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},Gd,function(){this.la=M(this)&65535;this.b-=10},function(){this.ta(M(this),this.j);this.b-=13},function(){this.la=this.la+1&65535;this.b-=5},function(){var a=J(this);this.ta(a,gd(this,this.aa(a)));this.b-=10},function(){var a=J(this);this.ta(a,fd(this,this.aa(a)));this.b-=10},function(){this.ta(J(this),L(this));this.b-=10},function(){this.ca|=256;this.b-=
4},Gd,function(){var a;Wc(this,a=J(this)+this.la);Yc(this,a>>8&256);this.b-=10},function(){this.j=this.aa(M(this));this.b-=13},function(){this.la=this.la-1&65535;this.b-=5},function(){this.j=gd(this,this.j);this.b-=5},function(){this.j=fd(this,this.j);this.b-=5},function(){this.j=L(this);this.b-=7},function(){Yc(this,Xc(this)?0:256);this.b-=4},function(){this.b-=5},function(){this.T=this.U;this.b-=5},function(){this.T=this.V;this.b-=5},function(){this.T=this.W;this.b-=5},function(){this.T=this.X;
this.b-=5},function(){this.T=this.Z;this.b-=5},function(){this.T=this.aa(J(this));this.b-=7},function(){this.T=this.j;this.b-=5},function(){this.U=this.T;this.b-=5},function(){this.b-=5},function(){this.U=this.V;this.b-=5},function(){this.U=this.W;this.b-=5},function(){this.U=this.X;this.b-=5},function(){this.U=this.Z;this.b-=5},function(){this.U=this.aa(J(this));this.b-=7},function(){this.U=this.j;this.b-=5},function(){this.V=this.T;this.b-=5},function(){this.V=this.U;this.b-=5},function(){this.b-=
5},function(){this.V=this.W;this.b-=5},function(){this.V=this.X;this.b-=5},function(){this.V=this.Z;this.b-=5},function(){this.V=this.aa(J(this));this.b-=7},function(){this.V=this.j;this.b-=5},function(){this.W=this.T;this.b-=5},function(){this.W=this.U;this.b-=5},function(){this.W=this.V;this.b-=5},function(){this.b-=5},function(){this.W=this.X;this.b-=5},function(){this.W=this.Z;this.b-=5},function(){this.W=this.aa(J(this));this.b-=7},function(){this.W=this.j;this.b-=5},function(){this.X=this.T;
this.b-=5},function(){this.X=this.U;this.b-=5},function(){this.X=this.V;this.b-=5},function(){this.X=this.W;this.b-=5},function(){this.b-=5},function(){this.X=this.Z;this.b-=5},function(){this.X=this.aa(J(this));this.b-=7},function(){this.X=this.j;this.b-=5},function(){this.Z=this.T;this.b-=5},function(){this.Z=this.U;this.b-=5},function(){this.Z=this.V;this.b-=5},function(){this.Z=this.W;this.b-=5},function(){this.Z=this.X;this.b-=5},function(){this.b-=5},function(){this.Z=this.aa(J(this));this.b-=
7},function(){this.Z=this.j;this.b-=5},function(){this.ta(J(this),this.T);this.b-=7},function(){this.ta(J(this),this.U);this.b-=7},function(){this.ta(J(this),this.V);this.b-=7},function(){this.ta(J(this),this.W);this.b-=7},function(){this.ta(J(this),this.X);this.b-=7},function(){this.ta(J(this),this.Z);this.b-=7},function(){var a=this.R-1;if(this.L.length)for(var b=0;b<this.L.length;b++)if(this.L[b](a))return;this.u|=256;this.b-=7;this.I&&ib(this,-2147483648)?(H(this,a),this.I.na()):this.wa&512||
(this.I&&H(this,a),this.na())},function(){this.ta(J(this),this.j);this.b-=7},function(){this.j=this.T;this.b-=5},function(){this.j=this.U;this.b-=5},function(){this.j=this.V;this.b-=5},function(){this.j=this.W;this.b-=5},function(){this.j=this.X;this.b-=5},function(){this.j=this.Z;this.b-=5},function(){this.j=this.aa(J(this));this.b-=7},function(){this.b-=5},function(){this.j=cd(this,this.T);this.b-=4},function(){this.j=cd(this,this.U);this.b-=4},function(){this.j=cd(this,this.V);this.b-=4},function(){this.j=
cd(this,this.W);this.b-=4},function(){this.j=cd(this,this.X);this.b-=4},function(){this.j=cd(this,this.Z);this.b-=4},function(){this.j=cd(this,this.aa(J(this)));this.b-=7},function(){this.j=cd(this,this.j);this.b-=4},function(){this.j=dd(this,this.T);this.b-=4},function(){this.j=dd(this,this.U);this.b-=4},function(){this.j=dd(this,this.V);this.b-=4},function(){this.j=dd(this,this.W);this.b-=4},function(){this.j=dd(this,this.X);this.b-=4},function(){this.j=dd(this,this.Z);this.b-=4},function(){this.j=
dd(this,this.aa(J(this)));this.b-=7},function(){this.j=dd(this,this.j);this.b-=4},function(){this.j=K(this,this.T);this.b-=4},function(){this.j=K(this,this.U);this.b-=4},function(){this.j=K(this,this.V);this.b-=4},function(){this.j=K(this,this.W);this.b-=4},function(){this.j=K(this,this.X);this.b-=4},function(){this.j=K(this,this.Z);this.b-=4},function(){this.j=K(this,this.aa(J(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=Bd(this,this.T);this.b-=4},function(){this.j=
Bd(this,this.U);this.b-=4},function(){this.j=Bd(this,this.V);this.b-=4},function(){this.j=Bd(this,this.W);this.b-=4},function(){this.j=Bd(this,this.X);this.b-=4},function(){this.j=Bd(this,this.Z);this.b-=4},function(){this.j=Bd(this,this.aa(J(this)));this.b-=7},function(){this.j=Bd(this,this.j);this.b-=4},function(){this.j=ed(this,this.T);this.b-=4},function(){this.j=ed(this,this.U);this.b-=4},function(){this.j=ed(this,this.V);this.b-=4},function(){this.j=ed(this,this.W);this.b-=4},function(){this.j=
ed(this,this.X);this.b-=4},function(){this.j=ed(this,this.Z);this.b-=4},function(){this.j=ed(this,this.aa(J(this)));this.b-=7},function(){this.j=ed(this,this.j);this.b-=4},function(){this.j=Cd(this,this.T);this.b-=4},function(){this.j=Cd(this,this.U);this.b-=4},function(){this.j=Cd(this,this.V);this.b-=4},function(){this.j=Cd(this,this.W);this.b-=4},function(){this.j=Cd(this,this.X);this.b-=4},function(){this.j=Cd(this,this.Z);this.b-=4},function(){this.j=Cd(this,this.aa(J(this)));this.b-=7},function(){this.j=
Cd(this,this.j);this.b-=4},function(){this.j=Ad(this,this.T);this.b-=4},function(){this.j=Ad(this,this.U);this.b-=4},function(){this.j=Ad(this,this.V);this.b-=4},function(){this.j=Ad(this,this.W);this.b-=4},function(){this.j=Ad(this,this.X);this.b-=4},function(){this.j=Ad(this,this.Z);this.b-=4},function(){this.j=Ad(this,this.aa(J(this)));this.b-=7},function(){this.j=Ad(this,this.j);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.U);this.b-=4},function(){K(this,this.V);this.b-=
4},function(){K(this,this.W);this.b-=4},function(){K(this,this.X);this.b-=4},function(){K(this,this.Z);this.b-=4},function(){K(this,this.aa(J(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){ad(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Tc(this,O(this));this.b-=10},function(){var a=M(this);ad(this)||H(this,a);this.b-=10},Hd,function(){var a=M(this);ad(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Sc(this));this.b-=11},function(){this.j=cd(this,
L(this));this.b-=7},function(){P(this,this.R);H(this,0);this.b-=11},function(){ad(this)&&(H(this,O(this)),this.b-=6);this.b-=5},Id,function(){var a=M(this);ad(this)&&H(this,a);this.b-=10},Hd,function(){var a=M(this);ad(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Jd,function(){this.j=dd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,8);this.b-=11},function(){Xc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Vc(this,O(this));this.b-=10},function(){var a=M(this);Xc(this)||
H(this,a);this.b-=10},function(){var a=L(this);Jb(this.w,a,this.j,this.R+-2&65535);this.b-=10},function(){var a=M(this);Xc(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Uc(this));this.b-=11},function(){this.j=K(this,L(this));this.b-=7},function(){P(this,this.R);H(this,16);this.b-=11},function(){Xc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},Id,function(){var a=M(this);Xc(this)&&H(this,a);this.b-=10},function(){var a=L(this);this.j=Eb(this.w,a,this.R+-2&65535)&255;this.b-=
10},function(){var a=M(this);Xc(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Jd,function(){this.j=Bd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,24);this.b-=11},function(){Zc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Wc(this,O(this));this.b-=10},function(){var a=M(this);Zc(this)||H(this,a);this.b-=10},function(){var a=O(this);P(this,J(this));Wc(this,a);this.b-=18},function(){var a=M(this);Zc(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,
J(this));this.b-=11},function(){this.j=ed(this,L(this));this.b-=7},function(){P(this,this.R);H(this,32);this.b-=11},function(){Zc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,J(this));this.b-=5},function(){var a=M(this);Zc(this)&&H(this,a);this.b-=10},function(){var a=J(this);Wc(this,Uc(this));Vc(this,a);this.b-=5},function(){var a=M(this);Zc(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Jd,function(){this.j=Cd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,
40);this.b-=11},function(){bd(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Oc(this,a&255|this.wa&-256);this.j=a>>8;this.b-=10},function(){var a=M(this);bd(this)||H(this,a);this.b-=10},function(){this.wa&=-513;this.b-=4},function(){var a=M(this);bd(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Qc(this)&255|this.j<<8);this.b-=11},function(){this.j=Ad(this,L(this));this.b-=7},function(){P(this,this.R);H(this,48);this.b-=11},function(){bd(this)&&(H(this,
O(this)),this.b-=6);this.b-=5},function(){this.la=J(this)&65535;this.b-=5},function(){var a=M(this);bd(this)&&H(this,a);this.b-=10},function(){this.wa|=512;this.b-=4},function(){var a=M(this);bd(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Jd,function(){K(this,L(this));this.b-=7},function(){P(this,this.R);H(this,56);this.b-=11}];
function S(a){x.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!Kd[b]&&Na("Unrecognized ChipSet model: "+b);this.B=Kd[b]||{};a.sound&&(this.ha=null,window&&(this.ha=window.AudioContext||window.webkitAudioContext),this.ha&&new this.ha);F(this)}ab(S);
var T={Aa:1978.1,sd:{Ba:0,ee:1,ie:16,pe:32,ye:64,xe:128,wb:14},Xa:{Ba:1,Tc:1,md:2,hd:4,jd:16,kd:32,ld:64,wb:8},td:{Ba:2,de:3,Ge:4,fe:8,te:16,ue:32,ve:64,ge:128,wb:0},Ce:{Ba:3},Ae:{Ba:2,qe:7},Ee:{Ba:3,He:1,De:2,we:4,ne:8,he:16,ae:32},Be:{Ba:4},Fe:{Ba:5,je:1,ke:2,le:4,me:8,Ie:16}},U={Aa:100,Ja:{Ba:66,rc:1,nc:2,gd:4,se:8,re:16,pc:32,oc:64,kc:128},Sc:{Ba:66,INIT:0},Va:{Ba:194,ce:0,jc:16,nd:32,qc:48,Xc:0,Yc:32},Kb:{Ba:162,ze:0,$c:0,Wc:0,Zc:0,Vc:0},Ka:{oe:{Ba:98},Ua:{Qc:0,Pc:1,pd:2,ud:4,Uc:5,od:6,qd:7},
Lb:16383}},Kd={SI1978:T,VT100:U};S.prototype.ma=function(){return!1};S.prototype.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;this.A=a;this.K=sb(a,"Keyboard");this.Na=sb(a,"SerialPort");this.video=sb(a,"Video");Db(b,this,this.B.Rb);Hb(b,this,this.B.Sb)};S.prototype.Ea=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};S.prototype.Ha=function(a){return a?this.save():!0};T.INIT=[[T.sd.wb,T.Xa.wb,T.td.wb,0,0,0,0]];
U.INIT=[[U.Sc.INIT,U.Ja.nc|U.Ja.gd],[U.Va.Xc,U.Va.Yc],[U.Kb.$c,U.Kb.Wc,U.Kb.Zc,U.Kb.Vc],[0,0,0,0,[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11776,11856,11824,11840,11808,11776,12E3,12E3,11857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]];
m=S.prototype;m.reset=function(){this.B.INIT&&!this.restore(this.B.INIT)&&this.ja("reset error")};m.save=function(){var a=new Rc(this);switch(this.B.Aa){case T.Aa:I(a,0,[this.Ca,this.J,this.Da,this.ba,this.ga,this.ua,this.za]);break;case U.Aa:I(a,0,[this.ia,this.H]),I(a,1,[this.M,this.O]),I(a,2,[this.F,this.da,this.ra,this.qa]),I(a,3,[this.S,this.u,this.P,this.ea,this.L])}return a.data()};
m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.B.Aa){case T.Aa:return this.Ca=b[0],this.J=b[1],this.Da=b[2],this.ba=b[3],this.ga=b[4],this.ua=b[5],this.za=b[6],!0;case U.Aa:return this.ia=b[0],this.H=b[1],b=a[1],this.M=b[0],this.O=b[1],b=a[2],this.F=b[0],this.da=b[1],this.ra=b[2],this.qa=b[3],b=a[3],this.S=b[0],this.u=b[1],this.P=b[2],this.ea=b[3],this.L=b[4],!0}return!1};m.start=function(){};m.stop=function(){};m.Bd=function(a,b){var c=this.Ca;D(this,a,null,b,"STATUS0",c,!0);return c};
m.Cd=function(a,b){var c=this.J;D(this,a,null,b,"STATUS1",c,!0);return c};m.Dd=function(a,b){var c=this.Da;D(this,a,null,b,"STATUS2",c,!0);return c};m.Ad=function(a,b){var c=this.ba>>8-this.ga&255;D(this,a,null,b,"SHIFT.RESULT",c,!0);return c};m.Ld=function(a,b,c){D(this,a,b,c,"SHIFT.COUNT",null,!0);this.ga=b};m.Nd=function(a,b,c){D(this,a,b,c,"SOUND1",null,!0);this.ua=b};m.Md=function(a,b,c){D(this,a,b,c,"SHIFT.DATA",null,!0);this.ba=b<<8|this.ba>>8};
m.Od=function(a,b,c){D(this,a,b,c,"SOUND2",null,!0);this.za=b};m.Pd=function(a,b,c){D(this,a,b,c,"WATCHDOG",null,!0)};function Ld(a){var b=0,c=0,d=~a.S;for(a=0;10>a;a++)d&1&&(b=9-a),d>>=1;for(a=0;10>a;a++)d&1&&(c=9-a),d>>=1;return 10*b+c}
m.Ed=function(a,b){var c=this.H,c=c&~U.Ja.oc;if((Dc(this.b)&64)<<1&&(c|=U.Ja.oc,c!=this.H)){var d,e;d=this.P&1;e=this.P>>1&7;switch(e){case U.Ka.Ua.qd:break;case U.Ka.Ua.Pc:this.S=this.S<<1|d;break;case U.Ka.Ua.Uc:d=Ld(this);this.L[d]=U.Ka.Lb;E(this,"doNVRCommand(): erase data at addr "+t(d));break;case U.Ka.Ua.Qc:this.u=this.u<<1|d;break;case U.Ka.Ua.ud:d=Ld(this);e=this.u&U.Ka.Lb;this.L[d]=e;E(this,"doNVRCommand(): write data "+t(e)+" to addr "+t(d));break;case U.Ka.Ua.od:d=Ld(this);e=this.L[d];
null==e&&(e=U.Ka.Lb);this.u=e;E(this,"doNVRCommand(): read data "+t(e)+" from addr "+t(d));break;case U.Ka.Ua.pd:this.u<<=1;this.ea=this.u&U.Ka.Lb+1;break;default:E(this,"doNVRCommand(): unrecognized command "+da(e))}}c&=~U.Ja.pc;this.ea&&(c|=U.Ja.pc);c&=~U.Ja.kc;this.K&&this.K.$b()&&(c|=U.Ja.kc);c&=~U.Ja.rc;this.Na&&this.Na.$b()&&(c|=U.Ja.rc);this.H=c;D(this,a,null,b,"FLAGS",c);return c};m.Qd=function(a,b,c){D(this,a,b,c,"BRIGHTNESS");this.ia=b};
m.Td=function(a,b,c){D(this,a,b,c,"NVR.LATCH");this.P=b};m.Sd=function(a,b,c){D(this,a,b,c,"DC012");a=b&3;switch(b>>2&3){case 0:this.F=this.F&-4|a;break;case 1:this.F=this.F&-13|a<<2;this.video&&(b=this.video,a=this.F,E(b,"updateScrollOffset("+a+")"),b.ib!==a&&((b.ib=a)?Md(b,-1):b.yb=!0));break;case 2:switch(a){case 0:this.da=~this.da;break;case 2:case 3:this.ra=3-a}break;case 3:this.qa=a}};
m.Rd=function(a,b,c){D(this,a,b,c,"DC011");b&U.Va.nd?(b&=U.Va.qc,this.O!=b&&(this.O=b,this.video&&(a=this.video,b=this.O==U.Va.qc?50:60,E(a,"updateRate("+b+")"),a.ac=b))):(b&=U.Va.jc,this.M!=b&&(this.M=b,this.video&&(a=this.M==U.Va.jc?132:80,b=this.video,E(b,"updateDimensions("+a+","+(80<a&&this.H&U.Ja.nc?14:24)+")"),b.ea=a,b.oa=b.zc,80<a&&b.oa--,Nd(b)&&Od(b))))};T.Rb={0:S.prototype.Bd,1:S.prototype.Cd,2:S.prototype.Dd,3:S.prototype.Ad};
T.Sb={2:S.prototype.Ld,3:S.prototype.Nd,4:S.prototype.Md,5:S.prototype.Od,6:S.prototype.Pd};U.Rb={66:S.prototype.Ed};U.Sb={66:S.prototype.Qd,98:S.prototype.Td,162:S.prototype.Sd,194:S.prototype.Rd};La(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new S(d);gb(d,c)}});
function Pd(a){x.call(this,"ROM",a,Pd);this.A=null;this.J=a.addr;this.u=a.size;this.H=a.writable;this.B=a.alias;this.F=a.file;this.K=ea(this.F);if(this.F){a=this.F;var b=fa(this.K);"json"!=b&&"hex"!=b&&(a=sa()+"/api/v1/dump?file="+this.F+"&format=bytes&decimal=true");var c=this;ra(a,null,!0,function(a,b,f){Qd(c,a,b,f)})}}ab(Pd);var Rd=[0,5];Pd.prototype.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;Sd(this)};
Pd.prototype.Ea=function(){if(this.Ra){if(this.I){var a=this.I,b=this.id,c=this.J,d=this.u,e=this.Ra,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var p=f,k=[k>>>0,h],q=na(p,k,a.Za);0>q&&p.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.H.push({Je:b,G:c,Gd:d,Ra:e,sc:f})}delete this.Ra}return!0};Pd.prototype.Ha=function(){return!0};
function Qd(a,b,c,d){if(d)a.ja("Unable to load system ROM (error "+d+": "+b+")");else{cb(a.Yb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.A=f;else if(h)for(a.A=Array(4*h.length),d=c=0;c<h.length;c++)a.A[d++]=h[c]&255,a.A[d++]=h[c]>>8&255,a.A[d++]=h[c]>>16&255,a.A[d++]=h[c]>>24&255;else a.A=e;a.Ra=e.symbols;if(!a.A.length){u("Empty ROM: "+b);return}if(1==a.A.length){u(a.A[0]);return}}catch(g){a.ja("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.A=Array(b.length),e=0;e<b.length;e++)a.A[e]=aa(b[e],16);Sd(a)}}
function Sd(a){if(!lb(a))if(!a.F)F(a);else if(a.A&&a.w){a.u||(a.u=a.A.length);if(a.A.length!=a.u)mb(a,"ROM size (0x"+n(a.A.length)+") does not match specified size ("+("0x"+n(a.u))+")");else if(Td(a,a.J)){var b=[];"number"==typeof a.B?b.push(a.B):null!=a.B&&a.B.length&&(b=a.B);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.w,h=d.u,g=[],k=d.J>>>f.pa;0<h&&k<f.Y.length;)g.push(f.Y[k++]),h-=f.Ga;f=d.w;d=d.u;h=0;for(e>>>=f.pa;0<d&&e<f.Y.length;){k=g[h++];if(!k)break;f.Y[e++]=k;d-=f.Ga}}delete a.A}F(a)}}
function Td(a,b){if(wb(a.w,b,a.u,a.H?1:Yb)){var c;for(c=0;c<a.A.length;c++)Bb(a.w,b+c,a.A[c]);if(a.H&&256==b){for(c=0;c<Rd.length;c++)Bb(a.w,Rd[c],118);Nc(a.b,function(a){return function(b){if(0<=Rd.indexOf(b)){var c=!1,h=a.b,g=a.I;if(5==b)switch(c=!0,h.U){case 2:Ud(a,String.fromCharCode(h.W));break;case 9:for(var k=Uc(h),l="",p=255;p--;){var q=a.b.aa(k++);if(36==q)break;l+=String.fromCharCode(q)}Ud(a,l);break;default:c=!1}c?Id.call(h):g&&(a.g("\nCP/M vector "+t(b)),H(h,b),g.na());b=!0}else b=!1;
return b}}(a));Pc(a.b,b)}return!0}return!1}function Ud(a,b){b=b.replace(/\r/g,"");a.Fa&&(a.Fa.value+=b,a.Fa.scrollTop=a.Fa.scrollHeight)}La(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Pd(d);gb(d,c)}});function Vd(a){x.call(this,"RAM",a,Vd);this.B=a.addr;this.u=a.size;this.A=!1}ab(Vd);m=Vd.prototype;m.Qa=function(a,b,c,d){this.w=b;this.b=c;this.I=d;F(this)};m.Ea=function(a,b){b||this.reset();return!0};m.Ha=function(a){return a?this.save():!0};
m.reset=function(){!this.A&&this.u&&wb(this.w,this.B,this.u,1)&&(this.A=!0);this.A||u("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};La(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Vd(d);gb(d,c)}});function Wd(a){x.call(this,"Keyboard",a,Wd,65536);(a=a.model)&&!Xd[a]&&Na("Unrecognized Keyboard model: "+a);this.w=Xd[a]||{};this.reset();F(this)}ab(Wd);
var Yd={Aa:1978.1,C:{},ic:{65:37,68:39,76:32},xb:{},Wa:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},V={Aa:100,C:{},ic:{},xb:{},Wa:{setup:120},Rc:{Ba:130,INIT:127},La:{Ba:130,ed:1,dd:2,cd:4,bd:8,fd:16,mc:32,lc:63,rd:64,be:128,INIT:0},ad:127};V.C[46]=3;V.C[80]=5;V.C[79]=6;V.C[89]=7;V.C[84]=8;V.C[87]=9;V.C[81]=10;V.C[39]=16;V.C[221]=20;V.C[219]=21;V.C[73]=22;V.C[85]=23;V.C[82]=24;V.C[69]=25;V.C[49]=26;V.C[37]=32;V.C[40]=34;V.C[117]=35;V.C[19]=35;V.C[192]=36;V.C[189]=37;V.C[57]=38;V.C[55]=39;
V.C[52]=40;V.C[51]=41;V.C[27]=42;V.C[38]=48;V.C[114]=49;V.C[112]=50;V.C[8]=51;V.C[187]=52;V.C[48]=53;V.C[56]=54;V.C[54]=55;V.C[53]=56;V.C[50]=57;V.C[9]=58;V.C[103]=64;V.C[115]=65;V.C[113]=66;V.C[96]=67;V.C[118]=68;V.C[220]=69;V.C[76]=70;V.C[75]=71;V.C[71]=72;V.C[70]=73;V.C[65]=74;V.C[104]=80;V.C[2013]=81;V.C[98]=82;V.C[97]=83;V.C[222]=85;V.C[186]=86;V.C[74]=87;V.C[72]=88;V.C[68]=89;V.C[83]=90;V.C[110]=96;V.C[116]=97;V.C[101]=98;V.C[100]=99;V.C[13]=100;V.C[190]=101;V.C[188]=102;V.C[78]=103;
V.C[66]=104;V.C[88]=105;V.C[119]=106;V.C[105]=112;V.C[99]=113;V.C[102]=114;V.C[109]=115;V.C[191]=117;V.C[77]=118;V.C[32]=119;V.C[86]=120;V.C[67]=121;V.C[90]=122;V.C[120]=123;V.C[17]=124;V.C[16]=125;V.C[20]=126;V.xb={l4:V.La.ed,l3:V.La.dd,l2:V.La.cd,l1:V.La.bd,locked:V.La.fd,local:V.La.mc,online:~V.La.mc};var Vd={SI1978:Wd,VT100:V};
Ud.prototype.ma=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.M[e]){if("led"==a&&this.w.xb[b])return this.M[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Xd(d,a,!0)},c.onkeyup=function(a){return Xd(d,a,!1)},!0;default:if(this.w.Va&&void 0!==this.w.Va[b])return this.M[e]=c,a=function(a,b){return function(){Yd(a,b,!0)}}(this,this.w.Va[b]),b=function(a,b){return function(){Yd(a,b,!1);a.A&&a.A.gb()}}(this,this.w.Va[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=
b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};Ud.prototype.Qa=function(a,b,c,d){this.A=a;this.b=c;this.I=d;this.J=tb(a,"ChipSet");Eb(b,this,this.w.Rb);Jb(b,this,this.w.Sb)};Ud.prototype.Ea=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Ud.prototype.Ha=function(a){return a?this.save():!0};V.INIT=[[V.La.INIT,V.Rc.INIT,-1]];m=Ud.prototype;m.reset=function(){this.u=[];this.w.INIT&&!this.restore(this.w.INIT)&&this.ja("reset error")};
m.save=function(){var a=new H(this);switch(this.w.Aa){case V.Aa:I(a,0,[this.H,this.F,-1])}return a.data()};m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.w.Aa){case Wd.Aa:return!0;case V.Aa:return this.H=b[0],Zd(this,this.H&V.La.lc),this.F=b[1],this.B=b[2],!0}return!1};function Zd(a,b){for(var c in a.w.xb){var d=a.M["led-"+c];if(d){var e=a.w.xb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function Xd(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=a.w.ic[e]||e,!a.w.C[e]){for(var f in a.w.Va)if(a.w.Va[f]===e){e=f;break a}e=null}e&&(d=Yd(a,e,c),b.preventDefault());return d}
function Yd(a,b,c){var d;a:{for(d=0;d<a.u.length;d++)if(a.u[d].gc==b)break a;d=-1}if(c)0>d?a.u.push({gc:b,cc:Date.now(),Mb:!1}):(a.u[d].cc=Date.now(),a.u[d].Mb=!1);else if(0<=d){if(!a.u[d].Mb){var e=a.u[d].cc;if(e&&100>Date.now()-e)return a.u[d].Mb=!0,$d(a),!0}a.u.splice(d,1)}if(a.J){d=0;switch(b){case "1p":d=T.Wa.hd;break;case "2p":d=T.Wa.md;break;case "coin":d=T.Wa.Tc;break;case "left":d=T.Wa.kd;break;case "right":d=T.Wa.ld;break;case "fire":d=T.Wa.jd}d&&(a=a.J,b=d,a.F&=~b,c&&(a.F|=b))}return!0}
function $d(a){for(var b=0,c=-1;b<a.u.length;){if(a.u[b].Mb){var d=a.u[b].gc,e=100-(Date.now()-a.u[b].cc);if(0<e){if(0>c||c>e)c=e}else{Yd(a,d,!1);b=0;continue}}b++}0<=c&&setTimeout(function(){$d(a)},c)}m.$b=function(){return!0};m.Fd=function(a,b){var c=this.F;0<=this.B&&(this.B<this.u.length?(c=this.u[this.B],this.B++,c=V.C[c.gc],c&128&&(c&=127)):(this.B=-1,c=V.ad),this.F=c,Bd(this.b,1));D(this,a,null,b,"KBDUART.ADDRESS",c);return c};
m.Ud=function(a,b,c){D(this,a,b,c,"KBDUART.STATUS");this.H=b;Zd(this,b&V.La.lc);b&V.La.rd&&(this.B=0,Bd(this.b,1))};V.Rb={130:Ud.prototype.Fd};V.Sb={130:Ud.prototype.Ud};Ja(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ud(d);gb(d,c)}});
function ae(a,b,c,d,e){var f=this;this.Hc=ya("Gecko/");var h=["","moz","ms","webkit"];x.call(this,"Video",a,ae,262144);this.ca=a.screenWidth;this.P=a.screenHeight;this.ya=a.bufferAddr;this.Xd=a.bufferRAM;var g=a.bufferFormat;this.ga=g&&be[g.toUpperCase()]||ce;this.ea=a.bufferCols;this.ha=a.bufferRows;this.zc=this.oa=a.cellWidth||1;this.ka=a.cellHeight||1;this.Na=null;this.Gc=!1;this.$a=a.bufferBits||1;this.Yd=a.bufferLeft||0;if(this.B=a.bufferRotate)this.B=this.B%360,0<this.B&&(this.B-=360),-90!=
this.B&&(this.ja("unsupported buffer rotation: "+this.B),this.B=0);this.Zb=a.interruptRate;this.Zd=a.refreshRate||60;this.O=b;this.J=c;this.Ca=(this.$d=d)||b||null;this.Vd=this.ca;this.Wd=this.P;this.Ac=this.ca/this.ea|0;this.Fc=this.P/this.ha|0;1<this.ka&&(this.ha++,this.hb=0,this.yb=!1);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.J[d]){this.J[d]=b;break}if(this.F=a.screenRotate)this.F=
this.F%360,0<this.F&&(this.F-=360),-90!=this.F?(this.ja("unsupported screen rotation: "+this.F),this.F=0):(this.J.translate(0,this.P),this.J.rotate(this.F*Math.PI/180),this.J.scale(this.P/this.ca,this.ca/this.P));if(this.u=e)if(this.u.jb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.u.jb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){de(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(){de(f,null)},!1);break}}if(this.ia=a.fontROM)"json"!=ea(this.ia)&&(this.ia=qa()+"/api/v1/dump?file="+this.ia+"&format=bytes"),pa(this.ia,null,!0,function(a,b,c){ee(f,a,b,c)});this.Ab={}}Xa(ae);var ce=0,be={SI1978:1,VT100:2};
function Ld(a){a.K=a.ea*a.oa;a.da=a.ha*a.ka;var b=a.K,c=a.da;a.B&&(b=a.da,c=a.K);a.X=0;if(!a.Xd&&(a.X=(a.K*a.$a>>3)*a.da,!xb(a.w,a.ya,a.X,3)))return!1;a.X?(a.Jc=a.J.createImageData(b,c),a.Nc=16/a.$a|0,fe(a,a.X>>1)):fe(a,(a.ea+1)*a.ha);a.N=document.createElement("canvas");a.N.width=b;a.N.height=c;a.ib=a.N.getContext("2d");a.qa={};a.Da=1<<a.$a;a.ra=Array(a.Da+2);a.ra[0]=[0,0,0,255];a.ra[1]=[255,255,255,255];1==a.ga&&(a.ra[a.Da+0]=[255,255,0,255],a.ra[a.Da+1]=[0,255,0,255]);2==a.ga&&(a.ac=60,a.zb=!1,
a.Ya=Array(a.ea));return!0}ae.prototype.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;Ld(this);if(this.L=tb(a,"Keyboard")){for(var e in this.Ab)this.L.ma("led",e,this.Ab[e]);this.O&&this.L.ma(this.$d?"textarea":"canvas","kbd",this.Ca)}this.ia||E(this)};
function ee(a,b,c,d){if(d)a.ja("Unable to load font ROM (error "+d+": "+b+")");else{ab(a.Yb,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){u("Empty font ROM: "+b);return}if(1==f.length){u(f[0]);return}if(2048==f.length)a.Na=f,Md(a);else{a.ja("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ja("Font ROM data error: "+h.message);return}(a.J||a.I)&&E(a)}}
function Md(a){a.Na&&(a.Gc=2==a.ga,a.qa[96]=[ge(a,a.oa,a.ka),ge(a,a.oa,a.ka,a.zb)],a.qa[64]=[ge(a,2*a.oa,a.ka),ge(a,2*a.oa,a.ka,a.zb)],a.qa[32]=a.qa[0]=[ge(a,2*a.oa,2*a.ka),ge(a,2*a.oa,2*a.ka,a.zb)])}
function ge(a,b,c,d){var e=8>=a.zc?8:16,f=8<e?15:0,h=a.Na.length/e,g=!1===d,k={oa:b,ka:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=h/16*c;k.context=k.canvas.getContext("2d");for(var l=k.context.createImageData(b,c),p=0;p<h;p++){for(var q=0,v=q;q<a.ka;q++)for(var w=p*e+(f+q&e-1),w=d&&8==q?255:a.Na[w],r=0;r<c/a.ka;r++){for(var C=0,z=0,X=z;z<a.oa;z++){for(var A=w&128>>(7<z?7:z),C=a.Gc&&!A&&C?C:A,Q=0;Q<b/a.oa;Q++)g&&(C=!C),he(a,l,X,v,C?1:0),X++;C=A}v++}k.context.putImageData(l,
V.C[66]=104;V.C[88]=105;V.C[119]=106;V.C[105]=112;V.C[99]=113;V.C[102]=114;V.C[109]=115;V.C[191]=117;V.C[77]=118;V.C[32]=119;V.C[86]=120;V.C[67]=121;V.C[90]=122;V.C[120]=123;V.C[17]=124;V.C[16]=125;V.C[20]=126;V.xb={l4:V.La.ed,l3:V.La.dd,l2:V.La.cd,l1:V.La.bd,locked:V.La.fd,local:V.La.mc,online:~V.La.mc};var Xd={SI1978:Yd,VT100:V};
Wd.prototype.ma=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.N[e]){if("led"==a&&this.w.xb[b])return this.N[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Zd(d,a,!0)},c.onkeyup=function(a){return Zd(d,a,!1)},!0;default:if(this.w.Wa&&void 0!==this.w.Wa[b])return this.N[e]=c,a=function(a,b){return function(){$d(a,b,!0)}}(this,this.w.Wa[b]),b=function(a,b){return function(){$d(a,b,!1);a.A&&a.A.hb()}}(this,this.w.Wa[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=
b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};Wd.prototype.Qa=function(a,b,c,d){this.A=a;this.b=c;this.I=d;this.J=sb(a,"ChipSet");Db(b,this,this.w.Rb);Hb(b,this,this.w.Sb)};Wd.prototype.Ea=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Wd.prototype.Ha=function(a){return a?this.save():!0};V.INIT=[[V.La.INIT,V.Rc.INIT,-1]];m=Wd.prototype;m.reset=function(){this.u=[];this.w.INIT&&!this.restore(this.w.INIT)&&this.ja("reset error")};
m.save=function(){var a=new Rc(this);switch(this.w.Aa){case V.Aa:I(a,0,[this.H,this.F,-1])}return a.data()};m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.w.Aa){case Yd.Aa:return!0;case V.Aa:return this.H=b[0],ae(this,this.H&V.La.lc),this.F=b[1],this.B=b[2],!0}return!1};function ae(a,b){for(var c in a.w.xb){var d=a.N["led-"+c];if(d){var e=a.w.xb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function Zd(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=a.w.ic[e]||e,!a.w.C[e]){for(var f in a.w.Wa)if(a.w.Wa[f]===e){e=f;break a}e=null}e&&(d=$d(a,e,c),b.preventDefault());return d}
function $d(a,b,c){var d;a:{for(d=0;d<a.u.length;d++)if(a.u[d].gc==b)break a;d=-1}if(c)0>d?a.u.push({gc:b,cc:Date.now(),Mb:!1}):(a.u[d].cc=Date.now(),a.u[d].Mb=!1);else if(0<=d){if(!a.u[d].Mb){var e=a.u[d].cc;if(e&&100>Date.now()-e)return a.u[d].Mb=!0,be(a),!0}a.u.splice(d,1)}if(a.J){d=0;switch(b){case "1p":d=T.Xa.hd;break;case "2p":d=T.Xa.md;break;case "coin":d=T.Xa.Tc;break;case "left":d=T.Xa.kd;break;case "right":d=T.Xa.ld;break;case "fire":d=T.Xa.jd}d&&(a=a.J,b=d,a.J&=~b,c&&(a.J|=b))}return!0}
function be(a){for(var b=0,c=-1;b<a.u.length;){if(a.u[b].Mb){var d=a.u[b].gc,e=100-(Date.now()-a.u[b].cc);if(0<e){if(0>c||c>e)c=e}else{$d(a,d,!1);b=0;continue}}b++}0<=c&&setTimeout(function(){be(a)},c)}m.$b=function(){return!0};m.Fd=function(a,b){var c=this.F;0<=this.B&&(this.B<this.u.length?(c=this.u[this.B],this.B++,c=V.C[c.gc],c&128&&(c&=127)):(this.B=-1,c=V.ad),this.F=c,Dd(this.b,1));D(this,a,null,b,"KBDUART.ADDRESS",c);return c};
m.Ud=function(a,b,c){D(this,a,b,c,"KBDUART.STATUS");this.H=b;ae(this,b&V.La.lc);b&V.La.rd&&(this.B=0,Dd(this.b,1))};V.Rb={130:Wd.prototype.Fd};V.Sb={130:Wd.prototype.Ud};La(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Wd(d);gb(d,c)}});
function ce(a,b,c,d,e){var f=this;this.Hc=Aa("Gecko/");var h=["","moz","ms","webkit"];x.call(this,"Video",a,ce,262144);this.ba=a.screenWidth;this.P=a.screenHeight;this.ua=a.bufferAddr;this.Xd=a.bufferRAM;var g=a.bufferFormat;this.ga=g&&de[g.toUpperCase()]||ee;this.ea=a.bufferCols;this.ha=a.bufferRows;this.zc=this.oa=a.cellWidth||1;this.ka=a.cellHeight||1;this.Na=null;this.Gc=!1;this.ab=a.bufferBits||1;this.Yd=a.bufferLeft||0;if(this.B=a.bufferRotate)this.B=this.B%360,0<this.B&&(this.B-=360),-90!=
this.B&&(this.ja("unsupported buffer rotation: "+this.B),this.B=0);this.Zb=a.interruptRate;this.Zd=a.refreshRate||60;this.O=b;this.F=c;this.Ca=(this.$d=d)||b||null;this.Vd=this.ba;this.Wd=this.P;this.Ac=this.ba/this.ea|0;this.Fc=this.P/this.ha|0;1<this.ka&&(this.ha++,this.ib=0,this.yb=!1);b=a.smoothing;(c=Ua.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.J=a.screenRotate)this.J=
this.J%360,0<this.J&&(this.J-=360),-90!=this.J?(this.ja("unsupported screen rotation: "+this.J),this.J=0):(this.F.translate(0,this.P),this.F.rotate(this.J*Math.PI/180),this.F.scale(this.P/this.ba,this.ba/this.P));if(this.u=e)if(this.u.kb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.u.kb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){fe(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(){fe(f,null)},!1);break}}if(this.ia=a.fontROM)"json"!=fa(this.ia)&&(this.ia=sa()+"/api/v1/dump?file="+this.ia+"&format=bytes"),ra(this.ia,null,!0,function(a,b,c){ge(f,a,b,c)});this.Ab={}}ab(ce);var ee=0,de={SI1978:1,VT100:2};
function Nd(a){a.L=a.ea*a.oa;a.da=a.ha*a.ka;var b=a.L,c=a.da;a.B&&(b=a.da,c=a.L);a.S=0;if(!a.Xd&&(a.S=(a.L*a.ab>>3)*a.da,!wb(a.w,a.ua,a.S,3)))return!1;a.S?(a.Jc=a.F.createImageData(b,c),a.Nc=16/a.ab|0,he(a,a.S>>1)):he(a,(a.ea+1)*a.ha);a.M=document.createElement("canvas");a.M.width=b;a.M.height=c;a.jb=a.M.getContext("2d");a.qa={};a.Da=1<<a.ab;a.ra=Array(a.Da+2);a.ra[0]=[0,0,0,255];a.ra[1]=[255,255,255,255];1==a.ga&&(a.ra[a.Da+0]=[255,255,0,255],a.ra[a.Da+1]=[0,255,0,255]);2==a.ga&&(a.ac=60,a.zb=!1,
a.Za=Array(a.ea));return!0}ce.prototype.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;Nd(this);if(this.K=sb(a,"Keyboard")){for(var e in this.Ab)this.K.ma("led",e,this.Ab[e]);this.O&&this.K.ma(this.$d?"textarea":"canvas","kbd",this.Ca)}this.ia||F(this)};
function ge(a,b,c,d){if(d)a.ja("Unable to load font ROM (error "+d+": "+b+")");else{cb(a.Yb,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){u("Empty font ROM: "+b);return}if(1==f.length){u(f[0]);return}if(2048==f.length)a.Na=f,Od(a);else{a.ja("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ja("Font ROM data error: "+h.message);return}(a.F||a.I)&&F(a)}}
function Od(a){a.Na&&(a.Gc=2==a.ga,a.qa[96]=[ie(a,a.oa,a.ka),ie(a,a.oa,a.ka,a.zb)],a.qa[64]=[ie(a,2*a.oa,a.ka),ie(a,2*a.oa,a.ka,a.zb)],a.qa[32]=a.qa[0]=[ie(a,2*a.oa,2*a.ka),ie(a,2*a.oa,2*a.ka,a.zb)])}
function ie(a,b,c,d){var e=8>=a.zc?8:16,f=8<e?15:0,h=a.Na.length/e,g=!1===d,k={oa:b,ka:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=h/16*c;k.context=k.canvas.getContext("2d");for(var l=k.context.createImageData(b,c),p=0;p<h;p++){for(var q=0,v=q;q<a.ka;q++)for(var w=p*e+(f+q&e-1),w=d&&8==q?255:a.Na[w],r=0;r<c/a.ka;r++){for(var C=0,y=0,Y=y;y<a.oa;y++){for(var A=w&128>>(7<y?7:y),C=a.Gc&&!A&&C?C:A,Q=0;Q<b/a.oa;Q++)g&&(C=!C),je(a,l,Y,v,C?1:0),Y++;C=A}v++}k.context.putImageData(l,
(p&15)*b,(p>>4)*c)}return k}
ae.prototype.Ea=function(){if(2==this.ga){for(var a={0:[32,"SET-UP A"],2:[64,'TO EXIT PRESS "SET-UP"'],22:[96," T T T T T T T T T"],23:[96,"1234567890","1234567890","1234567890","1234567890","1234567890","1234567890","1234567890","1234567890"],24:[]},b=this.ya,c=-1,d=-1,e,f=-(60==this.ac?2:5);f<this.ha;f++){var h=a[f];if(0<=c){var g=!1,c=b+2;h?h.length?d=h[0]:(c=b-1,g=!0):32==d&&(h=a[f-1],d=0);e=d&96|c>>8&15|16;Cb(this.w,b++,e);Cb(this.w,b++,
c&255);if(g)break}if(h)for(c=0,e=1;e<h.length;e++){for(var g=h[e],k=0;k<g.length;k++)Cb(this.w,b++,g.charCodeAt(k)|c);c^=128}Cb(this.w,b++,127);c=b}ie(this)}return!0};ae.prototype.ma=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.Ab[b]=c,!0;switch(b){case "fullScreen":return this.M[b]=c,this.u&&this.u.jb?c.onclick=function(){d.jb()}:c.parentNode.removeChild(c),!0}return!1};
ae.prototype.jb=function(){var a=!1;if(this.u){if(this.u.jb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.ca/this.P;b>c&&(a=Math.round(c/b*100)+"%")}this.Hc?(this.O.style.width=a,this.O.style.width=a,this.O.style.display="block",this.O.style.margin="auto"):(this.u.style.width=a,this.u.style.height="auto");this.u.style.backgroundColor="black";this.u.jb();a=!0}this.Ca&&this.Ca.focus()}return a};
function de(a,b){!b&&a.u&&(a.Hc?a.O.style.width=a.O.style.height="":a.u.style.width=a.u.style.height="");ib(a,"notifyFullScreen("+b+")")}function fe(a,b){a.Kc=b;a.za=!1;if(void 0===a.H||a.H.length!=a.Kc)a.H=Array(a.Kc)}function he(a,b,c,d,e){d=a.B?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.ga&&(208<=c&&236>c?e=a.Da+0:28<=c&&72>c&&(e=a.Da+1));a=a.ra[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
function ie(a,b){for(var c=a.ya,d=-1,e=0,f=60==a.ac?2:5,h=0,g=0,k=-1;e<a.ha;){var l=0,p=c,q=d,v=a.ea;for(96!=q&&(v>>=1);;){var w=Ab(a.w,p++);if(127==(w&127)){var r=Ab(a.w,p++),d=r&96,c=(r&15)<<8|Ab(a.w,p),c=c+(r&16?8192:16384);break}if(l<v)a.Ya[l++]=w;else break}if(f)f--;else{for(;l<a.Ya.length;)a.Ya[l++]=0;if(0<=q)for(p=a.za&&a.H[h]==v,a.H[h++]=v,v=0;v<l;v++){w=a.Ya[v];if(!p||w!==a.H[h]){a.H[k=h]=w;var r=a,C=a.ib,z=w&127;if(w=r.qa[q][w&128?1:0]){var X=(z&15)*w.oa,z=(z>>4)*w.ka,A=void 0,Q=void 0,
aa=void 0,Y=void 0,va=w.oa,Hb=w.ka;C?(A=v*r.oa,Q=e*r.ka,aa=r.oa,Y=r.ka):(A=v*r.Ac,Q=e*r.Fc,aa=r.Ac,Y=r.Fc);w.oa>r.oa&&(A*=2,aa*=2);w.ka>r.ka&&(0==q&&(z+=r.ka),Hb=r.ka);C?C.drawImage(w.canvas,X,z,va,Hb,A,Q,aa,Y):(A+=0,Q+=0,r.J.drawImage(w.canvas,X,z,va,Hb,A,Q,aa,Y))}g++}h++}e++}}a.za=!0;!b&&a.yb&&1==g&&(a.H[k]=-1,g=0);a.yb=!1;(g||b)&&a.ib&&a.J.drawImage(a.N,0,a.hb,a.K,a.da-a.ka,0,0,a.Vd,a.Wd)}
function Kd(a,b){var c=!0,d=!0;if(0<=b){d=!1;a.Zb&&(120==a.Zb?b&1?(Bd(a.b,2),c=!1):Bd(a.b,1):Bd(a.b,4));var e;if(e=c&&a.za&&a.X){e=a.w;for(var f=a.X,h=!0,g=a.ya>>>e.pa;0<f&&g<e.Y.length;)e.Y[g].Oa&&(e.Y[g].Oa=h=!1,e.Y[g].vc=!0),f-=e.Ga,g++;e=h}e&&(c=!1)}if(c)if(1<a.oa)switch(a.ga){case 2:ie(a,d)}else{var f=a.ya,h=f+a.X,k=g=0,l=0,c=a.K,p=0,d=a.da,q=e=0,v=a.$a,w=(1<<v)-1;a.Yd&&(v=-v,q=16+v);for(;f<h;){var r=Bb(a.w,f);if(a.za&&r===a.H[g])k+=a.Nc;else{a.H[g]=r;var C=q;C&&(r=r>>8|(r&255)<<8);k<c&&(c=k);
for(var z=a.Nc;z--;){var X=r>>C&w;he(a,a.Jc,k++,l,X);C+=v}k>p&&(p=k);l<d&&(d=l);l>=e&&(e=l+1)}f+=2;g++;if(k>=a.K&&(k=0,l++,l>a.da))break}a.za=!0;c<a.K&&(f=p-c,e-=d,a.B&&(h=c,g=f,c=d,f=e,d=a.K-(h+g),e=g),a.ib.putImageData(a.Jc,0,0,c,d,f,e),a.J.drawImage(a.N,0,0,a.N.width,a.N.height,0,0,a.ca,a.P))}}
Ja(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=y(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=ra().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Sa.aspect);f&&.3<=f&&3.33>=f&&(Ia("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");ya("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new ae(d,e,h,f,c);gb(d,c)}});
function je(a){this.ga=+a.adapter;switch(this.ga){case 0:this.ha=0;this.ra=2;break;default:u("Unrecognized serial adapter #"+this.ga);return}this.B=this.F=null;this.ia=a.tabSize;this.ea=a.charBOL;this.H=0;x.call(this,"SerialPort",a,je,8388608);a=a.binding;"console"==a?this.F="":eb(this,a);this.qa=function(a){return function(){ke(a)}}(this);this.N=this.ca=null;this.exports={receiveByte:this.Tb}}Xa(je);
var le=[50,75,110,134.5,150,200,300,600,1200,1800,2E3,2400,3600,4800,9600,19200],me=[!1,0,0,133,142,39,238],fb="buffer";m=je.prototype;
m.ma=function(a,b,c,d){var e=this;switch(b){case fb:return this.M[b]=this.B=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;if(8===b||a.ctrlKey&&65<=b&&90>=b)a.preventDefault&&a.preventDefault(),64<b&&(b-=64),e.Tb(b);return!0},c.onkeypress=function(a){a=a||window.event;e.Tb(a.which||a.keyCode);a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0;default:if(d)return this.M[b]=c,d=d.replace(/\\n/g,"\n").replace(/\\r/g,"\r"),c.onclick=function(){e.K=d;ke(e);e.A&&
e.A.gb();return!0},!0}return!1};m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;this.J=tb(a,"ChipSet");Eb(b,this,ne,this.ha);Jb(b,this,oe,this.ha);if(a=lc(this.A,"connection"))if(b=a.split("="),2==b.length&&(a=ka(b[0]),b=ka(b[1]),a==this.Xa&&(this.N=cb(b))))if(a=this.N.exports)this.ca=a.receiveByte;E(this)};m.Ea=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};m.Ha=function(a){return a?this.save():!0};m.reset=function(){pe(this)};
m.save=function(){var a=new H(this),b=0,c=[];c[b++]=this.Ma;c[b++]=this.X;c[b++]=this.da;c[b++]=this.u;c[b++]=this.L;c[b++]=this.P;c[b]=this.O;I(a,0,c);return a.data()};m.restore=function(a){return pe(this,a[0])};function pe(a,b){var c=0;void 0===b&&(b=me);a.Ma=b[c++];a.X=b[c++];a.da=b[c++];a.u=b[c++];a.L=b[c++];a.P=b[c++];a.O=b[c];return!0}m.Tb=function(a){return this.u&2?!1:(this.X=a,this.u|=2,Bd(this.b,this.ra),!0)};
function ke(a){if(a.K&&(a.Tb(a.K.charCodeAt(0))&&(a.K=a.K.substr(1)),a.K)){var b=le[a.O&15],c=((a.L&12)>>2)+6;a.L&16&&c++;c+=((a.L&192)>>6)+1>>1;setTimeout(a.qa,1E3/Math.round(b/c))}}m.$b=function(){return!!(this.u&1)};m.zd=function(a,b){var c=this.X;D(this,a,null,b,"DATA",c);this.u&=-3;return c};m.yd=function(a,b){var c=this.u;D(this,a,null,b,"STATUS",c);return c};
m.Kd=function(a,b,c){D(this,a,b,c,"DATA");this.da=b;this.u&=-6;a=!1;this.ca&&this.ca.call(this.N,b)&&(a=!0);if(this.B)13==b?this.H=0:8==b?(this.B.value=this.B.value.slice(0,-1),0<this.H&&this.H--):(a=String.fromCharCode(b),c=32<=b?1:0,9==b&&(b=this.ia||8,c=b-this.H%b,this.ia&&(a=ja("",c))),this.ea&&!this.H&&c&&(a=String.fromCharCode(this.ea)+a),this.B.value+=a,this.B.scrollTop=this.B.scrollHeight,this.H+=c),a=!0;else if(null!=this.F){if(10==b||1024<=this.F.length)this.g(this.F),this.F="";10!=b&&(this.F+=
String.fromCharCode(b));a=!0}a&&(this.u|=5)};m.Jd=function(a,b,c){D(this,a,b,c,"CONTROL");this.Ma?(this.P=b,this.P&64&&(this.Ma=!1)):(this.L=b,this.Ma=!0)};m.Id=function(a,b,c){D(this,a,b,c,"BAUDRATES");this.O=b};var ne={0:je.prototype.zd,1:je.prototype.yd},oe={0:je.prototype.Kd,1:je.prototype.Jd,2:je.prototype.Id};Ja(function(){for(var a=B(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new je(d);gb(d,c)}});
function qe(a){x.call(this,"Debugger",a,qe);this.style=re;this.ca=this.za=this.K=0;this.O=W();this.$a=W();this.J=-1;this.B=[];this.ea=!1;this.da=W();this.H=[];this.ga={};this.u=this.P=this.F=[];se(this);this.qa=0;te(this);this.Ca=[];ue(this,a.messages);this.Da=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return oc(b,a)}):void 0===global.$&&(global.$=function(a){return oc(b,a)})}Xa(qe);
var ve={"?":"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","int [#]":"request interrupt",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"},
re=8080,we="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(" "),xe="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(" "),
ye="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),ze=[[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,
ce.prototype.Ea=function(){if(2==this.ga){for(var a={0:[32,"SET-UP A"],2:[64,'TO EXIT PRESS "SET-UP"'],22:[96," T T T T T T T T T"],23:[96,"1234567890","1234567890","1234567890","1234567890","1234567890","1234567890","1234567890","1234567890"],24:[]},b=this.ua,c=-1,d=-1,e,f=-(60==this.ac?2:5);f<this.ha;f++){var h=a[f];if(0<=c){var g=!1,c=b+2;h?h.length?d=h[0]:(c=b-1,g=!0):32==d&&(h=a[f-1],d=0);e=d&96|c>>8&15|16;Bb(this.w,b++,e);Bb(this.w,b++,
c&255);if(g)break}if(h)for(c=0,e=1;e<h.length;e++){for(var g=h[e],k=0;k<g.length;k++)Bb(this.w,b++,g.charCodeAt(k)|c);c^=128}Bb(this.w,b++,127);c=b}ke(this)}return!0};ce.prototype.ma=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.Ab[b]=c,!0;switch(b){case "fullScreen":return this.N[b]=c,this.u&&this.u.kb?c.onclick=function(){d.kb()}:c.parentNode.removeChild(c),!0}return!1};
ce.prototype.kb=function(){var a=!1;if(this.u){if(this.u.kb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.ba/this.P;b>c&&(a=Math.round(c/b*100)+"%")}this.Hc?(this.O.style.width=a,this.O.style.width=a,this.O.style.display="block",this.O.style.margin="auto"):(this.u.style.width=a,this.u.style.height="auto");this.u.style.backgroundColor="black";this.u.kb();a=!0}this.Ca&&this.Ca.focus()}return a};
function fe(a,b){!b&&a.u&&(a.Hc?a.O.style.width=a.O.style.height="":a.u.style.width=a.u.style.height="");E(a,"notifyFullScreen("+b+")")}function he(a,b){a.Kc=b;a.za=!1;if(void 0===a.H||a.H.length!=a.Kc)a.H=Array(a.Kc)}function je(a,b,c,d,e){d=a.B?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.ga&&(208<=c&&236>c?e=a.Da+0:28<=c&&72>c&&(e=a.Da+1));a=a.ra[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
function ke(a,b){for(var c=a.ua,d=-1,e=0,f=60==a.ac?2:5,h=0,g=0,k=-1;e<a.ha;){var l=0,p=c,q=d,v=a.ea;for(96!=q&&(v>>=1);;){var w=zb(a.w,p++);if(127==(w&127)){var r=zb(a.w,p++),d=r&96,c=(r&15)<<8|zb(a.w,p),c=c+(r&16?8192:16384);break}if(l<v)a.Za[l++]=w;else break}if(f)f--;else{for(;l<a.Za.length;)a.Za[l++]=0;if(0<=q)for(p=a.za&&a.H[h]==v,a.H[h++]=v,v=0;v<l;v++){w=a.Za[v];if(!p||w!==a.H[h]){a.H[k=h]=w;var r=a,C=a.jb,y=w&127;if(w=r.qa[q][w&128?1:0]){var Y=(y&15)*w.oa,y=(y>>4)*w.ka,A=void 0,Q=void 0,
ba=void 0,Z=void 0,wa=w.oa,Ib=w.ka;C?(A=v*r.oa,Q=e*r.ka,ba=r.oa,Z=r.ka):(A=v*r.Ac,Q=e*r.Fc,ba=r.Ac,Z=r.Fc);w.oa>r.oa&&(A*=2,ba*=2);w.ka>r.ka&&(0==q&&(y+=r.ka),Ib=r.ka);C?C.drawImage(w.canvas,Y,y,wa,Ib,A,Q,ba,Z):(A+=0,Q+=0,r.F.drawImage(w.canvas,Y,y,wa,Ib,A,Q,ba,Z))}g++}h++}e++}}a.za=!0;!b&&a.yb&&1==g&&(a.H[k]=-1,g=0);a.yb=!1;(g||b)&&a.jb&&a.F.drawImage(a.M,0,a.ib,a.L,a.da-a.ka,0,0,a.Vd,a.Wd)}
function Md(a,b){var c=!0,d=!0;if(0<=b){d=!1;a.Zb&&(120==a.Zb?b&1?(Dd(a.b,2),c=!1):Dd(a.b,1):Dd(a.b,4));var e;if(e=c&&a.za&&a.S){e=a.w;for(var f=a.S,h=!0,g=a.ua>>>e.pa;0<f&&g<e.Y.length;)e.Y[g].Oa&&(e.Y[g].Oa=h=!1,e.Y[g].vc=!0),f-=e.Ga,g++;e=h}e&&(c=!1)}if(c)if(1<a.oa)switch(a.ga){case 2:ke(a,d)}else{var f=a.ua,h=f+a.S,k=g=0,l=0,c=a.L,p=0,d=a.da,q=e=0,v=a.ab,w=(1<<v)-1;a.Yd&&(v=-v,q=16+v);for(;f<h;){var r=Ab(a.w,f);if(a.za&&r===a.H[g])k+=a.Nc;else{a.H[g]=r;var C=q;C&&(r=r>>8|(r&255)<<8);k<c&&(c=k);
for(var y=a.Nc;y--;){var Y=r>>C&w;je(a,a.Jc,k++,l,Y);C+=v}k>p&&(p=k);l<d&&(d=l);l>=e&&(e=l+1)}f+=2;g++;if(k>=a.L&&(k=0,l++,l>a.da))break}a.za=!0;c<a.L&&(f=p-c,e-=d,a.B&&(h=c,g=f,c=d,f=e,d=a.L-(h+g),e=g),a.jb.putImageData(a.Jc,0,0,c,d,f,e),a.F.drawImage(a.M,0,0,a.M.width,a.M.height,0,0,a.ba,a.P))}}
La(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=z(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=ta().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||Ua.aspect);f&&.3<=f&&3.33>=f&&(Ka("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");Aa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new ce(d,e,h,f,c);gb(d,c)}});
function le(a){this.ga=+a.adapter;switch(this.ga){case 0:this.ha=0;this.qa=2;break;default:u("Unrecognized serial adapter #"+this.ga);return}this.B=this.F=null;this.ia=a.tabSize;this.ea=a.charBOL;this.H=0;x.call(this,"SerialPort",a,le,8388608);var b=a.binding;if("console"==b)this.F="";else{var c;a=me;b&&(void 0===c&&(c="Panel"),(c=fb(c,this.id))&&(b=c.N[b])&&this.ma(null,a,b))}this.M=this.ba=null;this.exports={receiveByte:this.Tb}}ab(le);
var ne=[50,75,110,134.5,150,200,300,600,1200,1800,2E3,2400,3600,4800,9600,19200],oe=[!1,0,0,133,142,39,238],me="buffer";m=le.prototype;
m.ma=function(a,b,c,d){var e=this;switch(b){case me:return this.N[b]=this.B=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;if(8===b||a.ctrlKey&&65<=b&&90>=b)a.preventDefault&&a.preventDefault(),64<b&&(b-=64),e.Tb(b);return!0},c.onkeypress=function(a){a=a||window.event;e.Tb(a.which||a.keyCode);a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0;default:if(d)return this.N[b]=c,d=d.replace(/\\n/g,"\n").replace(/\\r/g,"\r"),c.onclick=function(){e.L=d;pe(e);e.A&&
e.A.hb();return!0},!0}return!1};m.Qa=function(a,b,c,d){this.A=a;this.w=b;this.b=c;this.I=d;var e=this;this.ra=Hc(this.b,function(){E(e,"timerReceiveNext()");pe(e)});this.ua=Hc(this.b,function(){E(e,"timerTransmitNext()");e.u|=5});this.J=sb(a,"ChipSet");Db(b,this,qe,this.ha);Hb(b,this,re,this.ha);se(this);F(this)};function se(a){var b=kc(a.A,"connection");if(b){var c=b.split("=");2==c.length&&(b=la(c[0]),c=la(c[1]),b==a.Ya&&(a.M=eb(c),a.M&&(b=a.M.exports)))&&(a.ba=b.receiveByte)}}
m.Ea=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};m.Ha=function(a){return a?this.save():!0};m.reset=function(){te(this)};m.save=function(){var a=new Rc(this),b=0,c=[];c[b++]=this.Ma;c[b++]=this.S;c[b++]=this.da;c[b++]=this.u;c[b++]=this.K;c[b++]=this.P;c[b]=this.O;I(a,0,c);return a.data()};m.restore=function(a){return te(this,a[0])};
function te(a,b){var c=0;void 0===b&&(b=oe);a.Ma=b[c++];a.S=b[c++];a.da=b[c++];a.u=b[c++];a.K=b[c++];a.P=b[c++];a.O=b[c];return!0}function ue(a,b){var c=a.O&b;b&15||(c>>=4);var c=ne[c],d=((a.K&12)>>2)+6;a.K&16&&d++;d+=((a.K&192)>>6)+1>>1;return 1E3/Math.round(c/d)}m.Tb=function(a){E(this,"receiveByte("+da(a)+"): "+da(this.u));return this.u&2?!1:(this.S=a,this.u|=2,E(this,"receiveByte("+da(a)+"): "+da(this.u)+" (requesting interrupt)"),Dd(this.b,this.qa),!0)};
function pe(a){a.L&&(a.Tb(a.L.charCodeAt(0))&&(a.L=a.L.substr(1)),a.L&&a.b&&Ic(a.b,a.ra,ue(a,15)))}m.$b=function(){return!!(this.u&1)};m.zd=function(a,b){var c=this.S;D(this,a,null,b,"DATA",c);this.u&=-3;return c};m.yd=function(a,b){var c=this.u;D(this,a,null,b,"STATUS",c);return c};
m.Kd=function(a,b,c){D(this,a,b,c,"DATA");this.da=b;this.u&=-6;this.ba&&this.ba.call(this.M,b);if(this.B)8==b?(this.B.value=this.B.value.slice(0,-1),0<this.H&&this.H--):(a=(a=ma[b])?"<"+a+">":String.fromCharCode(b),c=a.length,9==b?(b=this.ia||8,c=b-this.H%b,this.ia&&(a=ka("",c))):13==b&&(this.H=c=0,a="\n"),this.ea&&!this.H&&c&&(a=String.fromCharCode(this.ea)+a),this.B.value+=a,this.B.scrollTop=this.B.scrollHeight,this.H+=c);else if(null!=this.F){if(10==b||1024<=this.F.length)this.g(this.F),this.F=
"";10!=b&&(this.F+=String.fromCharCode(b))}this.b&&Ic(this.b,this.ua,ue(this,240))};m.Jd=function(a,b,c){D(this,a,b,c,"CONTROL");this.Ma?(this.P=b,this.P&64&&(this.Ma=!1)):(this.K=b,this.Ma=!0)};m.Id=function(a,b,c){D(this,a,b,c,"BAUDRATES");this.O=b};var qe={0:le.prototype.zd,1:le.prototype.yd},re={0:le.prototype.Kd,1:le.prototype.Jd,2:le.prototype.Id};La(function(){for(var a=B(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new le(d);gb(d,c)}});
function ve(a){x.call(this,"Debugger",a,ve);this.style=we;this.ba=this.za=this.L=0;this.O=W();this.ab=W();this.F=-1;this.B=[];this.ea=!1;this.da=W();this.H=[];this.ga={};this.u=this.P=this.J=[];xe(this);this.qa=0;ye(this);this.Ca=[];ze(this,a.messages);this.Da=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return nc(b,a)}):void 0===global.$&&(global.$=function(a){return nc(b,a)})}ab(ve);
var Ae={"?":"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","int [#]":"request interrupt",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"},
we=8080,Be="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(" "),Ce="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(" "),
De="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),Ee=[[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]],Ae={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=qe.prototype;
m.Qa=function(a,b,c,d){this.w=b;this.b=c;this.A=a;(a=lc(a,"messages"))&&ue(this,a);this.Na=ze;Be(this,function(a){a:{var b=d.w.Y,c=a[0],g=a=0,k=b.length;if(c){a=Ce(De(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.w.pa;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var p=b[g];p.type==c?l++||d.g("..."):(c=p.type,l=zb[c],p&&d.g(n(p.id)+" %"+n(g<<d.w.pa)+" %%"+n(p.G)+" "+t(p.Ib)+" "+
t(p.size)+" "+l),c!=Yb&&(c=-1),l=0);a+=d.w.Ga;g++}}});E(this)};
m.ma=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ia=this.M[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",oc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.J<d.B.length-1&&(b=d.B[++d.J]):40==a.keyCode&&(0<d.J?b=d.B[--d.J]:(b="",d.J=-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.M[b]=c,Aa(c,function(){if(d.ia){var a=d.ia.value;d.ia.value=
"";oc(d,a,!0);return!0}return!1}),!0;case "step":return this.M[b]=c,Aa(c,function(a){var b=!1;lb(d,!0)||(kb(d,!0),b=d.ub(a?1:0),kb(d,!1));return b}),!0}return!1};m.gb=function(){this.ia&&this.ia.focus()};function Ce(a){a=a&&a.G;null==a&&(a=-1);return a}m.aa=function(a,b){var c=255,d=Ce(a);-1!==d&&(c=Ab(this.w,d),b&&Ee(a,b));return c};m.Sa=function(a,b){var c=65535,d=Ce(a);-1!==d&&(c=Bb(this.w,d),b&&Ee(a,b));return c};m.ta=function(a,b,c){var d=Ce(a);-1!==d&&(Cb(this.w,d,b),c&&Ee(a,c),Bc(this.b,!0))};
m.Ub=function(a,b,c){var d=Ce(a);if(-1!==d){var e=this.w,f=d&e.w,h=(d&e.B)>>>e.pa;f!=e.w?e.Y[h].hc(f,b&65535,d):(e.Y[h++].Jb(f,b&255,d),e.Y[h&e.L].Jb(0,b>>8&255,d+1));c&&Ee(a,c);Bc(this.b,!0)}};function W(a){return{G:a,Pa:!1}}function Fe(a){return[a.G,a.Pa]}function Ge(a){return{G:a[0],Pa:a[1]}}
function De(a,b,c){var d;c=(c?a.O:a.$a).G;if(void 0!==b){d=b=He(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.H.length;c++){var f=a.H[c].Ra[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=Ie(a,b,void 0)}null!=c&&(d=W(c));return d}function Je(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.vd=Ke(a,b.Mc=c[2]))}function Ee(a,b){null!=a.G&&(a.G+=b||1)}function Z(a){return n(a,4)}
function Le(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.aa(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function ue(a,b){a.I=a;a.sa=a.wd=536870912;a.ra=null;a.ya=[];var c=Ke(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Ae)0<=oa(c,d)&&(a.sa|=Ae[d],a.g(d+" messages enabled"))}function Be(a,b){for(var c in Ae)if(64==Ae[c]){a.Ca[c]=b;break}}
function Me(a,b){var c;a=a.toUpperCase();null==b?c=oa(ye,a):(c=oa(ye,a.substr(b,2)),0>c&&(c=oa(ye,a.substr(b,1))));return c}function Ne(a,b){var c=0,d=Oe(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?n(d,c):"??"}
function Oe(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.S;break;case 1:c=d.T;break;case 8:c=Qc(d);break;case 2:c=d.U;break;case 3:c=d.V;break;case 9:c=Sc(d);break;case 4:c=d.W;break;case 5:c=d.Z;break;case 10:c=J(d);break;case 6:c=d.aa(J(d));break;case 11:c=d.la;break;case 12:c=d.R;break;case 13:c=Pc(d);break;case 14:c=Pc(d)&255|d.j<<8}}return c}
function Pe(a,b){b=He(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Me(b,c+1),0<=e&&(b=b.substr(0,c)+Ne(a,e)+b.substr(c+1+ye[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=ca(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=De(a,e))?(d=e+' "'+Le(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=De(a,e))?(Ee(d),d=e+' "'+
Le(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(W(this.b.R).G));if(this.sa&1073741824)this.ya.push(a);else if(!this.ra||a!=this.ra)if(this.ra=a,this.sa&-2147483648&&(this.na(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.rb=0;c.B-=c.b;c.b=0;Bc(c)}};
function hb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.sa&g)!=g||a.message(b.Xa+"."+(null!=d?"outPort":"inPort")+"("+t(c)+","+(f?f:"unknown")+(null!=d?",0x"+n(d,2):"")+")"+(null!=h?": 0x"+n(h,2):"")+(null!=e?" at "+Z(e):""))}
function te(a){var b;if(Cd(a)){if(!a.N||!a.N.length){a.N=Array(1E3);for(b=0;b<a.N.length;b++)a.N[b]=W();a.ha=0;a.g("instruction history buffer allocated")}if(!a.L||!a.L.length)for(a.L=Array(256),b=0;b<a.L.length;b++)a.L[b]=[b,0]}else a.N&&a.N.length&&a.g("instruction history buffer freed"),a.ha=0,a.N=[],a.L=[]}m.fb=function(a){if(!Qe(this))return!1;this.b.fb(a);return!0};
m.ub=function(a,b,c){if(!Qe(this))return!1;this.K=0;a||Cd(this)&&Dd(this,this.b.R,0);try{var d=this.b.ub(a);0<d&&(this.K+=d,Gc(this.b,d,!0),Dc(this.b,d),this.ca++)}catch(e){"number"!=typeof e&&(this.K=0,nb(this.b,e.stack||e.message))}!1!==c&&Bc(this.b);this.Ia(b||!1);return 0<this.K};m.na=function(a){this.b&&this.b.na(a)};m.Ia=function(a){void 0===a&&(a=!0);this.O=W(this.b.R);a&&1!=this.X?Re(this):Se(this)};
function Qe(a){var b;if(b=a.b&&mb(a.b))b=a.b,b.D.ua?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!lb(a.b)?(a=a.b,a.D.mb?(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){te(this);this.ca=this.za=0;this.ra=null;this.K=0;this.O=W(this.b.R);this.D.xa=!1;rf(this);a||this.Ia()};
m.save=function(){var a=new H(this);I(a,0,Fe(this.O));I(a,1,Fe(this.da));I(a,2,[this.B,this.ea,this.sa]);I(a,3,this.H);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.O=Ge(a[b++]),this.da=Ge(a[b++]),this.B=a[b][0],"string"==typeof this.B&&(this.B=[this.B]),this.ea=a[b][1],this.sa|=a[b][2]);a[3]&&(this.H=a[3]);return!0};m.start=function(a,b){this.X||this.g("running");this.D.xa=!0;this.yb=a;this.zb=b};
m.stop=function(a,b){if(this.D.xa){this.D.xa=!1;this.K=b-this.zb;if(!this.X){var c="stopped";if(this.K){var d=a-this.yb,e=0<d?Math.round(1E3*this.K/d):0,c=c+" (";Cd(this)&&(c+=this.ca+" opcodes, ",this.za-=this.ca,this.ca=0);c+=this.K+" cycles, "+d+" ms, "+e+" hz)"}else jb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Ia(!0);this.gb();rf(this,this.b.R)}};function Cd(a){return 1<a.u.length||!!a.qa}
function Dd(a,b,c){var d=a.b;if(0<c&&(a.qa&&!--a.qa||gc(a,b,1,a.u)))return!0;0<=c&&a.L.length&&(a.ca++,b=Ab(a.w,b),null!=b&&(a.L[b][1]++,b=a.N[a.ha],b.G=d.R,b.Pa=!1,++a.ha==a.N.length&&(a.ha=0)));return!1}function Gb(a,b,c){a.g("break on input from port "+t(b)+": "+n(c));a.na(!0)}function Tb(a,b,c){a.g("break on output to port "+t(b)+": "+n(c));a.na(!0)}
function se(a){var b,c;a.u=["bp"];if(void 0!==a.P)for(b=1;b<a.P.length;b++){c=a.P[b];var d=a.w;hc(d.Y[Ce(c)>>>d.pa],!1)}a.P=["br"];if(void 0!==a.F)for(b=1;b<a.F.length;b++)c=a.F[b],d=a.w,hc(d.Y[Ce(c)>>>d.pa],!0);a.F=["bw"];a.hb=0}m.Za=function(a,b,c){var d=!0;c||sf(this,a,b,!1,!0);if(a!=this.u){var e=Ce(b);if(-1===e)this.g("invalid address: "+Z(b.G)),d=!1;else{var f=this.w;f.Y[e>>>f.pa].Za(e&f.w,a==this.F)}}d&&(a.push(b),c?b.Pa=!0:(tf(this,a,a.length-1,"set"),te(this)));return d};
function sf(a,b,c,d,e){var f=!1;c=Ce(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==Ce(g)&&(!d||g.Pa)){f=!0;g.Pa||e||tf(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.w,hc(d.Y[c>>>d.pa],b==a.F));g.Pa||te(a);break}}return f}function uf(a,b){for(var c=1;c<b.length;c++)tf(a,b,c);return b.length-1}function tf(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.G)+(d?" "+d:c.Mc?' "'+c.Mc+'"':""))}
function rf(a,b){if(void 0!==b)gc(a,b,1,a.u,!0),a.X=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.Pa){if(!sf(a,a.u,d,!0))break;c=0}}}
function gc(a,b,c,d,e){var f=!1;if(!a.hb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Pa)for(var k=Ce(g),l=0;l<c;l++)if(b+l==k){var p,f=!0;g.Pa&&(sf(a,d,g,!0),e=!0);if(p=g.vd){for(var f=!1,q=0;q<p.length;q++)if(!vf(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var v=q+1;v<p.length&&p[v].indexOf("else");v++)q++;if(v==p.length){f=!0;break}}a.b.D.xa||(f=!0)}if(f){e||tf(a,d,h,"hit");break}}}a.hb--;return f}
function wf(a,b,c,d){for(var e=W(b.G),f=a.aa(b,1),h=a.Na[f],g="",k=(8086!=a.style?we:xe)[h[0]],l=h.length-1,p=0,q,v=1;v<=l;v++){var w="";q=h[v];if(void 0!==q&&!(q&16384&&a.style==re)){var r=q&240;if(r){var C=q&15;C?p=C:q|=p;q&61440||(q|=1==v?8192:4096);if(r&32)a:{var w=a,r=q,C=b,z=" ";switch(r&15){case 1:z=n(w.aa(C,1),2);break;case 2:z=n(w.aa(C,1)<<24>>24,4);break;case 3:z=n(w.Sa(C,2),4);break;default:w="imm("+t(r)+")";break a}8086==w.style&&r&64?z="["+z+"]":r&16||(z=(w.style==re?"$":"0x")+z);w=z}else r&
16?(w=(q&3840)>>8,r=ye[w],8086==a.style&&q&64&&(6==w&&(r="HL"),r="["+r+"]"),w=r):r&128&&(w=(f>>3&7).toString());if(!w||!w.length){g="INVALID";break}0<g.length&&(g+=",");g+=w||"???"}}}f="";h=Z(e.G)+" ";if(-1!==e.G&&-1!==b.G){do if(f+=n(a.aa(e,1),2),null==e.G)break;while(e.G!=b.G)}h+=ja(f,10);h=h+(q&32768?"*":" ")+ja(k,7);g&&(h+=" "+g);c&&(h=ja(h,40)+";"+c,h=a.b.D.lb?h+("cycles="+Ec(a.b).toString()+" cs="+n(a.b.i.Bb)):h+(null!=d?"="+d.toString():""));return h}
function xf(a,b){var c;switch(b){case "IF":c=a.b.va&512;break;case "SF":c=$c(a.b);break;case "ZF":c=Zc(a.b);break;case "AF":c=Yc(a.b);break;case "PF":c=Xc(a.b);break;case "CF":c=Vc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function yf(a,b){return ye[b]+"="+Ne(a,b)+" "}function zf(a){return yf(a,7)+yf(a,8)+yf(a,9)+yf(a,10)+yf(a,11)+xf(a,"IF")+xf(a,"SF")+xf(a,"ZF")+xf(a,"AF")+xf(a,"PF")+xf(a,"CF")}
var Af={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function Bf(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
18193,33],[65,128],[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]],Fe={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=ve.prototype;
m.Qa=function(a,b,c,d){this.w=b;this.b=c;this.A=a;(a=kc(a,"messages"))&&ze(this,a);this.Na=Ee;Ge(this,function(a){a:{var b=d.w.Y,c=a[0],g=a=0,k=b.length;if(c){a=He(Ie(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.w.pa;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var p=b[g];p.type==c?l++||d.g("..."):(c=p.type,l=yb[c],p&&d.g(n(p.id)+" %"+n(g<<d.w.pa)+" %%"+n(p.G)+" "+t(p.Ib)+" "+
t(p.size)+" "+l),c!=Xb&&(c=-1),l=0);a+=d.w.Ga;g++}}});F(this)};
m.ma=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ia=this.N[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",nc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.F<d.B.length-1&&(b=d.B[++d.F]):40==a.keyCode&&(0<d.F?b=d.B[--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.N[b]=c,Ca(c,function(){if(d.ia){var a=d.ia.value;d.ia.value=
"";nc(d,a,!0);return!0}return!1}),!0;case "step":return this.N[b]=c,Ca(c,function(a){var b=!1;kb(d,!0)||(jb(d,!0),b=d.ub(a?1:0),jb(d,!1));return b}),!0}return!1};m.hb=function(){this.ia&&this.ia.focus()};function He(a){a=a&&a.G;null==a&&(a=-1);return a}m.aa=function(a,b){var c=255,d=He(a);-1!==d&&(c=zb(this.w,d),b&&Je(a,b));return c};m.Sa=function(a,b){var c=65535,d=He(a);-1!==d&&(c=Ab(this.w,d),b&&Je(a,b));return c};m.ta=function(a,b,c){var d=He(a);-1!==d&&(Bb(this.w,d,b),c&&Je(a,c),oc(this.b,!0))};
m.Ub=function(a,b,c){var d=He(a);if(-1!==d){var e=this.w,f=d&e.w,h=(d&e.B)>>>e.pa;f!=e.w?e.Y[h].hc(f,b&65535,d):(e.Y[h++].Jb(f,b&255,d),e.Y[h&e.K].Jb(0,b>>8&255,d+1));c&&Je(a,c);oc(this.b,!0)}};function W(a){return{G:a,Pa:!1}}function Ke(a){return[a.G,a.Pa]}function Le(a){return{G:a[0],Pa:a[1]}}
function Ie(a,b,c){var d;c=(c?a.O:a.ab).G;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.H.length;c++){var f=a.H[c].Ra[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=Ne(a,b,void 0)}null!=c&&(d=W(c));return d}function Oe(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.vd=Pe(a,b.Mc=c[2]))}function Je(a,b){null!=a.G&&(a.G+=b||1)}function X(a){return n(a,4)}
function Qe(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.aa(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function ze(a,b){a.I=a;a.sa=a.wd=536870912;a.ra=null;a.ua=[];var c=Pe(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Fe)0<=qa(c,d)&&(a.sa|=Fe[d],a.g(d+" messages enabled"))}function Ge(a,b){for(var c in Fe)if(64==Fe[c]){a.Ca[c]=b;break}}
function Re(a,b){var c;a=a.toUpperCase();null==b?c=qa(De,a):(c=qa(De,a.substr(b,2)),0>c&&(c=qa(De,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?n(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.T;break;case 1:c=d.U;break;case 8:c=Sc(d);break;case 2:c=d.V;break;case 3:c=d.W;break;case 9:c=Uc(d);break;case 4:c=d.X;break;case 5:c=d.Z;break;case 10:c=J(d);break;case 6:c=d.aa(J(d));break;case 11:c=d.la;break;case 12:c=d.R;break;case 13:c=Qc(d);break;case 14:c=Qc(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+De[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=Ie(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=Ie(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 "+X(W(this.b.R).G));if(this.sa&1073741824)this.ua.push(a);else if(!this.ra||a!=this.ra)if(this.ra=a,this.sa&-2147483648&&(this.na(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.sb=0;c.B-=c.b;c.b=0;oc(c)}};
function hb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.sa&g)!=g||a.message(b.Ya+"."+(null!=d?"outPort":"inPort")+"("+t(c)+","+(f?f:"unknown")+(null!=d?","+da(d):"")+")"+(null!=h?": "+da(h):"")+(null!=e?" at "+X(e):""))}
function ye(a){var b;if(Ed(a)){if(!a.M||!a.M.length){a.M=Array(1E3);for(b=0;b<a.M.length;b++)a.M[b]=W();a.ha=0;a.g("instruction history buffer allocated")}if(!a.K||!a.K.length)for(a.K=Array(256),b=0;b<a.K.length;b++)a.K[b]=[b,0]}else a.M&&a.M.length&&a.g("instruction history buffer freed"),a.ha=0,a.M=[],a.K=[]}m.gb=function(a){if(!Ve(this))return!1;this.b.gb(a);return!0};
m.ub=function(a,b,c){if(!Ve(this))return!1;this.L=0;a||Ed(this)&&Fd(this,this.b.R,0);try{var d=this.b.ub(a);0<d&&(this.L+=d,Fc(this.b,d,!0),Cc(this.b,d),this.ba++)}catch(e){"number"!=typeof e&&(this.L=0,mb(this.b,e.stack||e.message))}!1!==c&&oc(this.b);this.Ia(b||!1);return 0<this.L};m.na=function(a){this.b&&this.b.na(a)};m.Ia=function(a){void 0===a&&(a=!0);this.O=W(this.b.R);a&&1!=this.S?We(this):vf(this)};
function Ve(a){var b;if(b=a.b&&lb(a.b))b=a.b,b.D.va?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!kb(a.b)?(a=a.b,a.D.nb?(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){ye(this);this.ba=this.za=0;this.ra=null;this.L=0;this.O=W(this.b.R);this.D.ya=!1;wf(this);a||this.Ia()};
m.save=function(){var a=new Rc(this);I(a,0,Ke(this.O));I(a,1,Ke(this.da));I(a,2,[this.B,this.ea,this.sa]);I(a,3,this.H);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.O=Le(a[b++]),this.da=Le(a[b++]),this.B=a[b][0],"string"==typeof this.B&&(this.B=[this.B]),this.ea=a[b][1],this.sa|=a[b][2]);a[3]&&(this.H=a[3]);return!0};m.start=function(a,b){this.S||this.g("running");this.D.ya=!0;this.yb=a;this.zb=b};
m.stop=function(a,b){if(this.D.ya){this.D.ya=!1;this.L=b-this.zb;if(!this.S){var c="stopped";if(this.L){var d=a-this.yb,e=0<d?Math.round(1E3*this.L/d):0,c=c+" (";Ed(this)&&(c+=this.ba+" opcodes, ",this.za-=this.ba,this.ba=0);c+=this.L+" cycles, "+d+" ms, "+e+" hz)"}else ib(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Ia(!0);this.hb();wf(this,this.b.R)}};function Ed(a){return 1<a.u.length||!!a.qa}
function Fd(a,b,c){var d=a.b;if(0<c&&(a.qa&&!--a.qa||fc(a,b,1,a.u)))return!0;0<=c&&a.K.length&&(a.ba++,b=zb(a.w,b),null!=b&&(a.K[b][1]++,b=a.M[a.ha],b.G=d.R,b.Pa=!1,++a.ha==a.M.length&&(a.ha=0)));return!1}function Fb(a,b,c){a.g("break on input from port "+t(b)+": "+n(c));a.na(!0)}function Kb(a,b,c){a.g("break on output to port "+t(b)+": "+n(c));a.na(!0)}
function xe(a){var b,c;a.u=["bp"];if(void 0!==a.P)for(b=1;b<a.P.length;b++){c=a.P[b];var d=a.w;gc(d.Y[He(c)>>>d.pa],!1)}a.P=["br"];if(void 0!==a.J)for(b=1;b<a.J.length;b++)c=a.J[b],d=a.w,gc(d.Y[He(c)>>>d.pa],!0);a.J=["bw"];a.ib=0}m.$a=function(a,b,c){var d=!0;c||xf(this,a,b,!1,!0);if(a!=this.u){var e=He(b);if(-1===e)this.g("invalid address: "+X(b.G)),d=!1;else{var f=this.w;f.Y[e>>>f.pa].$a(e&f.w,a==this.J)}}d&&(a.push(b),c?b.Pa=!0:(yf(this,a,a.length-1,"set"),ye(this)));return d};
function xf(a,b,c,d,e){var f=!1;c=He(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==He(g)&&(!d||g.Pa)){f=!0;g.Pa||e||yf(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.w,gc(d.Y[c>>>d.pa],b==a.J));g.Pa||ye(a);break}}return f}function zf(a,b){for(var c=1;c<b.length;c++)yf(a,b,c);return b.length-1}function yf(a,b,c,d){c=b[c];a.g(b[0]+" "+X(c.G)+(d?" "+d:c.Mc?' "'+c.Mc+'"':""))}
function wf(a,b){if(void 0!==b)fc(a,b,1,a.u,!0),a.S=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.Pa){if(!xf(a,a.u,d,!0))break;c=0}}}
function fc(a,b,c,d,e){var f=!1;if(!a.ib++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Pa)for(var k=He(g),l=0;l<c;l++)if(b+l==k){var p,f=!0;g.Pa&&(xf(a,d,g,!0),e=!0);if(p=g.vd){for(var f=!1,q=0;q<p.length;q++)if(!Af(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var v=q+1;v<p.length&&p[v].indexOf("else");v++)q++;if(v==p.length){f=!0;break}}a.b.D.ya||(f=!0)}if(f){e||yf(a,d,h,"hit");break}}}a.ib--;return f}
function Bf(a,b,c,d){for(var e=W(b.G),f=a.aa(b,1),h=a.Na[f],g="",k=(8086!=a.style?Be:Ce)[h[0]],l=h.length-1,p=0,q,v=1;v<=l;v++){var w="";q=h[v];if(void 0!==q&&!(q&16384&&a.style==we)){var r=q&240;if(r){var C=q&15;C?p=C:q|=p;q&61440||(q|=1==v?8192:4096);if(r&32)a:{var w=a,r=q,C=b,y=" ";switch(r&15){case 1:y=n(w.aa(C,1),2);break;case 2:y=n(w.aa(C,1)<<24>>24,4);break;case 3:y=n(w.Sa(C,2),4);break;default:w="imm("+t(r)+")";break a}8086==w.style&&r&64?y="["+y+"]":r&16||(y=(w.style==we?"$":"0x")+y);w=y}else r&
16?(w=(q&3840)>>8,r=De[w],8086==a.style&&q&64&&(6==w&&(r="HL"),r="["+r+"]"),w=r):r&128&&(w=(f>>3&7).toString());if(!w||!w.length){g="INVALID";break}0<g.length&&(g+=",");g+=w||"???"}}}f="";h=X(e.G)+" ";if(-1!==e.G&&-1!==b.G){do if(f+=n(a.aa(e,1),2),null==e.G)break;while(e.G!=b.G)}h+=ka(f,10);h=h+(q&32768?"*":" ")+ka(k,7);g&&(h+=" "+g);c&&(h=ka(h,40)+";"+c,h=a.b.D.mb?h+("cycles="+Dc(a.b).toString()+" cs="+n(a.b.i.Bb)):h+(null!=d?"="+d.toString():""));return h}
function Cf(a,b){var c;switch(b){case "IF":c=a.b.wa&512;break;case "SF":c=bd(a.b);break;case "ZF":c=ad(a.b);break;case "AF":c=$c(a.b);break;case "PF":c=Zc(a.b);break;case "CF":c=Xc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function Df(a,b){return De[b]+"="+Se(a,b)+" "}function Ef(a){return Df(a,7)+Df(a,8)+Df(a,9)+Df(a,10)+Df(a,11)+Cf(a,"IF")+Cf(a,"SF")+Cf(a,"ZF")+Cf(a,"AF")+Cf(a,"PF")+Cf(a,"CF")}
var Ff={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function Gf(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 Ie(a,b,c){var d;if(b){b=He(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var p=l[e++],q=p.length,p=ka(p);if(!p){f=!0;break}p=Cf(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}g.push(p);if(e==l.length)break;var p=l[e++],v=p.length;k.length&&Af[p]<Af[k[k.length-1]]&&Bf(g,k,1);k.push(p);b=b.substr(q+v)}Bf(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Df(a,null,
d))}return d}function He(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Ie(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=De(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Sa(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ca-a.za}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Cf(a,b,c,d){var e;void 0!==b?(e=Me(b),0<=e?e=Oe(a,e):(e=a.ga[b],void 0===e&&(e=ca(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
function Df(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,p="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)p="?"+p;else for(;0<l--;)p=(k&1?"1":"0")+p,k>>=1;h=p+"b"+h;d>>=8}d="0x"+n(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ef(a,b){if(b)return Df(a,b,a.ga[b]);var c=0;for(b in a.ga)Df(a,b,a.ga[b]),c++;return 0<c}qe.prototype.Ya=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Ff(a,b,c){var d=[],e=Ce(b)>>>0;for(b=0;b<a.H.length;b++){var f=a.H[b],h=f.G>>>0,g=f.Gd;if(e>=h&&e<h+g){e=la(f.sc,[e-h],a.Ya);0<=e?Gf(a,b,e,d):c&&(e=~e,Gf(a,b,e-1,d),Gf(a,b,e,d));break}}return d}function Gf(a,b,c,d){var e={},f=a.H[b].sc,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.H[b].Ra[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Hf(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.L)if("clear"==b){for(c=0;c<a.L.length;c++)a.L[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.L.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?we:xe;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Na[h][0]]+" ").substr(0,5)+" ("+("0x"+n(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function If(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ef(a)||a.g("no variables"),!0;if(!c[2])return Ef(a,c[1]);if(!c[3])return delete a.ga[c[1]],!0;var d=Ie(a,c[3]);return void 0!==d?(a.ga[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Jf(a,b,c){var d=null;if(b=De(a,b,!0)){var e=Ff(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.G-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.G)&&(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 Kf(a,b){switch(b[1]){case "8080":a.style=re;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.ob=c;break;case "start":a.b.i.Cb=c;break;case "stop":a.b.i.qb=c;break;default:a.g("unknown cs option");return}void 0!==c&&nc(a.b);a.g("checksums "+(a.b.D.lb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Fc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.bb.toFixed(2)+"Mhz")+
" ("+a.b.i.eb+"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 Re(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=Ie(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.S=g&255;break;case "BC":d.S=g>>8&255;case "C":d.T=g&255;break;case "D":d.U=
g&255;break;case "DE":d.U=g>>8&255;case "E":d.V=g&255;break;case "H":d.W=g&255;break;case "HL":d.W=g>>8&255;case "L":d.Z=g&255;break;case "SP":d.la=g&65535;break;case "PC":G(d,g);a.O=W(d.R);break;case "PS":Nc(d,g);break;case "PSW":Nc(d,g&255|d.va&-256);d.j=g>>8;break;case "CF":d.ba=g?d.ba|256:d.ba&255;break;case "PF":g?Xc(d)||(d.fa^=1):Xc(d)&&(d.fa^=1);break;case "AF":d.wa=g?~d.fa&16|d.wa&-17:d.fa&16|d.wa&-17;break;case "ZF":d.ba=g?d.ba&-256:d.ba|255;break;case "SF":g?$c(d)||(d.fa^=192):$c(d)&&(d.fa^=
192);break;case "IF":d.va=g?d.va|512:d.va&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}Bc(d);a.g("updated registers:")}a.g(zf(a));c&&(a.O=W(d.R),Se(a,Z(a.O.G)))}}function Lf(a,b){b=ka(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Pe(a,c[2])):Ie(a,b,!0)}function Mf(a,b,c){var d="t"!=b;c=Cf(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);za(c,function(){return kb(a,!0)&&a.ub(e,d,!1)},function(){Bc(a.b);kb(a,!1)})}
function Se(a,b,c,d){if(b=De(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=De(a,c,!0);if(!d||d.G<b.G)return;e=d.G-b.G;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=lb(a,!1)||a.X?a.K:null;var h=null!=f?"cycles":null,g=Ff(a,b),k=b.G;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=wf(a,b,h,f);a.g(f);a.O=b;e-=b.G-k;c++}}}
function Ke(a,b,c,d){if(c)if(b){0>a.J&&a.B.length&&(a.J=0);if(0>a.J||b!=a.B[a.J])a.B.splice(0,0,b),a.J=0;a.J--}else a.ea?b="end":b=a.B[a.J+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(ka(b.substring(c,f))),c=f+1}}return a}
function vf(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ea&&(a.g("ended assemble at "+Z(a.da.G)),a.O=a.da,a.ea=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ra=null;if(mb(a)&&0<b.length){a.ea&&(b="a "+Z(a.da.G)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var p=De(a,f[1],!0);if(p)if(a.da=
p,void 0===f[2])a.g("begin assemble at "+Z(p.G)),a.ea=!0,Bc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var v=0;v<q.length;v++)a.ta(p,q[v],1);a.g(wf(a,a.da))}}break;case "b":a:{var w=f[0],r=f[1],C=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 z=w.charAt(1);if("l"==z){var X=0,X=X+uf(a,a.u),X=X+uf(a,a.P);(X+=uf(a,a.F))||a.g("no breakpoints")}else if("n"==z)a.qa=Cf(a,r),a.g("break after "+a.qa+" instruction(s)");else if(void 0===r)a.g("missing breakpoint address");else{var A=W();if("*"!=r&&(A=De(a,r,!0),!A))break a;r=t(A.G);"c"==z?null==A.G?(se(a),a.g("all breakpoints cleared")):sf(a,a.u,A)||sf(a,a.P,A)||
sf(a,a.F,A)||a.g("breakpoint missing: "+Z(A.G)):"i"==z?a.g("breakpoint "+(Db(a.w,A.G)?"enabled":"cleared")+": port "+r+" (input)"):"o"==z?a.g("breakpoint "+(Ib(a.w,A.G)?"enabled":"cleared")+": port "+r+" (output)"):null!=A.G&&(Je(a,A,C),"p"==z?a.Za(a.u,A):"r"==z?a.Za(a.P,A):"w"==z?a.Za(a.F,A):a.g("unknown breakpoint command: "+z))}}}break;case "c":a.Fa&&(a.Fa.value="");break;case "d":a:{var Q,aa=f[0],Y=f[1],va=f[2],Hb=f[3];if("?"==Y){var Ea="";for(Q in Ae)a.Ca[Q]&&(Ea&&(Ea+=","),Ea+=Q);Ea+=",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");Ea.length&&a.g("dump extension commands:\n\t"+Ea)}else if("state"==Y){var Te=Nf(a.A,!0);"console"==va?console.log(Te):(a.Fa&&(a.Fa.value=""),a.g(Te))}else if("symbols"==Y)for(var gd=0;gd<a.H.length;gd++){var hd=a.H[gd],ob;for(ob in hd.Ra)if("."!=ob.charAt(0)){var Ue=hd.Ra[ob].o;
if(void 0!==Ue){var Ve=hd.Ra[ob].l;Ve&&(ob=Ve);a.g(Z(Ue)+" "+ob)}}}else{if("d"==aa){for(Q in Ae)if(f[1]==Q){var We=a.Ca[Q];We?(f.shift(),f.shift(),We(f)):a.g("no dump registered for "+Y);break a}Y||(aa=a.Ab||"db")}else a.Ab=aa;if("dh"==aa){var Xe=Y,Ye=va,Ze="",$e=0,ba=a.ha,Fa=a.N;if(Fa.length){var ga=+Xe||a.ib,pb=+Ye||10;isNaN(ga)?ga=pb:Ze="more ";ga>Fa.length&&(a.g("note: only "+Fa.length+" available"),ga=Fa.length);ba-=ga;0>ba&&(null==Fa[Fa.length-1].G?(ga=ba+ga,ba=0):ba+=Fa.length);var id=[];"call"==
Ye&&(pb=1E5,id=["CALL"]);for(void 0!==Xe&&a.g(ga+" instructions earlier:");0<pb&&ba!=a.ha;){var af=Fa[ba++];if(null==af.G)break;var Lb=W(af.G),gg=ga--,bf=wf(a,Lb,"history",gg);(!id.length||0<=bf.indexOf(id[0]))&&a.g(bf);Lb.Vb&&(ba+=Lb.Vb,pb-=Lb.Vb,ga-=Lb.Vb);ba>=Fa.length&&(ba=0);a.ib=ga;$e++;pb--}}$e||(a.g("no "+Ze+"history available"),a.ib=void 0)}else{var pc=De(a,Y);if(pc){var qc=0;va&&("l"==va.charAt(0)&&(va=va.substr(1)||Hb),qc=Cf(a,va)>>>0,65536<qc&&(qc=65536));for(var Ya="",rc="dd"==aa?4:"dw"==
aa?2:1,sc=rc*qc||128,hg=sc+15>>4||1;hg--&&0<sc;){var tc=0,jd=0,Mb,Nb="",kd="",Y=Z(pc.G);for(Mb=16;0<Mb&&0<sc;Mb--){var uc=a.aa(pc,1),tc=tc|uc<<(jd++<<3);jd==rc&&(Nb+=n(tc,2*rc),Nb+=1==rc?9==Mb?"-":" ":" ",tc=jd=0);kd+=32<=uc&&128>uc?String.fromCharCode(uc):".";sc--}Ya&&(Ya+="\n");Ya+=Y+" "+Nb+(0==Mb?" "+kd:"")}Ya&&a.g(Ya);a.$a=pc}}}}break;case "e":if("else"==f[0])break;var vc=1,cf=255,df=a.aa,ef=a.ta;"ew"==f[0]&&(vc=2,cf=65535,df=a.Sa,ef=a.Ub);var ff=vc<<1,gf=f[1];if(null==gf)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 wc=De(a,gf);if(wc)for(var xc=2;xc<f.length;xc++){var Ob=Ie(a,f[xc]);if(void 0===Ob){a.g("unrecognized value: "+f[xc]);break}Ob&~cf&&a.g("warning: "+n(Ob)+" exceeds "+vc+"-byte value");var ig=df.call(a,wc);a.g("changing "+Z(wc.G)+" from 0x"+n(ig,ff)+" to 0x"+n(Ob,ff));ef.call(a,wc,Ob,vc)}}break;case "f":Hf(a,f[1]);break;case "g":a:{var hf=f[1],jg=b;if(void 0!==hf){var ld=De(a,hf,!0);if(!ld)break a;
Je(a,ld,jg);a.Za(a.u,ld,!0)}a.fb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var md;if(a.D.xa)md="halting",a.na();else{if(lb(a,!0))break a;md="already halted"}c||a.g(md)}break;case "i":if("if"==f[0]){var nd;var Pb=b.substr(2),Pb=ka(Pb);Ie(a,Pb)?(c||a.g("true: "+Pb),nd=!0):(c||a.g("false: "+Pb),nd=!1);nd||(d=!1);break}if("int"==f[0]){var yc;var kg=f[1];if(a.b.va&512){var od=Ie(a,kg);null==od?yc=!1:(a.g("requesting interrupt level "+od),Bd(a.b,od),yc=!0)}else a.g("interrupts disabled (use rif=1 to enable)"),
yc=!1;yc||(d=!1);break}var pd=f[1];if(pd&&"?"!=pd){var qd=Cf(a,pd);if(void 0!==qd){var lg=Fb(a.w,qd);a.g(t(qd)+": "+("0x"+n(lg,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 mg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var rd=0,jf=W(),Qb=W(a.b.la);for(a.g("stack trace for "+Z(Qb.G));10>rd;){for(var Za=null,ng=256;65536>Qb.G>>>0;){jf.G=
a.Sa(Qb,2);if(null==Qb.G||!ng--)break;for(var og=a,zc=jf,kf=null,Rb=zc.G,lf=Rb,sd=1;6>=sd&&Rb;sd++){if(2<sd){zc.G=Rb;var Ac=wf(og,zc);if(0<=Ac.indexOf("CALL")){var mf=Ac.indexOf(" ");if(Rb+(Ac.indexOf(" ",mf+1)-mf-1)/2==lf){kf=Ac;break}}}Rb--}zc.G=lf;if(Za=kf)break}if(!Za||null==Za)break;var nf=null;if("ks"==mg){var of=Za.match(/[0-9A-F]+$/);of&&(nf=Jf(a,of[0]))}Za=ja(Za,50)+" ;"+(nf||"stack="+Z(Qb.G));a.g(Za);rd++}rd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Jf(a,f[1],!0);
break}break;case "m":a:{var Ga,Ha=null,N=f[1];"?"==N&&(N=void 0);if(void 0!==N){var Qa=0;if("all"==N)Qa=1878917119,N=null;else if("on"==N)Ha=!0,N=null;else if("off"==N)Ha=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ga in Ae)if(N==Ga){Qa=Ae[Ga];Ha=!!(a.sa&Qa);break}if(!Qa){a.g("unknown message category: "+N);break a}}if(Qa)if("on"==f[2])a.sa|=Qa,Ha=!0;else if("off"==f[2]&&(a.sa&=~Qa,Ha=!1,1073741824==Qa)){for(var td=0;td<a.ya.length;td++)a.g(a.ya[td]);a.ya=[]}}var pg=0,Ra="";for(Ga in Ae)if(!N||
N==Ga){var qg=!!(a.sa&Ae[Ga]);if(null===Ha||Ha==qg)Ra&&(Ra+=","),++pg%10||(Ra+="\n\t"),"key"==Ga&&(Ga="keys"),Ra+=Ga}void 0===N&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ha?Ha?"messages on: ":"messages off: ":"message categories:\n\t")+(Ra||"none"));te(a)}break;case "o":var ud=f[1],rg=f[2];if(ud&&"?"!=ud){var vd=Cf(a,ud,"port #"),wd=Cf(a,rg);void 0!==vd&&void 0!==wd&&(Kb(a.w,vd,wd),a.g(t(vd)+": "+("0x"+n(wd,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]){Lf(a,b.substr(5));break}var pf="pr"==f[0]?1:0,sg=1+pf;if(a.X)a.g("step in progress");else{var xd=W(a.b.R);switch(a.aa(xd)){case 205:a.X=sg,Ee(xd,3)}a.X?(a.Za(a.u,xd,!0),a.fb()||(a.A&&a.A.gb(),a.X=0)):Mf(a,pf?"tr":"t")}break;case "r":if("reset"==b){a.A&&a.A.reset();break}Re(a,f);break;case "s":Kf(a,f);break;case "t":Mf(a,f[0],f[1]);break;case "u":Se(a,f[1],f[2],8);break;case "v":if("var"==f[0]){If(a,b.substr(3))||
(d=!1);break}a.g("PC8080 version 1.23.3 ("+a.b.Bc+",RELEASE"+(qb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ra());break;case "?":if(f[1]){Lf(a,b.substr(1));break}var Sb="commands:",yd;for(yd in ve)Sb+="\n"+ja(yd,9)+ve[yd];Cd(a)||(Sb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Sb);break;default:a.g("unknown command: "+b),d=!1}}}catch(qf){a.g("debugger error: "+(qf.stack||qf.message)),d=!1}return d}function oc(a,b,c){b=Ke(a,b,c);for(var d in b)if(!vf(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=y(c),d=new qe(d);gb(d,c)}});function H(a,b,c){this.id=a.id;this.key=Of(a,b,c);this.I=a.I;Pf(this,a.Ic)}function Of(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}
H.prototype={constructor:H,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){Pf(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 Pf(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function Qf(a){var b=!0;if(ua()){var c=JSON.stringify(a[a.id]);xa(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Rf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function Sf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:ua()&&(b=wa(a.key))?(a[a.id]=b,a.b=!0):!1}function Tf(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Uf(a,b,c){x.call(this,"Computer",a,Uf,67108864);this.D.ua=!1;Vf(this,b);this.X=lc(this,"autoPower",a);this.B=0;this.ga=a.busWidth||a.buswidth;this.A=Wf;this.O=null;this.L=this.ea=!1;this.ha=lc(this,"url")||"";(Math.random()+.1).toString(36);this.u=Xf(this);if(this.b=db("CPU",this.id)){this.I=db("Debugger",this.id);this.H=[];for(b=null;b=tb(this,"Video",b);)this.H.push(b);this.w=new vb({id:this.Yb+".bus",busWidth:this.ga},this.b,this.I);var d,e=bb(this.id);if((this.J=db("Panel",this.id))&&
this.J.Fa)for(b=0;b<e.length;b++)d=e[b],d.ja=this.J.ja,d.g=this.J.g,d.Fa=this.J.Fa;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.Qa&&d.Qa(this,this.w,this.b,this.I);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.N=d:this.A=parseInt(d,10));var f;if(a=lc(this,"state")||(f=!0,a.state))b=this.ca=a,f||(this.L=!0,this.A=Wf),this.A&&(this.P=new H(this,"1.23.3"),Sf(this.P)?
b=null:delete this.P);!b&&this.A&&(b=Yf(this))&&(this.L=!0);if(b){var h=this;pa(b,null,!0,function(a,b,c){c?(h.N=null,h.L=!1,h.ja("Unable to load machine state from server (error "+c+(b?": "+ka(b):"")+")")):(h.O=b,h.ea=!0);E(h)})}else E(this);this.M.power||(this.X=!0);!c&&this.X&&Zf(this,this.Gb)}else u("Unable to find CPU component")}Xa(Uf);var Wf=0;function Vf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.K=b}
function lc(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 Zf(a,b,c){for(var d=bb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!mb(f)){mb(f,function(){Zf(a,b,c)});return}}b.call(a,c)}
function $f(a,b){var c=new H(a,"1.23.3","validate");if(Sf(c)&&Rf(c)){var d=Tf(c,"timestamp"),e=b?Tf(b,"timestamp"):"unknown";d!=e&&(a.ja("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Uf.prototype;
m.Gb=function(a){void 0===a&&(a=this.A||(this.O?1:Wf));if(!this.B){this.B++;var b=!1,c=!1;this.da=!1;var d=this.P||new H(this,"1.23.3");if(-1==a)b=!0;else if(a>Wf){if(Sf(d,this.O)){this.F=new H(this,"1.23.3","failsafe");Sf(this.F)&&(ag(this,d),a=2,Pf(this.F));I(this.F,"timestamp",na());Qf(this.F);var e=this.A&&!this.L;if(1==a||sa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Rf(d)){var f=Tf(d,"code"),h=Tf(d,"data");f&&("ok"==f?Sf(d,h):("error"==f&&
"no machine state"!=h?(this.ja("Error: "+h),"unable to verify user"==h&&(xa("user",""),this.u=null)):this.g(f+": "+h),Pf(d),Sf(d)?(c=Rf(d),e=!0):c=!1))}e&&$f(this,c?d:null)}else 2==a&&d.clear()}else $f(this);delete this.O;delete this.P}e=bb(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=bg(this,h,d,b,c));b=[d,a,c];-1!=a?Zf(this,this.tc,b):this.tc(b)}};
function bg(a,b,c,d,e){if(!b.D.ua){b.D.ua=!0;if(b.Ea){var f=null;e&&((f=Tf(c,b.id))||(f=Tf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ea(f,d)&&f&&(u("Unable to restore state for "+b.type),a.ca&&!a.ea?(c.clear(),a.A=Wf,window&&window.location.reload()):a.da=!0,b.Ea(null),e=!1)}if(!d&&b.yc)for(a=b.yc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.tc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ia=!0;this.D.ua=!0;var d=this.M.power;d&&(d.textContent="Shutdown");this.b&&(bg(this,this.b,b,c,a),Cc(this.b));this.da&&(ag(this,b),b.clear());!c&&this.F&&(this.F.clear(),delete this.F);this.B=0};
function ag(a,b){if(sa("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.u||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.ha;e.user=c;e.type="bug";e.data=d;pa("http://www.pcjs.org/api/v1/report",e,!0)}}
function Nf(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new H(a,"1.23.3"),h=new H(a,"1.23.3","validate"),g=na();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.23.3");I(f,"url",window?window.location.href:null);I(f,"browser",ra());a.b&&a.b.Ha&&(c&&a.b.na(),d=a.b.Ha(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.D.ua=!1,!1===d&&(e=null)));for(var g=bb(a.id),k=0;k<g.length;k++){var l=g[k];l.D.ua&&(l.Ha&&(d=l.Ha(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.D.ua=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.u&&cg(a,a.u,f.toString()),Qf(h)&&Qf(f)||(e=null,d=g=!0)):a.A&&(d=!0,g=3==a.A),d&&f.clear(g)):e=f.toString());c&&(a.D.ua=!1,b=a.M.power)&&(b.textContent="Power");a.B=0;return e}m.reset=function(){this.w&&this.w.reset&&(ib(this,"Resetting "+this.w.type),this.w.reset());for(var a=bb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.w&&c.reset&&(ib(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=bb(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=bb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.ma=function(a,b,c){var d=this;switch(b){case "power":return this.M[b]=c,c.onclick=function(){d.B||(d.D.ua?Nf(d,!1,!0):Zf(d,d.Gb))},!0;case "reset":return this.M[b]=c,c.onclick=function(){if(d.D.ua&&!d.B)if(d.A&&!d.N){var a=sa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Nf(d,a,!0);!a&&d.ca?window&&window.location.reload():d.Gb(Wf)}else d.reset(),d.b&&Cc(d.b)},!0;case "save":if(fa(qa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.M[b]=c;c.onclick=function(){var a=Xf(d,!0);if(a){var b=!!(d.A&&!d.N||d.ca),c=Nf(d,b);b?cg(d,a,c):d.ja("Resume disabled, machine state not saved")}};return!0}return!1};
function Xf(a,b){var c=a.u;c||(c=wa("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=dg(a,c))||a.ja("The user ID is invalid."))):b&&a.ja("Browser local storage is not available"));return c}
function dg(a,b){a.u=null;var c=pa(qa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(xa("user",c.data),a.u=c.data)}catch(e){u(e.message+" ("+d+")")}return a.u}function Yf(a){var b=null;a.u&&(b=qa()+"/api/v1/user?req=load&user="+a.u+"&state="+Of(a,"1.23.3"));return b}
function cg(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Of(a,"1.23.3");d.data=c;b=pa(qa()+"/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.ja("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.ja(c),xa("user",""),a.u=null)}}
function tb(a,b,c){a=bb(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.gb=function(a){if(this.H.length){var b=0,c=0;a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.H[0];d.Ca&&d.Ca.focus();a&&window&&window.scrollTo(b,c)}};m.Ia=function(a){this.b&&this.b.Ia(a);this.J&&this.J.Ia(a)};function Ic(a,b){for(var c=0;c<a.H.length;c++)Kd(a.H[c],b)}
Ja(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=y(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=y(f),h=new Uf(h,d,!0);gb(h,f);h.X&&Zf(h,h.Gb)}});Ba.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.ia&&!c.D.ua&&c.Gb(-1)}});
Ba.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.D.ua&&Nf(c,!(!c.A||c.N),!0)}});var eg=0;function fg(a,b,c,d,e,f){e("Loading "+a+"...");pa(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):tg(g,a,b,c,d,e,f)})}
function tg(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){ab(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?ug(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function ug(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");pa(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);ug(a,b,c)}})}else c(a,null)}
function vg(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=ia(a))}function f(a){e("Error: "+a);k&&(--eg||Ma(!0));k=!1}var h,g,k=!0;eg++;$a[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));p.appendChild(q)}c||
(c="/versions/pc8080/1.23.3/components.xsl");l=function(d,g){g?fg(c,null,null,!1,e,function(d,k){if(k)if(ab(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--eg||Ma(!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),--eg||Ma(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?fg(b,a,d,!0,e,l):tg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPC8080=function(a,b,c,d){Ma(!1);return vg(a,b,c,d)};window.enableEvents=Ma;window.sendEvent=Na;
function wg(a,b,c,d){if(!c&&b){d.push(b);a=$a[d[0]];b=null;for(var e in a)if(fa(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?pa(b,null,!0,function(a,b){xg(b,d)}):xg(null,d)}else u("Error ("+c+") requesting "+a)}
function xg(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=$a[f],k={},l;for(l in g){var p=g[l],q=ea(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[l]);){var v=d[2];v&&(g[v]||(p=p.replace(d[0],"")))}d=l=da(l)}else"xsl"==q&&(e=l=da(l));k[l]=p}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=ya("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
function Ne(a,b,c){var d;if(b){b=Me(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var p=l[e++],q=p.length,p=la(p);if(!p){f=!0;break}p=Hf(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}g.push(p);if(e==l.length)break;var p=l[e++],v=p.length;k.length&&Ff[p]<Ff[k[k.length-1]]&&Gf(g,k,1);k.push(p);b=b.substr(q+v)}Gf(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&If(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?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=Ie(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Sa(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ba-a.za}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Hf(a,b,c,d){var e;void 0!==b?(e=Re(b),0<=e?e=Te(a,e):(e=a.ga[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 If(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,p="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)p="?"+p;else for(;0<l--;)p=(k&1?"1":"0")+p,k>>=1;h=p+"b"+h;d>>=8}d="0x"+n(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Jf(a,b){if(b)return If(a,b,a.ga[b]);var c=0;for(b in a.ga)If(a,b,a.ga[b]),c++;return 0<c}ve.prototype.Za=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Kf(a,b,c){var d=[],e=He(b)>>>0;for(b=0;b<a.H.length;b++){var f=a.H[b],h=f.G>>>0,g=f.Gd;if(e>=h&&e<h+g){e=na(f.sc,[e-h],a.Za);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.H[b].sc,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.H[b].Ra[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.K)if("clear"==b){for(c=0;c<a.K.length;c++)a.K[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.K.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?Be:Ce;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Na[h][0]]+" ").substr(0,5)+" ("+da(h)+"): "+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.ga[c[1]],!0;var d=Ne(a,c[3]);return void 0!==d?(a.ga[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Of(a,b,c){var d=null;if(b=Ie(a,b,!0)){var e=Kf(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.G-e[1])&&(h=" + "+t(f)),f=e[0]+" ("+X(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.G)&&(h=" - "+t(f)),f=e[4]+" ("+X(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function Pf(a,b){switch(b[1]){case "8080":a.style=we;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.pb=c;break;case "start":a.b.i.Cb=c;break;case "stop":a.b.i.rb=c;break;default:a.g("unknown cs option");return}void 0!==c&&mc(a.b);a.g("checksums "+(a.b.D.mb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Ec(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.cb.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.T=g&255;break;case "BC":d.T=g>>8&255;case "C":d.U=g&255;break;case "D":d.V=
g&255;break;case "DE":d.V=g>>8&255;case "E":d.W=g&255;break;case "H":d.X=g&255;break;case "HL":d.X=g>>8&255;case "L":d.Z=g&255;break;case "SP":d.la=g&65535;break;case "PC":H(d,g);a.O=W(d.R);break;case "PS":Oc(d,g);break;case "PSW":Oc(d,g&255|d.wa&-256);d.j=g>>8;break;case "CF":d.ca=g?d.ca|256:d.ca&255;break;case "PF":g?Zc(d)||(d.fa^=1):Zc(d)&&(d.fa^=1);break;case "AF":d.xa=g?~d.fa&16|d.xa&-17:d.fa&16|d.xa&-17;break;case "ZF":d.ca=g?d.ca&-256:d.ca|255;break;case "SF":g?bd(d)||(d.fa^=192):bd(d)&&(d.fa^=
192);break;case "IF":d.wa=g?d.wa|512:d.wa&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}oc(d);a.g("updated registers:")}a.g(Ef(a));c&&(a.O=W(d.R),vf(a,X(a.O.G)))}}function Qf(a,b){b=la(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=Hf(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ba(c,function(){return jb(a,!0)&&a.ub(e,d,!1)},function(){oc(a.b);jb(a,!1)})}
function vf(a,b,c,d){if(b=Ie(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=Ie(a,c,!0);if(!d||d.G<b.G)return;e=d.G-b.G;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=kb(a,!1)||a.S?a.L:null;var h=null!=f?"cycles":null,g=Kf(a,b),k=b.G;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=Bf(a,b,h,f);a.g(f);a.O=b;e-=b.G-k;c++}}}
function Pe(a,b,c,d){if(c)if(b){0>a.F&&a.B.length&&(a.F=0);if(0>a.F||b!=a.B[a.F])a.B.splice(0,0,b),a.F=0;a.F--}else a.ea?b="end":b=a.B[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(la(b.substring(c,f))),c=f+1}}return a}
function Af(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ea&&(a.g("ended assemble at "+X(a.da.G)),a.O=a.da,a.ea=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ra=null;if(lb(a)&&0<b.length){a.ea&&(b="a "+X(a.da.G)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var p=Ie(a,f[1],!0);if(p)if(a.da=
p,void 0===f[2])a.g("begin assemble at "+X(p.G)),a.ea=!0,oc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var v=0;v<q.length;v++)a.ta(p,q[v],1);a.g(Bf(a,a.da))}}break;case "b":a:{var w=f[0],r=f[1],C=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 y=w.charAt(1);if("l"==y){var Y=0,Y=Y+zf(a,a.u),Y=Y+zf(a,a.P);(Y+=zf(a,a.J))||a.g("no breakpoints")}else if("n"==y)a.qa=Hf(a,r),a.g("break after "+a.qa+" instruction(s)");else if(void 0===r)a.g("missing breakpoint address");else{var A=W();if("*"!=r&&(A=Ie(a,r,!0),!A))break a;r=t(A.G);"c"==y?null==A.G?(xe(a),a.g("all breakpoints cleared")):xf(a,a.u,A)||xf(a,a.P,A)||
xf(a,a.J,A)||a.g("breakpoint missing: "+X(A.G)):"i"==y?a.g("breakpoint "+(Cb(a.w,A.G)?"enabled":"cleared")+": port "+r+" (input)"):"o"==y?a.g("breakpoint "+(Gb(a.w,A.G)?"enabled":"cleared")+": port "+r+" (output)"):null!=A.G&&(Oe(a,A,C),"p"==y?a.$a(a.u,A):"r"==y?a.$a(a.P,A):"w"==y?a.$a(a.J,A):a.g("unknown breakpoint command: "+y))}}}break;case "c":a.Fa&&(a.Fa.value="");break;case "d":a:{var Q,ba=f[0],Z=f[1],wa=f[2],Ib=f[3];if("?"==Z){var Fa="";for(Q in Fe)a.Ca[Q]&&(Fa&&(Fa+=","),Fa+=Q);Fa+=",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");Fa.length&&a.g("dump extension commands:\n\t"+Fa)}else if("state"==Z){var Xe=Sf(a.A,!0);"console"==wa?console.log(Xe):(a.Fa&&(a.Fa.value=""),a.g(Xe))}else if("symbols"==Z)for(var hd=0;hd<a.H.length;hd++){var id=a.H[hd],pb;for(pb in id.Ra)if("."!=pb.charAt(0)){var Ye=id.Ra[pb].o;
if(void 0!==Ye){var Ze=id.Ra[pb].l;Ze&&(pb=Ze);a.g(X(Ye)+" "+pb)}}}else{if("d"==ba){for(Q in Fe)if(f[1]==Q){var $e=a.Ca[Q];$e?(f.shift(),f.shift(),$e(f)):a.g("no dump registered for "+Z);break a}Z||(ba=a.Ab||"db")}else a.Ab=ba;if("dh"==ba){var af=Z,bf=wa,cf="",df=0,ca=a.ha,Ga=a.M;if(Ga.length){var ha=+af||a.jb,qb=+bf||10;isNaN(ha)?ha=qb:cf="more ";ha>Ga.length&&(a.g("note: only "+Ga.length+" available"),ha=Ga.length);ca-=ha;0>ca&&(null==Ga[Ga.length-1].G?(ha=ca+ha,ca=0):ca+=Ga.length);var jd=[];"call"==
bf&&(qb=1E5,jd=["CALL"]);for(void 0!==af&&a.g(ha+" instructions earlier:");0<qb&&ca!=a.ha;){var ef=Ga[ca++];if(null==ef.G)break;var Mb=W(ef.G),lg=ha--,ff=Bf(a,Mb,"history",lg);(!jd.length||0<=ff.indexOf(jd[0]))&&a.g(ff);Mb.Vb&&(ca+=Mb.Vb,qb-=Mb.Vb,ha-=Mb.Vb);ca>=Ga.length&&(ca=0);a.jb=ha;df++;qb--}}df||(a.g("no "+cf+"history available"),a.jb=void 0)}else{var qc=Ie(a,Z);if(qc){var rc=0;wa&&("l"==wa.charAt(0)&&(wa=wa.substr(1)||Ib),rc=Hf(a,wa)>>>0,65536<rc&&(rc=65536));for(var Za="",sc="dd"==ba?4:"dw"==
ba?2:1,tc=sc*rc||128,mg=tc+15>>4||1;mg--&&0<tc;){var uc=0,kd=0,Nb,Ob="",ld="",Z=X(qc.G);for(Nb=16;0<Nb&&0<tc;Nb--){var vc=a.aa(qc,1),uc=uc|vc<<(kd++<<3);kd==sc&&(Ob+=n(uc,2*sc),Ob+=1==sc?9==Nb?"-":" ":" ",uc=kd=0);ld+=32<=vc&&128>vc?String.fromCharCode(vc):".";tc--}Za&&(Za+="\n");Za+=Z+" "+Ob+(0==Nb?" "+ld:"")}Za&&a.g(Za);a.ab=qc}}}}break;case "e":if("else"==f[0])break;var wc=1,gf=255,hf=a.aa,jf=a.ta;"ew"==f[0]&&(wc=2,gf=65535,hf=a.Sa,jf=a.Ub);var kf=wc<<1,lf=f[1];if(null==lf)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 xc=Ie(a,lf);if(xc)for(var yc=2;yc<f.length;yc++){var Pb=Ne(a,f[yc]);if(void 0===Pb){a.g("unrecognized value: "+f[yc]);break}Pb&~gf&&a.g("warning: "+n(Pb)+" exceeds "+wc+"-byte value");var ng=hf.call(a,xc);a.g("changing "+X(xc.G)+" from 0x"+n(ng,kf)+" to 0x"+n(Pb,kf));jf.call(a,xc,Pb,wc)}}break;case "f":Mf(a,f[1]);break;case "g":a:{var mf=f[1],og=b;if(void 0!==mf){var md=Ie(a,mf,!0);if(!md)break a;
Oe(a,md,og);a.$a(a.u,md,!0)}a.gb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var nd;if(a.D.ya)nd="halting",a.na();else{if(kb(a,!0))break a;nd="already halted"}c||a.g(nd)}break;case "i":if("if"==f[0]){var od;var Qb=b.substr(2),Qb=la(Qb);Ne(a,Qb)?(c||a.g("true: "+Qb),od=!0):(c||a.g("false: "+Qb),od=!1);od||(d=!1);break}if("int"==f[0]){var zc;var pg=f[1];if(a.b.wa&512){var pd=Ne(a,pg);null==pd?zc=!1:(a.g("requesting interrupt level "+pd),Dd(a.b,pd),zc=!0)}else a.g("interrupts disabled (use rif=1 to enable)"),
zc=!1;zc||(d=!1);break}var qd=f[1];if(qd&&"?"!=qd){var rd=Hf(a,qd);if(void 0!==rd){var qg=Eb(a.w,rd);a.g(t(rd)+": "+da(qg))}}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 rg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var sd=0,nf=W(),Rb=W(a.b.la);for(a.g("stack trace for "+X(Rb.G));10>sd;){for(var $a=null,sg=256;65536>Rb.G>>>0;){nf.G=
a.Sa(Rb,2);if(null==Rb.G||!sg--)break;for(var tg=a,Ac=nf,of=null,Sb=Ac.G,pf=Sb,td=1;6>=td&&Sb;td++){if(2<td){Ac.G=Sb;var Bc=Bf(tg,Ac);if(0<=Bc.indexOf("CALL")){var qf=Bc.indexOf(" ");if(Sb+(Bc.indexOf(" ",qf+1)-qf-1)/2==pf){of=Bc;break}}}Sb--}Ac.G=pf;if($a=of)break}if(!$a||null==$a)break;var rf=null;if("ks"==rg){var sf=$a.match(/[0-9A-F]+$/);sf&&(rf=Of(a,sf[0]))}$a=ka($a,50)+" ;"+(rf||"stack="+X(Rb.G));a.g($a);sd++}sd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Of(a,f[1],!0);
break}break;case "m":a:{var Ha,Ia=null,N=f[1];"?"==N&&(N=void 0);if(void 0!==N){var Ra=0;if("all"==N)Ra=1878917119,N=null;else if("on"==N)Ia=!0,N=null;else if("off"==N)Ia=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ha in Fe)if(N==Ha){Ra=Fe[Ha];Ia=!!(a.sa&Ra);break}if(!Ra){a.g("unknown message category: "+N);break a}}if(Ra)if("on"==f[2])a.sa|=Ra,Ia=!0;else if("off"==f[2]&&(a.sa&=~Ra,Ia=!1,1073741824==Ra)){for(var ud=0;ud<a.ua.length;ud++)a.g(a.ua[ud]);a.ua=[]}}var ug=0,Sa="";for(Ha in Fe)if(!N||
N==Ha){var vg=!!(a.sa&Fe[Ha]);if(null===Ia||Ia==vg)Sa&&(Sa+=","),++ug%10||(Sa+="\n\t"),"key"==Ha&&(Ha="keys"),Sa+=Ha}void 0===N&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ia?Ia?"messages on: ":"messages off: ":"message categories:\n\t")+(Sa||"none"));ye(a)}break;case "o":var vd=f[1],wg=f[2];if(vd&&"?"!=vd){var wd=Hf(a,vd,"port #"),xd=Hf(a,wg);void 0!==wd&&void 0!==xd&&(Jb(a.w,wd,xd),a.g(t(wd)+": "+da(xd)))}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 tf="pr"==f[0]?1:0,xg=1+tf;if(a.S)a.g("step in progress");else{var yd=W(a.b.R);switch(a.aa(yd)){case 205:a.S=xg,Je(yd,3)}a.S?(a.$a(a.u,yd,!0),a.gb()||(a.A&&a.A.hb(),a.S=0)):Rf(a,tf?"tr":"t")}break;case "r":if("reset"==b){a.A&&a.A.reset();break}We(a,f);break;case "s":Pf(a,f);break;case "t":Rf(a,f[0],f[1]);break;case "u":vf(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.Bc+",RELEASE"+(nb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ta());break;case "?":if(f[1]){Qf(a,b.substr(1));break}var Tb="commands:",zd;for(zd in Ae)Tb+="\n"+ka(zd,9)+Ae[zd];Ed(a)||(Tb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Tb);break;default:a.g("unknown command: "+b),d=!1}}}catch(uf){a.g("debugger error: "+(uf.stack||uf.message)),d=!1}return d}function nc(a,b,c){b=Pe(a,b,c);for(var d in b)if(!Af(a,b[d]))return!1;return!0}
La(function(){for(var a=B(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new ve(d);gb(d,c)}});function Rc(a,b,c){this.id=a.id;this.key=Tf(a,b,c);this.I=a.I;Uf(this,a.Ic)}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}
Rc.prototype={constructor:Rc,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&&I(a,"parms",b);a.b=!1}function Vf(a){var b=!0;if(xa()){var c=JSON.stringify(a[a.id]);za(a.key,c)||(u("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){u(c.message||c),b=!1}return b}function Xf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:xa()&&(b=ya(a.key))?(a[a.id]=b,a.b=!0):!1}function Yf(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Zf(a,b,c){x.call(this,"Computer",a,Zf,67108864);this.D.va=!1;$f(this,b);this.S=kc(this,"autoPower",a);this.B=0;this.ga=a.busWidth||a.buswidth;this.A=ag;this.O=null;this.K=this.ea=!1;this.ha=kc(this,"url")||"";(Math.random()+.1).toString(36);this.u=bg(this);if(this.b=fb("CPU",this.id)){this.I=fb("Debugger",this.id);this.H=[];for(b=null;b=sb(this,"Video",b);)this.H.push(b);this.w=new ub({id:this.Yb+".bus",busWidth:this.ga},this.b,this.I);var d,e=db(this.id);if((this.F=fb("Panel",this.id))&&
this.F.Fa)for(b=0;b<e.length;b++)d=e[b],d.ja=this.F.ja,d.g=this.F.g,d.Fa=this.F.Fa;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.Qa&&d.Qa(this,this.w,this.b,this.I);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.M=d:this.A=parseInt(d,10));var f;if(a=kc(this,"state")||(f=!0,a.state))b=this.ba=a,f||(this.K=!0,this.A=ag),this.A&&(this.P=new Rc(this,"1.23.3"),Xf(this.P)?
b=null:delete this.P);!b&&this.A&&(b=cg(this))&&(this.K=!0);if(b){var h=this;ra(b,null,!0,function(a,b,c){c?(h.M=null,h.K=!1,h.ja("Unable to load machine state from server (error "+c+(b?": "+la(b):"")+")")):(h.O=b,h.ea=!0);F(h)})}else F(this);this.N.power||(this.S=!0);!c&&this.S&&dg(this,this.Gb)}else u("Unable to find CPU component")}ab(Zf);var ag=0;function $f(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.L=b}
function kc(a,b,c){var d=b.toLowerCase(),d=Ua[b]||Ua[d];void 0===d&&a.L&&(d=a.L[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function dg(a,b,c){for(var d=db(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!lb(f)){lb(f,function(){dg(a,b,c)});return}}b.call(a,c)}
function eg(a,b){var c=new Rc(a,"1.23.3","validate");if(Xf(c)&&Wf(c)){var d=Yf(c,"timestamp"),e=b?Yf(b,"timestamp"):"unknown";d!=e&&(a.ja("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.Gb=function(a){void 0===a&&(a=this.A||(this.O?1:ag));if(!this.B){this.B++;var b=!1,c=!1;this.da=!1;var d=this.P||new Rc(this,"1.23.3");if(-1==a)b=!0;else if(a>ag){if(Xf(d,this.O)){this.J=new Rc(this,"1.23.3","failsafe");Xf(this.J)&&(fg(this,d),a=2,Uf(this.J));I(this.J,"timestamp",pa());Vf(this.J);var e=this.A&&!this.K;if(1==a||ua("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.ja("Error: "+h),"unable to verify user"==h&&(za("user",""),this.u=null)):this.g(f+": "+h),Uf(d),Xf(d)?(c=Wf(d),e=!0):c=!1))}e&&eg(this,c?d:null)}else 2==a&&d.clear()}else eg(this);delete this.O;delete this.P}e=db(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=gg(this,h,d,b,c));b=[d,a,c];-1!=a?dg(this,this.tc,b):this.tc(b)}};
function gg(a,b,c,d,e){if(!b.D.va){b.D.va=!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&&(u("Unable to restore state for "+b.type),a.ba&&!a.ea?(c.clear(),a.A=ag,window&&window.location.reload()):a.da=!0,b.Ea(null),e=!1)}if(!d&&b.yc)for(a=b.yc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.tc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ia=!0;this.D.va=!0;var d=this.N.power;d&&(d.textContent="Shutdown");this.b&&(gg(this,this.b,b,c,a),pc(this.b));this.da&&(fg(this,b),b.clear());!c&&this.J&&(this.J.clear(),delete this.J);this.B=0};
function fg(a,b){if(ua("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.u||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.ha;e.user=c;e.type="bug";e.data=d;ra("http://www.pcjs.org/api/v1/report",e,!0)}}
function Sf(a,b,c){var d,e="none";if(a.B)return null;a.B--;var f=new Rc(a,"1.23.3"),h=new Rc(a,"1.23.3","validate"),g=pa();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.23.3");I(f,"url",window?window.location.href:null);I(f,"browser",ta());a.b&&a.b.Ha&&(c&&a.b.na(),d=a.b.Ha(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.D.va=!1,!1===d&&(e=null)));for(var g=db(a.id),k=0;k<g.length;k++){var l=g[k];l.D.va&&(l.Ha&&(d=l.Ha(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.D.va=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.u&&hg(a,a.u,f.toString()),Vf(h)&&Vf(f)||(e=null,d=g=!0)):a.A&&(d=!0,g=3==a.A),d&&f.clear(g)):e=f.toString());c&&(a.D.va=!1,b=a.N.power)&&(b.textContent="Power");a.B=0;return e}m.reset=function(){this.w&&this.w.reset&&(E(this,"Resetting "+this.w.type),this.w.reset());for(var a=db(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.w&&c.reset&&(E(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=db(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=db(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.ma=function(a,b,c){var d=this;switch(b){case "power":return this.N[b]=c,c.onclick=function(){d.B||(d.D.va?Sf(d,!1,!0):dg(d,d.Gb))},!0;case "reset":return this.N[b]=c,c.onclick=function(){if(d.D.va&&!d.B)if(d.A&&!d.M){var a=ua("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.ba?window&&window.location.reload():d.Gb(ag)}else d.reset(),d.b&&pc(d.b)},!0;case "save":if(ga(sa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.N[b]=c;c.onclick=function(){var a=bg(d,!0);if(a){var b=!!(d.A&&!d.M||d.ba),c=Sf(d,b);b?hg(d,a,c):d.ja("Resume disabled, machine state not saved")}};return!0}return!1};
function bg(a,b){var c=a.u;c||(c=ya("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=ig(a,c))||a.ja("The user ID is invalid."))):b&&a.ja("Browser local storage is not available"));return c}
function ig(a,b){a.u=null;var c=ra(sa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(za("user",c.data),a.u=c.data)}catch(e){u(e.message+" ("+d+")")}return a.u}function cg(a){var b=null;a.u&&(b=sa()+"/api/v1/user?req=load&user="+a.u+"&state="+Tf(a,"1.23.3"));return b}
function hg(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Tf(a,"1.23.3");d.data=c;b=ra(sa()+"/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.ja("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.ja(c),za("user",""),a.u=null)}}
function sb(a,b,c){a=db(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.hb=function(a){if(this.H.length){var b=0,c=0;a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.H[0];d.Ca&&d.Ca.focus();a&&window&&window.scrollTo(b,c)}};m.Ia=function(a){this.b&&this.b.Ia(a);this.F&&this.F.Ia(a)};function Jc(a,b){for(var c=0;c<a.H.length;c++)Md(a.H[c],b)}
La(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=z(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=z(f),h=new Zf(h,d,!0);gb(h,f);h.S&&dg(h,h.Gb)}});Da.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=fb("Computer",c.id))&&c.ia&&!c.D.va&&c.Gb(-1)}});
Da.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=fb("Computer",c.id))&&c.D.va&&Sf(c,!(!c.A||c.M),!0)}});var jg=0;function kg(a,b,c,d,e,f){e("Loading "+a+"...");ra(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):yg(g,a,b,c,d,e,f)})}
function yg(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){cb(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?zg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function zg(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ra(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);zg(a,b,c)}})}else c(a,null)}
function Ag(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=ja(a))}function f(a){e("Error: "+a);k&&(--jg||Oa(!0));k=!1}var h,g,k=!0;jg++;bb[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));p.appendChild(q)}c||
(c="/versions/pc8080/1.23.3/components.xsl");l=function(d,g){g?kg(c,null,null,!1,e,function(d,k){if(k)if(cb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--jg||Oa(!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),--jg||Oa(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?kg(b,a,d,!0,e,l):yg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(v){f(v.message)}return k}window.embedPC8080=function(a,b,c,d){Oa(!1);return Ag(a,b,c,d)};window.enableEvents=Oa;window.sendEvent=Pa;
function Bg(a,b,c,d){if(!c&&b){d.push(b);a=bb[d[0]];b=null;for(var e in a)if(ga(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?ra(b,null,!0,function(a,b){Cg(b,d)}):Cg(null,d)}else u("Error ("+c+") requesting "+a)}
function Cg(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=bb[f],k={},l;for(l in g){var p=g[l],q=fa(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[l]);){var v=d[2];v&&(g[v]||(p=p.replace(d[0],"")))}d=l=ea(l)}else"xsl"==q&&(e=l=ea(l));k[l]=p}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=Aa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",u(c)):u("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=db("Computer",a),e=db("Debugger",a);if(d){var f=Nf(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,Ic:h}))return!0;pa(b,null,!0,function(c,d,e){wg(c,d,e,[a,da(b,!0),h,f])});return!0}u("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=fb("Computer",a),e=fb("Debugger",a);if(d){var f=Sf(d,!0),h=d.L?JSON.stringify(d.L):null;b||(b="/versions/pcjs/1.23.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Ic:h}))return!0;ra(b,null,!0,function(c,d,e){Bg(c,d,e,[a,ea(b,!0),h,f])});return!0}u("Unable to identify machine '"+a+"'");return!1};})();

View file

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