Added scaffolding for PC8080 SerialPort

This commit is contained in:
Jeff Parsons 2016-08-08 15:25:57 -07:00
commit d31bfb0e6e
11 changed files with 1075 additions and 445 deletions

View file

@ -6,7 +6,7 @@
<cpu id="cpu8080" model="8080" cycles="2764800"/>
<rom id="rom" addr="0x0000" size="0x2000" file="/devices/pc8080/rom/vt100/VT100.json"/>
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="960" smoothing="false"
<video id="video" screenWidth="1600" screenHeight="960" smoothing="false" interruptRate="60"
fontROM="/devices/pc8080/rom/vt100/23-018E2.json" fontColor="white" cellWidth="10" cellHeight="10"
bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" pos="left" padding="8px">
<menu>
@ -25,6 +25,7 @@
</video>
<chipset id="chipset" model="VT100"/>
<keyboard id="keyboard" model="VT100"/>
<serial id="serial0" adapter="0"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger" messages="mem" commands="s 8086"/>
<debugger id="debugger" messages="mem|port|keyboard" commands="s 8086"/>
</machine>

View file

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

View file

@ -15,8 +15,9 @@ The combined contents of those ROMs have been stored as an 8Kb JSON image in [VT
As Trammell Hudson's [VT100 Page](https://trmm.net/VT100) explains:
There are four 8316E ROM chips for the 8080 CPU on the logic board. Since they are custom mask ROMs,
Digital was able to have a different chip-select bit pattern and avoided having separate NOT gates on the inputs.
Note that the schematic appears to be incorrect -- E56 is the low order, and E40 is the high order address bits.
Digital was able to have a different chip-select bit pattern and avoided having separate NOT gates on
the inputs. Note that the schematic appears to be incorrect -- E56 is the low order, and E40 is the
high order address bits.
He then describes the memory map as follows:
@ -67,8 +68,8 @@ and passed on to the PC8080 Debugger. Here are the rebuild steps:
grep -E "[0-9]+ [0-9A-D]+.*;;" VT100.lst | sed -E "s/ *[0-9]+ ([0-9A-F]+).*;(;.*)/ \1 . \2/" > VT100.map
filedump --file=VT100.bin --format=bytes --output=VT100.json --comments --overwrite
You can omit `--comments` to reduce the size of the [VT100.json](VT100.json) file.
You can omit `--comments` from the filedump command to reduce the size of the [VT100.json](VT100.json) file.
Some [VT100.asm](VT100.asm) clean-up remains, because there are still chunks of data that were incorrectly disassembled as code.
From a reassembly standpoint, it doesn't matter too much, because such instructions get reassembled into the same original binary
patterns, but from a readability standpoint, it's a nuisance.
From a reassembly standpoint, it doesn't matter too much, because all the 8080 instructions unambiguously reassemble into their
original binary patterns, but from a readability standpoint, it's a nuisance.

View file

@ -212,9 +212,19 @@ X00f5: push d
pop d
jmp X0875
;;
;; Keyboard interrupt handler
;;
;
; Keyboard interrupt handler
;
; The "Keys Flag Byte/Buffer" at 0x2068 contains the following bits:
;
; 0-1 Key counter
; 2 Key counter overflow bit
; 3 Setup
; 4 Control
; 5 Shift
; 6 Caps Lock
; 7 Last Key
;
X00fd: push psw
in 82h ;; Read from keyboard port
push h

View file

@ -206,7 +206,7 @@ ChipSet.VT100 = {
MODEL: 100.0,
FLAGS_BUFFER: {
PORT: 0x42, // read-only
XMIT: 0x01, // active if SET
XMIT: 0x01, // PUSART transmit buffer empty if SET
NO_AVO: 0x02, // AVO present if CLEAR
NO_GFX: 0x04, // VT125 graphics board present if CLEAR
OPTION: 0x08, // OPTION present if SET
@ -841,7 +841,7 @@ ChipSet.prototype.inVT100FlagsBuffer = function(port, addrFrom)
b |= ChipSet.VT100.FLAGS_BUFFER.NVR_DATA;
}
this.bFlagsBuffer = b;
this.printMessageIO(port, null, addrFrom, "FLAGS.BUFFER", b, true);
this.printMessageIO(port, null, addrFrom, "FLAGS.BUFFER", b);
return b;
};
@ -855,7 +855,7 @@ ChipSet.prototype.inVT100FlagsBuffer = function(port, addrFrom)
*/
ChipSet.prototype.outVT100Brightness = function(port, b, addrFrom)
{
this.printMessageIO(port, b, addrFrom, "BRIGHTNESS", null, true);
this.printMessageIO(port, b, addrFrom, "BRIGHTNESS");
this.bBrightness = b;
};
@ -869,7 +869,7 @@ ChipSet.prototype.outVT100Brightness = function(port, b, addrFrom)
*/
ChipSet.prototype.outVT100NVRLatch = function(port, b, addrFrom)
{
this.printMessageIO(port, b, addrFrom, "NVR.LATCH", null, true);
this.printMessageIO(port, b, addrFrom, "NVR.LATCH");
this.bNVRLatch = b;
};
@ -883,7 +883,7 @@ ChipSet.prototype.outVT100NVRLatch = function(port, b, addrFrom)
*/
ChipSet.prototype.outVT100DC012 = function(port, b, addrFrom)
{
this.printMessageIO(port, b, addrFrom, "DC012", null, true);
this.printMessageIO(port, b, addrFrom, "DC012");
this.bDC012 = b;
};
@ -897,7 +897,7 @@ ChipSet.prototype.outVT100DC012 = function(port, b, addrFrom)
*/
ChipSet.prototype.outVT100DC011 = function(port, b, addrFrom)
{
this.printMessageIO(port, b, addrFrom, "DC011", null, true);
this.printMessageIO(port, b, addrFrom, "DC011");
this.bDC011 = b;
};

View file

@ -277,6 +277,19 @@ Keyboard.SI1978 = {
Keyboard.VT100 = {
MODEL: 100.0,
SOFTCODES: {},
/*
* Reading port 0x82 returns a key address from the VT100 keyboard's UART data output.
*
* Every time a keyboard scan is initiated (by setting the START bit of the status byte),
* an internal address index is reset to zero, and an interrupt is generated for each entry
* in the aKeysPressed array, along with a final interrupt for KEYLAST.
*/
ADDRESS: {
PORT: 0x82
},
/*
* Writing port 0x82 updates the VT100's keyboard status byte via the keyboard's UART data input.
*/
STATUS: {
PORT: 0x82, // write-only
LED4: 0x01,
@ -299,7 +312,8 @@ Keyboard.VT100 = {
*/
CLICK: 0x80,
INIT: 0x00
}
},
KEYLAST: 0x7F
};
Keyboard.VT100.KEYMAP = {};
@ -501,6 +515,7 @@ Keyboard.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
*/
Keyboard.prototype.initBus = function(cmp, bus, cpu, dbg)
{
this.cpu = cpu;
this.dbg = dbg; // NOTE: The "dbg" property must be set for the message functions to work
this.chipset = cmp.getMachineComponent("ChipSet");
bus.addPortInputTable(this, this.config.portsInput);
@ -542,7 +557,8 @@ Keyboard.prototype.powerDown = function(fSave, fShutdown)
Keyboard.VT100.INIT = [
[
Keyboard.VT100.STATUS.INIT
Keyboard.VT100.STATUS.INIT,
0 // iKeyNext
]
];
@ -554,14 +570,16 @@ Keyboard.VT100.INIT = [
Keyboard.prototype.reset = function()
{
/*
* As keyDown events are encountered, a corresponding "softcode" property in keysPressed
* is set to the timestamp of the keyDown event. When the corresponding keyUp event occurs,
* we look at the elapsed time: if it is less than MINPRESSTIME, then we move the key
* to keysToRelease and set a timeout handler to release the key later; otherwise, we process
* the keyUp event immediately.
* As keyDown events are encountered, a corresponding "softCode" is looked up. If one is found,
* then an entry for the key is added to the aKeysPressed array. Each entry contains:
*
* softCode: number or string representing the key pressed
* msDown: timestamp of the most recent "down" event
* fAutoRelease: true to auto-release the key after MINPRESSTIME (set when "up" occurs too quickly)
*
* When the key is finally released (or auto-released), its entry is removed from the array.
*/
this.keysPressed = {};
this.keysToRelease = {};
this.aKeysPressed = [];
if (this.config.INIT && !this.restore(this.config.INIT)) {
this.notice("reset error");
@ -609,6 +627,7 @@ Keyboard.prototype.restore = function(data)
case Keyboard.VT100.MODEL:
this.bVT100Status = a[0];
this.updateLEDs(this.bVT100Status & Keyboard.VT100.STATUS.LEDS);
this.iKeyNext = a[1];
return true;
}
}
@ -656,12 +675,17 @@ Keyboard.prototype.updateLEDs = function(bLEDs)
/**
* getSoftCode(keyCode)
*
* Returns a number if the keyCode exists in the KEYMAP, or a string if the keyCode has a soft-code string.
*
* @this {Keyboard}
* @return {string|null}
* @return {string|number|null}
*/
Keyboard.prototype.getSoftCode = function(keyCode)
{
keyCode = Keyboard.ALTCODES[keyCode] || keyCode;
if (this.config.KEYMAP[keyCode]) {
return keyCode;
}
for (var sSoftCode in this.config.SOFTCODES) {
if (this.config.SOFTCODES[sSoftCode] === keyCode) {
return sSoftCode;
@ -682,10 +706,10 @@ Keyboard.prototype.onKeyDown = function(event, fDown)
{
var fPass = true;
var keyCode = event.keyCode;
var sSoftCode = this.getSoftCode(keyCode);
var softCode = this.getSoftCode(keyCode);
if (sSoftCode) {
fPass = this.onSoftKeyDown(sSoftCode, fDown);
if (softCode) {
fPass = this.onSoftKeyDown(softCode, fDown);
event.preventDefault();
}
@ -697,36 +721,65 @@ Keyboard.prototype.onKeyDown = function(event, fDown)
};
/**
* onSoftKeyDown(sSoftCode, fDown)
* indexOfSoftKey(softCode)
*
* @this {Keyboard}
* @param {string} sSoftCode
* @param {number|string} softCode
* @return {number} index of softCode in aKeysPressed, or -1 if not found
*/
Keyboard.prototype.indexOfSoftKey = function(softCode)
{
var i;
for (i = 0; i < this.aKeysPressed.length; i++) {
if (this.aKeysPressed[i].softCode == softCode) return i;
}
return -1;
};
/**
* onSoftKeyDown(softCode, fDown)
*
* @this {Keyboard}
* @param {number|string} softCode
* @param {boolean} fDown is true for a down event, false for up
* @return {boolean} true to pass the event along, false to consume it
*/
Keyboard.prototype.onSoftKeyDown = function(sSoftCode, fDown)
Keyboard.prototype.onSoftKeyDown = function(softCode, fDown)
{
var i = this.indexOfSoftKey(softCode);
if (fDown) {
// this.println(sSoftCode + " down");
this.keysPressed[sSoftCode] = Date.now();
delete this.keysToRelease[sSoftCode];
} else {
// this.println(sSoftCode + " up");
var msDown = this.keysPressed[sSoftCode];
if (msDown) {
var msElapsed = Date.now() - msDown;
if (msElapsed < Keyboard.MINPRESSTIME) {
// this.println(sSoftCode + " released after only " + msElapsed + "ms");
this.keysToRelease[sSoftCode] = msDown;
this.checkSoftKeysToRelease();
return true;
// this.println(softCode + " down");
if (i < 0) {
this.aKeysPressed.push({
softCode: softCode,
msDown: Date.now(),
fAutoRelease: false
});
} else {
this.aKeysPressed[i].msDown = Date.now();
this.aKeysPressed[i].fAutoRelease = false;
}
} else if (i >= 0) {
// this.println(softCode + " up");
if (!this.aKeysPressed[i].fAutoRelease) {
var msDown = this.aKeysPressed[i].msDown;
if (msDown) {
var msElapsed = Date.now() - msDown;
if (msElapsed < Keyboard.MINPRESSTIME) {
// this.println(softCode + " released after only " + msElapsed + "ms");
this.aKeysPressed[i].fAutoRelease = true;
this.checkSoftKeysToRelease();
return true;
}
}
}
delete this.keysPressed[sSoftCode];
this.aKeysPressed.splice(i, 1);
} else {
// this.println(softCode + " up with no down?");
}
if (this.chipset) {
switch(sSoftCode) {
switch(softCode) {
case '1p':
this.chipset.updateStatus1(ChipSet.SI1978.STATUS1.P1, fDown);
break;
@ -762,21 +815,30 @@ Keyboard.prototype.onSoftKeyDown = function(sSoftCode, fDown)
*/
Keyboard.prototype.checkSoftKeysToRelease = function()
{
var i = 0;
var msDelayMin = -1;
var asSoftCodes = Object.keys(this.keysToRelease);
for (var i = 0; i < asSoftCodes.length; i++) {
var sSoftCode = asSoftCodes[i];
var msDown = this.keysToRelease[sSoftCode];
var msElapsed = Date.now() - msDown;
var msDelay = Keyboard.MINPRESSTIME - msElapsed;
if (msDelay > 0) {
if (msDelayMin < 0 || msDelayMin > msDelay) {
msDelayMin = msDelay;
while (i < this.aKeysPressed.length) {
if (this.aKeysPressed[i].fAutoRelease) {
var softCode = this.aKeysPressed[i].softCode;
var msDown = this.aKeysPressed[i].msDown;
var msElapsed = Date.now() - msDown;
var msDelay = Keyboard.MINPRESSTIME - msElapsed;
if (msDelay > 0) {
if (msDelayMin < 0 || msDelayMin > msDelay) {
msDelayMin = msDelay;
}
} else {
/*
* Because the key is already in the auto-release state, this next call guarantees that the
* key will be removed from the array; a consequence of that removal, however, is that we must
* reset our array index to zero.
*/
this.onSoftKeyDown(softCode, false);
i = 0;
continue;
}
} else {
delete this.keysToRelease[sSoftCode];
this.onSoftKeyDown(sSoftCode, false);
}
i++;
}
if (msDelayMin >= 0) {
var kbd = this;
@ -784,6 +846,26 @@ Keyboard.prototype.checkSoftKeysToRelease = function()
}
};
/**
* inVT100UARTAddress(port, addrFrom)
*
* @this {Keyboard}
* @param {number} port (0x82)
* @param {number} [addrFrom] (not defined if the Debugger is trying to write the specified port)
* @return {number} simulated port value
*/
Keyboard.prototype.inVT100UARTAddress = function(port, addrFrom)
{
var b = 0;
if (this.iKeyNext >= 0 && this.iKeyNext < this.aKeysPressed.length - 1) {
var softCode = this.aKeysPressed[this.iKeyNext++];
b = Keyboard.VT100.KEYMAP[softCode];
}
if (!b) b = Keyboard.VT100.KEYLAST;
this.printMessageIO(port, null, addrFrom, "KBDUART.ADDRESS", b);
return b;
};
/**
* outVT100UARTStatus(port, b, addrFrom)
*
@ -794,20 +876,20 @@ Keyboard.prototype.checkSoftKeysToRelease = function()
*/
Keyboard.prototype.outVT100UARTStatus = function(port, b, addrFrom)
{
this.printMessageIO(port, b, addrFrom, "KBDUART.STATUS", null, true);
this.printMessageIO(port, b, addrFrom, "KBDUART.STATUS");
this.bVT100Status = b;
this.updateLEDs(b & Keyboard.VT100.STATUS.LEDS);
/*
if (b & Keyboard.VT100.STATUS.START) {
console.log("keyboard scan initiated");
this.iKeyNext = 0;
this.cpu.requestINTR(1);
}
*/
};
/*
* Port notification tables
*/
Keyboard.VT100.portsInput = {
0x82: Keyboard.prototype.inVT100UARTAddress
};
Keyboard.VT100.portsOutput = {

View file

@ -0,0 +1,519 @@
/**
* @fileoverview Implements the PC8080 SerialPort component.
* @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a>
* @version 1.0
* Created 2016-Aug-08
*
* Copyright © 2012-2016 Jeff Parsons <Jeff@pcjs.org>
*
* This file is part of PCjs, a computer emulation software project at <http://pcjs.org/>.
*
* PCjs is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with PCjs. If not,
* see <http://www.gnu.org/licenses/gpl.html>.
*
* You are required to include the above copyright notice in every source code file of every
* copy or modified version of this work, and to display that copyright notice on every screen
* that loads or runs any version of this software (see COPYRIGHT in /modules/shared/lib/defines.js).
*
* Some PCjs files also attempt to load external resource files, such as character-image files,
* ROM files, and disk image files. Those external resource files are not considered part of PCjs
* for purposes of the GNU General Public License, and the author does not claim any copyright
* as to their contents.
*/
"use strict";
if (NODE) {
var str = require("../../shared/lib/strlib");
var web = require("../../shared/lib/weblib");
var Component = require("../../shared/lib/component");
var Messages = require("./messages");
var ChipSet = require("./chipset");
var State = require("./state");
}
/**
* SerialPort(parmsSerial)
*
* The SerialPort component has the following component-specific (parmsSerial) properties:
*
* adapter: 0 if not defined
*
* binding: name of a control (based on its "binding" attribute) to bind to this port's I/O
*
* tabSize: set to a non-zero number to convert tabs to spaces (applies only to output to
* the above binding); default is 0 (no conversion)
*
* In the future, we may support 'port' and 'irq' properties that allow the machine to define a
* non-standard serial port configuration, instead of only our pre-defined 'adapter' configurations.
*
* NOTE: Since the XSL file defines 'adapter' as a number, not a string, there's no need to use
* parseInt(), and as an added benefit, we don't need to worry about whether a hex or decimal format
* was used.
*
* @constructor
* @extends Component
* @param {Object} parmsSerial
*/
function SerialPort(parmsSerial) {
this.iAdapter = +parmsSerial['adapter'];
switch (this.iAdapter) {
case 0:
this.portBase = 0;
this.nIRQ = 2;
break;
default:
Component.warning("Unrecognized serial adapter #" + this.iAdapter);
return;
}
/**
* consoleOutput becomes a string that records serial port output if the 'binding' property is set to the
* reserved name "console". Nothing is written to the console, however, until a linefeed (0x0A) is output
* or the string length reaches a threshold (currently, 1024 characters).
*
* @type {string|null}
*/
this.consoleOutput = null;
/**
* controlIOBuffer is a DOM element, if any, bound to the port (currently used for output only; see echoByte()).
*
* @type {Object}
*/
this.controlIOBuffer = null;
/*
* If controlIOBuffer is being used AND 'tabSize' is set, then we make an attempt to monitor the characters
* being echoed via echoByte(), maintain a logical column position, and convert any tabs into the appropriate
* number of spaces.
*
* charBOL, if nonzero, is a character to automatically output at the beginning of every line. This probably
* isn't generally useful; I use it internally to preformat serial output.
*/
this.tabSize = parmsSerial['tabSize'];
this.charBOL = parmsSerial['charBOL'];
this.iLogicalCol = 0;
Component.call(this, "SerialPort", parmsSerial, SerialPort, Messages.SERIAL);
var sBinding = parmsSerial['binding'];
if (sBinding == "console") {
this.consoleOutput = "";
} else {
/*
* NOTE: If sBinding is not the name of a valid Control Panel DOM element, this call does nothing.
*/
Component.bindExternalControl(this, sBinding, SerialPort.sIOBuffer);
}
}
/*
* class SerialPort
* property {number} iAdapter
* property {number} portBase
* property {number} nIRQ
* property {Object} controlIOBuffer is a DOM element, if any, bound to the port (for rudimentary output; see echoByte())
*
* NOTE: This class declaration started as a way of informing the code inspector of the controlIOBuffer property,
* which remained undefined until a setBinding() call set it later, but I've since decided that explicitly
* initializing such properties in the constructor is a better way to go -- even though it's more code -- because
* JavaScript compilers are supposed to be happier when the underlying object structures aren't constantly changing.
*
* Besides, I'm not sure I want to get into documenting every property this way, for this or any/every other class,
* let alone getting into which ones should be considered private or protected, because PCjs isn't really a library
* for third-party apps.
*/
Component.subclass(SerialPort);
/*
* Internal name used for the I/O buffer control, if any, that we bind to the SerialPort.
*
* Alternatively, if SerialPort wants to use another component's control (eg, the Panel's
* "print" control), it can specify the name of that control with the 'binding' property.
*
* For that binding to succeed, we also need to know the target component; for now, that's
* been hard-coded to "Panel", in part because that's one of the few components we can rely
* upon initializing before we do, but it would be a simple matter to include a component type
* or ID as part of the 'binding' property as well, if we need more flexibility later.
*/
SerialPort.sIOBuffer = "buffer";
/**
* setBinding(sHTMLType, sBinding, control, sValue)
*
* @this {SerialPort}
* @param {string|null} sHTMLType is the type of the HTML control (eg, "button", "list", "text", "submit", "textarea", "canvas")
* @param {string} sBinding is the value of the 'binding' parameter stored in the HTML control's "data-value" attribute (eg, "buffer")
* @param {Object} control is the HTML control DOM object (eg, HTMLButtonElement)
* @param {string} [sValue] optional data value
* @return {boolean} true if binding was successful, false if unrecognized binding request
*/
SerialPort.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
{
var serial = this;
switch (sBinding) {
case SerialPort.sIOBuffer:
this.bindings[sBinding] = this.controlIOBuffer = control;
/*
* By establishing an onkeypress handler here, we make it possible for DOS commands like
* "CTTY COM1" to more or less work (use "CTTY CON" to restore control to the DOS console).
*/
control.onkeydown = function onKeyDown(event) {
/*
* This is required in addition to onkeypress, because it's the only way to prevent
* BACKSPACE (keyCode 8) from being interpreted by the browser as a "Back" operation;
* moreover, not all browsers generate an onkeypress notification for BACKSPACE.
*
* A related problem exists for Ctrl-key combinations in most Windows-based browsers
* (eg, IE, Edge, Chrome for Windows, etc), because keys like Ctrl-C and Ctrl-S have
* special meanings (eg, Copy, Save). To the extent the browser will allow it, we
* attempt to disable that default behavior when this control receives an onkeydown
* event for one of those keys (probably the only event the browser generates for them).
*/
event = event || window.event;
var keyCode = event.keyCode;
if (keyCode === 0x08 || event.ctrlKey && keyCode >= 0x41 && keyCode <= 0x5A) {
if (event.preventDefault) event.preventDefault();
if (keyCode > 0x40) keyCode -= 0x40;
// serial.sendRBR([keyCode]);
}
return true;
};
control.onkeypress = function onKeyPress(event) {
/*
* Browser-independent keyCode extraction; refer to onKeyPress() and the other key event
* handlers in keyboard.js.
*/
event = event || window.event;
var keyCode = event.which || event.keyCode;
// serial.sendRBR([keyCode]);
/*
* Since we're going to remove the "readonly" attribute from the <textarea> control
* (so that the soft keyboard activates on iOS), instead of calling preventDefault() for
* selected keys (eg, the SPACE key, whose default behavior is to scroll the page), we must
* now call it for *all* keys, so that the keyCode isn't added to the control immediately,
* on top of whatever the machine is echoing back, resulting in double characters.
*/
if (event.preventDefault) event.preventDefault();
return true;
};
/*
* Now that we've added an onkeypress handler that calls preventDefault() for ALL keys, the control
* itself no longer needs the "readonly" attribute; we primarily need to remove it for iOS browsers,
* so that the soft keyboard will activate, but it shouldn't hurt to remove the attribute for all browsers.
*/
control.removeAttribute("readonly");
return true;
default:
break;
}
return false;
};
/**
* initBus(cmp, bus, cpu, dbg)
*
* @this {SerialPort}
* @param {Computer} cmp
* @param {Bus} bus
* @param {CPUState} cpu
* @param {Debugger} dbg
*/
SerialPort.prototype.initBus = function(cmp, bus, cpu, dbg)
{
this.bus = bus;
this.cpu = cpu;
this.dbg = dbg;
this.chipset = cmp.getMachineComponent("ChipSet");
bus.addPortInputTable(this, SerialPort.aPortInput, this.portBase);
bus.addPortOutputTable(this, SerialPort.aPortOutput, this.portBase);
this.setReady();
};
/**
* powerUp(data, fRepower)
*
* @this {SerialPort}
* @param {Object|null} data
* @param {boolean} [fRepower]
* @return {boolean} true if successful, false if failure
*/
SerialPort.prototype.powerUp = function(data, fRepower)
{
if (!fRepower) {
if (!data || !this.restore) {
this.reset();
} else {
if (!this.restore(data)) return false;
}
}
return true;
};
/**
* powerDown(fSave, fShutdown)
*
* @this {SerialPort}
* @param {boolean} [fSave]
* @param {boolean} [fShutdown]
* @return {Object|boolean} component state if fSave; otherwise, true if successful, false if failure
*/
SerialPort.prototype.powerDown = function(fSave, fShutdown)
{
return fSave? this.save() : true;
};
/**
* reset()
*
* @this {SerialPort}
*/
SerialPort.prototype.reset = function()
{
this.initState();
};
/**
* save()
*
* This implements save support for the SerialPort component.
*
* @this {SerialPort}
* @return {Object}
*/
SerialPort.prototype.save = function()
{
var state = new State(this);
state.set(0, this.saveRegisters());
return state.data();
};
/**
* restore(data)
*
* This implements restore support for the SerialPort component.
*
* @this {SerialPort}
* @param {Object} data
* @return {boolean} true if successful, false if failure
*/
SerialPort.prototype.restore = function(data)
{
return this.initState(data[0]);
};
/**
* initState(data)
*
* @this {SerialPort}
* @param {Array} [data]
* @return {boolean} true if successful, false if failure
*/
SerialPort.prototype.initState = function(data)
{
var i = 0;
if (data === undefined) {
data = [0, 0, 0];
}
this.bData = data[i++];
this.bCommand = data[i++];
this.bBaudRate = data[i++];
return true;
};
/**
* saveRegisters()
*
* @this {SerialPort}
* @return {Array}
*/
SerialPort.prototype.saveRegisters = function()
{
var i = 0;
var data = [];
data[i++] = this.bData;
data[i++] = this.bCommand;
data[i++] = this.bBaudRate;
return data;
};
/**
* inData(port, addrFrom)
*
* @this {SerialPort}
* @param {number} port (0x0)
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
* @return {number} simulated port value
*/
SerialPort.prototype.inData = function(port, addrFrom)
{
var b = this.bData;
this.printMessageIO(port, null, addrFrom, "DATA", b);
return b;
};
/**
* inCommand(port, addrFrom)
*
* @this {SerialPort}
* @param {number} port (0x1)
* @param {number} [addrFrom] (not defined whenever the Debugger tries to read the specified port)
* @return {number} simulated port value
*/
SerialPort.prototype.inCommand = function(port, addrFrom)
{
var b = this.bCommand;
this.printMessageIO(port, null, addrFrom, "COMMAND", b);
return b;
};
/**
* outData(port, bOut, addrFrom)
*
* @this {SerialPort}
* @param {number} port (0x0)
* @param {number} bOut
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
*/
SerialPort.prototype.outData = function(port, bOut, addrFrom)
{
this.printMessageIO(port, bOut, addrFrom, "DATA");
this.bData = bOut;
};
/**
* outCommand(port, bOut, addrFrom)
*
* @this {SerialPort}
* @param {number} port (0x1)
* @param {number} bOut
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
*/
SerialPort.prototype.outCommand = function(port, bOut, addrFrom)
{
this.printMessageIO(port, bOut, addrFrom, "COMMAND");
this.bCommand = bOut;
};
/**
* outBaudRate(port, bOut, addrFrom)
*
* @this {SerialPort}
* @param {number} port (0x2)
* @param {number} bOut
* @param {number} [addrFrom] (not defined whenever the Debugger tries to write the specified port)
*/
SerialPort.prototype.outBaudRate = function(port, bOut, addrFrom)
{
this.printMessageIO(port, bOut, addrFrom, "BAUDRATE");
this.bBaudRate = bOut;
};
/**
* echoByte(b)
*
* @this {SerialPort}
* @param {number} b
* @return {boolean} true if echoed, false if not
*/
SerialPort.prototype.echoByte = function(b)
{
if (this.controlIOBuffer) {
if (b == 0x0D) {
this.iLogicalCol = 0;
}
else 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.
*/
if (this.iLogicalCol > 0) this.iLogicalCol--;
}
else {
var s = String.fromCharCode(b);
var nChars = (b >= 0x20? 1 : 0);
if (b == 0x09) {
var tabSize = this.tabSize || 8;
nChars = tabSize - (this.iLogicalCol % tabSize);
if (this.tabSize) s = str.pad("", nChars);
}
if (this.charBOL && !this.iLogicalCol && nChars) s = String.fromCharCode(this.charBOL) + s;
this.controlIOBuffer.value += s;
this.controlIOBuffer.scrollTop = this.controlIOBuffer.scrollHeight;
this.iLogicalCol += nChars;
}
return true;
}
if (this.consoleOutput != null) {
if (b == 0x0A || this.consoleOutput.length >= 1024) {
this.println(this.consoleOutput);
this.consoleOutput = "";
}
if (b != 0x0A) {
this.consoleOutput += String.fromCharCode(b);
}
return true;
}
return false;
};
/*
* Port input notification table
*/
SerialPort.aPortInput = {
0x0: SerialPort.prototype.inData,
0x1: SerialPort.prototype.inCommand
};
/*
* Port output notification table
*/
SerialPort.aPortOutput = {
0x0: SerialPort.prototype.outData,
0x1: SerialPort.prototype.outCommand,
0x2: SerialPort.prototype.outBaudRate
};
/**
* SerialPort.init()
*
* This function operates on every HTML element of class "serial", extracting the
* JSON-encoded parameters for the SerialPort constructor from the element's "data-value"
* attribute, invoking the constructor to create a SerialPort component, and then binding
* any associated HTML controls to the new component.
*/
SerialPort.init = function()
{
var aeSerial = Component.getElementsByClass(document, PC8080.APPCLASS, "serial");
for (var iSerial = 0; iSerial < aeSerial.length; iSerial++) {
var eSerial = aeSerial[iSerial];
var parmsSerial = Component.getComponentParms(eSerial);
var serial = new SerialPort(parmsSerial);
Component.bindComponentControls(serial, eSerial, PC8080.APPCLASS);
}
};
/*
* Initialize every SerialPort module on the page.
*/
web.onInit(SerialPort.init);
if (NODE) module.exports = SerialPort;

View file

@ -1064,19 +1064,26 @@ Video.prototype.updateScreen = function(n)
if (n >= 0) {
if (this.rateInterrupt) {
if (!(n & 1)) {
/*
* On even updates, call cpu.requestINTR(1), and also update our copy of the screen.
*/
this.cpu.requestINTR(1);
/*
* TODO: Incorporate these hard-coded interrupt vector numbers into configuration blocks.
*/
if (this.rateInterrupt == 120) {
if (!(n & 1)) {
/*
* On even updates, call cpu.requestINTR(1), and also update our copy of the screen.
*/
this.cpu.requestINTR(1);
} else {
/*
* On odd updates, call cpu.requestINTR(2), but do NOT update our copy of the screen, because
* the machine has presumably only updated the top half of the frame buffer at this point; it will
* update the bottom half of the frame buffer after acknowledging this interrupt.
*/
this.cpu.requestINTR(2);
fUpdate = false;
}
} else {
/*
* On odd updates, call cpu.requestINTR(2), but do NOT update our copy of the screen, because
* the machine has presumably only updated the top half of the frame buffer at this point; it will
* update the bottom half of the frame buffer after acknowledging this interrupt.
*/
this.cpu.requestINTR(2);
fUpdate = false;
this.cpu.requestINTR(4);
}
}

View file

@ -154,6 +154,7 @@
"./modules/pc8080/lib/ram.js",
"./modules/pc8080/lib/keyboard.js",
"./modules/pc8080/lib/video.js",
"./modules/pc8080/lib/serialport.js",
"./modules/pc8080/lib/debugger.js",
"./modules/pc8080/lib/state.js",
"./modules/pc8080/lib/computer.js",

View file

@ -1,237 +1,242 @@
(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 r(a){return"0x"+n(a,4)}function ba(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ga(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}function ha(a,b){return(a+" ").slice(0,b)}function ia(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function ja(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var ka=Date.now||function(){return+new Date};function la(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
function ma(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
function na(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function oa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function pa(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function ra(a){var b=!1;window&&(b=window.confirm(a));return b}var sa=null;function ta(){if(null==sa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}sa=a}return sa}
function ua(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function va(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function wa(a){if(window){var b=pa();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function xa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function ya(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var za={init:[],show:[],exit:[]},Fa=!1,Ga=!0;function Ha(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ia(a){za.init.push(a)}
function Ja(a){if(Ga)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Ka("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function La(a){!Ga&&a?(Ga=!0,Fa&&Oa("init")):Ga=a}function Oa(a){za[a]&&Ja(za[a])}Ha("onload",function(){Fa=!0;Ja(za.init)});Ha("onpageshow",function(){Ja(za.show)});Ha(wa("Opera")||wa("iOS")?"onunload":"onbeforeunload",function(){Ja(za.exit)});
function w(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.bc=b.comment;this.wc=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Rb=this.id.substr(0,b),this.ab=this.id.substr(b+1)):this.ab=this.id;this[a]=c;this.C={jb:!1,gb:!1,Tb:!1,sa:!1,ib:!1};this.Lb=null;this.C.ib=!1;this.M={};this.H=null;this.na=d||0;Pa.push(this)}var Qa=void 0,Ra={};
if(window){Qa||(Qa=window.location.search.substr(1));for(var Sa,Ta=/\+/g,Ua=/([^&=]+)=?([^&]*)/g;Sa=Ua.exec(Qa);)Ra[decodeURIComponent(Sa[1].replace(Ta," "))]=decodeURIComponent(Sa[2].replace(Ta," "))}function 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 Za(a,b){b||(b=w);a.prototype=Ya(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Pa=[],$a={};function ab(a,b,c){$a[a]&&b&&($a[a][b]=c)}function Ka(a,b,c){b||t((c?c+": ":"")+a)}function bb(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Pa.length;b++){var d=Pa[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function cb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Pa.length;d++)if(c)c==Pa[d]&&(c=null);else if(!(a!=Pa[d].type||b&&Pa[d].id.indexOf(b)))return Pa[d]}return null}function A(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
function db(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=A(h))&&g.binding&&a.pa(g.type,g.binding,h,g.value),l=k.length}}}}
(function(){var m;function ba(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function 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 r(a){return"0x"+n(a,4)}function ca(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ea(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ga={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ha(a){return a.replace(/[&<>"']/g,function(a){return ga[a]})}function ia(a,b){return(a+" ").slice(0,b)}function ja(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function ka(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 la=Date.now||function(){return+new Date};function ma(){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 na(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
function oa(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function pa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function qa(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function ra(a){var b=!1;window&&(b=window.confirm(a));return b}var 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 va(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function wa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function xa(a){if(window){var b=qa();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function ya(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function za(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 Aa={init:[],show:[],exit:[]},Ga=!1,Ha=!0;function Ia(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ja(a){Aa.init.push(a)}
function Ka(a){if(Ha)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){!Ha&&a?(Ha=!0,Ga&&Na("init")):Ha=a}function Na(a){Aa[a]&&Ka(Aa[a])}Ia("onload",function(){Ga=!0;Ka(Aa.init)});Ia("onpageshow",function(){Ka(Aa.show)});Ia(xa("Opera")||xa("iOS")?"onunload":"onbeforeunload",function(){Ka(Aa.exit)});
function w(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.ec=b.comment;this.yc=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Sb=this.id.substr(0,b),this.ab=this.id.substr(b+1)):this.ab=this.id;this[a]=c;this.D={jb:!1,gb:!1,Vb:!1,sa:!1,ib:!1};this.Mb=null;this.D.ib=!1;this.L={};this.H=null;this.oa=d||0;Oa.push(this)}var Ra=void 0,Sa={};
if(window){Ra||(Ra=window.location.search.substr(1));for(var Ta,Ua=/\+/g,Va=/([^&=]+)=?([^&]*)/g;Ta=Va.exec(Ra);)Sa[decodeURIComponent(Ta[1].replace(Ua," "))]=decodeURIComponent(Ta[2].replace(Ua," "))}function Za(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
function $a(a,b){b||(b=w);a.prototype=Za(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var Oa=[],ab={};function bb(a,b,c){ab[a]&&b&&(ab[a][b]=c)}function La(a,b,c){b||t((c?c+": ":"")+a)}function cb(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 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 A(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
function eb(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=A(h))&&g.binding&&a.ja(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}
w.prototype={constructor:w,parent:null,toString:function(){return this.name?this.name:this.id||this.type},pa: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.Aa=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.ga=function(a){this.g(a,this.ab)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.ab+": "+a)},ga:function(a,b,c){Ka(a,b,c||this.type)},Ca:function(){return this.C.sa=!0},Ja:function(a,b){b&&(this.C.sa=!1);return!0}};function D(a,b,c,d,e,f){var h=!0;a.H&&(!0===h?h=0:null==h&&(h=a.na),eb(a.H,a,b,c,d,e,f,h))}function fb(a,b,c){a.H&&(!0===c||gb(a,c|0))&&a.H.message(b,void 0)}
function gb(a,b){if(a.H){a===a.H?b|=0:b=b||a.na;var c=a.H.na&b;return!!b&&c===b||!!(c&a.H.gd)}return!1}function hb(a,b){if(a.C.Tb)return a.C.gb&&(a.C.gb=!1),a.C.Tb=!1;if(a.C.ib)return a.g(a.toString()+" error"),!1;a.C.gb=b;return a.C.gb}function ib(a,b){a.C.gb&&(b?a.C.Tb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.C.gb}function E(a){if(!a.C.ib&&(a.C.jb=!0,a.C.jb)){var b=a.Lb;a.Lb=null;b&&b()}}function jb(a,b){b&&(a.C.jb?b():a.Lb=b);return a.C.jb}function kb(a,b){a.C.ib=!0;a.ga(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 pb(a){w.call(this,"Panel",a,pb)}Za(pb);m=pb.prototype;m.pa=function(a,b,c,d){return this.w&&this.w.pa(a,b,c,d)||this.b&&this.b.pa(a,b,c,d)||this.ea&&this.ea.pa(a,b,c,d)||this.H&&this.H.pa(a,b,c,d)?!0:this.parent.pa.call(this,a,b,c,d)};m.Oa=function(a,b,c,d){this.w=a;this.A=b;this.b=c;this.H=d;this.ea=qb(a,"Keyboard")};m.Ca=function(a,b){b||rb();return!0};m.Ja=function(){return!0};m.Da=function(){};
function rb(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=A(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<Pa.length;h++)if(Pa[h].id===f){f=Pa[h];break a}f=null}f||(a=!0,f=new pb(e));db(f,d);a&&E(f)}}Ia(rb);
function sb(a,b,c){w.call(this,"Bus",a,sb);this.b=b;this.H=c;this.J=a.busWidth||16;this.O=Math.pow(2,this.J);this.G=this.O-1|0;this.la=16>=this.J?10:20>=this.J?12:24>=this.J?14:15;this.Ba=1<<this.la;this.W=this.Ba>>2;this.A=this.Ba-1;this.L=this.O/this.Ba|0;this.K=this.L-1;this.w=[];this.u=[];this.D=this.I=!1;this.Z=[];this.ba=[];a=new F;tb(a,this.H);this.V=Array(this.L);for(b=0;b<this.L;b++)this.V[b]=a;E(this)}Za(sb);m=sb.prototype;m.reset=function(){};m.Ca=function(a,b){b||this.reset();return!0};
function ub(a,b,c,d){for(var e=b,f=c,h=e>>>a.la;0<f&&h<a.V.length;){var g=a.V[h],k=h*a.Ba,l=a.Ba-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.F)return g.Fb+=g.F-e,g.F=e,!0;if(e>=g.F+g.Fb){l=g.size-(e-k);l>f&&(l=f);g.Fb=e-g.F+l;e=k+a.Ba;f-=l;h++;continue}}return vb(1,e,f)}e=new F(e,l,a.Ba,d);tb(e,a.H,g);a.V[h++]=e;e=k+a.Ba;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+wb[d]+" at "+r(b)),!0):vb(2,b,c)}m.Y=function(a){return this.V[(a&this.G)>>>this.la].qb(a&this.A,a)};
function xb(a,b){return a.V[(b&a.G)>>>a.la].Db(b&a.A,b)}m.Pa=function(a){var b=a&this.A,c=(a&this.G)>>>this.la;return b!=this.A?this.V[c].xc(b,a):this.V[c++].qb(b,a)|this.V[c&this.K].qb(0,a+1)<<8};function yb(a,b){var c=b&a.A,d=(b&a.G)>>>a.la;return c!=a.A?a.V[d].Zb(c,b):a.V[d++].Db(c,b)|a.V[d&a.K].Db(0,b+1)<<8}m.qa=function(a,b){this.V[(a&this.G)>>>this.la].sb(a&this.A,b&255,a)};function zb(a,b,c){a.V[(b&a.G)>>>a.la].Gb(b&a.A,c&255,b)}
m.Qb=function(a,b){var c=a&this.A,d=(a&this.G)>>>this.la;c!=this.A?this.V[d].zc(c,b&65535,a):(this.V[d++].sb(c,b&255,a),this.V[d&this.K].sb(0,b>>8&255,a+1))};function Ab(a,b){if(void 0===b)return a.D=!a.D,a.D;void 0===a.w[b]&&(a.w[b]=[null,!1]);a.w[b][1]=!a.w[b][1];return a.w[b][1]}function Bb(a,b,c){var d;void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.w[k]?t("Input port "+r(k)+" already registered"):f.w[k]=[g,!1]}}
function Cb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.w[b],g=a.Z[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.H&&a.D!=h[1]&&Db(a.H,b,l)):a.H&&(eb(a.H,a,b,null,c),a.D&&Db(a.H,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Eb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
function Fb(a,b,c){var d;void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.u[k]?t("Output port "+r(k)+" already registered"):f.u[k]=[g,!1]}}function Gb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.ba[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.H&&a.I!=h[1]&&Hb(a.H,b,k)}else a.H&&(eb(a.H,a,b,k,d),a.I&&Hb(a.H,b,k));f+=g<<3;b+=g;e-=g}}
function vb(a,b,c){t("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Ib;if(nb){var Jb=new ArrayBuffer(2);(new DataView(Jb)).setUint16(0,256,!0);Ib=256===(new Uint16Array(Jb))[0]}else Ib=!1;var Sb=Ib;
function F(a,b,c,d){this.id=Tb+=2;this.b=null;this.F=a;this.Fb=b;this.size=c||0;this.type=d||Ub;this.M=d==Vb;tb(this);this.La=this.qc=!1;if(c)if(nb)this.D=new ArrayBuffer(c),this.I=new DataView(this.D,0,c),this.A=new Uint8Array(this.D,0,c),this.K=new Uint16Array(this.D,0,c>>1),this.b=new Int32Array(this.D,0,c>>2),Wb(this,Sb?Xb:Yb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Wb(this,Zb)}else Wb(this)}var Ub=0,Vb=2,wb=["NONE","RAM","ROM","VID","H/W"],Tb=0;
F.prototype={constructor:F,parent:null,save:function(){var a,b;if(nb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.I.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(nb)for(b=0;b<a.length;b++)this.I.setInt32(b<<2,a[b],!0);else this.b=a;return this.La=!0}return!1},Va:function(a,b){b?0===this.u++&&$b(this,ac,!1):0===this.w++&&bc(this,ac,!1)},L:function(){this.H&&gb(this.H,129)&&this.H.message("attempt to read invalid block %"+n(this.F),!0);
return 255},G:function(a,b){this.H&&gb(this.H,129)&&this.H.message("attempt to write "+r(b)+" to invalid block %"+n(this.F),!0)},O:function(a,b){return this.qb(a++,b++)|this.qb(a,b)<<8},J:function(a,b,c){this.sb(a++,b&255,c++);this.sb(a,b>>8,c)},da:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ma: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},Ea:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.La=!0},ab: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.La=!0},Z:function(a,b){if(this.H&&null!=this.F){var c=this.H;cc(c,this.F+a,1,c.Z)&&c.ja(!0)}return this.Db(a,b)},fa:function(a,b){if(this.H&&null!=this.F){var c=this.H;cc(c,this.F+a,2,c.Z)&&c.ja(!0)}return this.Zb(a,b)},wa:function(a,b,c){if(this.H&&null!=this.F){var d=this.H;cc(d,this.F+a,1,d.I)&&d.ja(!0)}this.M?this.G(a,b,c):this.Gb(a,b,c)},Ga:function(a,
b,c){if(this.H&&null!=this.F){var d=this.H;cc(d,this.F+a,2,d.I)&&d.ja(!0)}this.M?this.G(a,b,c):this.$b(a,b,c)},W:function(a){return this.A[a]},ba:function(a){return this.A[a]},ea:function(a){return this.I.getUint16(a,!0)},ka:function(a){return a&1?this.A[a]|this.A[a+1]<<8:this.K[a>>1]},ra:function(a,b){this.A[a]=b;this.La=!0},za:function(a,b){this.A[a]=b;this.La=!0},Fa:function(a,b){this.I.setUint16(a,b,!0);this.La=!0},Ha:function(a,b){a&1?(this.A[a]=b,this.A[a+1]=b>>8):this.K[a>>1]=b;this.La=!0}};
function tb(a,b,c){a.H=b;a.w=a.u=0;c&&((a.w=c.w)&&bc(a,ac,!1),(a.u=c.u)&&$b(a,ac,!1))}function dc(a,b){b?0===--a.u&&(a.sb=a.M?a.G:a.Gb,a.zc=a.M?a.J:a.$b):0===--a.w&&(a.qb=a.Db,a.xc=a.Zb)}function $b(a,b,c){c&&a.u||(a.sb=!a.M&&b[2]||a.G,a.zc=!a.M&&b[3]||a.J);if(c||void 0===c)a.Gb=b[2]||a.G,a.$b=b[3]||a.J}function bc(a,b,c){c&&a.w||(a.qb=b[0]||a.L,a.xc=b[1]||a.O);if(c||void 0===c)a.Db=b[0]||a.L,a.Zb=b[1]||a.O}function Wb(a,b){b||(b=ec);bc(a,b,void 0);$b(a,b,void 0)}
var ec=[],Zb=[F.prototype.da,F.prototype.ma,F.prototype.Ea,F.prototype.ab],ac=[F.prototype.Z,F.prototype.fa,F.prototype.wa,F.prototype.Ga];if(nb)var Yb=[F.prototype.W,F.prototype.ea,F.prototype.ra,F.prototype.Fa],Xb=[F.prototype.ba,F.prototype.ka,F.prototype.za,F.prototype.Ha];
function fc(a,b){w.call(this,"CPU",a,fc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.pb=c;this.i.Nb=0;this.i.Za=d;this.i.Vb=Math.round(this.i.pb/1E4)/100;this.i.Xa=this.i.Vb*this.i.Za;this.C.va=!1;this.C.Ub=!1;this.C.pc=a.autoStart;this.C.rc=!1;this.C.hb=!1;this.i.xb=this.i.mb=0;this.i.yb=a.csStart;this.i.lb=a.csInterval;this.i.nb=a.csStop;this.ba=this.$a.bind(this);E(this)}Za(fc);var gc=["power","reset"];m=fc.prototype;
m.Oa=function(a,b,c,d){this.w=a;this.A=b;this.H=d;for(b=0;b<gc.length;b++)(c=this.M[gc[b]])&&this.w.pa(null,gc[b],c);this.L=(b=qb(a,"Video"))&&Math.max(b.Ac,b.lc)||60;this.G=qb(a,"ChipSet");a=hc(a,"autoStart");null!=a&&(this.C.pc="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.Nb=0};m.save=function(){return null};m.restore=function(){return!1};
m.Ca=function(a,b){if(!b){if(a&&this.restore){ic(this);if(!this.restore(a))return!1;jc(this)}else this.reset();if(this.H){var c=this.H;c.g("Type ? for help with PC8080 Debugger commands");c.Da();if(c.Ha){var d=c.Ha;c.Ha=null;kc(c,d)}}else this.g("No debugger detected")}lc(this);return!0};m.Ja=function(a){return a?this.save():!0};function mc(a){(a.C.pc||!a.H&&void 0===a.M.run)&&a.$a(!0)}m.sc=function(){return 0};
function jc(a){void 0===a.i.yb&&(a.i.yb=0);void 0===a.i.lb&&(a.i.lb=-1);void 0===a.i.nb&&(a.i.nb=-1);a.C.hb=0<=a.i.yb&&0<a.i.lb;a.C.hb&&(a.i.xb=0,a.i.mb=a.i.yb-a.J)}function nc(a,b){if(a.C.hb){var c=!1;a.i.xb=a.i.xb+a.sc()|0;a.i.mb-=b;0>=a.i.mb&&(a.i.mb+=a.i.lb,c=!0);0<=a.i.nb&&a.i.nb<=Ac(a)&&(a.i.lb=a.i.nb=-1,jc(a),a.ja(),c=!0);c&&a.g(Ac(a)+" cycles: checksum="+n(a.i.xb))}}
m.pa=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.w)if(a=d.w,a.C.sa)a=!0;else{var b=null,c,g=bb(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.C.jb);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.C.sa);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.C.jb?"powered yet":"ready yet"+(b.Lb?" (waiting for notification)":""))+".");a=!1}a&&(d.C.va?d.ja(!0):d.$a(!0))};a=
!0;break;case "speed":this.M[b]=c;a=!0;break;case "setSpeed":this.M[b]=c,c.onclick=function(){Bc(d,d.i.Za<<1,!0)},c.textContent=this.i.Xa.toFixed(2)+"Mhz",a=!0}return a};function Cc(a,b,c){a.J+=b;c&&(a.D=a.b=0)}
function Dc(a,b){var c=30;c<a.L&&(c=a.L);2>c&&(c=2);var d=1;b&&1<a.i.Za&&a.i.Wa&&(d=a.i.Wa/a.i.Vb);a.i.tc=Math.round(1E3/30);a.i.pd=Math.floor(a.i.pb/c*d);a.i.Xb=Math.floor(a.i.pb/30*d);a.i.vc=Math.floor(a.i.pb/a.L*d);a.i.uc=Math.floor(a.i.pb/2*d);b||(a.i.ob=a.i.Xb,a.i.Ab=a.i.vc,a.i.zb=a.i.uc);a.i.Yb=0}function Ac(a){return a.J+a.I+a.D-a.b}function ic(a){a.i.Wa=0;a.J=a.I=a.D=a.b=0;jc(a);Bc(a,1)}
function Bc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Wa/a.i.Xa?b=1:d=!0;a.i.Za=b;b=a.i.Vb*a.i.Za;if(a.i.Xa!=b){a.i.Xa=b;b=a.i.Xa.toFixed(2)+"Mhz";var e=a.M.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.w&&a.w.Eb()}Cc(a,a.I);a.I=0;a.i.kb=ka();a.i.Ya=0;Dc(a);return d}
m.$a=function(a){if(hb(this,!0)){if(!this.C.va){Bc(this);this.w&&this.w.start(this.i.kb,Ac(this));this.C.va=!0;this.C.Ub=!0;this.G&&this.G.start();var b=this.M.run;b&&(b.textContent="Halt");this.w&&(this.w.Da(!0),a&&this.w.Eb(!0))}this.i.Yb>=this.i.pb&&Dc(this,!0);this.i.Bb=0;this.i.Mb=ka();this.i.Ya&&(a=this.i.Mb-this.i.Ya,a>this.i.tc&&(this.i.kb+=a,this.i.kb>this.i.Mb&&(this.i.kb=this.i.Mb)));try{do{this.rb(this.C.hb?1:this.i.pd);var c=this.D-this.b;this.I+=c;this.i.Bb+=c;Cc(this,0,!0);nc(this,
c);this.i.Ab-=c;0>=this.i.Ab&&(this.i.Ab+=this.i.vc,this.w&&Ec(this.w,this.i.Nb++),this.i.Nb>this.L&&(this.i.Nb=0));this.i.zb-=c;0>=this.i.zb&&(this.i.zb+=this.i.uc,this.w&&this.w.Da());this.i.ob-=c;if(0>=this.i.ob){this.i.ob+=this.i.Xb;break}}while(this.C.va)}catch(e){this.ja();lc(this);this.w&&this.w.stop(ka(),Ac(this));hb(this,!1);kb(this,e.stack||e.message);return}c=setTimeout;a=this.ba;this.i.Ya=ka();b=this.i.tc;this.i.Bb&&(b=Math.round(b*this.i.Bb/this.i.Xb));var b=b-(this.i.Ya-this.i.Mb),d=
this.i.Ya-this.i.kb;d&&(this.i.Wa=Math.round(this.I/(10*d))/100,864E5<=d&&(this.J=0,Bc(this)));if(0>b||this.i.Wa<this.i.Xa)b=0;this.i.Yb+=this.i.Bb;this.i.Ya+=b;c(a,b)}else lc(this),this.w&&this.w.stop(ka(),Ac(this))};m.rb=function(){return 0};m.ja=function(a){ib(this,!0);this.D-=this.b;this.b=0;Cc(this,this.I);this.I=0;if(this.C.va){this.C.va=!1;this.G&&this.G.stop();var b=this.M.run;b&&(b.textContent="Run")}this.C.Kb=a};function lc(a,b){a.w&&(Ec(a.w,-1),a.w.Da(b))}
function Fc(a){this.Wb=+a.model||8080;fc.call(this,a,1E6);this.O=Gc;ic(this);this.C.Kb=this.C.hd=!1;this.Z=0;this.K=[];this.W=0;Hc(this)}Za(Fc,fc);function Ic(a,b){a.K.push(b)}m=Fc.prototype;m.reset=function(){this.C.va&&this.ja();Hc(this);ic(this);this.C.ib=!1;this.parent.reset.call(this)};function Hc(a){a.j=0;a.P=0;a.R=0;a.S=0;a.T=0;a.U=0;a.X=0;a.ia=0;G(a,a.W);Jc(a,0);a.u=0}function Kc(a,b){a.W=b;G(a,b)}
m.sc=function(){var a=this.j+this.P+this.R+this.S+this.T+this.U+this.X|0;return a=a+this.ia+this.N+Lc(this)|0};
m.save=function(){var a=new Mc(this);H(a,0,[this.j,this.P,this.R,this.S,this.T,this.U,this.X,this.ia,this.N,Lc(this)]);H(a,1,[this.u,this.J,this.i.Za]);for(var b=this.A,c=0,d=[],e=0;e<b.L;e++){var f=b.V[e];if(f.La||f.qc){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}}H(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.j=b[0];this.P=b[1];this.R=b[2];this.S=b[3];this.T=b[4];this.U=b[5];this.X=b[6];this.ia=b[7]&65535;G(this,b[8]);Jc(this,b[9]);b=a[1];this.u=b[0];this.J=b[1];Bc(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.W){for(var f=0,h=Array(b.W),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.V[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.pa=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.Z++;d=!0;break;default:d=this.parent.pa.call(this,a,b,c)}return d};function Nc(a){return a.P<<8|a.R}function Oc(a,b){a.P=b>>8&255;a.R=b&255}function Pc(a){return a.S<<8|a.T}function Qc(a,b){a.S=b>>8&255;a.T=b&255}function J(a){return a.U<<8|a.X}
function Rc(a,b){a.U=b>>8&255;a.X=b&255}function G(a,b){a.N=b&65535}function Sc(a){return a.aa&256?1:0}function Tc(a,b){a.aa=a.aa&255|b}function Uc(a){return ob[a.ca&255]?4:0}function Vc(a){return(a.ca^a.ua)&16?16:0}function Wc(a){return a.aa&255?0:64}function Xc(a){return a.ca&128?128:0}function Lc(a){return a.ta&-214|Xc(a)|Wc(a)|Vc(a)|Uc(a)|Sc(a)}function Jc(a,b){a.aa=a.ca=a.ua=0;b&1&&(a.aa|=256);b&4||(a.ca|=1);b&16&&(a.ua|=16);b&64||(a.aa|=255);b&128&&(a.ca^=192);a.ta=a.ta&-726|b&512|2}
function Yc(a,b){a.ua=a.j^b;return a.ca=(a.aa=a.j+b)&255}function Zc(a,b){a.ua=a.j^b;return a.ca=(a.aa=a.j+b+(a.aa&256?1:0))&255}function $c(a,b){a.aa=a.ca=a.ua=a.j&b;(a.j|b)&8&&(a.ua^=16);return a.aa}function ad(a,b){a.ua=b^255;b=a.ca=b+255&255;a.aa=a.aa&-256|b;return b}function bd(a,b){a.ua=b;b=a.ca=b+1&255;a.aa=a.aa&-256|b;return b}function cd(a,b){return a.ca=a.aa=a.ua=a.j|b}function K(a,b){b^=255;a.ua=a.j^b;return a.ca=(a.aa=a.j+b+1^256)&255}
function wd(a,b){b^=255;a.ua=a.j^b;return a.ca=(a.aa=a.j+b+(a.aa&256?0:1)^256)&255}function xd(a,b){return a.ca=a.aa=a.ua=a.j^b}m.Y=function(a){return this.A.Y(a)};m.qa=function(a,b){this.A.qa(a,b)};function L(a){var b=a.Y(a.N);G(a,a.N+1);return b}function M(a){var b=a.A.Pa(a.N);G(a,a.N+2);return b}function N(a){var b=a.A.Pa(a.ia);a.ia=a.ia+2&65535;return b}function P(a,b){a.ia=a.ia-2&65535;a.A.Qb(a.ia,b)}
function Q(a,b,c,d){d=d||2;a.M[b]&&(void 0===c&&(kb(a,"Value for "+b+" is invalid"),a.ja()),c=!a.C.va||a.C.rc?n(c,d):"--------".substr(0,d),a.M[b].textContent!=c&&(a.M[b].textContent=c))}
m.Da=function(a){this.Z&&(a||!this.C.va||this.C.rc)&&(Q(this,"A",this.j),Q(this,"B",this.P),Q(this,"C",this.R),Q(this,"BC",Nc(this),4),Q(this,"D",this.S),Q(this,"E",this.T),Q(this,"DE",Pc(this),4),Q(this,"H",this.U),Q(this,"L",this.X),Q(this,"HL",J(this),4),Q(this,"SP",this.ia,4),Q(this,"PC",this.N,4),a=Lc(this),Q(this,"PS",a,4),Q(this,"IF",a&512?1:0,1),Q(this,"SF",a&128?1:0,1),Q(this,"ZF",a&64?1:0,1),Q(this,"AF",a&16?1:0,1),Q(this,"PF",a&4?1:0,1),Q(this,"CF",a&1?1:0,1));if(a=this.M.speed)a.textContent=
this.C.va&&this.i.Wa?this.i.Wa.toFixed(2)+"Mhz":"Stopped"};
m.rb=function(a){this.C.Kb=!0;var b=this.C.hd=this.H&&yd(this.H),c=a?this.C.Ub?0:1:-1;this.C.Ub=!1;this.D=this.b=a;do{if(this.u){var d;this.u&8&&this.ta&512?(d=199|(this.u&7)<<3,this.u&=-16,this.ta&=-513,this.O[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.u&16){this.b=0;break}}if(b){if(zd(this.H,this.N,c)){this.ja();break}c=1}this.O[L(this)].call(this)}while(0<this.b);return this.C.Kb?this.D-this.b:void 0===this.C.Kb?0:-1};
Ia(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Fc(d);db(d,c)}});function Ad(){this.b-=4}function Bd(){G(this,M(this));this.b-=10}function Cd(){G(this,N(this));this.b-=10}function Dd(){var a=M(this);P(this,this.N);G(this,a);this.b-=17}
var Gc=[Ad,function(){Oc(this,M(this));this.b-=10},function(){this.qa(Nc(this),this.j);this.b-=7},function(){Oc(this,Nc(this)+1);this.b-=5},function(){this.P=bd(this,this.P);this.b-=5},function(){this.P=ad(this,this.P);this.b-=5},function(){this.P=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Tc(this,a&256);this.b-=4},Ad,function(){var a;Rc(this,a=J(this)+Nc(this));Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(Nc(this));this.b-=7},function(){Oc(this,Nc(this)-1);this.b-=
5},function(){this.R=bd(this,this.R);this.b-=5},function(){this.R=ad(this,this.R);this.b-=5},function(){this.R=L(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Tc(this,a);this.b-=4},Ad,function(){Qc(this,M(this));this.b-=10},function(){this.qa(Pc(this),this.j);this.b-=7},function(){Qc(this,Pc(this)+1);this.b-=5},function(){this.S=bd(this,this.S);this.b-=5},function(){this.S=ad(this,this.S);this.b-=5},function(){this.S=L(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
Sc(this);Tc(this,a&256);this.b-=4},Ad,function(){var a;Rc(this,a=J(this)+Pc(this));Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(Pc(this));this.b-=7},function(){Qc(this,Pc(this)-1);this.b-=5},function(){this.T=bd(this,this.T);this.b-=5},function(){this.T=ad(this,this.T);this.b-=5},function(){this.T=L(this);this.b-=7},function(){var a=this.j<<8;this.j=(Sc(this)<<8|this.j)>>1;Tc(this,a&256);this.b-=4},Ad,function(){Rc(this,M(this));this.b-=10},function(){var a=M(this);this.A.Qb(a,J(this));
this.b-=16},function(){Rc(this,J(this)+1);this.b-=5},function(){this.U=bd(this,this.U);this.b-=5},function(){this.U=ad(this,this.U);this.b-=5},function(){this.U=L(this);this.b-=7},function(){var a=0,b=Sc(this);if(Vc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Yc(this,a);Tc(this,b?256:0);this.b-=4},Ad,function(){var a;Rc(this,a=J(this)+J(this));Tc(this,a>>8&256);this.b-=10},function(){var a;a=M(this);a=this.A.Pa(a);Rc(this,a);this.b-=16},function(){Rc(this,J(this)-1);this.b-=5},function(){this.X=
bd(this,this.X);this.b-=5},function(){this.X=ad(this,this.X);this.b-=5},function(){this.X=L(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},Ad,function(){this.ia=M(this)&65535;this.b-=10},function(){this.qa(M(this),this.j);this.b-=13},function(){this.ia=this.ia+1&65535;this.b-=5},function(){var a=J(this);this.qa(a,bd(this,this.Y(a)));this.b-=10},function(){var a=J(this);this.qa(a,ad(this,this.Y(a)));this.b-=10},function(){this.qa(J(this),L(this));this.b-=10},function(){this.aa|=256;this.b-=
4},Ad,function(){var a;Rc(this,a=J(this)+this.ia);Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(M(this));this.b-=13},function(){this.ia=this.ia-1&65535;this.b-=5},function(){this.j=bd(this,this.j);this.b-=5},function(){this.j=ad(this,this.j);this.b-=5},function(){this.j=L(this);this.b-=7},function(){Tc(this,Sc(this)?0:256);this.b-=4},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.T;this.b-=5},function(){this.P=this.U;this.b-=
w.prototype={constructor:w,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ja:function(a,b,c){switch(b){case "clear":return this.L[b]||(this.L[b]=c,c.onclick=function(a){return function(){a.L.print&&(a.L.print.value="")}}(this)),!0;case "print":return this.L[b]||(this.Ba=this.L[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
this.ga=function(a){this.g(a,this.ab)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.ab+": "+a)},ga:function(a,b,c){La(a,b,c||this.type)},za:function(){return this.D.sa=!0},Da:function(a,b){b&&(this.D.sa=!1);return!0}};function D(a,b,c,d,e,f,h){a.H&&(!0===h?h=0:null==h&&(h=a.oa),fb(a.H,a,b,c,d,e,f,h))}function gb(a,b,c){a.H&&(!0===c||hb(a,c|0))&&a.H.message(b,void 0)}
function hb(a,b){if(a.H){a===a.H?b|=0:b=b||a.oa;var c=a.H.oa&b;return!!b&&c===b||!!(c&a.H.md)}return!1}function ib(a,b){if(a.D.Vb)return a.D.gb&&(a.D.gb=!1),a.D.Vb=!1;if(a.D.ib)return a.g(a.toString()+" error"),!1;a.D.gb=b;return a.D.gb}function jb(a,b){a.D.gb&&(b?a.D.Vb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.D.gb}function E(a){if(!a.D.ib&&(a.D.jb=!0,a.D.jb)){var b=a.Mb;a.Mb=null;b&&b()}}function kb(a,b){b&&(a.D.jb?b():a.Mb=b);return a.D.jb}function lb(a,b){a.D.ib=!0;a.ga(b)}
var ob="undefined"!==typeof ArrayBuffer,pb=[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 qb(a){w.call(this,"Panel",a,qb)}$a(qb);m=qb.prototype;m.ja=function(a,b,c,d){return this.u&&this.u.ja(a,b,c,d)||this.b&&this.b.ja(a,b,c,d)||this.ea&&this.ea.ja(a,b,c,d)||this.H&&this.H.ja(a,b,c,d)?!0:this.parent.ja.call(this,a,b,c,d)};m.Na=function(a,b,c,d){this.u=a;this.w=b;this.b=c;this.H=d;this.ea=rb(a,"Keyboard")};m.za=function(a,b){b||sb();return!0};m.Da=function(){return!0};m.Ea=function(){};
function sb(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=A(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<Oa.length;h++)if(Oa[h].id===f){f=Oa[h];break a}f=null}f||(a=!0,f=new qb(e));eb(f,d);a&&E(f)}}Ja(sb);
function tb(a,b,c){w.call(this,"Bus",a,tb);this.b=b;this.H=c;this.J=a.busWidth||16;this.O=Math.pow(2,this.J);this.A=this.O-1|0;this.ma=16>=this.J?10:20>=this.J?12:24>=this.J?14:15;this.Ca=1<<this.ma;this.W=this.Ca>>2;this.w=this.Ca-1;this.M=this.O/this.Ca|0;this.K=this.M-1;this.u=[];this.C=[];this.F=this.I=!1;this.Z=[];this.ba=[];a=new F;ub(a,this.H);this.V=Array(this.M);for(b=0;b<this.M;b++)this.V[b]=a;E(this)}$a(tb);m=tb.prototype;m.reset=function(){};m.za=function(a,b){b||this.reset();return!0};
function vb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ma;0<f&&h<a.V.length;){var g=a.V[h],k=h*a.Ca,l=a.Ca-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.G)return g.Fb+=g.G-e,g.G=e,!0;if(e>=g.G+g.Fb){l=g.size-(e-k);l>f&&(l=f);g.Fb=e-g.G+l;e=k+a.Ca;f-=l;h++;continue}}return wb(1,e,f)}e=new F(e,l,a.Ca,d);ub(e,a.H,g);a.V[h++]=e;e=k+a.Ca;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+xb[d]+" at "+r(b)),!0):wb(2,b,c)}m.Y=function(a){return this.V[(a&this.A)>>>this.ma].qb(a&this.w,a)};
function yb(a,b){return a.V[(b&a.A)>>>a.ma].Db(b&a.w,b)}m.Pa=function(a){var b=a&this.w,c=(a&this.A)>>>this.ma;return b!=this.w?this.V[c].zc(b,a):this.V[c++].qb(b,a)|this.V[c&this.K].qb(0,a+1)<<8};function zb(a,b){var c=b&a.w,d=(b&a.A)>>>a.ma;return c!=a.w?a.V[d].bc(c,b):a.V[d++].Db(c,b)|a.V[d&a.K].Db(0,b+1)<<8}m.qa=function(a,b){this.V[(a&this.A)>>>this.ma].sb(a&this.w,b&255,a)};function Ab(a,b,c){a.V[(b&a.A)>>>a.ma].Gb(b&a.w,c&255,b)}
m.Rb=function(a,b){var c=a&this.w,d=(a&this.A)>>>this.ma;c!=this.w?this.V[d].Cc(c,b&65535,a):(this.V[d++].sb(c,b&255,a),this.V[d&this.K].sb(0,b>>8&255,a+1))};function Bb(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 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.u[k]?t("Input port "+r(k)+" already registered"):f.u[k]=[g,!1]}}
function Db(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.u[b],g=a.Z[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.H&&a.F!=h[1]&&Eb(a.H,b,l)):a.H&&(fb(a.H,a,b,null,c),a.F&&Eb(a.H,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Fb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.C[b]&&(a.C[b]=[null,!1]);a.C[b][1]=!a.C[b][1];return a.C[b][1]}
function Gb(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.C[k]?t("Output port "+r(k)+" already registered"):f.C[k]=[g,!1]}}function Hb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.C[b],g=a.ba[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.H&&a.I!=h[1]&&Ib(a.H,b,k)}else a.H&&(fb(a.H,a,b,k,d),a.I&&Ib(a.H,b,k));f+=g<<3;b+=g;e-=g}}
function wb(a,b,c){t("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Jb;if(ob){var Kb=new ArrayBuffer(2);(new DataView(Kb)).setUint16(0,256,!0);Jb=256===(new Uint16Array(Kb))[0]}else Jb=!1;var Lb=Jb;
function F(a,b,c,d){this.id=Ub+=2;this.b=null;this.G=a;this.Fb=b;this.size=c||0;this.type=d||Vb;this.L=d==Wb;ub(this);this.La=this.sc=!1;if(c)if(ob)this.F=new ArrayBuffer(c),this.I=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),Xb(this,Lb?Yb:Zb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Xb(this,$b)}else Xb(this)}var Vb=0,Wb=2,xb=["NONE","RAM","ROM","VID","H/W"],Ub=0;
F.prototype={constructor:F,parent:null,save:function(){var a,b;if(ob)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.I.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(ob)for(b=0;b<a.length;b++)this.I.setInt32(b<<2,a[b],!0);else this.b=a;return this.La=!0}return!1},Va:function(a,b){b?0===this.C++&&ac(this,bc,!1):0===this.u++&&cc(this,bc,!1)},M:function(){this.H&&hb(this.H,129)&&this.H.message("attempt to read invalid block %"+n(this.G),!0);
return 255},A:function(a,b){this.H&&hb(this.H,129)&&this.H.message("attempt to write "+r(b)+" to invalid block %"+n(this.G),!0)},O:function(a,b){return this.qb(a++,b++)|this.qb(a,b)<<8},J:function(a,b,c){this.sb(a++,b&255,c++);this.sb(a,b>>8,c)},da:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},na:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},Fa:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.La=!0},ab: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.La=!0},Z:function(a,b){if(this.H&&null!=this.G){var c=this.H;dc(c,this.G+a,1,c.Z)&&c.ka(!0)}return this.Db(a,b)},fa:function(a,b){if(this.H&&null!=this.G){var c=this.H;dc(c,this.G+a,2,c.Z)&&c.ka(!0)}return this.bc(a,b)},wa:function(a,b,c){if(this.H&&null!=this.G){var d=this.H;dc(d,this.G+a,1,d.I)&&d.ka(!0)}this.L?this.A(a,b,c):this.Gb(a,b,c)},Ha:function(a,
b,c){if(this.H&&null!=this.G){var d=this.H;dc(d,this.G+a,2,d.I)&&d.ka(!0)}this.L?this.A(a,b,c):this.cc(a,b,c)},W:function(a){return this.w[a]},ba:function(a){return this.w[a]},ea:function(a){return this.I.getUint16(a,!0)},la:function(a){return a&1?this.w[a]|this.w[a+1]<<8:this.K[a>>1]},ra:function(a,b){this.w[a]=b;this.La=!0},Aa:function(a,b){this.w[a]=b;this.La=!0},Ga:function(a,b){this.I.setUint16(a,b,!0);this.La=!0},Ia:function(a,b){a&1?(this.w[a]=b,this.w[a+1]=b>>8):this.K[a>>1]=b;this.La=!0}};
function ub(a,b,c){a.H=b;a.u=a.C=0;c&&((a.u=c.u)&&cc(a,bc,!1),(a.C=c.C)&&ac(a,bc,!1))}function ec(a,b){b?0===--a.C&&(a.sb=a.L?a.A:a.Gb,a.Cc=a.L?a.J:a.cc):0===--a.u&&(a.qb=a.Db,a.zc=a.bc)}function ac(a,b,c){c&&a.C||(a.sb=!a.L&&b[2]||a.A,a.Cc=!a.L&&b[3]||a.J);if(c||void 0===c)a.Gb=b[2]||a.A,a.cc=b[3]||a.J}function cc(a,b,c){c&&a.u||(a.qb=b[0]||a.M,a.zc=b[1]||a.O);if(c||void 0===c)a.Db=b[0]||a.M,a.bc=b[1]||a.O}function Xb(a,b){b||(b=fc);cc(a,b,void 0);ac(a,b,void 0)}
var fc=[],$b=[F.prototype.da,F.prototype.na,F.prototype.Fa,F.prototype.ab],bc=[F.prototype.Z,F.prototype.fa,F.prototype.wa,F.prototype.Ha];if(ob)var Zb=[F.prototype.W,F.prototype.ea,F.prototype.ra,F.prototype.Ga],Yb=[F.prototype.ba,F.prototype.la,F.prototype.Aa,F.prototype.Ia];
function gc(a,b){w.call(this,"CPU",a,gc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.pb=c;this.i.Ob=0;this.i.Za=d;this.i.Xb=Math.round(this.i.pb/1E4)/100;this.i.Xa=this.i.Xb*this.i.Za;this.D.va=!1;this.D.Wb=!1;this.D.rc=a.autoStart;this.D.tc=!1;this.D.hb=!1;this.i.xb=this.i.mb=0;this.i.yb=a.csStart;this.i.lb=a.csInterval;this.i.nb=a.csStop;this.ba=this.$a.bind(this);E(this)}$a(gc);var hc=["power","reset"];m=gc.prototype;
m.Na=function(a,b,c,d){this.u=a;this.w=b;this.H=d;for(b=0;b<hc.length;b++)(c=this.L[hc[b]])&&this.u.ja(null,hc[b],c);this.M=(b=rb(a,"Video"))&&Math.max(b.Dc,b.Tb)||60;this.C=rb(a,"ChipSet");a=ic(a,"autoStart");null!=a&&(this.D.rc="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.Ob=0};m.save=function(){return null};m.restore=function(){return!1};
m.za=function(a,b){if(!b){if(a&&this.restore){jc(this);if(!this.restore(a))return!1;kc(this)}else this.reset();if(this.H){var c=this.H;c.g("Type ? for help with PC8080 Debugger commands");c.Ea();if(c.Ia){var d=c.Ia;c.Ia=null;lc(c,d)}}else this.g("No debugger detected")}mc(this);return!0};m.Da=function(a){return a?this.save():!0};function nc(a){(a.D.rc||!a.H&&void 0===a.L.run)&&a.$a(!0)}m.uc=function(){return 0};
function kc(a){void 0===a.i.yb&&(a.i.yb=0);void 0===a.i.lb&&(a.i.lb=-1);void 0===a.i.nb&&(a.i.nb=-1);a.D.hb=0<=a.i.yb&&0<a.i.lb;a.D.hb&&(a.i.xb=0,a.i.mb=a.i.yb-a.J)}function oc(a,b){if(a.D.hb){var c=!1;a.i.xb=a.i.xb+a.uc()|0;a.i.mb-=b;0>=a.i.mb&&(a.i.mb+=a.i.lb,c=!0);0<=a.i.nb&&a.i.nb<=pc(a)&&(a.i.lb=a.i.nb=-1,kc(a),a.ka(),c=!0);c&&a.g(pc(a)+" cycles: checksum="+n(a.i.xb))}}
m.ja=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.L[b]=c;a=!0;break;case "run":this.L[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.D.sa)a=!0;else{var b=null,c,g=cb(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.D.jb);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.D.sa);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.D.jb?"powered yet":"ready yet"+(b.Mb?" (waiting for notification)":""))+".");a=!1}a&&(d.D.va?d.ka(!0):d.$a(!0))};a=
!0;break;case "speed":this.L[b]=c;a=!0;break;case "setSpeed":this.L[b]=c,c.onclick=function(){Cc(d,d.i.Za<<1,!0)},c.textContent=this.i.Xa.toFixed(2)+"Mhz",a=!0}return a};function Dc(a,b,c){a.J+=b;c&&(a.F=a.b=0)}
function Ec(a,b){var c=30;c<a.M&&(c=a.M);2>c&&(c=2);var d=1;b&&1<a.i.Za&&a.i.Wa&&(d=a.i.Wa/a.i.Xb);a.i.vc=Math.round(1E3/30);a.i.xd=Math.floor(a.i.pb/c*d);a.i.$b=Math.floor(a.i.pb/30*d);a.i.xc=Math.floor(a.i.pb/a.M*d);a.i.wc=Math.floor(a.i.pb/2*d);b||(a.i.ob=a.i.$b,a.i.Ab=a.i.xc,a.i.zb=a.i.wc);a.i.ac=0}function pc(a){return a.J+a.I+a.F-a.b}function jc(a){a.i.Wa=0;a.J=a.I=a.F=a.b=0;kc(a);Cc(a,1)}
function Cc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Wa/a.i.Xa?b=1:d=!0;a.i.Za=b;b=a.i.Xb*a.i.Za;if(a.i.Xa!=b){a.i.Xa=b;b=a.i.Xa.toFixed(2)+"Mhz";var e=a.L.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.u&&a.u.Eb()}Dc(a,a.I);a.I=0;a.i.kb=la();a.i.Ya=0;Ec(a);return d}
m.$a=function(a){if(ib(this,!0)){if(!this.D.va){Cc(this);this.u&&this.u.start(this.i.kb,pc(this));this.D.va=!0;this.D.Wb=!0;this.C&&this.C.start();var b=this.L.run;b&&(b.textContent="Halt");this.u&&(this.u.Ea(!0),a&&this.u.Eb(!0))}this.i.ac>=this.i.pb&&Ec(this,!0);this.i.Bb=0;this.i.Nb=la();this.i.Ya&&(a=this.i.Nb-this.i.Ya,a>this.i.vc&&(this.i.kb+=a,this.i.kb>this.i.Nb&&(this.i.kb=this.i.Nb)));try{do{this.rb(this.D.hb?1:this.i.xd);var c=this.F-this.b;this.I+=c;this.i.Bb+=c;Dc(this,0,!0);oc(this,
c);this.i.Ab-=c;0>=this.i.Ab&&(this.i.Ab+=this.i.xc,this.u&&Fc(this.u,this.i.Ob++),this.i.Ob>this.M&&(this.i.Ob=0));this.i.zb-=c;0>=this.i.zb&&(this.i.zb+=this.i.wc,this.u&&this.u.Ea());this.i.ob-=c;if(0>=this.i.ob){this.i.ob+=this.i.$b;break}}while(this.D.va)}catch(e){this.ka();mc(this);this.u&&this.u.stop(la(),pc(this));ib(this,!1);lb(this,e.stack||e.message);return}c=setTimeout;a=this.ba;this.i.Ya=la();b=this.i.vc;this.i.Bb&&(b=Math.round(b*this.i.Bb/this.i.$b));var b=b-(this.i.Ya-this.i.Nb),d=
this.i.Ya-this.i.kb;d&&(this.i.Wa=Math.round(this.I/(10*d))/100,864E5<=d&&(this.J=0,Cc(this)));if(0>b||this.i.Wa<this.i.Xa)b=0;this.i.ac+=this.i.Bb;this.i.Ya+=b;c(a,b)}else mc(this),this.u&&this.u.stop(la(),pc(this))};m.rb=function(){return 0};m.ka=function(a){jb(this,!0);this.F-=this.b;this.b=0;Dc(this,this.I);this.I=0;if(this.D.va){this.D.va=!1;this.C&&this.C.stop();var b=this.L.run;b&&(b.textContent="Run")}this.D.Lb=a};function mc(a,b){a.u&&(Fc(a.u,-1),a.u.Ea(b))}
function Gc(a){this.Yb=+a.model||8080;gc.call(this,a,1E6);this.O=Hc;jc(this);this.D.Lb=this.D.nd=!1;this.Z=0;this.K=[];this.W=0;Ic(this)}$a(Gc,gc);function Jc(a,b){a.K.push(b)}m=Gc.prototype;m.reset=function(){this.D.va&&this.ka();Ic(this);jc(this);this.D.ib=!1;this.parent.reset.call(this)};function Ic(a){a.j=0;a.P=0;a.R=0;a.S=0;a.T=0;a.U=0;a.X=0;a.ia=0;G(a,a.W);Kc(a,0);a.A=0}function Lc(a,b){a.W=b;G(a,b)}
m.uc=function(){var a=this.j+this.P+this.R+this.S+this.T+this.U+this.X|0;return a=a+this.ia+this.N+Mc(this)|0};
m.save=function(){var a=new H(this);I(a,0,[this.j,this.P,this.R,this.S,this.T,this.U,this.X,this.ia,this.N,Mc(this)]);I(a,1,[this.A,this.J,this.i.Za]);for(var b=this.w,c=0,d=[],e=0;e<b.M;e++){var f=b.V[e];if(f.La||f.sc){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.P=b[1];this.R=b[2];this.S=b[3];this.T=b[4];this.U=b[5];this.X=b[6];this.ia=b[7]&65535;G(this,b[8]);Kc(this,b[9]);b=a[1];this.A=b[0];this.J=b[1];Cc(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.W){for(var f=0,h=Array(b.W),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.V[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.ja=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.L[b]=c;this.Z++;d=!0;break;default:d=this.parent.ja.call(this,a,b,c)}return d};function Nc(a){return a.P<<8|a.R}function Oc(a,b){a.P=b>>8&255;a.R=b&255}function Pc(a){return a.S<<8|a.T}function Qc(a,b){a.S=b>>8&255;a.T=b&255}function J(a){return a.U<<8|a.X}
function Rc(a,b){a.U=b>>8&255;a.X=b&255}function G(a,b){a.N=b&65535}function Sc(a){return a.aa&256?1:0}function Tc(a,b){a.aa=a.aa&255|b}function Uc(a){return pb[a.ca&255]?4:0}function Vc(a){return(a.ca^a.ua)&16?16:0}function Wc(a){return a.aa&255?0:64}function Xc(a){return a.ca&128?128:0}function Mc(a){return a.ta&-214|Xc(a)|Wc(a)|Vc(a)|Uc(a)|Sc(a)}function Kc(a,b){a.aa=a.ca=a.ua=0;b&1&&(a.aa|=256);b&4||(a.ca|=1);b&16&&(a.ua|=16);b&64||(a.aa|=255);b&128&&(a.ca^=192);a.ta=a.ta&-726|b&512|2}
function Yc(a,b){a.ua=a.j^b;return a.ca=(a.aa=a.j+b)&255}function Zc(a,b){a.ua=a.j^b;return a.ca=(a.aa=a.j+b+(a.aa&256?1:0))&255}function $c(a,b){a.aa=a.ca=a.ua=a.j&b;(a.j|b)&8&&(a.ua^=16);return a.aa}function ad(a,b){a.ua=b^255;b=a.ca=b+255&255;a.aa=a.aa&-256|b;return b}function bd(a,b){a.ua=b;b=a.ca=b+1&255;a.aa=a.aa&-256|b;return b}function cd(a,b){return a.ca=a.aa=a.ua=a.j|b}function L(a,b){b^=255;a.ua=a.j^b;return a.ca=(a.aa=a.j+b+1^256)&255}
function dd(a,b){b^=255;a.ua=a.j^b;return a.ca=(a.aa=a.j+b+(a.aa&256?0:1)^256)&255}function ed(a,b){return a.ca=a.aa=a.ua=a.j^b}m.Y=function(a){return this.w.Y(a)};m.qa=function(a,b){this.w.qa(a,b)};function M(a){var b=a.Y(a.N);G(a,a.N+1);return b}function N(a){var b=a.w.Pa(a.N);G(a,a.N+2);return b}function O(a){var b=a.w.Pa(a.ia);a.ia=a.ia+2&65535;return b}function Q(a,b){a.ia=a.ia-2&65535;a.w.Rb(a.ia,b)}function fd(a,b){a.A=a.A&-8|b|8}
function R(a,b,c,d){d=d||2;a.L[b]&&(void 0===c&&(lb(a,"Value for "+b+" is invalid"),a.ka()),c=!a.D.va||a.D.tc?n(c,d):"--------".substr(0,d),a.L[b].textContent!=c&&(a.L[b].textContent=c))}
m.Ea=function(a){this.Z&&(a||!this.D.va||this.D.tc)&&(R(this,"A",this.j),R(this,"B",this.P),R(this,"C",this.R),R(this,"BC",Nc(this),4),R(this,"D",this.S),R(this,"E",this.T),R(this,"DE",Pc(this),4),R(this,"H",this.U),R(this,"L",this.X),R(this,"HL",J(this),4),R(this,"SP",this.ia,4),R(this,"PC",this.N,4),a=Mc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.L.speed)a.textContent=
this.D.va&&this.i.Wa?this.i.Wa.toFixed(2)+"Mhz":"Stopped"};
m.rb=function(a){this.D.Lb=!0;var b=this.D.nd=this.H&&gd(this.H),c=a?this.D.Wb?0:1:-1;this.D.Wb=!1;this.F=this.b=a;do{if(this.A){var d;this.A&8&&this.ta&512?(d=199|(this.A&7)<<3,this.A&=-16,this.ta&=-513,this.O[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.A&16){this.b=0;break}}if(b){if(Ad(this.H,this.N,c)){this.ka();break}c=1}this.O[M(this)].call(this)}while(0<this.b);return this.D.Lb?this.F-this.b:void 0===this.D.Lb?0:-1};
Ja(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Gc(d);eb(d,c)}});function Bd(){this.b-=4}function Cd(){G(this,N(this));this.b-=10}function Dd(){G(this,O(this));this.b-=10}function Ed(){var a=N(this);Q(this,this.N);G(this,a);this.b-=17}
var Hc=[Bd,function(){Oc(this,N(this));this.b-=10},function(){this.qa(Nc(this),this.j);this.b-=7},function(){Oc(this,Nc(this)+1);this.b-=5},function(){this.P=bd(this,this.P);this.b-=5},function(){this.P=ad(this,this.P);this.b-=5},function(){this.P=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;Tc(this,a&256);this.b-=4},Bd,function(){var a;Rc(this,a=J(this)+Nc(this));Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(Nc(this));this.b-=7},function(){Oc(this,Nc(this)-1);this.b-=
5},function(){this.R=bd(this,this.R);this.b-=5},function(){this.R=ad(this,this.R);this.b-=5},function(){this.R=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;Tc(this,a);this.b-=4},Bd,function(){Qc(this,N(this));this.b-=10},function(){this.qa(Pc(this),this.j);this.b-=7},function(){Qc(this,Pc(this)+1);this.b-=5},function(){this.S=bd(this,this.S);this.b-=5},function(){this.S=ad(this,this.S);this.b-=5},function(){this.S=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|
Sc(this);Tc(this,a&256);this.b-=4},Bd,function(){var a;Rc(this,a=J(this)+Pc(this));Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(Pc(this));this.b-=7},function(){Qc(this,Pc(this)-1);this.b-=5},function(){this.T=bd(this,this.T);this.b-=5},function(){this.T=ad(this,this.T);this.b-=5},function(){this.T=M(this);this.b-=7},function(){var a=this.j<<8;this.j=(Sc(this)<<8|this.j)>>1;Tc(this,a&256);this.b-=4},Bd,function(){Rc(this,N(this));this.b-=10},function(){var a=N(this);this.w.Rb(a,J(this));
this.b-=16},function(){Rc(this,J(this)+1);this.b-=5},function(){this.U=bd(this,this.U);this.b-=5},function(){this.U=ad(this,this.U);this.b-=5},function(){this.U=M(this);this.b-=7},function(){var a=0,b=Sc(this);if(Vc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Yc(this,a);Tc(this,b?256:0);this.b-=4},Bd,function(){var a;Rc(this,a=J(this)+J(this));Tc(this,a>>8&256);this.b-=10},function(){var a;a=N(this);a=this.w.Pa(a);Rc(this,a);this.b-=16},function(){Rc(this,J(this)-1);this.b-=5},function(){this.X=
bd(this,this.X);this.b-=5},function(){this.X=ad(this,this.X);this.b-=5},function(){this.X=M(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},Bd,function(){this.ia=N(this)&65535;this.b-=10},function(){this.qa(N(this),this.j);this.b-=13},function(){this.ia=this.ia+1&65535;this.b-=5},function(){var a=J(this);this.qa(a,bd(this,this.Y(a)));this.b-=10},function(){var a=J(this);this.qa(a,ad(this,this.Y(a)));this.b-=10},function(){this.qa(J(this),M(this));this.b-=10},function(){this.aa|=256;this.b-=
4},Bd,function(){var a;Rc(this,a=J(this)+this.ia);Tc(this,a>>8&256);this.b-=10},function(){this.j=this.Y(N(this));this.b-=13},function(){this.ia=this.ia-1&65535;this.b-=5},function(){this.j=bd(this,this.j);this.b-=5},function(){this.j=ad(this,this.j);this.b-=5},function(){this.j=M(this);this.b-=7},function(){Tc(this,Sc(this)?0:256);this.b-=4},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.T;this.b-=5},function(){this.P=this.U;this.b-=
5},function(){this.P=this.X;this.b-=5},function(){this.P=this.Y(J(this));this.b-=7},function(){this.P=this.j;this.b-=5},function(){this.R=this.P;this.b-=5},function(){this.b-=5},function(){this.R=this.S;this.b-=5},function(){this.R=this.T;this.b-=5},function(){this.R=this.U;this.b-=5},function(){this.R=this.X;this.b-=5},function(){this.R=this.Y(J(this));this.b-=7},function(){this.R=this.j;this.b-=5},function(){this.S=this.P;this.b-=5},function(){this.S=this.R;this.b-=5},function(){this.b-=5},function(){this.S=
this.T;this.b-=5},function(){this.S=this.U;this.b-=5},function(){this.S=this.X;this.b-=5},function(){this.S=this.Y(J(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.T=this.P;this.b-=5},function(){this.T=this.R;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=this.U;this.b-=5},function(){this.T=this.X;this.b-=5},function(){this.T=this.Y(J(this));this.b-=7},function(){this.T=this.j;this.b-=5},function(){this.U=this.P;this.b-=5},function(){this.U=
this.R;this.b-=5},function(){this.U=this.S;this.b-=5},function(){this.U=this.T;this.b-=5},function(){this.b-=5},function(){this.U=this.X;this.b-=5},function(){this.U=this.Y(J(this));this.b-=7},function(){this.U=this.j;this.b-=5},function(){this.X=this.P;this.b-=5},function(){this.X=this.R;this.b-=5},function(){this.X=this.S;this.b-=5},function(){this.X=this.T;this.b-=5},function(){this.X=this.U;this.b-=5},function(){this.b-=5},function(){this.X=this.Y(J(this));this.b-=7},function(){this.X=this.j;
this.b-=5},function(){this.qa(J(this),this.P);this.b-=7},function(){this.qa(J(this),this.R);this.b-=7},function(){this.qa(J(this),this.S);this.b-=7},function(){this.qa(J(this),this.T);this.b-=7},function(){this.qa(J(this),this.U);this.b-=7},function(){this.qa(J(this),this.X);this.b-=7},function(){var a=this.N-1;if(this.K.length)for(var b=0;b<this.K.length;b++)if(this.K[b](a))return;this.u|=16;this.b-=7;this.H&&gb(this,-2147483648)?(G(this,a),this.H.ja()):this.ta&512||(this.H&&G(this,a),this.ja())},
this.b-=5},function(){this.qa(J(this),this.P);this.b-=7},function(){this.qa(J(this),this.R);this.b-=7},function(){this.qa(J(this),this.S);this.b-=7},function(){this.qa(J(this),this.T);this.b-=7},function(){this.qa(J(this),this.U);this.b-=7},function(){this.qa(J(this),this.X);this.b-=7},function(){var a=this.N-1;if(this.K.length)for(var b=0;b<this.K.length;b++)if(this.K[b](a))return;this.A|=16;this.b-=7;this.H&&hb(this,-2147483648)?(G(this,a),this.H.ka()):this.ta&512||(this.H&&G(this,a),this.ka())},
function(){this.qa(J(this),this.j);this.b-=7},function(){this.j=this.P;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.T;this.b-=5},function(){this.j=this.U;this.b-=5},function(){this.j=this.X;this.b-=5},function(){this.j=this.Y(J(this));this.b-=7},function(){this.b-=5},function(){this.j=Yc(this,this.P);this.b-=4},function(){this.j=Yc(this,this.R);this.b-=4},function(){this.j=Yc(this,this.S);this.b-=4},function(){this.j=Yc(this,this.T);this.b-=
4},function(){this.j=Yc(this,this.U);this.b-=4},function(){this.j=Yc(this,this.X);this.b-=4},function(){this.j=Yc(this,this.Y(J(this)));this.b-=7},function(){this.j=Yc(this,this.j);this.b-=4},function(){this.j=Zc(this,this.P);this.b-=4},function(){this.j=Zc(this,this.R);this.b-=4},function(){this.j=Zc(this,this.S);this.b-=4},function(){this.j=Zc(this,this.T);this.b-=4},function(){this.j=Zc(this,this.U);this.b-=4},function(){this.j=Zc(this,this.X);this.b-=4},function(){this.j=Zc(this,this.Y(J(this)));
this.b-=7},function(){this.j=Zc(this,this.j);this.b-=4},function(){this.j=K(this,this.P);this.b-=4},function(){this.j=K(this,this.R);this.b-=4},function(){this.j=K(this,this.S);this.b-=4},function(){this.j=K(this,this.T);this.b-=4},function(){this.j=K(this,this.U);this.b-=4},function(){this.j=K(this,this.X);this.b-=4},function(){this.j=K(this,this.Y(J(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=wd(this,this.P);this.b-=4},function(){this.j=wd(this,this.R);this.b-=
4},function(){this.j=wd(this,this.S);this.b-=4},function(){this.j=wd(this,this.T);this.b-=4},function(){this.j=wd(this,this.U);this.b-=4},function(){this.j=wd(this,this.X);this.b-=4},function(){this.j=wd(this,this.Y(J(this)));this.b-=7},function(){this.j=wd(this,this.j);this.b-=4},function(){this.j=$c(this,this.P);this.b-=4},function(){this.j=$c(this,this.R);this.b-=4},function(){this.j=$c(this,this.S);this.b-=4},function(){this.j=$c(this,this.T);this.b-=4},function(){this.j=$c(this,this.U);this.b-=
4},function(){this.j=$c(this,this.X);this.b-=4},function(){this.j=$c(this,this.Y(J(this)));this.b-=7},function(){this.j=$c(this,this.j);this.b-=4},function(){this.j=xd(this,this.P);this.b-=4},function(){this.j=xd(this,this.R);this.b-=4},function(){this.j=xd(this,this.S);this.b-=4},function(){this.j=xd(this,this.T);this.b-=4},function(){this.j=xd(this,this.U);this.b-=4},function(){this.j=xd(this,this.X);this.b-=4},function(){this.j=xd(this,this.Y(J(this)));this.b-=7},function(){this.j=xd(this,this.j);
this.b-=4},function(){this.j=cd(this,this.P);this.b-=4},function(){this.j=cd(this,this.R);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.X);this.b-=4},function(){this.j=cd(this,this.Y(J(this)));this.b-=7},function(){this.j=cd(this,this.j);this.b-=4},function(){K(this,this.P);this.b-=4},function(){K(this,this.R);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,
this.T);this.b-=4},function(){K(this,this.U);this.b-=4},function(){K(this,this.X);this.b-=4},function(){K(this,this.Y(J(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){Wc(this)||(G(this,N(this)),this.b-=6);this.b-=5},function(){Oc(this,N(this));this.b-=10},function(){var a=M(this);Wc(this)||G(this,a);this.b-=10},Bd,function(){var a=M(this);Wc(this)||(P(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){P(this,Nc(this));this.b-=11},function(){this.j=Yc(this,L(this));this.b-=
7},function(){P(this,this.N);G(this,0);this.b-=11},function(){Wc(this)&&(G(this,N(this)),this.b-=6);this.b-=5},Cd,function(){var a=M(this);Wc(this)&&G(this,a);this.b-=10},Bd,function(){var a=M(this);Wc(this)&&(P(this,this.N),G(this,a),this.b-=6);this.b-=11},Dd,function(){this.j=Zc(this,L(this));this.b-=7},function(){P(this,this.N);G(this,8);this.b-=11},function(){Sc(this)||(G(this,N(this)),this.b-=6);this.b-=5},function(){Qc(this,N(this));this.b-=10},function(){var a=M(this);Sc(this)||G(this,a);this.b-=
10},function(){var a=L(this);Gb(this.A,a,this.j,this.N+-2&65535);this.b-=10},function(){var a=M(this);Sc(this)||(P(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){P(this,Pc(this));this.b-=11},function(){this.j=K(this,L(this));this.b-=7},function(){P(this,this.N);G(this,16);this.b-=11},function(){Sc(this)&&(G(this,N(this)),this.b-=6);this.b-=5},Cd,function(){var a=M(this);Sc(this)&&G(this,a);this.b-=10},function(){var a=L(this);this.j=Cb(this.A,a,this.N+-2&65535)&255;this.b-=10},function(){var a=
M(this);Sc(this)&&(P(this,this.N),G(this,a),this.b-=6);this.b-=11},Dd,function(){this.j=wd(this,L(this));this.b-=7},function(){P(this,this.N);G(this,24);this.b-=11},function(){Uc(this)||(G(this,N(this)),this.b-=6);this.b-=5},function(){Rc(this,N(this));this.b-=10},function(){var a=M(this);Uc(this)||G(this,a);this.b-=10},function(){var a=N(this);P(this,J(this));Rc(this,a);this.b-=18},function(){var a=M(this);Uc(this)||(P(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){P(this,J(this));this.b-=
11},function(){this.j=$c(this,L(this));this.b-=7},function(){P(this,this.N);G(this,32);this.b-=11},function(){Uc(this)&&(G(this,N(this)),this.b-=6);this.b-=5},function(){G(this,J(this));this.b-=5},function(){var a=M(this);Uc(this)&&G(this,a);this.b-=10},function(){var a=J(this);Rc(this,Pc(this));Qc(this,a);this.b-=5},function(){var a=M(this);Uc(this)&&(P(this,this.N),G(this,a),this.b-=6);this.b-=11},Dd,function(){this.j=xd(this,L(this));this.b-=7},function(){P(this,this.N);G(this,40);this.b-=11},
function(){Xc(this)||(G(this,N(this)),this.b-=6);this.b-=5},function(){var a=N(this);Jc(this,a&255|this.ta&-256);this.j=a>>8;this.b-=10},function(){var a=M(this);Xc(this)||G(this,a);this.b-=10},function(){this.ta&=-513;this.b-=4},function(){var a=M(this);Xc(this)||(P(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){P(this,Lc(this)&255|this.j<<8);this.b-=11},function(){this.j=cd(this,L(this));this.b-=7},function(){P(this,this.N);G(this,48);this.b-=11},function(){Xc(this)&&(G(this,N(this)),
this.b-=6);this.b-=5},function(){this.ia=J(this)&65535;this.b-=5},function(){var a=M(this);Xc(this)&&G(this,a);this.b-=10},function(){this.ta|=512;this.b-=4},function(){var a=M(this);Xc(this)&&(P(this,this.N),G(this,a),this.b-=6);this.b-=11},Dd,function(){K(this,L(this));this.b-=7},function(){P(this,this.N);G(this,56);this.b-=11}];
function R(a){w.call(this,"ChipSet",a,R,32768);var b=a.model;b&&!Ed[b]&&Ka("Unrecognized ChipSet model: "+b);this.G=Ed[b]||{};a.sound&&(this.ba=null,window&&(this.ba=window.AudioContext||window.webkitAudioContext),this.ba&&new this.ba);E(this)}Za(R);
var S={xa:1978.1,Xc:{ya:0,Jd:1,Od:16,be:32,pe:64,ne:128,tb:14},Ua:{ya:1,Ec:1,Tc:2,Pc:4,Qc:16,Rc:32,Sc:64,tb:8},Yc:{ya:2,Id:3,ze:4,Kd:8,je:16,ke:32,le:64,Ld:128,tb:0},te:{ya:3},re:{ya:2,de:7},ve:{ya:3,Be:1,ue:2,me:4,Wd:8,Md:16,Ad:32},se:{ya:4},we:{ya:5,Pd:1,Qd:2,Rd:4,Sd:8,Ce:16}},T={xa:100,bb:{ya:66,Ge:1,Nc:2,Oc:4,he:8,fe:16,dc:32,cc:64,Zd:128},Dc:{ya:66,INIT:0},Ia:{ae:{ya:98},Qa:{Cc:0,Bc:1,Vc:2,$c:4,Hc:5,Uc:6,Wc:7},Jb:16383},Gc:{ya:162,INIT:0},Fc:{ya:194,INIT:0}},Ed={SI1978:S,VT100:T};
R.prototype.pa=function(){return!1};R.prototype.Oa=function(a,b,c,d){this.A=b;this.b=c;this.H=d;this.w=a;Bb(b,this,this.G.Ob);Fb(b,this,this.G.Pb)};R.prototype.Ca=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};R.prototype.Ja=function(a){return a?this.save():!0};S.INIT=[[S.Xc.tb,S.Ua.tb,S.Yc.tb,0,0,0,0]];T.INIT=[[T.Dc.INIT,T.bb.Nc|T.bb.Oc,T.Gc.INIT,T.Fc.INIT],[0,0,0,0,Array(100)]];m=R.prototype;m.reset=function(){this.G.INIT&&!this.restore(this.G.INIT)&&this.ga("reset error")};
m.save=function(){var a=new Mc(this);switch(this.G.xa){case S.xa:H(a,0,[this.ra,this.D,this.wa,this.O,this.Z,this.ka,this.ma]);break;case T.xa:H(a,0,[this.da,this.J,this.fa,this.ea]),H(a,1,[this.L,this.u,this.K,this.W,this.I])}return a.data()};
m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.G.xa){case S.xa:return this.ra=b[0],this.D=b[1],this.wa=b[2],this.O=b[3],this.Z=b[4],this.ka=b[5],this.ma=b[6],!0;case T.xa:return this.da=b[0],this.J=b[2],this.fa=b[3],this.ea=b[4],b=a[1],this.L=b[0],this.u=b[1],this.K=b[2],this.W=b[3],this.I=b[4],!0}return!1};m.start=function(){};m.stop=function(){};function Fd(a,b,c){a.D&=~b;c&&(a.D|=b)}m.kd=function(a,b){var c=this.ra;D(this,a,null,b,"STATUS0",c);return c};
m.ld=function(a,b){var c=this.D;D(this,a,null,b,"STATUS1",c);return c};m.md=function(a,b){var c=this.wa;D(this,a,null,b,"STATUS2",c);return c};m.jd=function(a,b){var c=this.O>>8-this.Z&255;D(this,a,null,b,"SHIFT.RESULT",c);return c};m.qd=function(a,b,c){D(this,a,b,c,"SHIFT.COUNT",null);this.Z=b};m.sd=function(a,b,c){D(this,a,b,c,"SOUND1",null);this.ka=b};m.rd=function(a,b,c){D(this,a,b,c,"SHIFT.DATA",null);this.O=b<<8|this.O>>8};m.td=function(a,b,c){D(this,a,b,c,"SOUND2",null);this.ma=b};
m.ud=function(a,b,c){D(this,a,b,c,"WATCHDOG",null)};function Gd(a){var b=0,c=0,d=~a.L;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.nd=function(a,b){var c=this.J,c=c&~T.bb.cc;if((Ac(this.b)&64)<<1&&(c|=T.bb.cc,c!=this.J)){var d,e;d=this.K&1;e=this.K>>1&7;switch(e){case T.Ia.Qa.Wc:break;case T.Ia.Qa.Bc:this.L=this.L<<1|d;break;case T.Ia.Qa.Hc:d=Gd(this);this.I[d]=T.Ia.Jb;fb(this,"doNVRCommand(): erase data at addr "+r(d));break;case T.Ia.Qa.Cc:this.u=this.u<<1|d;break;case T.Ia.Qa.$c:d=Gd(this);e=this.u&T.Ia.Jb;this.I[d]=e;fb(this,"doNVRCommand(): write data "+r(e)+" to addr "+r(d));break;case T.Ia.Qa.Uc:d=Gd(this);e=this.I[d];
null==e&&(e=T.Ia.Jb);this.u=e;fb(this,"doNVRCommand(): read data "+r(e)+" from addr "+r(d));break;case T.Ia.Qa.Vc:this.u<<=1;this.W=this.u&T.Ia.Jb+1;break;default:fb(this,"doNVRCommand(): unrecognized command 0x"+n(e,2))}}c&=~T.bb.dc;this.W&&(c|=T.bb.dc);this.J=c;D(this,a,null,b,"FLAGS.BUFFER",c);return c};m.vd=function(a,b,c){D(this,a,b,c,"BRIGHTNESS",null);this.da=b};m.yd=function(a,b,c){D(this,a,b,c,"NVR.LATCH",null);this.K=b};m.xd=function(a,b,c){D(this,a,b,c,"DC012",null);this.fa=b};
m.wd=function(a,b,c){D(this,a,b,c,"DC011",null);this.ea=b};S.Ob={0:R.prototype.kd,1:R.prototype.ld,2:R.prototype.md,3:R.prototype.jd};S.Pb={2:R.prototype.qd,3:R.prototype.sd,4:R.prototype.rd,5:R.prototype.td,6:R.prototype.ud};T.Ob={66:R.prototype.nd};T.Pb={66:R.prototype.vd,98:R.prototype.yd,162:R.prototype.xd,194:R.prototype.wd};Ia(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new R(d);db(d,c)}});
function Hd(a){w.call(this,"ROM",a,Hd);this.w=null;this.I=a.addr;this.u=a.size;this.J=a.writable;this.G=a.alias;this.D=a.file;this.K=ba(this.D);if(this.D){a=this.D;var b=ca(this.K);"json"!=b&&"hex"!=b&&(a=oa()+"/api/v1/dump?file="+this.D+"&format=bytes&decimal=true");var c=this;na(a,null,!0,function(a,b,f){Id(c,a,b,f)})}}Za(Hd);var Jd=[0,5];Hd.prototype.Oa=function(a,b,c,d){this.A=b;this.b=c;this.H=d;Kd(this)};
Hd.prototype.Ca=function(){if(this.Na){if(this.H){var a=this.H,b=this.id,c=this.I,d=this.u,e=this.Na,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=ja(p,k,a.Sa);0>q&&p.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.J.push({Ve:b,F:c,od:d,Na:e,nc:f})}delete this.Na}return!0};Hd.prototype.Ja=function(){return!0};
function Id(a,b,c,d){if(d)a.ga("Unable to load system ROM (error "+d+": "+b+")");else{ab(a.Rb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.w=f;else if(h)for(a.w=Array(4*h.length),d=c=0;c<h.length;c++)a.w[d++]=h[c]&255,a.w[d++]=h[c]>>8&255,a.w[d++]=h[c]>>16&255,a.w[d++]=h[c]>>24&255;else a.w=e;a.Na=e.symbols;if(!a.w.length){t("Empty ROM: "+b);return}if(1==a.w.length){t(a.w[0]);return}}catch(g){a.ga("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.w=Array(b.length),e=0;e<b.length;e++)a.w[e]=aa(b[e],16);Kd(a)}}
function Kd(a){if(!jb(a))if(!a.D)E(a);else if(a.w&&a.A){a.u||(a.u=a.w.length);if(a.w.length!=a.u)kb(a,"ROM size (0x"+n(a.w.length)+") does not match specified size ("+("0x"+n(a.u))+")");else if(Ld(a,a.I)){var b=[];"number"==typeof a.G?b.push(a.G):null!=a.G&&a.G.length&&(b=a.G);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.A,h=d.u,g=[],k=d.I>>>f.la;0<h&&k<f.V.length;)g.push(f.V[k++]),h-=f.Ba;f=d.A;d=d.u;h=0;for(e>>>=f.la;0<d&&e<f.V.length;){k=g[h++];if(!k)break;f.V[e++]=k;d-=f.Ba}}delete a.w}E(a)}}
function Ld(a,b){if(ub(a.A,b,a.u,a.J?1:Vb)){var c;for(c=0;c<a.w.length;c++)zb(a.A,b+c,a.w[c]);if(a.J&&256==b){for(c=0;c<Jd.length;c++)zb(a.A,Jd[c],118);Ic(a.b,function(a){return function(b){if(0<=Jd.indexOf(b)){var c=!1,h=a.b,g=a.H;if(5==b)switch(c=!0,h.R){case 2:Md(a,String.fromCharCode(h.T));break;case 9:for(var k=Pc(h),l="",p=255;p--;){var q=a.b.Y(k++);if(36==q)break;l+=String.fromCharCode(q)}Md(a,l);break;default:c=!1}c?Cd.call(h):g&&(a.g("\nCP/M vector "+r(b)),G(h,b),g.ja());b=!0}else b=!1;return b}}(a));
Kc(a.b,b)}return!0}return!1}function Md(a,b){b=b.replace(/\r/g,"");a.Aa&&(a.Aa.value+=b,a.Aa.scrollTop=a.Aa.scrollHeight)}Ia(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Hd(d);db(d,c)}});function Nd(a){w.call(this,"RAM",a,Nd);this.G=a.addr;this.u=a.size;this.w=!1}Za(Nd);m=Nd.prototype;m.Oa=function(a,b,c,d){this.A=b;this.b=c;this.H=d;E(this)};m.Ca=function(a,b){b||this.reset();return!0};m.Ja=function(a){return a?this.save():!0};
m.reset=function(){!this.w&&this.u&&ub(this.A,this.G,this.u,1)&&(this.w=!0);this.w||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ia(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Nd(d);db(d,c)}});function Od(a){w.call(this,"Keyboard",a,Od,65536);(a=a.model)&&!Pd[a]&&Ka("Unrecognized Keyboard model: "+a);this.b=Pd[a]||{};this.reset();E(this)}Za(Od);
var U={Ed:1,Fd:3,Gd:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,zd:65,Bd:66,Cd:67,Hd:68,E:69,Nd:70,Td:71,Ud:72,Vd:73,Xd:74,Yd:75,$d:76,ce:77,ee:78,ge:79,ie:80,Q:81,oe:82,qe:83,ye:84,Ae:85,De:86,Ee:87,Fe:88,He:89,Ie:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Je:97,Ke:98,Le:99,d:100,e:101,Me:102,Ne:103,Oe:104,Pe:105,Qe:106,k:107,Re:108,
Se:109,n:110,Te:111,p:112,q:113,r:114,Ue:115,t:116,We:117,Xe:118,Ye:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126},Qd={65:37,68:39,76:32},Rd={xa:1978.1,wb:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},V={xa:100,wb:{},Ka:{ya:130,Lc:1,Kc:2,Jc:4,Ic:8,Mc:16,fc:32,ac:63,xe:64,Dd:128,INIT:0},B:{}};V.B[46]=3;V.B[80]=5;V.B[79]=6;V.B[89]=7;V.B[84]=8;V.B[87]=9;V.B[81]=10;V.B[39]=16;V.B[U["]"]]=20;V.B[U["["]]=21;V.B[73]=22;V.B[85]=23;V.B[82]=24;V.B[69]=25;V.B[U["1"]]=26;V.B[37]=32;V.B[40]=34;
V.B[19]=35;V.B[U["`"]]=36;V.B[U["-"]]=37;V.B[U["9"]]=38;V.B[U["7"]]=39;V.B[U["4"]]=40;V.B[U["3"]]=41;V.B[27]=42;V.B[38]=48;V.B[114]=49;V.B[112]=50;V.B[8]=51;V.B[U["="]]=52;V.B[U["0"]]=53;V.B[U["8"]]=54;V.B[U["6"]]=55;V.B[U["5"]]=56;V.B[U["2"]]=57;V.B[9]=58;V.B[103]=64;V.B[115]=65;V.B[113]=66;V.B[96]=67;V.B[10]=68;V.B[U["\\"]]=69;V.B[76]=70;V.B[75]=71;V.B[71]=72;V.B[70]=73;V.B[65]=74;V.B[104]=80;V.B[2013]=81;V.B[98]=82;V.B[97]=83;V.B[U["'"]]=85;V.B[U[";"]]=86;V.B[74]=87;V.B[72]=88;V.B[68]=89;
V.B[83]=90;V.B[110]=96;V.B[119]=97;V.B[101]=98;V.B[100]=99;V.B[13]=100;V.B[U["."]]=101;V.B[U[","]]=102;V.B[78]=103;V.B[66]=104;V.B[88]=105;V.B[120]=106;V.B[105]=112;V.B[99]=113;V.B[102]=114;V.B[109]=115;V.B[U["/"]]=117;V.B[77]=118;V.B[U[" "]]=119;V.B[86]=120;V.B[67]=121;V.B[90]=122;V.B[121]=123;V.B[17]=124;V.B[16]=125;V.B[20]=126;V.Hb={l4:V.Ka.Lc,l3:V.Ka.Kc,l2:V.Ka.Jc,l1:V.Ka.Ic,locked:V.Ka.Mc,online:V.Ka.fc,local:~V.Ka.fc};var Pd={SI1978:Rd,VT100:V};
Od.prototype.pa=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.M[e]){if("led"==a&&this.b.Hb&&this.b.Hb[b])return this.M[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Sd(d,a,!0)},c.onkeyup=function(a){return Sd(d,a,!1)},!0;default:if(this.b.wb&&void 0!==this.b.wb[b])return this.M[e]=c,a=function(a,b){return function(){Td(a,b,!0)}}(this,b),b=function(a,b){return function(){Td(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=
c.onmouseout=b),!0}}return!1};Od.prototype.Oa=function(a,b,c,d){this.H=d;this.G=qb(a,"ChipSet");Bb(b,this,this.b.Ob);Fb(b,this,this.b.Pb)};Od.prototype.Ca=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Od.prototype.Ja=function(a){return a?this.save():!0};V.INIT=[[V.Ka.INIT]];Od.prototype.reset=function(){this.u={};this.A={};this.b.INIT&&!this.restore(this.b.INIT)&&this.ga("reset error")};
Od.prototype.save=function(){var a=new Mc(this);switch(this.b.xa){case V.xa:H(a,0,[this.w])}return a.data()};Od.prototype.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.b.xa){case Rd.xa:return!0;case V.xa:return this.w=b[0],Ud(this,this.w&V.Ka.ac),!0}return!1};function Ud(a,b){for(var c in a.b.Hb){var d=a.M["led-"+c];if(d){var e=a.b.Hb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function Sd(a,b,c){var d=!0,e;a:{e=b.keyCode;e=Qd[e]||e;for(var f in a.b.wb)if(a.b.wb[f]===e){e=f;break a}e=null}e&&(d=Td(a,e,c),b.preventDefault());return d}
function Td(a,b,c){if(c)a.u[b]=Date.now(),delete a.A[b];else{var d=a.u[b];if(d&&100>Date.now()-d)return a.A[b]=d,Vd(a),!0;delete a.u[b]}if(a.G)switch(b){case "1p":Fd(a.G,S.Ua.Pc,c);break;case "2p":Fd(a.G,S.Ua.Tc,c);break;case "coin":Fd(a.G,S.Ua.Ec,c);break;case "left":Fd(a.G,S.Ua.Rc,c);break;case "right":Fd(a.G,S.Ua.Sc,c);break;case "fire":Fd(a.G,S.Ua.Qc,c)}return!0}
function Vd(a){for(var b=-1,c=Object.keys(a.A),d=0;d<c.length;d++){var e=c[d],f=100-(Date.now()-a.A[e]);if(0<f){if(0>b||b>f)b=f}else delete a.A[e],Td(a,e,!1)}0<=b&&setTimeout(function(){Vd(a)},b)}Od.prototype.D=function(a,b,c){D(this,a,b,c,"KBDUART.STATUS",null);this.w=b;Ud(this,b&V.Ka.ac)};V.Ob={};V.Pb={130:Od.prototype.D};Ia(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Od(d);db(d,c)}});
function Wd(a,b,c,d,e){var f=this;this.hc=wa("Gecko/");var h=["","moz","ms","webkit"];w.call(this,"Video",a,Wd,262144);this.ba=a.screenWidth;this.Z=a.screenHeight;this.Ea=a.bufferAddr;this.cd=a.bufferRAM;var g=a.bufferFormat;this.L=g&&Xd[g.toLowerCase()]||Yd;this.Sa=a.bufferCols;this.fa=a.bufferRows;this.Zc=this.oa=a.cellWidth||1;this.ha=a.cellHeight||1;this.cb=null;this.gc=!1;this.Ra=a.bufferBits||1;this.dd=a.bufferLeft||0;if(this.D=a.bufferRotate)this.D=this.D%360,0<this.D&&(this.D-=360),-90!=this.D&&
(this.ga("unsupported buffer rotation: "+this.D),this.D=0);this.lc=a.interruptRate;this.Ac=a.refreshRate||60;this.W=b;this.I=c;this.Ga=(this.fd=d)||b||null;this.ad=this.ba;this.bd=this.Z;this.Ib=this.ba/this.Sa|0;this.ec=this.Z/this.fa|0;1<this.ha&&this.fa++;b=a.smoothing;(c=Ra.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.I[d]){this.I[d]=b;break}if(this.J=a.screenRotate)this.J=this.J%360,0<this.J&&(this.J-=
360),-90!=this.J?(this.ga("unsupported screen rotation: "+this.J),this.J=0):(this.I.translate(0,this.Z),this.I.rotate(this.J*Math.PI/180),this.I.scale(this.Z/this.ba,this.ba/this.Z));if(this.u=e)if(this.u.fb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.u.fb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){Zd(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(){Zd(f,null)},!1);break}}if(this.ka=a.fontROM)"json"!=ca(this.ka)&&(this.ka=oa()+"/api/v1/dump?file="+this.ka+"&format=bytes"),na(this.ka,null,!0,function(a,b,c){$d(f,a,b,c)});this.vb={}}Za(Wd);var Yd=0,Xd={vt100:2};
Wd.prototype.Oa=function(a,b,c,d){this.w=a;this.A=b;this.b=c;this.H=d;this.G=qb(a,"ChipSet");!this.L&&this.G&&this.G.Wb==S.xa&&(this.L=1);this.K=this.Sa*this.oa;this.da=this.fa*this.ha;b=this.K;c=this.da;this.D&&(b=this.da,c=this.K);this.Ta=(this.K*this.Ra>>3)*this.da;if(this.cd||ub(this.A,this.Ea,this.Ta,3))1<this.oa?ae(this,this.Sa*this.fa):(this.ic=this.I.createImageData(b,c),this.kc=16/this.Ra|0,ae(this,this.Ta>>1)),this.O=document.createElement("canvas"),this.O.width=b,this.O.height=c,this.eb=
this.O.getContext("2d"),this.ra={},this.Ha=1<<this.Ra,this.wa=Array(this.Ha+2),this.wa[0]=[0,0,0,255],this.wa[1]=[255,255,255,255],1==this.L&&(this.wa[this.Ha+0]=[255,255,0,255],this.wa[this.Ha+1]=[0,255,0,255]),2==this.L&&(this.mc=60,this.ub=!1,this.za=Array(this.Sa));if(this.ea=qb(a,"Keyboard")){for(var e in this.vb)this.ea.pa("led",e,this.vb[e]);this.W&&this.ea.pa(this.fd?"textarea":"canvas","kbd",this.Ga)}this.ka||E(this)};
function $d(a,b,c,d){if(d)a.ga("Unable to load font ROM (error "+d+": "+b+")");else{ab(a.Rb,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){t("Empty font ROM: "+b);return}if(1==f.length){t(f[0]);return}if(2048==f.length)be(a,f);else{a.ga("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ga("Font ROM data error: "+h.message);return}(a.I||a.H)&&E(a)}}
function be(a,b){a.cb=b;a.gc=2==a.L;a.ra[96]=[ce(a,a.oa,a.ha),ce(a,a.oa,a.ha,a.ub)];a.ra[64]=[ce(a,2*a.oa,a.ha),ce(a,2*a.oa,a.ha,a.ub)];a.ra[32]=a.ra[0]=[ce(a,2*a.oa,2*a.ha),ce(a,2*a.oa,2*a.ha,a.ub)]}
function ce(a,b,c,d){var e=8>=a.Zc?8:16,f=8<e?15:0,h=a.cb.length/e,g=!1===d,k={oa:b,ha: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,y=q;q<a.ha;q++)for(var x=p*e+(f+q&e-1),x=d&&8==q?255:a.cb[x],v=0;v<c/a.ha;v++){for(var z=0,u=0,I=u;u<a.oa;u++){for(var C=x&128>>(7<u?7:u),z=a.gc&&!C&&z?z:C,W=0;W<b/a.oa;W++)g&&(z=!z),de(a,l,I,y,z?1:0),I++;z=C}y++}k.context.putImageData(l,
this.b-=7},function(){this.j=Zc(this,this.j);this.b-=4},function(){this.j=L(this,this.P);this.b-=4},function(){this.j=L(this,this.R);this.b-=4},function(){this.j=L(this,this.S);this.b-=4},function(){this.j=L(this,this.T);this.b-=4},function(){this.j=L(this,this.U);this.b-=4},function(){this.j=L(this,this.X);this.b-=4},function(){this.j=L(this,this.Y(J(this)));this.b-=7},function(){this.j=L(this,this.j);this.b-=4},function(){this.j=dd(this,this.P);this.b-=4},function(){this.j=dd(this,this.R);this.b-=
4},function(){this.j=dd(this,this.S);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.X);this.b-=4},function(){this.j=dd(this,this.Y(J(this)));this.b-=7},function(){this.j=dd(this,this.j);this.b-=4},function(){this.j=$c(this,this.P);this.b-=4},function(){this.j=$c(this,this.R);this.b-=4},function(){this.j=$c(this,this.S);this.b-=4},function(){this.j=$c(this,this.T);this.b-=4},function(){this.j=$c(this,this.U);this.b-=
4},function(){this.j=$c(this,this.X);this.b-=4},function(){this.j=$c(this,this.Y(J(this)));this.b-=7},function(){this.j=$c(this,this.j);this.b-=4},function(){this.j=ed(this,this.P);this.b-=4},function(){this.j=ed(this,this.R);this.b-=4},function(){this.j=ed(this,this.S);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.X);this.b-=4},function(){this.j=ed(this,this.Y(J(this)));this.b-=7},function(){this.j=ed(this,this.j);
this.b-=4},function(){this.j=cd(this,this.P);this.b-=4},function(){this.j=cd(this,this.R);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.X);this.b-=4},function(){this.j=cd(this,this.Y(J(this)));this.b-=7},function(){this.j=cd(this,this.j);this.b-=4},function(){L(this,this.P);this.b-=4},function(){L(this,this.R);this.b-=4},function(){L(this,this.S);this.b-=4},function(){L(this,
this.T);this.b-=4},function(){L(this,this.U);this.b-=4},function(){L(this,this.X);this.b-=4},function(){L(this,this.Y(J(this)));this.b-=7},function(){L(this,this.j);this.b-=4},function(){Wc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Oc(this,O(this));this.b-=10},function(){var a=N(this);Wc(this)||G(this,a);this.b-=10},Cd,function(){var a=N(this);Wc(this)||(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){Q(this,Nc(this));this.b-=11},function(){this.j=Yc(this,M(this));this.b-=
7},function(){Q(this,this.N);G(this,0);this.b-=11},function(){Wc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},Dd,function(){var a=N(this);Wc(this)&&G(this,a);this.b-=10},Cd,function(){var a=N(this);Wc(this)&&(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},Ed,function(){this.j=Zc(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,8);this.b-=11},function(){Sc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Qc(this,O(this));this.b-=10},function(){var a=N(this);Sc(this)||G(this,a);this.b-=
10},function(){var a=M(this);Hb(this.w,a,this.j,this.N+-2&65535);this.b-=10},function(){var a=N(this);Sc(this)||(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){Q(this,Pc(this));this.b-=11},function(){this.j=L(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,16);this.b-=11},function(){Sc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},Dd,function(){var a=N(this);Sc(this)&&G(this,a);this.b-=10},function(){var a=M(this);this.j=Db(this.w,a,this.N+-2&65535)&255;this.b-=10},function(){var a=
N(this);Sc(this)&&(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},Ed,function(){this.j=dd(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,24);this.b-=11},function(){Uc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){Rc(this,O(this));this.b-=10},function(){var a=N(this);Uc(this)||G(this,a);this.b-=10},function(){var a=O(this);Q(this,J(this));Rc(this,a);this.b-=18},function(){var a=N(this);Uc(this)||(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){Q(this,J(this));this.b-=
11},function(){this.j=$c(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,32);this.b-=11},function(){Uc(this)&&(G(this,O(this)),this.b-=6);this.b-=5},function(){G(this,J(this));this.b-=5},function(){var a=N(this);Uc(this)&&G(this,a);this.b-=10},function(){var a=J(this);Rc(this,Pc(this));Qc(this,a);this.b-=5},function(){var a=N(this);Uc(this)&&(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},Ed,function(){this.j=ed(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,40);this.b-=11},
function(){Xc(this)||(G(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Kc(this,a&255|this.ta&-256);this.j=a>>8;this.b-=10},function(){var a=N(this);Xc(this)||G(this,a);this.b-=10},function(){this.ta&=-513;this.b-=4},function(){var a=N(this);Xc(this)||(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},function(){Q(this,Mc(this)&255|this.j<<8);this.b-=11},function(){this.j=cd(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,48);this.b-=11},function(){Xc(this)&&(G(this,O(this)),
this.b-=6);this.b-=5},function(){this.ia=J(this)&65535;this.b-=5},function(){var a=N(this);Xc(this)&&G(this,a);this.b-=10},function(){this.ta|=512;this.b-=4},function(){var a=N(this);Xc(this)&&(Q(this,this.N),G(this,a),this.b-=6);this.b-=11},Ed,function(){L(this,M(this));this.b-=7},function(){Q(this,this.N);G(this,56);this.b-=11}];
function S(a){w.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!Fd[b]&&La("Unrecognized ChipSet model: "+b);this.A=Fd[b]||{};a.sound&&(this.ba=null,window&&(this.ba=window.AudioContext||window.webkitAudioContext),this.ba&&new this.ba);E(this)}$a(S);
var T={xa:1978.1,bd:{ya:0,Wd:1,ae:16,oe:32,Ce:64,Ae:128,tb:14},Ua:{ya:1,Hc:1,Xc:2,Tc:4,Uc:16,Vc:32,Wc:64,tb:8},cd:{ya:2,Vd:3,Le:4,Xd:8,we:16,xe:32,ye:64,Yd:128,tb:0},Ge:{ya:3},Ee:{ya:2,qe:7},Ie:{ya:3,Ne:1,He:2,ze:4,ie:8,Zd:16,Nd:32},Fe:{ya:4},Je:{ya:5,be:1,ce:2,de:4,ee:8,Oe:16}},U={xa:100,bb:{ya:66,Se:1,Rc:2,Sc:4,ue:8,se:16,gc:32,fc:64,le:128},Gc:{ya:66,INIT:0},Ja:{ne:{ya:98},Qa:{Fc:0,Ec:1,Zc:2,ed:4,Kc:5,Yc:6,$c:7},Jb:16383},Jc:{ya:162,INIT:0},Ic:{ya:194,INIT:0}},Fd={SI1978:T,VT100:U};
S.prototype.ja=function(){return!1};S.prototype.Na=function(a,b,c,d){this.w=b;this.b=c;this.H=d;this.u=a;Cb(b,this,this.A.Pb);Gb(b,this,this.A.Qb)};S.prototype.za=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};S.prototype.Da=function(a){return a?this.save():!0};T.INIT=[[T.bd.tb,T.Ua.tb,T.cd.tb,0,0,0,0]];U.INIT=[[U.Gc.INIT,U.bb.Rc|U.bb.Sc,U.Jc.INIT,U.Ic.INIT],[0,0,0,0,Array(100)]];m=S.prototype;m.reset=function(){this.A.INIT&&!this.restore(this.A.INIT)&&this.ga("reset error")};
m.save=function(){var a=new H(this);switch(this.A.xa){case T.xa:I(a,0,[this.ra,this.F,this.wa,this.O,this.Z,this.la,this.na]);break;case U.xa:I(a,0,[this.da,this.J,this.fa,this.ea]),I(a,1,[this.M,this.C,this.K,this.W,this.I])}return a.data()};
m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.A.xa){case T.xa:return this.ra=b[0],this.F=b[1],this.wa=b[2],this.O=b[3],this.Z=b[4],this.la=b[5],this.na=b[6],!0;case U.xa:return this.da=b[0],this.J=b[2],this.fa=b[3],this.ea=b[4],b=a[1],this.M=b[0],this.C=b[1],this.K=b[2],this.W=b[3],this.I=b[4],!0}return!1};m.start=function(){};m.stop=function(){};function Gd(a,b,c){a.F&=~b;c&&(a.F|=b)}m.rd=function(a,b){var c=this.ra;D(this,a,null,b,"STATUS0",c,!0);return c};
m.sd=function(a,b){var c=this.F;D(this,a,null,b,"STATUS1",c,!0);return c};m.td=function(a,b){var c=this.wa;D(this,a,null,b,"STATUS2",c,!0);return c};m.qd=function(a,b){var c=this.O>>8-this.Z&255;D(this,a,null,b,"SHIFT.RESULT",c,!0);return c};m.Bd=function(a,b,c){D(this,a,b,c,"SHIFT.COUNT",null,!0);this.Z=b};m.Dd=function(a,b,c){D(this,a,b,c,"SOUND1",null,!0);this.la=b};m.Cd=function(a,b,c){D(this,a,b,c,"SHIFT.DATA",null,!0);this.O=b<<8|this.O>>8};
m.Ed=function(a,b,c){D(this,a,b,c,"SOUND2",null,!0);this.na=b};m.Fd=function(a,b,c){D(this,a,b,c,"WATCHDOG",null,!0)};function Hd(a){var b=0,c=0,d=~a.M;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.ud=function(a,b){var c=this.J,c=c&~U.bb.fc;if((pc(this.b)&64)<<1&&(c|=U.bb.fc,c!=this.J)){var d,e;d=this.K&1;e=this.K>>1&7;switch(e){case U.Ja.Qa.$c:break;case U.Ja.Qa.Ec:this.M=this.M<<1|d;break;case U.Ja.Qa.Kc:d=Hd(this);this.I[d]=U.Ja.Jb;gb(this,"doNVRCommand(): erase data at addr "+r(d));break;case U.Ja.Qa.Fc:this.C=this.C<<1|d;break;case U.Ja.Qa.ed:d=Hd(this);e=this.C&U.Ja.Jb;this.I[d]=e;gb(this,"doNVRCommand(): write data "+r(e)+" to addr "+r(d));break;case U.Ja.Qa.Yc:d=Hd(this);e=this.I[d];
null==e&&(e=U.Ja.Jb);this.C=e;gb(this,"doNVRCommand(): read data "+r(e)+" from addr "+r(d));break;case U.Ja.Qa.Zc:this.C<<=1;this.W=this.C&U.Ja.Jb+1;break;default:gb(this,"doNVRCommand(): unrecognized command 0x"+n(e,2))}}c&=~U.bb.gc;this.W&&(c|=U.bb.gc);this.J=c;D(this,a,null,b,"FLAGS.BUFFER",c);return c};m.Gd=function(a,b,c){D(this,a,b,c,"BRIGHTNESS");this.da=b};m.Jd=function(a,b,c){D(this,a,b,c,"NVR.LATCH");this.K=b};m.Id=function(a,b,c){D(this,a,b,c,"DC012");this.fa=b};
m.Hd=function(a,b,c){D(this,a,b,c,"DC011");this.ea=b};T.Pb={0:S.prototype.rd,1:S.prototype.sd,2:S.prototype.td,3:S.prototype.qd};T.Qb={2:S.prototype.Bd,3:S.prototype.Dd,4:S.prototype.Cd,5:S.prototype.Ed,6:S.prototype.Fd};U.Pb={66:S.prototype.ud};U.Qb={66:S.prototype.Gd,98:S.prototype.Jd,162:S.prototype.Id,194:S.prototype.Hd};Ja(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new S(d);eb(d,c)}});
function Id(a){w.call(this,"ROM",a,Id);this.u=null;this.I=a.addr;this.C=a.size;this.J=a.writable;this.A=a.alias;this.F=a.file;this.K=ca(this.F);if(this.F){a=this.F;var b=da(this.K);"json"!=b&&"hex"!=b&&(a=pa()+"/api/v1/dump?file="+this.F+"&format=bytes&decimal=true");var c=this;oa(a,null,!0,function(a,b,f){Jd(c,a,b,f)})}}$a(Id);var Kd=[0,5];Id.prototype.Na=function(a,b,c,d){this.w=b;this.b=c;this.H=d;Ld(this)};
Id.prototype.za=function(){if(this.Oa){if(this.H){var a=this.H,b=this.id,c=this.I,d=this.C,e=this.Oa,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=ka(p,k,a.Sa);0>q&&p.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.J.push({gf:b,G:c,wd:d,Oa:e,pc:f})}delete this.Oa}return!0};Id.prototype.Da=function(){return!0};
function Jd(a,b,c,d){if(d)a.ga("Unable to load system ROM (error "+d+": "+b+")");else{bb(a.Sb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.u=f;else if(h)for(a.u=Array(4*h.length),d=c=0;c<h.length;c++)a.u[d++]=h[c]&255,a.u[d++]=h[c]>>8&255,a.u[d++]=h[c]>>16&255,a.u[d++]=h[c]>>24&255;else a.u=e;a.Oa=e.symbols;if(!a.u.length){t("Empty ROM: "+b);return}if(1==a.u.length){t(a.u[0]);return}}catch(g){a.ga("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.u=Array(b.length),e=0;e<b.length;e++)a.u[e]=ba(b[e],16);Ld(a)}}
function Ld(a){if(!kb(a))if(!a.F)E(a);else if(a.u&&a.w){a.C||(a.C=a.u.length);if(a.u.length!=a.C)lb(a,"ROM size (0x"+n(a.u.length)+") does not match specified size ("+("0x"+n(a.C))+")");else if(Md(a,a.I)){var b=[];"number"==typeof a.A?b.push(a.A):null!=a.A&&a.A.length&&(b=a.A);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.w,h=d.C,g=[],k=d.I>>>f.ma;0<h&&k<f.V.length;)g.push(f.V[k++]),h-=f.Ca;f=d.w;d=d.C;h=0;for(e>>>=f.ma;0<d&&e<f.V.length;){k=g[h++];if(!k)break;f.V[e++]=k;d-=f.Ca}}delete a.u}E(a)}}
function Md(a,b){if(vb(a.w,b,a.C,a.J?1:Wb)){var c;for(c=0;c<a.u.length;c++)Ab(a.w,b+c,a.u[c]);if(a.J&&256==b){for(c=0;c<Kd.length;c++)Ab(a.w,Kd[c],118);Jc(a.b,function(a){return function(b){if(0<=Kd.indexOf(b)){var c=!1,h=a.b,g=a.H;if(5==b)switch(c=!0,h.R){case 2:Nd(a,String.fromCharCode(h.T));break;case 9:for(var k=Pc(h),l="",p=255;p--;){var q=a.b.Y(k++);if(36==q)break;l+=String.fromCharCode(q)}Nd(a,l);break;default:c=!1}c?Dd.call(h):g&&(a.g("\nCP/M vector "+r(b)),G(h,b),g.ka());b=!0}else b=!1;return b}}(a));
Lc(a.b,b)}return!0}return!1}function Nd(a,b){b=b.replace(/\r/g,"");a.Ba&&(a.Ba.value+=b,a.Ba.scrollTop=a.Ba.scrollHeight)}Ja(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Id(d);eb(d,c)}});function Od(a){w.call(this,"RAM",a,Od);this.A=a.addr;this.C=a.size;this.u=!1}$a(Od);m=Od.prototype;m.Na=function(a,b,c,d){this.w=b;this.b=c;this.H=d;E(this)};m.za=function(a,b){b||this.reset();return!0};m.Da=function(a){return a?this.save():!0};
m.reset=function(){!this.u&&this.C&&vb(this.w,this.A,this.C,1)&&(this.u=!0);this.u||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ja(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Od(d);eb(d,c)}});function Pd(a){w.call(this,"Keyboard",a,Pd,65536);(a=a.model)&&!Qd[a]&&La("Unrecognized Keyboard model: "+a);this.w=Qd[a]||{};this.reset();E(this)}$a(Pd);
var V={Rd:1,Sd:3,Td:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Ld:65,Od:66,Pd:67,Ud:68,E:69,$d:70,fe:71,ge:72,he:73,je:74,ke:75,me:76,pe:77,re:78,te:79,ve:80,Q:81,Be:82,De:83,Ke:84,Me:85,Pe:86,Qe:87,Re:88,Te:89,Ue:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Ve:97,We:98,Xe:99,d:100,e:101,Ye:102,Ze:103,$e:104,af:105,bf:106,k:107,cf:108,
df:109,n:110,ef:111,p:112,q:113,r:114,ff:115,t:116,hf:117,jf:118,kf:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126},Rd={65:37,68:39,76:32},Sd={xa:1978.1,wb:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},W={xa:100,wb:{},Md:{ya:130},Ka:{ya:130,Pc:1,Oc:2,Nc:4,Mc:8,Qc:16,hc:32,dc:63,ad:64,Qd:128,INIT:0},Lc:127,B:{}};W.B[46]=3;W.B[80]=5;W.B[79]=6;W.B[89]=7;W.B[84]=8;W.B[87]=9;W.B[81]=10;W.B[39]=16;W.B[V["]"]]=20;W.B[V["["]]=21;W.B[73]=22;W.B[85]=23;W.B[82]=24;W.B[69]=25;W.B[V["1"]]=26;
W.B[37]=32;W.B[40]=34;W.B[19]=35;W.B[V["`"]]=36;W.B[V["-"]]=37;W.B[V["9"]]=38;W.B[V["7"]]=39;W.B[V["4"]]=40;W.B[V["3"]]=41;W.B[27]=42;W.B[38]=48;W.B[114]=49;W.B[112]=50;W.B[8]=51;W.B[V["="]]=52;W.B[V["0"]]=53;W.B[V["8"]]=54;W.B[V["6"]]=55;W.B[V["5"]]=56;W.B[V["2"]]=57;W.B[9]=58;W.B[103]=64;W.B[115]=65;W.B[113]=66;W.B[96]=67;W.B[10]=68;W.B[V["\\"]]=69;W.B[76]=70;W.B[75]=71;W.B[71]=72;W.B[70]=73;W.B[65]=74;W.B[104]=80;W.B[2013]=81;W.B[98]=82;W.B[97]=83;W.B[V["'"]]=85;W.B[V[";"]]=86;W.B[74]=87;
W.B[72]=88;W.B[68]=89;W.B[83]=90;W.B[110]=96;W.B[119]=97;W.B[101]=98;W.B[100]=99;W.B[13]=100;W.B[V["."]]=101;W.B[V[","]]=102;W.B[78]=103;W.B[66]=104;W.B[88]=105;W.B[120]=106;W.B[105]=112;W.B[99]=113;W.B[102]=114;W.B[109]=115;W.B[V["/"]]=117;W.B[77]=118;W.B[V[" "]]=119;W.B[86]=120;W.B[67]=121;W.B[90]=122;W.B[121]=123;W.B[17]=124;W.B[16]=125;W.B[20]=126;W.Hb={l4:W.Ka.Pc,l3:W.Ka.Oc,l2:W.Ka.Nc,l1:W.Ka.Mc,locked:W.Ka.Qc,online:W.Ka.hc,local:~W.Ka.hc};var Qd={SI1978:Sd,VT100:W};
Pd.prototype.ja=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.L[e]){if("led"==a&&this.w.Hb&&this.w.Hb[b])return this.L[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return Td(d,a,!0)},c.onkeyup=function(a){return Td(d,a,!1)},!0;default:if(this.w.wb&&void 0!==this.w.wb[b])return this.L[e]=c,a=function(a,b){return function(){Ud(a,b,!0)}}(this,b),b=function(a,b){return function(){Ud(a,b,!1)}}(this,b),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=b):(c.onmousedown=a,c.onmouseup=
c.onmouseout=b),!0}}return!1};Pd.prototype.Na=function(a,b,c,d){this.b=c;this.H=d;this.C=rb(a,"ChipSet");Cb(b,this,this.w.Pb);Gb(b,this,this.w.Qb)};Pd.prototype.za=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Pd.prototype.Da=function(a){return a?this.save():!0};W.INIT=[[W.Ka.INIT,0]];m=Pd.prototype;m.reset=function(){this.u=[];this.w.INIT&&!this.restore(this.w.INIT)&&this.ga("reset error")};
m.save=function(){var a=new H(this);switch(this.w.xa){case W.xa:I(a,0,[this.F])}return a.data()};m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.w.xa){case Sd.xa:return!0;case W.xa:return this.F=b[0],Vd(this,this.F&W.Ka.dc),this.A=b[1],!0}return!1};function Vd(a,b){for(var c in a.w.Hb){var d=a.L["led-"+c];if(d){var e=a.w.Hb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function Td(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=Rd[e]||e,!a.w.B[e]){for(var f in a.w.wb)if(a.w.wb[f]===e){e=f;break a}e=null}e&&(d=Ud(a,e,c),b.preventDefault());return d}
function Ud(a,b,c){var d;a:{for(d=0;d<a.u.length;d++)if(a.u[d].Bc==b)break a;d=-1}if(c)0>d?a.u.push({Bc:b,Zb:Date.now(),Kb:!1}):(a.u[d].Zb=Date.now(),a.u[d].Kb=!1);else if(0<=d){if(!a.u[d].Kb){var e=a.u[d].Zb;if(e&&100>Date.now()-e)return a.u[d].Kb=!0,Wd(a),!0}a.u.splice(d,1)}if(a.C)switch(b){case "1p":Gd(a.C,T.Ua.Tc,c);break;case "2p":Gd(a.C,T.Ua.Xc,c);break;case "coin":Gd(a.C,T.Ua.Hc,c);break;case "left":Gd(a.C,T.Ua.Vc,c);break;case "right":Gd(a.C,T.Ua.Wc,c);break;case "fire":Gd(a.C,T.Ua.Uc,c)}return!0}
function Wd(a){for(var b=0,c=-1;b<a.u.length;){if(a.u[b].Kb){var d=a.u[b].Bc,e=100-(Date.now()-a.u[b].Zb);if(0<e){if(0>c||c>e)c=e}else{Ud(a,d,!1);b=0;continue}}b++}0<=c&&setTimeout(function(){Wd(a)},c)}m.vd=function(a,b){var c=0;0<=this.A&&this.A<this.u.length-1&&(c=this.u[this.A++],c=W.B[c]);c||(c=W.Lc);D(this,a,null,b,"KBDUART.ADDRESS",c);return c};m.Kd=function(a,b,c){D(this,a,b,c,"KBDUART.STATUS");this.F=b;Vd(this,b&W.Ka.dc);b&W.Ka.ad&&(this.A=0,fd(this.b,1))};W.Pb={130:Pd.prototype.vd};
W.Qb={130:Pd.prototype.Kd};Ja(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new Pd(d);eb(d,c)}});
function Xd(a,b,c,d,e){var f=this;this.kc=xa("Gecko/");var h=["","moz","ms","webkit"];w.call(this,"Video",a,Xd,262144);this.ba=a.screenWidth;this.Z=a.screenHeight;this.Fa=a.bufferAddr;this.hd=a.bufferRAM;var g=a.bufferFormat;this.M=g&&Yd[g.toLowerCase()]||Zd;this.Sa=a.bufferCols;this.fa=a.bufferRows;this.dd=this.pa=a.cellWidth||1;this.ha=a.cellHeight||1;this.cb=null;this.jc=!1;this.Ra=a.bufferBits||1;this.jd=a.bufferLeft||0;if(this.F=a.bufferRotate)this.F=this.F%360,0<this.F&&(this.F-=360),-90!=this.F&&
(this.ga("unsupported buffer rotation: "+this.F),this.F=0);this.Tb=a.interruptRate;this.Dc=a.refreshRate||60;this.W=b;this.I=c;this.Ha=(this.ld=d)||b||null;this.fd=this.ba;this.gd=this.Z;this.Ib=this.ba/this.Sa|0;this.ic=this.Z/this.fa|0;1<this.ha&&this.fa++;b=a.smoothing;(c=Sa.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.I[d]){this.I[d]=b;break}if(this.J=a.screenRotate)this.J=this.J%360,0<this.J&&(this.J-=
360),-90!=this.J?(this.ga("unsupported screen rotation: "+this.J),this.J=0):(this.I.translate(0,this.Z),this.I.rotate(this.J*Math.PI/180),this.I.scale(this.Z/this.ba,this.ba/this.Z));if(this.A=e)if(this.A.fb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.A.fb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){$d(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(){$d(f,null)},!1);break}}if(this.la=a.fontROM)"json"!=da(this.la)&&(this.la=pa()+"/api/v1/dump?file="+this.la+"&format=bytes"),oa(this.la,null,!0,function(a,b,c){ae(f,a,b,c)});this.vb={}}$a(Xd);var Zd=0,Yd={vt100:2};
Xd.prototype.Na=function(a,b,c,d){this.u=a;this.w=b;this.b=c;this.H=d;this.C=rb(a,"ChipSet");!this.M&&this.C&&this.C.Yb==T.xa&&(this.M=1);this.K=this.Sa*this.pa;this.da=this.fa*this.ha;b=this.K;c=this.da;this.F&&(b=this.da,c=this.K);this.Ta=(this.K*this.Ra>>3)*this.da;if(this.hd||vb(this.w,this.Fa,this.Ta,3))1<this.pa?be(this,this.Sa*this.fa):(this.lc=this.I.createImageData(b,c),this.nc=16/this.Ra|0,be(this,this.Ta>>1)),this.O=document.createElement("canvas"),this.O.width=b,this.O.height=c,this.eb=
this.O.getContext("2d"),this.ra={},this.Ia=1<<this.Ra,this.wa=Array(this.Ia+2),this.wa[0]=[0,0,0,255],this.wa[1]=[255,255,255,255],1==this.M&&(this.wa[this.Ia+0]=[255,255,0,255],this.wa[this.Ia+1]=[0,255,0,255]),2==this.M&&(this.oc=60,this.ub=!1,this.Aa=Array(this.Sa));if(this.ea=rb(a,"Keyboard")){for(var e in this.vb)this.ea.ja("led",e,this.vb[e]);this.W&&this.ea.ja(this.ld?"textarea":"canvas","kbd",this.Ha)}this.la||E(this)};
function ae(a,b,c,d){if(d)a.ga("Unable to load font ROM (error "+d+": "+b+")");else{bb(a.Sb,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){t("Empty font ROM: "+b);return}if(1==f.length){t(f[0]);return}if(2048==f.length)ce(a,f);else{a.ga("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ga("Font ROM data error: "+h.message);return}(a.I||a.H)&&E(a)}}
function ce(a,b){a.cb=b;a.jc=2==a.M;a.ra[96]=[de(a,a.pa,a.ha),de(a,a.pa,a.ha,a.ub)];a.ra[64]=[de(a,2*a.pa,a.ha),de(a,2*a.pa,a.ha,a.ub)];a.ra[32]=a.ra[0]=[de(a,2*a.pa,2*a.ha),de(a,2*a.pa,2*a.ha,a.ub)]}
function de(a,b,c,d){var e=8>=a.dd?8:16,f=8<e?15:0,h=a.cb.length/e,g=!1===d,k={pa:b,ha: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,y=q;q<a.ha;q++)for(var x=p*e+(f+q&e-1),x=d&&8==q?255:a.cb[x],v=0;v<c/a.ha;v++){for(var z=0,u=0,K=u;u<a.pa;u++){for(var C=x&128>>(7<u?7:u),z=a.jc&&!C&&z?z:C,Y=0;Y<b/a.pa;Y++)g&&(z=!z),ee(a,l,K,y,z?1:0),K++;z=C}y++}k.context.putImageData(l,
(p&15)*b,(p>>4)*c)}return k}
Wd.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.Ea,c=-1,d=-1,e,f=-(60==this.mc?2:5);f<this.fa;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;zb(this.A,b++,e);zb(this.A,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++)zb(this.A,b++,g.charCodeAt(k)|c);c^=128}zb(this.A,b++,127);c=b}ee(this)}return!0};Wd.prototype.pa=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.vb[b]=c,!0;switch(b){case "fullScreen":return this.M[b]=c,this.u&&this.u.fb?c.onclick=function(){d.fb()}:c.parentNode.removeChild(c),!0}return!1};
Wd.prototype.fb=function(){var a=!1;if(this.u){if(this.u.fb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.ba/this.Z;b>c&&(a=Math.round(c/b*100)+"%")}this.hc?(this.W.style.width=a,this.W.style.width=a,this.W.style.display="block",this.W.style.margin="auto"):(this.u.style.width=a,this.u.style.height="auto");this.u.style.backgroundColor="black";this.u.fb();a=!0}this.Ga&&this.Ga.focus()}return a};
function Zd(a,b){!b&&a.u&&(a.hc?a.W.style.width=a.W.style.height="":a.u.style.width=a.u.style.height="");fb(a,"notifyFullScreen("+b+")",!0)}function ae(a,b){a.jc=b;a.Fa=!1;if(void 0===a.ma||a.ma.length!=a.jc)a.ma=Array(a.jc)}function de(a,b,c,d,e){d=a.D?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.L&&(208<=c&&236>c?e=a.Ha+0:28<=c&&72>c&&(e=a.Ha+1));a=a.wa[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 ee(a){for(var b=a.Ea,c=-1,d=0,e=60==a.mc?2:5,f=0,h=0;d<a.fa;){for(var g=0,k=b,l=c;;){var p=xb(a.A,k++);if(127==(p&127)){var q=xb(a.A,k++),c=q&96,b=(q&15)<<8|xb(a.A,k),b=b+(q&16?8192:16384);break}if(g<a.za.length)a.za[g++]=p;else break}if(e)e--;else{for(;g<a.za.length;)a.za[g++]=0;if(0<=l)for(k=0;k<g;k++){p=a.za[k];if(!a.Fa||p!==a.ma[f]){var q=a,y=a.eb,x=p&127;if(p=q.ra[l][p&128?1:0]){var v=(x&15)*p.oa,x=(x>>4)*p.ha,z=void 0,u=void 0,I=void 0,C=void 0,W=p.oa,qa=p.ha;y?(z=k*q.oa,u=d*q.ha,I=
q.oa,C=q.ha):(z=k*q.Ib,u=d*q.ec,I=q.Ib,C=q.ec);p.oa>q.oa&&(z*=2,I*=2);p.ha>q.ha&&(0==l&&(x+=q.ha),qa=q.ha);y?y.drawImage(p.canvas,v,x,W,qa,z,u,I,C):(z+=0,u+=0,q.I.drawImage(p.canvas,v,x,W,qa,z,u,I,C))}h++}f++}d++}}a.Fa=!0;h&&a.eb&&a.I.drawImage(a.O,0,0,a.K,a.da-a.ha,0,0,a.ad,a.bd)}
Ia(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=A(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=pa().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ra.aspect);f&&.3<=f&&3.33>=f&&(Ha("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");wa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new Wd(d,e,h,f,c);db(d,c)}});
function fe(a){w.call(this,"Debugger",a,fe);this.style=ge;this.da=this.Fa=this.L=0;this.W=X();this.Ta=X();this.D=-1;this.G=[];this.fa=!1;this.ea=X();this.J=[];this.ka={};this.u=this.Z=this.I=[];he(this);this.wa=0;ie(this);this.Ga=[];je(this,a.messages);this.Ha=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return kc(b,a)}):void 0===global.$&&(global.$=function(a){return kc(b,a)})}Za(fe);
var ke={"?":"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"},
ge=8080,le="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(" "),me="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(" "),
ne="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),oe=[[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,
Xd.prototype.za=function(){if(2==this.M){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.Fa,c=-1,d=-1,e,f=-(60==this.oc?2:5);f<this.fa;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.w,b++,e);Ab(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++)Ab(this.w,b++,g.charCodeAt(k)|c);c^=128}Ab(this.w,b++,127);c=b}fe(this)}return!0};Xd.prototype.ja=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.vb[b]=c,!0;switch(b){case "fullScreen":return this.L[b]=c,this.A&&this.A.fb?c.onclick=function(){d.fb()}:c.parentNode.removeChild(c),!0}return!1};
Xd.prototype.fb=function(){var a=!1;if(this.A){if(this.A.fb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.ba/this.Z;b>c&&(a=Math.round(c/b*100)+"%")}this.kc?(this.W.style.width=a,this.W.style.width=a,this.W.style.display="block",this.W.style.margin="auto"):(this.A.style.width=a,this.A.style.height="auto");this.A.style.backgroundColor="black";this.A.fb();a=!0}this.Ha&&this.Ha.focus()}return a};
function $d(a,b){!b&&a.A&&(a.kc?a.W.style.width=a.W.style.height="":a.A.style.width=a.A.style.height="");gb(a,"notifyFullScreen("+b+")",!0)}function be(a,b){a.mc=b;a.Ga=!1;if(void 0===a.na||a.na.length!=a.mc)a.na=Array(a.mc)}function ee(a,b,c,d,e){d=a.F?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.M&&(208<=c&&236>c?e=a.Ia+0:28<=c&&72>c&&(e=a.Ia+1));a=a.wa[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 fe(a){for(var b=a.Fa,c=-1,d=0,e=60==a.oc?2:5,f=0,h=0;d<a.fa;){for(var g=0,k=b,l=c;;){var p=yb(a.w,k++);if(127==(p&127)){var q=yb(a.w,k++),c=q&96,b=(q&15)<<8|yb(a.w,k),b=b+(q&16?8192:16384);break}if(g<a.Aa.length)a.Aa[g++]=p;else break}if(e)e--;else{for(;g<a.Aa.length;)a.Aa[g++]=0;if(0<=l)for(k=0;k<g;k++){p=a.Aa[k];if(!a.Ga||p!==a.na[f]){var q=a,y=a.eb,x=p&127;if(p=q.ra[l][p&128?1:0]){var v=(x&15)*p.pa,x=(x>>4)*p.ha,z=void 0,u=void 0,K=void 0,C=void 0,Y=p.pa,sa=p.ha;y?(z=k*q.pa,u=d*q.ha,K=
q.pa,C=q.ha):(z=k*q.Ib,u=d*q.ic,K=q.Ib,C=q.ic);p.pa>q.pa&&(z*=2,K*=2);p.ha>q.ha&&(0==l&&(x+=q.ha),sa=q.ha);y?y.drawImage(p.canvas,v,x,Y,sa,z,u,K,C):(z+=0,u+=0,q.I.drawImage(p.canvas,v,x,Y,sa,z,u,K,C))}h++}f++}d++}}a.Ga=!0;h&&a.eb&&a.I.drawImage(a.O,0,0,a.K,a.da-a.ha,0,0,a.fd,a.gd)}
Ja(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=A(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=qa().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||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");xa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new Xd(d,e,h,f,c);eb(d,c)}});
function ge(a){this.I=+a.adapter;switch(this.I){case 0:this.J=0;break;default:t("Unrecognized serial adapter #"+this.I);return}w.call(this,"SerialPort",a,ge,8388608);var b=a.binding;if("console"!=b){var c;a=he;b&&(void 0===c&&(c="Panel"),(c=db(c,this.id))&&(b=c.L[b])&&this.ja(null,a,b))}}$a(ge);var he="buffer";m=ge.prototype;
m.ja=function(a,b,c){switch(b){case he:return this.L[b]=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;(8===b||a.ctrlKey&&65<=b&&90>=b)&&a.preventDefault&&a.preventDefault();return!0},c.onkeypress=function(a){a=a||window.event;a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0}return!1};m.Na=function(a,b,c,d){this.w=b;this.b=c;this.H=d;this.C=rb(a,"ChipSet");Cb(b,this,ie,this.J);Gb(b,this,je,this.J);E(this)};
m.za=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};m.Da=function(a){return a?this.save():!0};m.reset=function(){ke(this)};m.save=function(){var a=new H(this),b=0,c=[];c[b++]=this.A;c[b++]=this.u;c[b++]=this.F;I(a,0,c);return a.data()};m.restore=function(a){return ke(this,a[0])};function ke(a,b){var c=0;void 0===b&&(b=[0,0,0]);a.A=b[c++];a.u=b[c++];a.F=b[c++];return!0}m.pd=function(a,b){var c=this.A;D(this,a,null,b,"DATA",c);return c};
m.od=function(a,b){var c=this.u;D(this,a,null,b,"COMMAND",c);return c};m.Ad=function(a,b,c){D(this,a,b,c,"DATA");this.A=b};m.zd=function(a,b,c){D(this,a,b,c,"COMMAND");this.u=b};m.yd=function(a,b,c){D(this,a,b,c,"BAUDRATE");this.F=b};var ie={0:ge.prototype.pd,1:ge.prototype.od},je={0:ge.prototype.Ad,1:ge.prototype.zd,2:ge.prototype.yd};Ja(function(){for(var a=B(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new ge(d);eb(d,c)}});
function le(a){w.call(this,"Debugger",a,le);this.style=me;this.da=this.Ga=this.M=0;this.W=X();this.Ta=X();this.F=-1;this.A=[];this.fa=!1;this.ea=X();this.J=[];this.la={};this.C=this.Z=this.I=[];ne(this);this.wa=0;oe(this);this.Ha=[];pe(this,a.messages);this.Ia=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return lc(b,a)}):void 0===global.$&&(global.$=function(a){return lc(b,a)})}$a(le);
var qe={"?":"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"},
me=8080,re="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(" "),se="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(" "),
te="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),ue=[[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]],pe={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=fe.prototype;
m.Oa=function(a,b,c,d){this.A=b;this.b=c;this.w=a;(a=hc(a,"messages"))&&je(this,a);this.Ra=oe;qe(this,function(a){a:{var b=d.A.V,c=a[0],g=a=0,k=b.length;if(c){a=re(se(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.A.la;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=wb[c],p&&d.g(n(p.id)+" %"+n(g<<d.A.la)+" %%"+n(p.F)+" "+r(p.Fb)+" "+
r(p.size)+" "+l),c!=Ub&&(c=-1),l=0);a+=d.A.Ba;g++}}});E(this)};
m.pa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ra=this.M[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",kc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.D<d.G.length-1&&(b=d.G[++d.D]):40==a.keyCode&&(0<d.D?b=d.G[--d.D]:(b="",d.D=-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,ya(c,function(){if(d.ra){var a=d.ra.value;d.ra.value=
"";kc(d,a,!0);return!0}return!1}),!0;case "step":return this.M[b]=c,ya(c,function(a){var b=!1;ib(d,!0)||(hb(d,!0),b=d.rb(a?1:0),hb(d,!1));return b}),!0}return!1};m.Eb=function(){this.ra&&this.ra.focus()};function re(a){a=a&&a.F;null==a&&(a=-1);return a}m.Y=function(a,b){var c=255,d=re(a);-1!==d&&(c=xb(this.A,d),b&&te(a,b));return c};m.Pa=function(a,b){var c=65535,d=re(a);-1!==d&&(c=yb(this.A,d),b&&te(a,b));return c};m.qa=function(a,b,c){var d=re(a);-1!==d&&(zb(this.A,d,b),c&&te(a,c),lc(this.b,!0))};
m.Qb=function(a,b,c){var d=re(a);if(-1!==d){var e=this.A,f=d&e.A,h=(d&e.G)>>>e.la;f!=e.A?e.V[h].$b(f,b&65535,d):(e.V[h++].Gb(f,b&255,d),e.V[h&e.K].Gb(0,b>>8&255,d+1));c&&te(a,c);lc(this.b,!0)}};function X(a){return{F:a,Ma:!1}}function ue(a){return[a.F,a.Ma]}function ve(a){return{F:a[0],Ma:a[1]}}
function se(a,b,c){var d;c=(c?a.W:a.Ta).F;if(void 0!==b){d=b=we(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.J.length;c++){var f=a.J[c].Na[d];if(void 0!==f){d=f.o;void 0!==d&&(e=X(d));break}}if(d=e)return d;c=xe(a,b,void 0)}null!=c&&(d=X(c));return d}function ye(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.ed=ze(a,b.yc=c[2]))}function te(a,b){null!=a.F&&(a.F+=b||1)}function Y(a){return n(a,4)}
function Ae(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.Y(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function je(a,b){a.H=a;a.na=a.gd=536870912;a.za=null;a.Ea=[];var c=ze(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in pe)0<=ma(c,d)&&(a.na|=pe[d],a.g(d+" messages enabled"))}function qe(a,b){for(var c in pe)if(64==pe[c]){a.Ga[c]=b;break}}
function Be(a,b){var c;a=a.toUpperCase();null==b?c=ma(ne,a):(c=ma(ne,a.substr(b,2)),0>c&&(c=ma(ne,a.substr(b,1))));return c}function Ce(a,b){var c=0,d=De(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 6:c=2;break;case 8:case 9:case 10:case 11:case 12:case 13:case 14:c=4}return c?n(d,c):"??"}
function De(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.P;break;case 1:c=d.R;break;case 8:c=Nc(d);break;case 2:c=d.S;break;case 3:c=d.T;break;case 9:c=Pc(d);break;case 4:c=d.U;break;case 5:c=d.X;break;case 10:c=J(d);break;case 6:c=d.Y(J(d));break;case 11:c=d.ia;break;case 12:c=d.N;break;case 13:c=Lc(d);break;case 14:c=Lc(d)&255|d.j<<8}}return c}
function Ee(a,b){b=we(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Be(b,c+1),0<=e&&(b=b.substr(0,c)+Ce(a,e)+b.substr(c+1+ne[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=se(a,e))?(d=e+' "'+Ae(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=se(a,e))?(te(d),d=e+' "'+
Ae(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Y(X(this.b.N).F));if(this.na&1073741824)this.Ea.push(a);else if(!this.za||a!=this.za)if(this.za=a,this.na&-2147483648&&(this.ja(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.ob=0;c.D-=c.b;c.b=0;lc(c)}};
function eb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.na&g)!=g||a.message(b.ab+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+n(d,2):"")+")"+(null!=h?": 0x"+n(h,2):"")+(null!=e?" at "+Y(e):""))}
function ie(a){var b;if(yd(a)){if(!a.O||!a.O.length){a.O=Array(1E3);for(b=0;b<a.O.length;b++)a.O[b]=X();a.ma=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.O&&a.O.length&&a.g("instruction history buffer freed"),a.ma=0,a.O=[],a.K=[]}m.$a=function(a){if(!Fe(this))return!1;this.b.$a(a);return!0};
m.rb=function(a,b,c){if(!Fe(this))return!1;this.L=0;a||yd(this)&&zd(this,this.b.N,0);try{var d=this.b.rb(a);0<d&&(this.L+=d,Cc(this.b,d,!0),nc(this.b,d),this.da++)}catch(e){"number"!=typeof e&&(this.L=0,kb(this.b,e.stack||e.message))}!1!==c&&lc(this.b);this.Da(b||!1);return 0<this.L};m.ja=function(a){this.b&&this.b.ja(a)};m.Da=function(a){void 0===a&&(a=!0);this.W=X(this.b.N);a&&1!=this.ba?Ge(this):He(this)};
function Fe(a){var b;if(b=a.b&&jb(a.b))b=a.b,b.C.sa?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!ib(a.b)?(a=a.b,a.C.ib?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.Ca=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Ja=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){ie(this);this.da=this.Fa=0;this.za=null;this.L=0;this.W=X(this.b.N);this.C.va=!1;Ie(this);a||this.Da()};
m.save=function(){var a=new Mc(this);H(a,0,ue(this.W));H(a,1,ue(this.ea));H(a,2,[this.G,this.fa,this.na]);H(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.W=ve(a[b++]),this.ea=ve(a[b++]),this.G=a[b][0],"string"==typeof this.G&&(this.G=[this.G]),this.fa=a[b][1],this.na|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ba||this.g("running");this.C.va=!0;this.ub=a;this.vb=b};
m.stop=function(a,b){if(this.C.va){this.C.va=!1;this.L=b-this.vb;if(!this.ba){var c="stopped";if(this.L){var d=a-this.ub,e=0<d?Math.round(1E3*this.L/d):0,c=c+" (";yd(this)&&(c+=this.da+" opcodes, ",this.Fa-=this.da,this.da=0);c+=this.L+" cycles, "+d+" ms, "+e+" hz)"}else gb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Da(!0);this.Eb();Ie(this,this.b.N)}};function yd(a){return 1<a.u.length||!!a.wa}
function zd(a,b,c){var d=a.b;if(0<c&&(a.wa&&!--a.wa||cc(a,b,1,a.u)))return!0;0<=c&&a.K.length&&(a.da++,b=xb(a.A,b),null!=b&&(a.K[b][1]++,b=a.O[a.ma],b.F=d.N,b.Ma=!1,++a.ma==a.O.length&&(a.ma=0)));return!1}function Db(a,b,c){a.g("break on input from port "+r(b)+": "+n(c));a.ja(!0)}function Hb(a,b,c){a.g("break on output to port "+r(b)+": "+n(c));a.ja(!0)}
function he(a){var b,c;a.u=["bp"];if(void 0!==a.Z)for(b=1;b<a.Z.length;b++){c=a.Z[b];var d=a.A;dc(d.V[re(c)>>>d.la],!1)}a.Z=["br"];if(void 0!==a.I)for(b=1;b<a.I.length;b++)c=a.I[b],d=a.A,dc(d.V[re(c)>>>d.la],!0);a.I=["bw"];a.cb=0}m.Va=function(a,b,c){var d=!0;c||Je(this,a,b,!1,!0);if(a!=this.u){var e=re(b);if(-1===e)this.g("invalid address: "+Y(b.F)),d=!1;else{var f=this.A;f.V[e>>>f.la].Va(e&f.A,a==this.I)}}d&&(a.push(b),c?b.Ma=!0:(Ke(this,a,a.length-1,"set"),ie(this)));return d};
function Je(a,b,c,d,e){var f=!1;c=re(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==re(g)&&(!d||g.Ma)){f=!0;g.Ma||e||Ke(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.A,dc(d.V[c>>>d.la],b==a.I));g.Ma||ie(a);break}}return f}function kf(a,b){for(var c=1;c<b.length;c++)Ke(a,b,c);return b.length-1}function Ke(a,b,c,d){c=b[c];a.g(b[0]+" "+Y(c.F)+(d?" "+d:c.yc?' "'+c.yc+'"':""))}
function Ie(a,b){if(void 0!==b)cc(a,b,1,a.u,!0),a.ba=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.Ma){if(!Je(a,a.u,d,!0))break;c=0}}}
function cc(a,b,c,d,e){var f=!1;if(!a.cb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Ma)for(var k=re(g),l=0;l<c;l++)if(b+l==k){var p,f=!0;g.Ma&&(Je(a,d,g,!0),e=!0);if(p=g.ed){for(var f=!1,q=0;q<p.length;q++)if(!lf(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var y=q+1;y<p.length&&p[y].indexOf("else");y++)q++;if(y==p.length){f=!0;break}}a.b.C.va||(f=!0)}if(f){e||Ke(a,d,h,"hit");break}}}a.cb--;return f}
function mf(a,b,c,d){for(var e=X(b.F),f=a.Y(b,1),h=a.Ra[f],g="",k=(8086!=a.style?le:me)[h[0]],l=h.length-1,p=0,q,y=1;y<=l;y++){var x="";q=h[y];if(void 0!==q&&!(q&16384&&a.style==ge)){var v=q&240;if(v){var z=q&15;z?p=z:q|=p;q&61440||(q|=1==y?8192:4096);if(v&32)a:{var x=a,v=q,z=b,u=" ";switch(v&15){case 1:u=n(x.Y(z,1),2);break;case 2:u=n(x.Y(z,1)<<24>>24,4);break;case 3:u=n(x.Pa(z,2),4);break;default:x="imm("+r(v)+")";break a}8086==x.style&&v&64?u="["+u+"]":v&16||(u=(x.style==ge?"$":"0x")+u);x=u}else v&
16?(x=(q&3840)>>8,v=ne[x],8086==a.style&&q&64&&(6==x&&(v="HL"),v="["+v+"]"),x=v):v&128&&(x=(f>>3&7).toString());if(!x||!x.length){g="INVALID";break}0<g.length&&(g+=",");g+=x||"???"}}}f="";h=Y(e.F)+" ";if(-1!==e.F&&-1!==b.F){do if(f+=n(a.Y(e,1),2),null==e.F)break;while(e.F!=b.F)}h+=ha(f,10);h=h+(q&32768?"*":" ")+ha(k,7);g&&(h+=" "+g);c&&(h=ha(h,40)+";"+c,h=a.b.C.hb?h+("cycles="+Ac(a.b).toString()+" cs="+n(a.b.i.xb)):h+(null!=d?"="+d.toString():""));return h}
function nf(a,b){var c;switch(b){case "IF":c=a.b.ta&512;break;case "SF":c=Xc(a.b);break;case "ZF":c=Wc(a.b);break;case "AF":c=Vc(a.b);break;case "PF":c=Uc(a.b);break;case "CF":c=Sc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function of(a,b){return ne[b]+"="+Ce(a,b)+" "}function pf(a){return of(a,7)+of(a,8)+of(a,9)+of(a,10)+of(a,11)+nf(a,"IF")+nf(a,"SF")+nf(a,"ZF")+nf(a,"AF")+nf(a,"PF")+nf(a,"CF")}
var qf={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function rf(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]],ve={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=le.prototype;
m.Na=function(a,b,c,d){this.w=b;this.b=c;this.u=a;(a=ic(a,"messages"))&&pe(this,a);this.Ra=ue;we(this,function(a){a:{var b=d.w.V,c=a[0],g=a=0,k=b.length;if(c){a=xe(ye(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.w.ma;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=xb[c],p&&d.g(n(p.id)+" %"+n(g<<d.w.ma)+" %%"+n(p.G)+" "+r(p.Fb)+" "+
r(p.size)+" "+l),c!=Vb&&(c=-1),l=0);a+=d.w.Ca;g++}}});E(this)};
m.ja=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ra=this.L[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",lc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.F<d.A.length-1&&(b=d.A[++d.F]):40==a.keyCode&&(0<d.F?b=d.A[--d.F]:(b="",d.F=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.L[b]=c,za(c,function(){if(d.ra){var a=d.ra.value;d.ra.value=
"";lc(d,a,!0);return!0}return!1}),!0;case "step":return this.L[b]=c,za(c,function(a){var b=!1;jb(d,!0)||(ib(d,!0),b=d.rb(a?1:0),ib(d,!1));return b}),!0}return!1};m.Eb=function(){this.ra&&this.ra.focus()};function xe(a){a=a&&a.G;null==a&&(a=-1);return a}m.Y=function(a,b){var c=255,d=xe(a);-1!==d&&(c=yb(this.w,d),b&&ze(a,b));return c};m.Pa=function(a,b){var c=65535,d=xe(a);-1!==d&&(c=zb(this.w,d),b&&ze(a,b));return c};m.qa=function(a,b,c){var d=xe(a);-1!==d&&(Ab(this.w,d,b),c&&ze(a,c),mc(this.b,!0))};
m.Rb=function(a,b,c){var d=xe(a);if(-1!==d){var e=this.w,f=d&e.w,h=(d&e.A)>>>e.ma;f!=e.w?e.V[h].cc(f,b&65535,d):(e.V[h++].Gb(f,b&255,d),e.V[h&e.K].Gb(0,b>>8&255,d+1));c&&ze(a,c);mc(this.b,!0)}};function X(a){return{G:a,Ma:!1}}function Ae(a){return[a.G,a.Ma]}function Be(a){return{G:a[0],Ma:a[1]}}
function ye(a,b,c){var d;c=(c?a.W:a.Ta).G;if(void 0!==b){d=b=Ce(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.J.length;c++){var f=a.J[c].Oa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=X(d));break}}if(d=e)return d;c=De(a,b,void 0)}null!=c&&(d=X(c));return d}function Ee(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.kd=Fe(a,b.Ac=c[2]))}function ze(a,b){null!=a.G&&(a.G+=b||1)}function Z(a){return n(a,4)}
function Ge(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.Y(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function pe(a,b){a.H=a;a.oa=a.md=536870912;a.Aa=null;a.Fa=[];var c=Fe(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in ve)0<=na(c,d)&&(a.oa|=ve[d],a.g(d+" messages enabled"))}function we(a,b){for(var c in ve)if(64==ve[c]){a.Ha[c]=b;break}}
function He(a,b){var c;a=a.toUpperCase();null==b?c=na(te,a):(c=na(te,a.substr(b,2)),0>c&&(c=na(te,a.substr(b,1))));return c}function Ie(a,b){var c=0,d=Je(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 Je(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.P;break;case 1:c=d.R;break;case 8:c=Nc(d);break;case 2:c=d.S;break;case 3:c=d.T;break;case 9:c=Pc(d);break;case 4:c=d.U;break;case 5:c=d.X;break;case 10:c=J(d);break;case 6:c=d.Y(J(d));break;case 11:c=d.ia;break;case 12:c=d.N;break;case 13:c=Mc(d);break;case 14:c=Mc(d)&255|d.j<<8}}return c}
function Ke(a,b){b=Ce(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=He(b,c+1),0<=e&&(b=b.substr(0,c)+Ie(a,e)+b.substr(c+1+te[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=ba(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=ye(a,e))?(d=e+' "'+Ge(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=ye(a,e))?(ze(d),d=e+' "'+
Ge(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(X(this.b.N).G));if(this.oa&1073741824)this.Fa.push(a);else if(!this.Aa||a!=this.Aa)if(this.Aa=a,this.oa&-2147483648&&(this.ka(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.ob=0;c.F-=c.b;c.b=0;mc(c)}};
function fb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.oa&g)!=g||a.message(b.ab+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+n(d,2):"")+")"+(null!=h?": 0x"+n(h,2):"")+(null!=e?" at "+Z(e):""))}
function oe(a){var b;if(gd(a)){if(!a.O||!a.O.length){a.O=Array(1E3);for(b=0;b<a.O.length;b++)a.O[b]=X();a.na=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.O&&a.O.length&&a.g("instruction history buffer freed"),a.na=0,a.O=[],a.K=[]}m.$a=function(a){if(!Le(this))return!1;this.b.$a(a);return!0};
m.rb=function(a,b,c){if(!Le(this))return!1;this.M=0;a||gd(this)&&Ad(this,this.b.N,0);try{var d=this.b.rb(a);0<d&&(this.M+=d,Dc(this.b,d,!0),oc(this.b,d),this.da++)}catch(e){"number"!=typeof e&&(this.M=0,lb(this.b,e.stack||e.message))}!1!==c&&mc(this.b);this.Ea(b||!1);return 0<this.M};m.ka=function(a){this.b&&this.b.ka(a)};m.Ea=function(a){void 0===a&&(a=!0);this.W=X(this.b.N);a&&1!=this.ba?Me(this):Ne(this)};
function Le(a){var b;if(b=a.b&&kb(a.b))b=a.b,b.D.sa?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!jb(a.b)?(a=a.b,a.D.ib?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.za=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Da=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){oe(this);this.da=this.Ga=0;this.Aa=null;this.M=0;this.W=X(this.b.N);this.D.va=!1;Oe(this);a||this.Ea()};
m.save=function(){var a=new H(this);I(a,0,Ae(this.W));I(a,1,Ae(this.ea));I(a,2,[this.A,this.fa,this.oa]);I(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.W=Be(a[b++]),this.ea=Be(a[b++]),this.A=a[b][0],"string"==typeof this.A&&(this.A=[this.A]),this.fa=a[b][1],this.oa|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ba||this.g("running");this.D.va=!0;this.ub=a;this.vb=b};
m.stop=function(a,b){if(this.D.va){this.D.va=!1;this.M=b-this.vb;if(!this.ba){var c="stopped";if(this.M){var d=a-this.ub,e=0<d?Math.round(1E3*this.M/d):0,c=c+" (";gd(this)&&(c+=this.da+" opcodes, ",this.Ga-=this.da,this.da=0);c+=this.M+" cycles, "+d+" ms, "+e+" hz)"}else hb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Ea(!0);this.Eb();Oe(this,this.b.N)}};function gd(a){return 1<a.C.length||!!a.wa}
function Ad(a,b,c){var d=a.b;if(0<c&&(a.wa&&!--a.wa||dc(a,b,1,a.C)))return!0;0<=c&&a.K.length&&(a.da++,b=yb(a.w,b),null!=b&&(a.K[b][1]++,b=a.O[a.na],b.G=d.N,b.Ma=!1,++a.na==a.O.length&&(a.na=0)));return!1}function Eb(a,b,c){a.g("break on input from port "+r(b)+": "+n(c));a.ka(!0)}function Ib(a,b,c){a.g("break on output to port "+r(b)+": "+n(c));a.ka(!0)}
function ne(a){var b,c;a.C=["bp"];if(void 0!==a.Z)for(b=1;b<a.Z.length;b++){c=a.Z[b];var d=a.w;ec(d.V[xe(c)>>>d.ma],!1)}a.Z=["br"];if(void 0!==a.I)for(b=1;b<a.I.length;b++)c=a.I[b],d=a.w,ec(d.V[xe(c)>>>d.ma],!0);a.I=["bw"];a.cb=0}m.Va=function(a,b,c){var d=!0;c||nf(this,a,b,!1,!0);if(a!=this.C){var e=xe(b);if(-1===e)this.g("invalid address: "+Z(b.G)),d=!1;else{var f=this.w;f.V[e>>>f.ma].Va(e&f.w,a==this.I)}}d&&(a.push(b),c?b.Ma=!0:(of(this,a,a.length-1,"set"),oe(this)));return d};
function nf(a,b,c,d,e){var f=!1;c=xe(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==xe(g)&&(!d||g.Ma)){f=!0;g.Ma||e||of(a,b,h,"cleared");b.splice(h,1);b!=a.C&&(d=a.w,ec(d.V[c>>>d.ma],b==a.I));g.Ma||oe(a);break}}return f}function pf(a,b){for(var c=1;c<b.length;c++)of(a,b,c);return b.length-1}function of(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.G)+(d?" "+d:c.Ac?' "'+c.Ac+'"':""))}
function Oe(a,b){if(void 0!==b)dc(a,b,1,a.C,!0),a.ba=0;else for(var c=1;c<a.C.length;c++){var d=a.C[c];if(d.Ma){if(!nf(a,a.C,d,!0))break;c=0}}}
function dc(a,b,c,d,e){var f=!1;if(!a.cb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Ma)for(var k=xe(g),l=0;l<c;l++)if(b+l==k){var p,f=!0;g.Ma&&(nf(a,d,g,!0),e=!0);if(p=g.kd){for(var f=!1,q=0;q<p.length;q++)if(!qf(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var y=q+1;y<p.length&&p[y].indexOf("else");y++)q++;if(y==p.length){f=!0;break}}a.b.D.va||(f=!0)}if(f){e||of(a,d,h,"hit");break}}}a.cb--;return f}
function rf(a,b,c,d){for(var e=X(b.G),f=a.Y(b,1),h=a.Ra[f],g="",k=(8086!=a.style?re:se)[h[0]],l=h.length-1,p=0,q,y=1;y<=l;y++){var x="";q=h[y];if(void 0!==q&&!(q&16384&&a.style==me)){var v=q&240;if(v){var z=q&15;z?p=z:q|=p;q&61440||(q|=1==y?8192:4096);if(v&32)a:{var x=a,v=q,z=b,u=" ";switch(v&15){case 1:u=n(x.Y(z,1),2);break;case 2:u=n(x.Y(z,1)<<24>>24,4);break;case 3:u=n(x.Pa(z,2),4);break;default:x="imm("+r(v)+")";break a}8086==x.style&&v&64?u="["+u+"]":v&16||(u=(x.style==me?"$":"0x")+u);x=u}else v&
16?(x=(q&3840)>>8,v=te[x],8086==a.style&&q&64&&(6==x&&(v="HL"),v="["+v+"]"),x=v):v&128&&(x=(f>>3&7).toString());if(!x||!x.length){g="INVALID";break}0<g.length&&(g+=",");g+=x||"???"}}}f="";h=Z(e.G)+" ";if(-1!==e.G&&-1!==b.G){do if(f+=n(a.Y(e,1),2),null==e.G)break;while(e.G!=b.G)}h+=ia(f,10);h=h+(q&32768?"*":" ")+ia(k,7);g&&(h+=" "+g);c&&(h=ia(h,40)+";"+c,h=a.b.D.hb?h+("cycles="+pc(a.b).toString()+" cs="+n(a.b.i.xb)):h+(null!=d?"="+d.toString():""));return h}
function sf(a,b){var c;switch(b){case "IF":c=a.b.ta&512;break;case "SF":c=Xc(a.b);break;case "ZF":c=Wc(a.b);break;case "AF":c=Vc(a.b);break;case "PF":c=Uc(a.b);break;case "CF":c=Sc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function tf(a,b){return te[b]+"="+Ie(a,b)+" "}function uf(a){return tf(a,7)+tf(a,8)+tf(a,9)+tf(a,10)+tf(a,11)+sf(a,"IF")+sf(a,"SF")+sf(a,"ZF")+sf(a,"AF")+sf(a,"PF")+sf(a,"CF")}
var vf={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function wf(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 xe(a,b,c){var d;if(b){b=we(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=ia(p);if(!p){f=!0;break}p=sf(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++],y=p.length;k.length&&qf[p]<qf[k[k.length-1]]&&rf(g,k,1);k.push(p);b=b.substr(q+y)}rf(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&tf(a,null,
d))}return d}function we(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=xe(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=se(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Pa(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.da-a.Fa}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function sf(a,b,c,d){var e;void 0!==b?(e=Be(b),0<=e?e=De(a,e):(e=a.ka[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 tf(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 uf(a,b){if(b)return tf(a,b,a.ka[b]);var c=0;for(b in a.ka)tf(a,b,a.ka[b]),c++;return 0<c}fe.prototype.Sa=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function vf(a,b,c){var d=[],e=re(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.F>>>0,g=f.od;if(e>=h&&e<h+g){e=ja(f.nc,[e-h],a.Sa);0<=e?wf(a,b,e,d):c&&(e=~e,wf(a,b,e-1,d),wf(a,b,e,d));break}}return d}function wf(a,b,c,d){var e={},f=a.J[b].nc,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].Na[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function xf(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?le:me;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Ra[h][0]]+" ").substr(0,5)+" ("+("0x"+n(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function yf(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return uf(a)||a.g("no variables"),!0;if(!c[2])return uf(a,c[1]);if(!c[3])return delete a.ka[c[1]],!0;var d=xe(a,c[3]);return void 0!==d?(a.ka[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function zf(a,b,c){var d=null;if(b=se(a,b,!0)){var e=vf(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.F-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Y(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.F)&&(h=" - "+r(f)),f=e[4]+" ("+Y(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function Af(a,b){switch(b[1]){case "8080":a.style=ge;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.lb=c;break;case "start":a.b.i.yb=c;break;case "stop":a.b.i.nb=c;break;default:a.g("unknown cs option");return}void 0!==c&&jc(a.b);a.g("checksums "+(a.b.C.hb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Bc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Xa.toFixed(2)+"Mhz")+
function De(a,b,c){var d;if(b){b=Ce(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=ja(p);if(!p){f=!0;break}p=xf(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++],y=p.length;k.length&&vf[p]<vf[k[k.length-1]]&&wf(g,k,1);k.push(p);b=b.substr(q+y)}wf(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&yf(a,null,
d))}return d}function Ce(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=De(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=ye(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Pa(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.da-a.Ga}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function xf(a,b,c,d){var e;void 0!==b?(e=He(b),0<=e?e=Je(a,e):(e=a.la[b],void 0===e&&(e=ba(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
function yf(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 zf(a,b){if(b)return yf(a,b,a.la[b]);var c=0;for(b in a.la)yf(a,b,a.la[b]),c++;return 0<c}le.prototype.Sa=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Af(a,b,c){var d=[],e=xe(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.G>>>0,g=f.wd;if(e>=h&&e<h+g){e=ka(f.pc,[e-h],a.Sa);0<=e?Bf(a,b,e,d):c&&(e=~e,Bf(a,b,e-1,d),Bf(a,b,e,d));break}}return d}function Bf(a,b,c,d){var e={},f=a.J[b].pc,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].Oa[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Cf(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?re:se;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Ra[h][0]]+" ").substr(0,5)+" ("+("0x"+n(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function Df(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return zf(a)||a.g("no variables"),!0;if(!c[2])return zf(a,c[1]);if(!c[3])return delete a.la[c[1]],!0;var d=De(a,c[3]);return void 0!==d?(a.la[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Ef(a,b,c){var d=null;if(b=ye(a,b,!0)){var e=Af(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.G-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.G)&&(h=" - "+r(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function Ff(a,b){switch(b[1]){case "8080":a.style=me;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.lb=c;break;case "start":a.b.i.yb=c;break;case "stop":a.b.i.nb=c;break;default:a.g("unknown cs option");return}void 0!==c&&kc(a.b);a.g("checksums "+(a.b.D.hb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Cc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Xa.toFixed(2)+"Mhz")+
" ("+a.b.i.Za+"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 Ge(a,b){var c;if(b&&"?"==b[1])a.g("register commands:"),a.g("\tr\tdump registers"),a.g("\trx [#]\tset flag or register x to [#]");else{var d=a.b;null==c&&(c=!0);if(null!=b&&1<b.length){var e=b[1],f=null,h=e.indexOf("=");if(0<h)f=e.substr(h+1),e=e.substr(0,h);else if(2<b.length)f=b[2];else{a.g("missing value for "+b[1]);return}var h=!1,g=xe(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.P=g&255;break;case "BC":d.P=g>>8&255;case "C":d.R=g&255;break;case "D":d.S=
g&255;break;case "DE":d.S=g>>8&255;case "E":d.T=g&255;break;case "H":d.U=g&255;break;case "HL":d.U=g>>8&255;case "L":d.X=g&255;break;case "SP":d.ia=g&65535;break;case "PC":G(d,g);a.W=X(d.N);break;case "PS":Jc(d,g);break;case "PSW":Jc(d,g&255|d.ta&-256);d.j=g>>8;break;case "CF":d.aa=g?d.aa|256:d.aa&255;break;case "PF":g?Uc(d)||(d.ca^=1):Uc(d)&&(d.ca^=1);break;case "AF":d.ua=g?~d.ca&16|d.ua&-17:d.ca&16|d.ua&-17;break;case "ZF":d.aa=g?d.aa&-256:d.aa|255;break;case "SF":g?Xc(d)||(d.ca^=192):Xc(d)&&(d.ca^=
192);break;case "IF":d.ta=g?d.ta|512:d.ta&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}lc(d);a.g("updated registers:")}a.g(pf(a));c&&(a.W=X(d.N),He(a,Y(a.W.F)))}}function Bf(a,b){b=ia(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Ee(a,c[2])):xe(a,b,!0)}function Cf(a,b,c){var d="t"!=b;c=sf(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);xa(c,function(){return hb(a,!0)&&a.rb(e,d,!1)},function(){lc(a.b);hb(a,!1)})}
function He(a,b,c,d){if(b=se(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=se(a,c,!0);if(!d||d.F<b.F)return;e=d.F-b.F;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=ib(a,!1)||a.ba?a.L:null;var h=null!=f?"cycles":null,g=vf(a,b),k=b.F;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=mf(a,b,h,f);a.g(f);a.W=b;e-=b.F-k;c++}}}
function ze(a,b,c,d){if(c)if(b){0>a.D&&a.G.length&&(a.D=0);if(0>a.D||b!=a.G[a.D])a.G.splice(0,0,b),a.D=0;a.D--}else a.fa?b="end":b=a.G[a.D+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==d&&!e||!h)a.push(ia(b.substring(c,f))),c=f+1}}return a}
function lf(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.fa&&(a.g("ended assemble at "+Y(a.ea.F)),a.W=a.ea,a.fa=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.za=null;if(jb(a)&&0<b.length){a.fa&&(b="a "+Y(a.ea.F)+" "+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=se(a,f[1],!0);if(p)if(a.ea=
p,void 0===f[2])a.g("begin assemble at "+Y(p.F)),a.fa=!0,lc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var y=0;y<q.length;y++)a.qa(p,q[y],1);a.g(mf(a,a.ea))}}break;case "b":a:{var x=f[0],v=f[1],z=b;if("?"==v)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var u=x.charAt(1);if("l"==u){var I=0,I=I+kf(a,a.u),I=I+kf(a,a.Z);(I+=kf(a,a.I))||a.g("no breakpoints")}else if("n"==u)a.wa=sf(a,v),a.g("break after "+a.wa+" instruction(s)");else if(void 0===v)a.g("missing breakpoint address");else{var C=X();if("*"!=v&&(C=se(a,v,!0),!C))break a;v=r(C.F);"c"==u?null==C.F?(he(a),a.g("all breakpoints cleared")):Je(a,a.u,C)||Je(a,a.Z,C)||
Je(a,a.I,C)||a.g("breakpoint missing: "+Y(C.F)):"i"==u?a.g("breakpoint "+(Ab(a.A,C.F)?"enabled":"cleared")+": port "+v+" (input)"):"o"==u?a.g("breakpoint "+(Eb(a.A,C.F)?"enabled":"cleared")+": port "+v+" (output)"):null!=C.F&&(ye(a,C,z),"p"==u?a.Va(a.u,C):"r"==u?a.Va(a.Z,C):"w"==u?a.Va(a.I,C):a.g("unknown breakpoint command: "+u))}}}break;case "c":a.Aa&&(a.Aa.value="");break;case "d":a:{var W,qa=f[0],Aa=f[1],Va=f[2],Xf=f[3];if("?"==Aa){var Ba="";for(W in pe)a.Ga[W]&&(Ba&&(Ba+=","),Ba+=W);Ba+=",state,symbols";
a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");Ba.length&&a.g("dump extension commands:\n\t"+Ba)}else if("state"==Aa){var Le=Df(a.w,!0);"console"==Va?console.log(Le):(a.Aa&&(a.Aa.value=""),a.g(Le))}else if("symbols"==Aa)for(var dd=0;dd<a.J.length;dd++){var ed=a.J[dd],lb;for(lb in ed.Na)if("."!=lb.charAt(0)){var Me=
ed.Na[lb].o;if(void 0!==Me){var Ne=ed.Na[lb].l;Ne&&(lb=Ne);a.g(Y(Me)+" "+lb)}}}else{if("d"==qa){for(W in pe)if(f[1]==W){var Oe=a.Ga[W];Oe?(f.shift(),f.shift(),Oe(f)):a.g("no dump registered for "+Aa);break a}Aa||(qa=a.Ib||"db")}else a.Ib=qa;if("dh"==qa){var Pe=Aa,Qe=Va,Re="",Se=0,Z=a.ma,Ca=a.O;if(Ca.length){var fa=+Pe||a.eb,mb=+Qe||10;isNaN(fa)?fa=mb:Re="more ";fa>Ca.length&&(a.g("note: only "+Ca.length+" available"),fa=Ca.length);Z-=fa;0>Z&&(null==Ca[Ca.length-1].F?(fa=Z+fa,Z=0):Z+=Ca.length);var fd=
[];"call"==Qe&&(mb=1E5,fd=["CALL"]);for(void 0!==Pe&&a.g(fa+" instructions earlier:");0<mb&&Z!=a.ma;){var Te=Ca[Z++];if(null==Te.F)break;var Kb=X(Te.F),Yf=fa--,Ue=mf(a,Kb,"history",Yf);(!fd.length||0<=Ue.indexOf(fd[0]))&&a.g(Ue);Kb.Sb&&(Z+=Kb.Sb,mb-=Kb.Sb,fa-=Kb.Sb);Z>=Ca.length&&(Z=0);a.eb=fa;Se++;mb--}}Se||(a.g("no "+Re+"history available"),a.eb=void 0)}else{var oc=se(a,Aa);if(oc){var pc=0;Va&&("l"==Va.charAt(0)&&(Va=Va.substr(1)||Xf),pc=sf(a,Va)>>>0,65536<pc&&(pc=65536));for(var Wa="",qc="dd"==
qa?4:"dw"==qa?2:1,rc=qc*pc||128,Zf=rc+15>>4||1;Zf--&&0<rc;){var sc=0,gd=0,Lb,Mb="",hd="",Aa=Y(oc.F);for(Lb=16;0<Lb&&0<rc;Lb--){var tc=a.Y(oc,1),sc=sc|tc<<(gd++<<3);gd==qc&&(Mb+=n(sc,2*qc),Mb+=1==qc?9==Lb?"-":" ":" ",sc=gd=0);hd+=32<=tc&&128>tc?String.fromCharCode(tc):".";rc--}Wa&&(Wa+="\n");Wa+=Aa+" "+Mb+(0==Lb?" "+hd:"")}Wa&&a.g(Wa);a.Ta=oc}}}}break;case "e":if("else"==f[0])break;var uc=1,Ve=255,We=a.Y,Xe=a.qa;"ew"==f[0]&&(uc=2,Ve=65535,We=a.Pa,Xe=a.Qb);var Ye=uc<<1,Ze=f[1];if(null==Ze)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 vc=se(a,Ze);if(vc)for(var wc=2;wc<f.length;wc++){var Nb=xe(a,f[wc]);if(void 0===Nb){a.g("unrecognized value: "+f[wc]);break}Nb&~Ve&&a.g("warning: "+n(Nb)+" exceeds "+uc+"-byte value");var $f=We.call(a,vc);a.g("changing "+Y(vc.F)+" from 0x"+n($f,Ye)+" to 0x"+n(Nb,Ye));Xe.call(a,vc,Nb,uc)}}break;case "f":xf(a,f[1]);break;case "g":a:{var $e=f[1],ag=b;if(void 0!==$e){var id=se(a,$e,!0);if(!id)break a;
ye(a,id,ag);a.Va(a.u,id,!0)}a.$a(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var jd;if(a.C.va)jd="halting",a.ja();else{if(ib(a,!0))break a;jd="already halted"}c||a.g(jd)}break;case "i":if("if"==f[0]){var kd;var Ob=b.substr(2),Ob=ia(Ob);xe(a,Ob)?(c||a.g("true: "+Ob),kd=!0):(c||a.g("false: "+Ob),kd=!1);kd||(d=!1);break}if("int"==f[0]){var xc;var bg=f[1];if(a.b.ta&512){var ld=xe(a,bg);if(null==ld)xc=!1;else{a.g("requesting interrupt level "+ld);var af=a.b;af.u=af.u&
-8|ld|8;xc=!0}}else a.g("interrupts disabled (use rif=1 to enable)"),xc=!1;xc||(d=!1);break}var md=f[1];if(md&&"?"!=md){var nd=sf(a,md);if(void 0!==nd){var cg=Cb(a.A,nd);a.g(r(nd)+": "+("0x"+n(cg,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 dg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var od=0,bf=X(),Pb=X(a.b.ia);for(a.g("stack trace for "+
Y(Pb.F));10>od;){for(var Xa=null,eg=256;65536>Pb.F>>>0;){bf.F=a.Pa(Pb,2);if(null==Pb.F||!eg--)break;for(var fg=a,yc=bf,cf=null,Qb=yc.F,df=Qb,pd=1;6>=pd&&Qb;pd++){if(2<pd){yc.F=Qb;var zc=mf(fg,yc);if(0<=zc.indexOf("CALL")){var ef=zc.indexOf(" ");if(Qb+(zc.indexOf(" ",ef+1)-ef-1)/2==df){cf=zc;break}}}Qb--}yc.F=df;if(Xa=cf)break}if(!Xa||null==Xa)break;var ff=null;if("ks"==dg){var gf=Xa.match(/[0-9A-F]+$/);gf&&(ff=zf(a,gf[0]))}Xa=ha(Xa,50)+" ;"+(ff||"stack="+Y(Pb.F));a.g(Xa);od++}od||a.g("no return addresses found")}break;
case "l":if("ln"==f[0]){zf(a,f[1],!0);break}break;case "m":a:{var Da,Ea=null,O=f[1];"?"==O&&(O=void 0);if(void 0!==O){var Ma=0;if("all"==O)Ma=1878917119,O=null;else if("on"==O)Ea=!0,O=null;else if("off"==O)Ea=!1,O=null;else{"keys"==O&&(O="key");"kbd"==O&&(O="keyboard");for(Da in pe)if(O==Da){Ma=pe[Da];Ea=!!(a.na&Ma);break}if(!Ma){a.g("unknown message category: "+O);break a}}if(Ma)if("on"==f[2])a.na|=Ma,Ea=!0;else if("off"==f[2]&&(a.na&=~Ma,Ea=!1,1073741824==Ma)){for(var qd=0;qd<a.Ea.length;qd++)a.g(a.Ea[qd]);
a.Ea=[]}}var gg=0,Na="";for(Da in pe)if(!O||O==Da){var hg=!!(a.na&pe[Da]);if(null===Ea||Ea==hg)Na&&(Na+=","),++gg%10||(Na+="\n\t"),"key"==Da&&(Da="keys"),Na+=Da}void 0===O&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ea?Ea?"messages on: ":"messages off: ":"message categories:\n\t")+(Na||"none"));ie(a)}break;case "o":var rd=f[1],ig=f[2];if(rd&&"?"!=rd){var sd=sf(a,rd,"port #"),td=sf(a,ig);void 0!==sd&&void 0!==td&&(Gb(a.A,sd,td),a.g(r(sd)+": "+("0x"+n(td,
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]){Bf(a,b.substr(5));break}var hf="pr"==f[0]?1:0,jg=1+hf;if(a.ba)a.g("step in progress");else{var ud=X(a.b.N);switch(a.Y(ud)){case 205:a.ba=jg,te(ud,3)}a.ba?(a.Va(a.u,ud,!0),a.$a()||(a.w&&a.w.Eb(),a.ba=0)):Cf(a,hf?"tr":"t")}break;case "r":if("reset"==b){a.w&&a.w.reset();break}Ge(a,f);break;case "s":Af(a,f);break;case "t":Cf(a,f[0],
f[1]);break;case "u":He(a,f[1],f[2],8);break;case "v":if("var"==f[0]){yf(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.23.3 ("+a.b.Wb+",RELEASE"+(nb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(pa());break;case "?":if(f[1]){Bf(a,b.substr(1));break}var Rb="commands:",vd;for(vd in ke)Rb+="\n"+ha(vd,9)+ke[vd];yd(a)||(Rb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Rb);break;default:a.g("unknown command: "+b),d=!1}}}catch(jf){a.g("debugger error: "+(jf.stack||jf.message)),d=!1}return d}
function kc(a,b,c){b=ze(a,b,c);for(var d in b)if(!lf(a,b[d]))return!1;return!0}Ia(function(){for(var a=B(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new fe(d);db(d,c)}});function Mc(a,b,c){this.id=a.id;this.key=Ef(a,b,c);this.H=a.H;Ff(this,a.wc)}function Ef(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}
Mc.prototype={constructor:Mc,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){Ff(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 Ff(a,b){a[a.id]={};b&&H(a,"parms",b);a.b=!1}function Gf(a){var b=!0;if(ta()){var c=JSON.stringify(a[a.id]);va(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Hf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function If(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:ta()&&(b=ua(a.key))?(a[a.id]=b,a.b=!0):!1}function Jf(a,b){return a[a.id][b]||null}function H(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Kf(a,b,c){w.call(this,"Computer",a,Kf,67108864);this.C.sa=!1;Lf(this,b);this.ba=hc(this,"autoPower",a);this.G=0;this.ka=a.busWidth||a.buswidth;this.w=Mf;this.W=null;this.K=this.fa=!1;this.ma=hc(this,"url")||"";(Math.random()+.1).toString(36);this.u=Nf(this);if(this.b=cb("CPU",this.id)){this.H=cb("Debugger",this.id);this.J=[];for(b=null;b=qb(this,"Video",b);)this.J.push(b);this.A=new sb({id:this.Rb+".bus",busWidth:this.ka},this.b,this.H);var d,e=bb(this.id);if((this.D=cb("Panel",this.id))&&
this.D.Aa)for(b=0;b<e.length;b++)d=e[b],d.ga=this.D.ga,d.g=this.D.g,d.Aa=this.D.Aa;this.g("PC8080 v1.23.3\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.Oa&&d.Oa(this,this.A,this.b,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.O=d:this.w=parseInt(d,10));var f;if(a=hc(this,"state")||(f=!0,a.state))b=this.da=a,f||(this.K=!0,this.w=Mf),this.w&&(this.Z=new Mc(this,"1.23.3"),If(this.Z)?
b=null:delete this.Z);!b&&this.w&&(b=Of(this))&&(this.K=!0);if(b){var h=this;na(b,null,!0,function(a,b,c){c?(h.O=null,h.K=!1,h.ga("Unable to load machine state from server (error "+c+(b?": "+ia(b):"")+")")):(h.W=b,h.fa=!0);E(h)})}else E(this);this.M.power||(this.ba=!0);!c&&this.ba&&Pf(this,this.Cb)}else t("Unable to find CPU component")}Za(Kf);var Mf=0;function Lf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.L=b}
function hc(a,b,c){var d=b.toLowerCase(),d=Ra[b]||Ra[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 Pf(a,b,c){for(var d=bb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!jb(f)){jb(f,function(){Pf(a,b,c)});return}}b.call(a,c)}
function Qf(a,b){var c=new Mc(a,"1.23.3","validate");if(If(c)&&Hf(c)){var d=Jf(c,"timestamp"),e=b?Jf(b,"timestamp"):"unknown";d!=e&&(a.ga("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Kf.prototype;
m.Cb=function(a){void 0===a&&(a=this.w||(this.W?1:Mf));if(!this.G){this.G++;var b=!1,c=!1;this.ea=!1;var d=this.Z||new Mc(this,"1.23.3");if(-1==a)b=!0;else if(a>Mf){if(If(d,this.W)){this.I=new Mc(this,"1.23.3","failsafe");If(this.I)&&(Rf(this,d),a=2,Ff(this.I));H(this.I,"timestamp",la());Gf(this.I);var e=this.w&&!this.K;if(1==a||ra("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Hf(d)){var f=Jf(d,"code"),h=Jf(d,"data");f&&("ok"==f?If(d,h):("error"==
f&&"no machine state"!=h?(this.ga("Error: "+h),"unable to verify user"==h&&(va("user",""),this.u=null)):this.g(f+": "+h),Ff(d),If(d)?(c=Hf(d),e=!0):c=!1))}e&&Qf(this,c?d:null)}else 2==a&&d.clear()}else Qf(this);delete this.W;delete this.Z}e=bb(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=Sf(this,h,d,b,c));b=[d,a,c];-1!=a?Pf(this,this.oc,b):this.oc(b)}};
function Sf(a,b,c,d,e){if(!b.C.sa){b.C.sa=!0;if(b.Ca){var f=null;e&&((f=Jf(c,b.id))||(f=Jf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Ca(f,d)&&f&&(t("Unable to restore state for "+b.type),a.da&&!a.fa?(c.clear(),a.w=Mf,window&&window.location.reload()):a.ea=!0,b.Ca(null),e=!1)}if(!d&&b.bc)for(a=b.bc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.oc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ra=!0;this.C.sa=!0;var d=this.M.power;d&&(d.textContent="Shutdown");this.b&&(Sf(this,this.b,b,c,a),mc(this.b));this.ea&&(Rf(this,b),b.clear());!c&&this.I&&(this.I.clear(),delete this.I);this.G=0};
function Rf(a,b){if(ra("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.u||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.ma;e.user=c;e.type="bug";e.data=d;na("http://www.pcjs.org/api/v1/report",e,!0)}}
function Df(a,b,c){var d,e="none";if(a.G)return null;a.G--;var f=new Mc(a,"1.23.3"),h=new Mc(a,"1.23.3","validate"),g=la();H(h,"timestamp",g);H(f,"timestamp",g);H(f,"version","1.23.3");H(f,"url",window?window.location.href:null);H(f,"browser",pa());a.b&&a.b.Ja&&(c&&a.b.ja(),d=a.b.Ja(b,c),"object"===typeof d&&H(f,a.b.id,d),c&&(a.b.C.sa=!1,!1===d&&(e=null)));for(var g=bb(a.id),k=0;k<g.length;k++){var l=g[k];l.C.sa&&(l.Ja&&(d=l.Ja(b,c),"object"===typeof d&&H(f,l.id,d)),c&&(l.C.sa=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.u&&Tf(a,a.u,f.toString()),Gf(h)&&Gf(f)||(e=null,d=g=!0)):a.w&&(d=!0,g=3==a.w),d&&f.clear(g)):e=f.toString());c&&(a.C.sa=!1,b=a.M.power)&&(b.textContent="Power");a.G=0;return e}m.reset=function(){this.A&&this.A.reset&&(fb(this,"Resetting "+this.A.type),this.A.reset());for(var a=bb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&(fb(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.pa=function(a,b,c){var d=this;switch(b){case "power":return this.M[b]=c,c.onclick=function(){d.G||(d.C.sa?Df(d,!1,!0):Pf(d,d.Cb))},!0;case "reset":return this.M[b]=c,c.onclick=function(){if(d.C.sa&&!d.G)if(d.w&&!d.O){var a=ra("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Df(d,a,!0);!a&&d.da?window&&window.location.reload():d.Cb(Mf)}else d.reset(),d.b&&mc(d.b)},!0;case "save":if(da(oa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.M[b]=c;c.onclick=function(){var a=Nf(d,!0);if(a){var b=!!(d.w&&!d.O||d.da),c=Df(d,b);b?Tf(d,a,c):d.ga("Resume disabled, machine state not saved")}};return!0}return!1};
function Nf(a,b){var c=a.u;c||(c=ua("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=Uf(a,c))||a.ga("The user ID is invalid."))):b&&a.ga("Browser local storage is not available"));return c}
function Uf(a,b){a.u=null;var c=na(oa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(va("user",c.data),a.u=c.data)}catch(e){t(e.message+" ("+d+")")}return a.u}function Of(a){var b=null;a.u&&(b=oa()+"/api/v1/user?req=load&user="+a.u+"&state="+Ef(a,"1.23.3"));return b}
function Tf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Ef(a,"1.23.3");d.data=c;b=na(oa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.ga("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.ga(c),va("user",""),a.u=null)}}
function qb(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.Eb=function(a){if(this.J.length){var b=0,c=0;a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.J[0];d.Ga&&d.Ga.focus();a&&window&&window.scrollTo(b,c)}};m.Da=function(a){this.b&&this.b.Da(a);this.D&&this.D.Da(a)};
function Ec(a,b){for(var c=0;c<a.J.length;c++){var d=a.J[c],e=!0;if(0<=b){if(d.lc)if(b&1)e=d.b,e.u=e.u&-8|10,e=!1;else{var f=d.b;f.u=f.u&-8|9}if(f=e&&d.Fa){for(var f=d.A,h=d.Ta,g=!0,k=d.Ea>>>f.la;0<h&&k<f.V.length;)f.V[k].La&&(f.V[k].La=g=!1,f.V[k].qc=!0),h-=f.Ba,k++;f=g}f&&(e=!1)}if(e)if(1<d.oa)switch(d.L){case 2:ee(d)}else{var g=d.Ea,k=g+d.Ta,l=0,p=0,q=0,e=d.K,y=0,f=d.da,x=h=0,v=d.Ra,z=(1<<v)-1;d.dd&&(v=-v,x=16+v);for(;g<k;){var u=yb(d.A,g);if(d.Fa&&u===d.ma[l])p+=d.kc;else{d.ma[l]=u;var I=x;I&&
(u=u>>8|(u&255)<<8);p<e&&(e=p);for(var C=d.kc;C--;){var W=u>>I&z;de(d,d.ic,p++,q,W);I+=v}p>y&&(y=p);q<f&&(f=q);q>=h&&(h=q+1)}g+=2;l++;if(p>=d.K&&(p=0,q++,q>d.da))break}d.Fa=!0;e<d.K&&(g=y-e,h-=f,d.D&&(k=e,l=g,e=f,g=h,f=d.K-(k+l),h=l),d.eb.putImageData(d.ic,0,0,e,f,g,h),d.I.drawImage(d.O,0,0,d.O.width,d.O.height,0,0,d.ba,d.Z))}}}
Ia(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=A(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=A(f),h=new Kf(h,d,!0);db(h,f);h.ba&&Pf(h,h.Cb)}});za.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=cb("Computer",c.id))&&c.ra&&!c.C.sa&&c.Cb(-1)}});
za.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=cb("Computer",c.id))&&c.C.sa&&Df(c,!(!c.w||c.O),!0)}});var Vf=0;function Wf(a,b,c,d,e,f){e("Loading "+a+"...");na(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):kg(g,a,b,c,d,e,f)})}
function kg(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?lg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function lg(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");na(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);lg(a,b,c)}})}else c(a,null)}
function mg(a,b,c,d){function e(a){if(void 0===g){var b=h&&B(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function f(a){e("Error: "+a);k&&(--Vf||La(!0));k=!1}var h,g,k=!0;Vf++;$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?Wf(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,--Vf||La(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--Vf||La(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?Wf(b,a,d,!0,e,l):kg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(y){f(y.message)}return k}window.embedPC8080=function(a,b,c,d){La(!1);return mg(a,b,c,d)};window.enableEvents=La;window.sendEvent=Oa;
function ng(a,b,c,d){if(!c&&b){d.push(b);a=$a[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?na(b,null,!0,function(a,b){og(b,d)}):og(null,d)}else t("Error ("+c+") requesting "+a)}
function og(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=ca(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[l]);){var y=d[2];y&&(g[y]||(p=p.replace(d[0],"")))}d=l=ba(l)}else"xsl"==q&&(e=l=ba(l));k[l]=p}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=wa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
function Me(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=De(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.P=g&255;break;case "BC":d.P=g>>8&255;case "C":d.R=g&255;break;case "D":d.S=
g&255;break;case "DE":d.S=g>>8&255;case "E":d.T=g&255;break;case "H":d.U=g&255;break;case "HL":d.U=g>>8&255;case "L":d.X=g&255;break;case "SP":d.ia=g&65535;break;case "PC":G(d,g);a.W=X(d.N);break;case "PS":Kc(d,g);break;case "PSW":Kc(d,g&255|d.ta&-256);d.j=g>>8;break;case "CF":d.aa=g?d.aa|256:d.aa&255;break;case "PF":g?Uc(d)||(d.ca^=1):Uc(d)&&(d.ca^=1);break;case "AF":d.ua=g?~d.ca&16|d.ua&-17:d.ca&16|d.ua&-17;break;case "ZF":d.aa=g?d.aa&-256:d.aa|255;break;case "SF":g?Xc(d)||(d.ca^=192):Xc(d)&&(d.ca^=
192);break;case "IF":d.ta=g?d.ta|512:d.ta&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}mc(d);a.g("updated registers:")}a.g(uf(a));c&&(a.W=X(d.N),Ne(a,Z(a.W.G)))}}function Gf(a,b){b=ja(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(Ke(a,c[2])):De(a,b,!0)}function Hf(a,b,c){var d="t"!=b;c=xf(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);ya(c,function(){return ib(a,!0)&&a.rb(e,d,!1)},function(){mc(a.b);ib(a,!1)})}
function Ne(a,b,c,d){if(b=ye(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=ye(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=jb(a,!1)||a.ba?a.M:null;var h=null!=f?"cycles":null,g=Af(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=rf(a,b,h,f);a.g(f);a.W=b;e-=b.G-k;c++}}}
function Fe(a,b,c,d){if(c)if(b){0>a.F&&a.A.length&&(a.F=0);if(0>a.F||b!=a.A[a.F])a.A.splice(0,0,b),a.F=0;a.F--}else a.fa?b="end":b=a.A[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(ja(b.substring(c,f))),c=f+1}}return a}
function qf(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.fa&&(a.g("ended assemble at "+Z(a.ea.G)),a.W=a.ea,a.fa=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.Aa=null;if(kb(a)&&0<b.length){a.fa&&(b="a "+Z(a.ea.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=ye(a,f[1],!0);if(p)if(a.ea=
p,void 0===f[2])a.g("begin assemble at "+Z(p.G)),a.fa=!0,mc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var y=0;y<q.length;y++)a.qa(p,q[y],1);a.g(rf(a,a.ea))}}break;case "b":a:{var x=f[0],v=f[1],z=b;if("?"==v)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var u=x.charAt(1);if("l"==u){var K=0,K=K+pf(a,a.C),K=K+pf(a,a.Z);(K+=pf(a,a.I))||a.g("no breakpoints")}else if("n"==u)a.wa=xf(a,v),a.g("break after "+a.wa+" instruction(s)");else if(void 0===v)a.g("missing breakpoint address");else{var C=X();if("*"!=v&&(C=ye(a,v,!0),!C))break a;v=r(C.G);"c"==u?null==C.G?(ne(a),a.g("all breakpoints cleared")):nf(a,a.C,C)||nf(a,a.Z,C)||
nf(a,a.I,C)||a.g("breakpoint missing: "+Z(C.G)):"i"==u?a.g("breakpoint "+(Bb(a.w,C.G)?"enabled":"cleared")+": port "+v+" (input)"):"o"==u?a.g("breakpoint "+(Fb(a.w,C.G)?"enabled":"cleared")+": port "+v+" (output)"):null!=C.G&&(Ee(a,C,z),"p"==u?a.Va(a.C,C):"r"==u?a.Va(a.Z,C):"w"==u?a.Va(a.I,C):a.g("unknown breakpoint command: "+u))}}}break;case "c":a.Ba&&(a.Ba.value="");break;case "d":a:{var Y,sa=f[0],Ba=f[1],Wa=f[2],bg=f[3];if("?"==Ba){var Ca="";for(Y in ve)a.Ha[Y]&&(Ca&&(Ca+=","),Ca+=Y);Ca+=",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");Ca.length&&a.g("dump extension commands:\n\t"+Ca)}else if("state"==Ba){var Pe=If(a.u,!0);"console"==Wa?console.log(Pe):(a.Ba&&(a.Ba.value=""),a.g(Pe))}else if("symbols"==Ba)for(var hd=0;hd<a.J.length;hd++){var id=a.J[hd],mb;for(mb in id.Oa)if("."!=mb.charAt(0)){var Qe=
id.Oa[mb].o;if(void 0!==Qe){var Re=id.Oa[mb].l;Re&&(mb=Re);a.g(Z(Qe)+" "+mb)}}}else{if("d"==sa){for(Y in ve)if(f[1]==Y){var Se=a.Ha[Y];Se?(f.shift(),f.shift(),Se(f)):a.g("no dump registered for "+Ba);break a}Ba||(sa=a.Ib||"db")}else a.Ib=sa;if("dh"==sa){var Te=Ba,Ue=Wa,Ve="",We=0,aa=a.na,Da=a.O;if(Da.length){var fa=+Te||a.eb,nb=+Ue||10;isNaN(fa)?fa=nb:Ve="more ";fa>Da.length&&(a.g("note: only "+Da.length+" available"),fa=Da.length);aa-=fa;0>aa&&(null==Da[Da.length-1].G?(fa=aa+fa,aa=0):aa+=Da.length);
var jd=[];"call"==Ue&&(nb=1E5,jd=["CALL"]);for(void 0!==Te&&a.g(fa+" instructions earlier:");0<nb&&aa!=a.na;){var Xe=Da[aa++];if(null==Xe.G)break;var Mb=X(Xe.G),cg=fa--,Ye=rf(a,Mb,"history",cg);(!jd.length||0<=Ye.indexOf(jd[0]))&&a.g(Ye);Mb.Ub&&(aa+=Mb.Ub,nb-=Mb.Ub,fa-=Mb.Ub);aa>=Da.length&&(aa=0);a.eb=fa;We++;nb--}}We||(a.g("no "+Ve+"history available"),a.eb=void 0)}else{var qc=ye(a,Ba);if(qc){var rc=0;Wa&&("l"==Wa.charAt(0)&&(Wa=Wa.substr(1)||bg),rc=xf(a,Wa)>>>0,65536<rc&&(rc=65536));for(var Xa=
"",sc="dd"==sa?4:"dw"==sa?2:1,tc=sc*rc||128,dg=tc+15>>4||1;dg--&&0<tc;){var uc=0,kd=0,Nb,Ob="",ld="",Ba=Z(qc.G);for(Nb=16;0<Nb&&0<tc;Nb--){var vc=a.Y(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--}Xa&&(Xa+="\n");Xa+=Ba+" "+Ob+(0==Nb?" "+ld:"")}Xa&&a.g(Xa);a.Ta=qc}}}}break;case "e":if("else"==f[0])break;var wc=1,Ze=255,$e=a.Y,af=a.qa;"ew"==f[0]&&(wc=2,Ze=65535,$e=a.Pa,af=a.Rb);var bf=wc<<1,cf=f[1];if(null==
cf)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=ye(a,cf);if(xc)for(var yc=2;yc<f.length;yc++){var Pb=De(a,f[yc]);if(void 0===Pb){a.g("unrecognized value: "+f[yc]);break}Pb&~Ze&&a.g("warning: "+n(Pb)+" exceeds "+wc+"-byte value");var eg=$e.call(a,xc);a.g("changing "+Z(xc.G)+" from 0x"+n(eg,bf)+" to 0x"+n(Pb,bf));af.call(a,xc,Pb,wc)}}break;case "f":Cf(a,f[1]);break;case "g":a:{var df=f[1],fg=b;if(void 0!==df){var md=
ye(a,df,!0);if(!md)break a;Ee(a,md,fg);a.Va(a.C,md,!0)}a.$a(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var nd;if(a.D.va)nd="halting",a.ka();else{if(jb(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=ja(Qb);De(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 gg=f[1];if(a.b.ta&512){var pd=De(a,gg);null==pd?zc=!1:(a.g("requesting interrupt level "+pd),fd(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=xf(a,qd);if(void 0!==rd){var hg=Db(a.w,rd);a.g(r(rd)+": "+("0x"+n(hg,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 ig=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,ef=X(),Rb=X(a.b.ia);for(a.g("stack trace for "+
Z(Rb.G));10>sd;){for(var Ya=null,jg=256;65536>Rb.G>>>0;){ef.G=a.Pa(Rb,2);if(null==Rb.G||!jg--)break;for(var kg=a,Ac=ef,ff=null,Sb=Ac.G,gf=Sb,td=1;6>=td&&Sb;td++){if(2<td){Ac.G=Sb;var Bc=rf(kg,Ac);if(0<=Bc.indexOf("CALL")){var hf=Bc.indexOf(" ");if(Sb+(Bc.indexOf(" ",hf+1)-hf-1)/2==gf){ff=Bc;break}}}Sb--}Ac.G=gf;if(Ya=ff)break}if(!Ya||null==Ya)break;var jf=null;if("ks"==ig){var kf=Ya.match(/[0-9A-F]+$/);kf&&(jf=Ef(a,kf[0]))}Ya=ia(Ya,50)+" ;"+(jf||"stack="+Z(Rb.G));a.g(Ya);sd++}sd||a.g("no return addresses found")}break;
case "l":if("ln"==f[0]){Ef(a,f[1],!0);break}break;case "m":a:{var Ea,Fa=null,P=f[1];"?"==P&&(P=void 0);if(void 0!==P){var Pa=0;if("all"==P)Pa=1878917119,P=null;else if("on"==P)Fa=!0,P=null;else if("off"==P)Fa=!1,P=null;else{"keys"==P&&(P="key");"kbd"==P&&(P="keyboard");for(Ea in ve)if(P==Ea){Pa=ve[Ea];Fa=!!(a.oa&Pa);break}if(!Pa){a.g("unknown message category: "+P);break a}}if(Pa)if("on"==f[2])a.oa|=Pa,Fa=!0;else if("off"==f[2]&&(a.oa&=~Pa,Fa=!1,1073741824==Pa)){for(var ud=0;ud<a.Fa.length;ud++)a.g(a.Fa[ud]);
a.Fa=[]}}var lg=0,Qa="";for(Ea in ve)if(!P||P==Ea){var mg=!!(a.oa&ve[Ea]);if(null===Fa||Fa==mg)Qa&&(Qa+=","),++lg%10||(Qa+="\n\t"),"key"==Ea&&(Ea="keys"),Qa+=Ea}void 0===P&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Fa?Fa?"messages on: ":"messages off: ":"message categories:\n\t")+(Qa||"none"));oe(a)}break;case "o":var vd=f[1],ng=f[2];if(vd&&"?"!=vd){var wd=xf(a,vd,"port #"),xd=xf(a,ng);void 0!==wd&&void 0!==xd&&(Hb(a.w,wd,xd),a.g(r(wd)+": "+("0x"+n(xd,
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]){Gf(a,b.substr(5));break}var lf="pr"==f[0]?1:0,og=1+lf;if(a.ba)a.g("step in progress");else{var yd=X(a.b.N);switch(a.Y(yd)){case 205:a.ba=og,ze(yd,3)}a.ba?(a.Va(a.C,yd,!0),a.$a()||(a.u&&a.u.Eb(),a.ba=0)):Hf(a,lf?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}Me(a,f);break;case "s":Ff(a,f);break;case "t":Hf(a,f[0],
f[1]);break;case "u":Ne(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Df(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.23.3 ("+a.b.Yb+",RELEASE"+(ob?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(qa());break;case "?":if(f[1]){Gf(a,b.substr(1));break}var Tb="commands:",zd;for(zd in qe)Tb+="\n"+ia(zd,9)+qe[zd];gd(a)||(Tb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Tb);break;default:a.g("unknown command: "+b),d=!1}}}catch(mf){a.g("debugger error: "+(mf.stack||mf.message)),d=!1}return d}
function lc(a,b,c){b=Fe(a,b,c);for(var d in b)if(!qf(a,b[d]))return!1;return!0}Ja(function(){for(var a=B(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=A(c),d=new le(d);eb(d,c)}});function H(a,b,c){this.id=a.id;this.key=Jf(a,b,c);this.H=a.H;Kf(this,a.yc)}function Jf(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){Kf(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 Kf(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function Lf(a){var b=!0;if(ua()){var c=JSON.stringify(a[a.id]);wa(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Mf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function Nf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:ua()&&(b=va(a.key))?(a[a.id]=b,a.b=!0):!1}function Of(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Pf(a,b,c){w.call(this,"Computer",a,Pf,67108864);this.D.sa=!1;Qf(this,b);this.ba=ic(this,"autoPower",a);this.A=0;this.la=a.busWidth||a.buswidth;this.u=Rf;this.W=null;this.K=this.fa=!1;this.na=ic(this,"url")||"";(Math.random()+.1).toString(36);this.C=Sf(this);if(this.b=db("CPU",this.id)){this.H=db("Debugger",this.id);this.J=[];for(b=null;b=rb(this,"Video",b);)this.J.push(b);this.w=new tb({id:this.Sb+".bus",busWidth:this.la},this.b,this.H);var d,e=cb(this.id);if((this.F=db("Panel",this.id))&&
this.F.Ba)for(b=0;b<e.length;b++)d=e[b],d.ga=this.F.ga,d.g=this.F.g,d.Ba=this.F.Ba;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.Na&&d.Na(this,this.w,this.b,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.O=d:this.u=parseInt(d,10));var f;if(a=ic(this,"state")||(f=!0,a.state))b=this.da=a,f||(this.K=!0,this.u=Rf),this.u&&(this.Z=new H(this,"1.23.3"),Nf(this.Z)?
b=null:delete this.Z);!b&&this.u&&(b=Tf(this))&&(this.K=!0);if(b){var h=this;oa(b,null,!0,function(a,b,c){c?(h.O=null,h.K=!1,h.ga("Unable to load machine state from server (error "+c+(b?": "+ja(b):"")+")")):(h.W=b,h.fa=!0);E(h)})}else E(this);this.L.power||(this.ba=!0);!c&&this.ba&&Uf(this,this.Cb)}else t("Unable to find CPU component")}$a(Pf);var Rf=0;function Qf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.M=b}
function ic(a,b,c){var d=b.toLowerCase(),d=Sa[b]||Sa[d];void 0===d&&a.M&&(d=a.M[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Uf(a,b,c){for(var d=cb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!kb(f)){kb(f,function(){Uf(a,b,c)});return}}b.call(a,c)}
function Vf(a,b){var c=new H(a,"1.23.3","validate");if(Nf(c)&&Mf(c)){var d=Of(c,"timestamp"),e=b?Of(b,"timestamp"):"unknown";d!=e&&(a.ga("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Pf.prototype;
m.Cb=function(a){void 0===a&&(a=this.u||(this.W?1:Rf));if(!this.A){this.A++;var b=!1,c=!1;this.ea=!1;var d=this.Z||new H(this,"1.23.3");if(-1==a)b=!0;else if(a>Rf){if(Nf(d,this.W)){this.I=new H(this,"1.23.3","failsafe");Nf(this.I)&&(Wf(this,d),a=2,Kf(this.I));I(this.I,"timestamp",ma());Lf(this.I);var e=this.u&&!this.K;if(1==a||ra("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=Mf(d)){var f=Of(d,"code"),h=Of(d,"data");f&&("ok"==f?Nf(d,h):("error"==f&&
"no machine state"!=h?(this.ga("Error: "+h),"unable to verify user"==h&&(wa("user",""),this.C=null)):this.g(f+": "+h),Kf(d),Nf(d)?(c=Mf(d),e=!0):c=!1))}e&&Vf(this,c?d:null)}else 2==a&&d.clear()}else Vf(this);delete this.W;delete this.Z}e=cb(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=Xf(this,h,d,b,c));b=[d,a,c];-1!=a?Uf(this,this.qc,b):this.qc(b)}};
function Xf(a,b,c,d,e){if(!b.D.sa){b.D.sa=!0;if(b.za){var f=null;e&&((f=Of(c,b.id))||(f=Of(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.za(f,d)&&f&&(t("Unable to restore state for "+b.type),a.da&&!a.fa?(c.clear(),a.u=Rf,window&&window.location.reload()):a.ea=!0,b.za(null),e=!1)}if(!d&&b.ec)for(a=b.ec.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.qc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ra=!0;this.D.sa=!0;var d=this.L.power;d&&(d.textContent="Shutdown");this.b&&(Xf(this,this.b,b,c,a),nc(this.b));this.ea&&(Wf(this,b),b.clear());!c&&this.I&&(this.I.clear(),delete this.I);this.A=0};
function Wf(a,b){if(ra("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.C||"",d=b.toString(),e={app:"PC8080",ver:"1.23.3"};e.url=a.na;e.user=c;e.type="bug";e.data=d;oa("http://www.pcjs.org/api/v1/report",e,!0)}}
function If(a,b,c){var d,e="none";if(a.A)return null;a.A--;var f=new H(a,"1.23.3"),h=new H(a,"1.23.3","validate"),g=ma();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",qa());a.b&&a.b.Da&&(c&&a.b.ka(),d=a.b.Da(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.D.sa=!1,!1===d&&(e=null)));for(var g=cb(a.id),k=0;k<g.length;k++){var l=g[k];l.D.sa&&(l.Da&&(d=l.Da(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.D.sa=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.C&&Yf(a,a.C,f.toString()),Lf(h)&&Lf(f)||(e=null,d=g=!0)):a.u&&(d=!0,g=3==a.u),d&&f.clear(g)):e=f.toString());c&&(a.D.sa=!1,b=a.L.power)&&(b.textContent="Power");a.A=0;return e}m.reset=function(){this.w&&this.w.reset&&(gb(this,"Resetting "+this.w.type),this.w.reset());for(var a=cb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.w&&c.reset&&(gb(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=cb(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=cb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.ja=function(a,b,c){var d=this;switch(b){case "power":return this.L[b]=c,c.onclick=function(){d.A||(d.D.sa?If(d,!1,!0):Uf(d,d.Cb))},!0;case "reset":return this.L[b]=c,c.onclick=function(){if(d.D.sa&&!d.A)if(d.u&&!d.O){var a=ra("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");If(d,a,!0);!a&&d.da?window&&window.location.reload():d.Cb(Rf)}else d.reset(),d.b&&nc(d.b)},!0;case "save":if(ea(pa(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.L[b]=c;c.onclick=function(){var a=Sf(d,!0);if(a){var b=!!(d.u&&!d.O||d.da),c=If(d,b);b?Yf(d,a,c):d.ga("Resume disabled, machine state not saved")}};return!0}return!1};
function Sf(a,b){var c=a.C;c||(c=va("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=Zf(a,c))||a.ga("The user ID is invalid."))):b&&a.ga("Browser local storage is not available"));return c}
function Zf(a,b){a.C=null;var c=oa(pa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(wa("user",c.data),a.C=c.data)}catch(e){t(e.message+" ("+d+")")}return a.C}function Tf(a){var b=null;a.C&&(b=pa()+"/api/v1/user?req=load&user="+a.C+"&state="+Jf(a,"1.23.3"));return b}
function Yf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Jf(a,"1.23.3");d.data=c;b=oa(pa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.ga("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.ga(c),wa("user",""),a.C=null)}}
function rb(a,b,c){a=cb(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.Eb=function(a){if(this.J.length){var b=0,c=0;a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.J[0];d.Ha&&d.Ha.focus();a&&window&&window.scrollTo(b,c)}};m.Ea=function(a){this.b&&this.b.Ea(a);this.F&&this.F.Ea(a)};
function Fc(a,b){for(var c=0;c<a.J.length;c++){var d=a.J[c],e=!0;if(0<=b){d.Tb&&(120==d.Tb?b&1?(fd(d.b,2),e=!1):fd(d.b,1):fd(d.b,4));var f;if(f=e&&d.Ga){f=d.w;for(var h=d.Ta,g=!0,k=d.Fa>>>f.ma;0<h&&k<f.V.length;)f.V[k].La&&(f.V[k].La=g=!1,f.V[k].sc=!0),h-=f.Ca,k++;f=g}f&&(e=!1)}if(e)if(1<d.pa)switch(d.M){case 2:fe(d)}else{var g=d.Fa,k=g+d.Ta,l=0,p=0,q=0,e=d.K,y=0;f=d.da;var x=h=0,v=d.Ra,z=(1<<v)-1;d.jd&&(v=-v,x=16+v);for(;g<k;){var u=zb(d.w,g);if(d.Ga&&u===d.na[l])p+=d.nc;else{d.na[l]=u;var K=x;K&&
(u=u>>8|(u&255)<<8);p<e&&(e=p);for(var C=d.nc;C--;){var Y=u>>K&z;ee(d,d.lc,p++,q,Y);K+=v}p>y&&(y=p);q<f&&(f=q);q>=h&&(h=q+1)}g+=2;l++;if(p>=d.K&&(p=0,q++,q>d.da))break}d.Ga=!0;e<d.K&&(g=y-e,h-=f,d.F&&(k=e,l=g,e=f,g=h,f=d.K-(k+l),h=l),d.eb.putImageData(d.lc,0,0,e,f,g,h),d.I.drawImage(d.O,0,0,d.O.width,d.O.height,0,0,d.ba,d.Z))}}}
Ja(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=A(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=A(f),h=new Pf(h,d,!0);eb(h,f);h.ba&&Uf(h,h.Cb)}});Aa.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=db("Computer",c.id))&&c.ra&&!c.D.sa&&c.Cb(-1)}});
Aa.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=A(a[b]);(c=db("Computer",c.id))&&c.D.sa&&If(c,!(!c.u||c.O),!0)}});var $f=0;function ag(a,b,c,d,e,f){e("Loading "+a+"...");oa(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):pg(g,a,b,c,d,e,f)})}
function pg(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){bb(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?qg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function qg(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");oa(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,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);qg(a,b,c)}})}else c(a,null)}
function rg(a,b,c,d){function e(a){if(void 0===g){var b=h&&B(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ha(a))}function f(a){e("Error: "+a);k&&(--$f||Ma(!0));k=!1}var h,g,k=!0;$f++;ab[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?ag(c,null,null,!1,e,function(d,k){if(k)if(bb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--$f||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),--$f||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)?ag(b,a,d,!0,e,l):pg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(y){f(y.message)}return k}window.embedPC8080=function(a,b,c,d){Ma(!1);return rg(a,b,c,d)};window.enableEvents=Ma;window.sendEvent=Na;
function sg(a,b,c,d){if(!c&&b){d.push(b);a=ab[d[0]];b=null;for(var e in a)if(ea(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?oa(b,null,!0,function(a,b){tg(b,d)}):tg(null,d)}else t("Error ("+c+") requesting "+a)}
function tg(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=ab[f],k={},l;for(l in g){var p=g[l],q=da(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(g[l]);){var y=d[2];y&&(g[y]||(p=p.replace(d[0],"")))}d=l=ca(l)}else"xsl"==q&&(e=l=ca(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=xa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",t(c)):t("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=cb("Computer",a),e=cb("Debugger",a);if(d){var f=Df(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,wc:h}))return!0;na(b,null,!0,function(c,d,e){ng(c,d,e,[a,ba(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=db("Computer",a),e=db("Debugger",a);if(d){var f=If(d,!0),h=d.M?JSON.stringify(d.M):null;b||(b="/versions/pcjs/1.23.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,yc:h}))return!0;oa(b,null,!0,function(c,d,e){sg(c,d,e,[a,ca(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();

View file

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