The 8080 CPU goes through the Bus interfaces for all memory accesses now. The PCjs CPU maintained its own copy of Bus memory structures and interfaces, partly for improved performance but also because some CPUs can turn on address translation (ie, paging), making separate interfaces a necessity. However, PC8080 has much lower performance requirements and no address translation requirements, so we should revert to the original Bus interfaces.
This commit is contained in:
parent
cba3fca260
commit
a56f1cfde1
6 changed files with 376 additions and 434 deletions
|
|
@ -135,7 +135,7 @@ function Bus(parmsBus, cpu, dbg)
|
|||
* [0]: registered function to call for every I/O access
|
||||
*
|
||||
* The registered function is called with the port address, and if the access was triggered by the CPU,
|
||||
* the linear instruction pointer (LIP) at the point of access.
|
||||
* the instruction pointer (IP) at the point of access.
|
||||
*
|
||||
* WARNING: Unlike the (old) read and write memory notification functions, these support only one
|
||||
* pair of input/output functions per port. A more sophisticated architecture could support a list
|
||||
|
|
@ -225,7 +225,6 @@ Bus.prototype.initMemory = function()
|
|||
for (var iBlock = 0; iBlock < this.nBlockTotal; iBlock++) {
|
||||
this.aMemBlocks[iBlock] = block;
|
||||
}
|
||||
this.cpu.initMemory(this.aMemBlocks, this.nBlockShift, this.nBusMask);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -492,8 +491,6 @@ Bus.prototype.setMemoryBlocks = function(addr, size, aBlocks, type)
|
|||
/**
|
||||
* getByte(addr)
|
||||
*
|
||||
* For physical addresses only; for linear addresses, use cpu.getByte().
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr is a physical address
|
||||
* @return {number} byte (8-bit) value at that address
|
||||
|
|
@ -520,8 +517,6 @@ Bus.prototype.getByteDirect = function(addr)
|
|||
/**
|
||||
* getShort(addr)
|
||||
*
|
||||
* For physical addresses only; for linear addresses, use cpu.getShort().
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr is a physical address
|
||||
* @return {number} word (16-bit) value at that address
|
||||
|
|
@ -558,8 +553,6 @@ Bus.prototype.getShortDirect = function(addr)
|
|||
/**
|
||||
* setByte(addr, b)
|
||||
*
|
||||
* For physical addresses only; for linear addresses, use cpu.setByte().
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr is a physical address
|
||||
* @param {number} b is the byte (8-bit) value to write (we truncate it to 8 bits to be safe)
|
||||
|
|
@ -587,8 +580,6 @@ Bus.prototype.setByteDirect = function(addr, b)
|
|||
/**
|
||||
* setShort(addr, w)
|
||||
*
|
||||
* For physical addresses only; for linear addresses, use cpu.setShort().
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr is a physical address
|
||||
* @param {number} w is the word (16-bit) value to write (we truncate it to 16 bits to be safe)
|
||||
|
|
@ -627,6 +618,36 @@ Bus.prototype.setShortDirect = function(addr, w)
|
|||
this.aMemBlocks[iBlock & this.nBlockMask].writeByteDirect(0, (w >> 8) & 0xff, addr + 1);
|
||||
};
|
||||
|
||||
/**
|
||||
* addMemBreak(addr, fWrite)
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr
|
||||
* @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
|
||||
*/
|
||||
Bus.prototype.addMemBreak = function(addr, fWrite)
|
||||
{
|
||||
if (DEBUGGER) {
|
||||
var iBlock = addr >>> this.nBlockShift;
|
||||
this.aMemBlocks[iBlock].addBreakpoint(addr & this.nBlockLimit, fWrite);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* removeMemBreak(addr, fWrite)
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} addr
|
||||
* @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
|
||||
*/
|
||||
Bus.prototype.removeMemBreak = function(addr, fWrite)
|
||||
{
|
||||
if (DEBUGGER) {
|
||||
var iBlock = addr >>> this.nBlockShift;
|
||||
this.aMemBlocks[iBlock].removeBreakpoint(addr & this.nBlockLimit, fWrite);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* saveMemory(fAll)
|
||||
*
|
||||
|
|
@ -745,7 +766,7 @@ Bus.prototype.addPortInputBreak = function(port)
|
|||
* @this {Bus}
|
||||
* @param {number} start port address
|
||||
* @param {number} end port address
|
||||
* @param {function(number,number)} fn is called with the port and LIP values at the time of the input
|
||||
* @param {function(number,number)} fn is called with the port and IP values at the time of the input
|
||||
*/
|
||||
Bus.prototype.addPortInputNotify = function(start, end, fn)
|
||||
{
|
||||
|
|
@ -794,18 +815,18 @@ Bus.prototype.addPortInputWidth = function(port, size)
|
|||
};
|
||||
|
||||
/**
|
||||
* checkPortInputNotify(port, size, addrLIP)
|
||||
* checkPortInputNotify(port, size, addrIP)
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} port
|
||||
* @param {number} size (1, 2 or 4)
|
||||
* @param {number} [addrLIP] is the LIP value at the time of the input
|
||||
* @param {number} [addrIP] is the IP value at the time of the input
|
||||
* @return {number} simulated port data
|
||||
*
|
||||
* NOTE: It seems that parts of the ROM BIOS (like the RS-232 probes around F000:E5D7 in the 5150 BIOS)
|
||||
* assume that ports for non-existent hardware return 0xff rather than 0x00, hence my new default (0xff) below.
|
||||
*/
|
||||
Bus.prototype.checkPortInputNotify = function(port, size, addrLIP)
|
||||
Bus.prototype.checkPortInputNotify = function(port, size, addrIP)
|
||||
{
|
||||
var data = 0, shift = 0;
|
||||
|
||||
|
|
@ -827,7 +848,7 @@ Bus.prototype.checkPortInputNotify = function(port, size, addrLIP)
|
|||
|
||||
if (aNotify !== undefined) {
|
||||
if (aNotify[0]) {
|
||||
dataPort = aNotify[0](port, addrLIP);
|
||||
dataPort = aNotify[0](port, addrIP);
|
||||
if (dataPort === undefined) {
|
||||
dataPort = maskPort;
|
||||
} else {
|
||||
|
|
@ -840,7 +861,7 @@ Bus.prototype.checkPortInputNotify = function(port, size, addrLIP)
|
|||
}
|
||||
else {
|
||||
if (DEBUGGER && this.dbg) {
|
||||
this.dbg.messageIO(this, port, null, addrLIP);
|
||||
this.dbg.messageIO(this, port, null, addrIP);
|
||||
if (this.fPortInputBreakAll) this.dbg.checkPortInput(port, size, dataPort);
|
||||
}
|
||||
}
|
||||
|
|
@ -902,7 +923,7 @@ Bus.prototype.addPortOutputBreak = function(port)
|
|||
* @this {Bus}
|
||||
* @param {number} start port address
|
||||
* @param {number} end port address
|
||||
* @param {function(number,number)} fn is called with the port and LIP values at the time of the output
|
||||
* @param {function(number,number)} fn is called with the port and IP values at the time of the output
|
||||
*/
|
||||
Bus.prototype.addPortOutputNotify = function(start, end, fn)
|
||||
{
|
||||
|
|
@ -951,15 +972,15 @@ Bus.prototype.addPortOutputWidth = function(port, size)
|
|||
};
|
||||
|
||||
/**
|
||||
* checkPortOutputNotify(port, size, data, addrLIP)
|
||||
* checkPortOutputNotify(port, size, data, addrIP)
|
||||
*
|
||||
* @this {Bus}
|
||||
* @param {number} port
|
||||
* @param {number} size
|
||||
* @param {number} data
|
||||
* @param {number} [addrLIP] is the LIP value at the time of the output
|
||||
* @param {number} [addrIP] is the IP value at the time of the output
|
||||
*/
|
||||
Bus.prototype.checkPortOutputNotify = function(port, size, data, addrLIP)
|
||||
Bus.prototype.checkPortOutputNotify = function(port, size, data, addrIP)
|
||||
{
|
||||
var shift = 0;
|
||||
|
||||
|
|
@ -981,7 +1002,7 @@ Bus.prototype.checkPortOutputNotify = function(port, size, data, addrLIP)
|
|||
|
||||
if (aNotify !== undefined) {
|
||||
if (aNotify[0]) {
|
||||
aNotify[0](port, dataPort, addrLIP);
|
||||
aNotify[0](port, dataPort, addrIP);
|
||||
}
|
||||
if (DEBUGGER && this.dbg && this.fPortOutputBreakAll != aNotify[1]) {
|
||||
this.dbg.checkPortOutput(port, size, dataPort);
|
||||
|
|
@ -989,7 +1010,7 @@ Bus.prototype.checkPortOutputNotify = function(port, size, data, addrLIP)
|
|||
}
|
||||
else {
|
||||
if (DEBUGGER && this.dbg) {
|
||||
this.dbg.messageIO(this, port, dataPort, addrLIP);
|
||||
this.dbg.messageIO(this, port, dataPort, addrIP);
|
||||
if (this.fPortOutputBreakAll) this.dbg.checkPortOutput(port, size, dataPort);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,14 +92,6 @@ function CPUSim(parmsCPU)
|
|||
*/
|
||||
this.cLiveRegs = 0;
|
||||
|
||||
/*
|
||||
* We're just declaring aBusBlocks and associated Bus parameters here; they'll be initialized by initMemory()
|
||||
* when the Bus is initialized.
|
||||
*/
|
||||
this.aBusBlocks = [];
|
||||
this.nBusMask = 0;
|
||||
this.nBlockShift = this.nBlockSize = this.nBlockLimit = this.nBlockTotal = this.nBlockMask = 0;
|
||||
|
||||
/*
|
||||
* Array of halt handlers, if any (see addHaltCheck)
|
||||
*/
|
||||
|
|
@ -115,27 +107,6 @@ function CPUSim(parmsCPU)
|
|||
|
||||
Component.subclass(CPUSim, CPU);
|
||||
|
||||
/**
|
||||
* initMemory(aBusBlocks, nBlockShift, nBusMask)
|
||||
*
|
||||
* Notification from Bus.initMemory(), giving us direct access to the entire memory space.
|
||||
*
|
||||
* @this {CPUSim}
|
||||
* @param {Array} aBusBlocks
|
||||
* @param {number} nBlockShift
|
||||
* @param {number} nBusMask
|
||||
*/
|
||||
CPUSim.prototype.initMemory = function(aBusBlocks, nBlockShift, nBusMask)
|
||||
{
|
||||
this.aBusBlocks = aBusBlocks;
|
||||
this.nBlockShift = nBlockShift;
|
||||
this.nBlockSize = 1 << this.nBlockShift;
|
||||
this.nBlockLimit = this.nBlockSize - 1;
|
||||
this.nBlockTotal = aBusBlocks.length;
|
||||
this.nBlockMask = this.nBlockTotal - 1;
|
||||
this.nBusMask = nBusMask;
|
||||
};
|
||||
|
||||
/**
|
||||
* addHaltCheck(fn)
|
||||
*
|
||||
|
|
@ -149,36 +120,6 @@ CPUSim.prototype.addHaltCheck = function(fn)
|
|||
this.afnHalt.push(fn);
|
||||
};
|
||||
|
||||
/**
|
||||
* addMemBreak(addr, fWrite)
|
||||
*
|
||||
* @this {CPUSim}
|
||||
* @param {number} addr
|
||||
* @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
|
||||
*/
|
||||
CPUSim.prototype.addMemBreak = function(addr, fWrite)
|
||||
{
|
||||
if (DEBUGGER) {
|
||||
var iBlock = addr >>> this.nBlockShift;
|
||||
this.aBusBlocks[iBlock].addBreakpoint(addr & this.nBlockLimit, fWrite);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* removeMemBreak(addr, fWrite)
|
||||
*
|
||||
* @this {CPUSim}
|
||||
* @param {number} addr
|
||||
* @param {boolean} fWrite is true for a memory write breakpoint, false for a memory read breakpoint
|
||||
*/
|
||||
CPUSim.prototype.removeMemBreak = function(addr, fWrite)
|
||||
{
|
||||
if (DEBUGGER) {
|
||||
var iBlock = addr >>> this.nBlockShift;
|
||||
this.aBusBlocks[iBlock].removeBreakpoint(addr & this.nBlockLimit, fWrite);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* initProcessor()
|
||||
*
|
||||
|
|
@ -889,7 +830,7 @@ CPUSim.prototype.xorByte = function(src)
|
|||
*/
|
||||
CPUSim.prototype.getByte = function(addr)
|
||||
{
|
||||
return this.aBusBlocks[(addr & this.nBusMask) >>> this.nBlockShift].readByte(addr & this.nBlockLimit, addr);
|
||||
return this.bus.getByte(addr);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -901,14 +842,7 @@ CPUSim.prototype.getByte = function(addr)
|
|||
*/
|
||||
CPUSim.prototype.getWord = function(addr)
|
||||
{
|
||||
var off = addr & this.nBlockLimit;
|
||||
var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
|
||||
if (off < this.nBlockLimit) {
|
||||
return this.aBusBlocks[iBlock].readShort(off, addr);
|
||||
}
|
||||
var w = this.aBusBlocks[iBlock].readByte(off, addr);
|
||||
w |= this.aBusBlocks[(iBlock + 1) & this.nBlockMask].readByte(0, addr + 1) << 8;
|
||||
return w;
|
||||
return this.bus.getShort(addr);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -920,7 +854,7 @@ CPUSim.prototype.getWord = function(addr)
|
|||
*/
|
||||
CPUSim.prototype.setByte = function(addr, b)
|
||||
{
|
||||
this.aBusBlocks[(addr & this.nBusMask) >>> this.nBlockShift].writeByte(addr & this.nBlockLimit, b & 0xff, addr);
|
||||
this.bus.setByte(addr, b);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -932,14 +866,7 @@ CPUSim.prototype.setByte = function(addr, b)
|
|||
*/
|
||||
CPUSim.prototype.setWord = function(addr, w)
|
||||
{
|
||||
var off = addr & this.nBlockLimit;
|
||||
var iBlock = (addr & this.nBusMask) >>> this.nBlockShift;
|
||||
if (off < this.nBlockLimit) {
|
||||
this.aBusBlocks[iBlock].writeShort(off, w & 0xffff, addr);
|
||||
return;
|
||||
}
|
||||
this.aBusBlocks[iBlock++].writeByte(off, w & 0xff, addr);
|
||||
this.aBusBlocks[iBlock & this.nBlockMask].writeByte(0, (w >> 8) & 0xff, addr + 1);
|
||||
this.bus.setShort(addr, w);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1114,14 +1114,13 @@ if (DEBUGGER) {
|
|||
};
|
||||
|
||||
/**
|
||||
* dumpBlocks(aBlocks, sAddr, fLinear)
|
||||
* dumpBlocks(aBlocks, sAddr)
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {Array} aBlocks
|
||||
* @param {string} [sAddr] (optional block address)
|
||||
* @param {boolean} [fLinear] (true if linear, physical otherwise)
|
||||
*/
|
||||
Debugger.prototype.dumpBlocks = function(aBlocks, sAddr, fLinear)
|
||||
Debugger.prototype.dumpBlocks = function(aBlocks, sAddr)
|
||||
{
|
||||
var addr = 0, i = 0, n = aBlocks.length;
|
||||
|
||||
|
|
@ -1131,11 +1130,11 @@ if (DEBUGGER) {
|
|||
this.println("invalid address: " + sAddr);
|
||||
return;
|
||||
}
|
||||
i = addr >>> this.cpu.nBlockShift;
|
||||
i = addr >>> this.bus.nBlockShift;
|
||||
n = 1;
|
||||
}
|
||||
|
||||
this.println("blockid " + (fLinear? "linear " : "physical") + " blockaddr used size type");
|
||||
this.println("blockid physical blockaddr used size type");
|
||||
this.println("-------- --------- ---------- ------ ------ ----");
|
||||
|
||||
var typePrev = -1, cPrev = 0;
|
||||
|
|
@ -1147,12 +1146,12 @@ if (DEBUGGER) {
|
|||
typePrev = block.type;
|
||||
var sType = Memory.TYPE.NAMES[typePrev];
|
||||
if (block) {
|
||||
this.println(str.toHex(block.id) + " %" + str.toHex(i << this.cpu.nBlockShift) + " %%" + str.toHex(block.addr) + " " + str.toHexWord(block.used) + " " + str.toHexWord(block.size) + " " + sType);
|
||||
this.println(str.toHex(block.id) + " %" + str.toHex(i << this.bus.nBlockShift) + " %%" + str.toHex(block.addr) + " " + str.toHexWord(block.used) + " " + str.toHexWord(block.size) + " " + sType);
|
||||
}
|
||||
if (typePrev != Memory.TYPE.NONE) typePrev = -1;
|
||||
cPrev = 0;
|
||||
}
|
||||
addr += this.cpu.nBlockSize;
|
||||
addr += this.bus.nBlockSize;
|
||||
i++;
|
||||
}
|
||||
};
|
||||
|
|
@ -1167,20 +1166,7 @@ if (DEBUGGER) {
|
|||
*/
|
||||
Debugger.prototype.dumpBus = function(asArgs)
|
||||
{
|
||||
this.dumpBlocks(this.cpu.aBusBlocks, asArgs[0]);
|
||||
};
|
||||
|
||||
/**
|
||||
* dumpMem(asArgs)
|
||||
*
|
||||
* Dumps page allocations.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {Array.<string>} asArgs (asArgs[0] is an optional block address)
|
||||
*/
|
||||
Debugger.prototype.dumpMem = function(asArgs)
|
||||
{
|
||||
this.dumpBlocks(this.cpu.aMemBlocks, asArgs[0], this.cpu.aMemBlocks !== this.cpu.aBusBlocks);
|
||||
this.dumpBlocks(this.bus.aMemBlocks, asArgs[0]);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -2122,14 +2108,14 @@ if (DEBUGGER) {
|
|||
if (this.aBreakRead !== undefined) {
|
||||
for (i = 1; i < this.aBreakRead.length; i++) {
|
||||
dbgAddr = this.aBreakRead[i];
|
||||
this.cpu.removeMemBreak(this.getAddr(dbgAddr), false);
|
||||
this.bus.removeMemBreak(this.getAddr(dbgAddr), false);
|
||||
}
|
||||
}
|
||||
this.aBreakRead = ["br"];
|
||||
if (this.aBreakWrite !== undefined) {
|
||||
for (i = 1; i < this.aBreakWrite.length; i++) {
|
||||
dbgAddr = this.aBreakWrite[i];
|
||||
this.cpu.removeMemBreak(this.getAddr(dbgAddr), true);
|
||||
this.bus.removeMemBreak(this.getAddr(dbgAddr), true);
|
||||
}
|
||||
}
|
||||
this.aBreakWrite = ["bw"];
|
||||
|
|
@ -2192,7 +2178,7 @@ if (DEBUGGER) {
|
|||
this.println("invalid address: " + this.toHexAddr(dbgAddr));
|
||||
fSuccess = false;
|
||||
} else {
|
||||
this.cpu.addMemBreak(addr, aBreak == this.aBreakWrite);
|
||||
this.bus.addMemBreak(addr, aBreak == this.aBreakWrite);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2238,7 +2224,7 @@ if (DEBUGGER) {
|
|||
}
|
||||
aBreak.splice(i, 1);
|
||||
if (aBreak != this.aBreakExec) {
|
||||
this.cpu.removeMemBreak(addr, aBreak == this.aBreakWrite);
|
||||
this.bus.removeMemBreak(addr, aBreak == this.aBreakWrite);
|
||||
}
|
||||
/*
|
||||
* We'll mirror the logic in addBreakpoint() and leave the history buffer alone if this
|
||||
|
|
@ -2275,8 +2261,6 @@ if (DEBUGGER) {
|
|||
/**
|
||||
* printBreakpoint(aBreak, i, sAction)
|
||||
*
|
||||
* TODO: We may need to start printing linear addresses also (if any), because segmented address can be ambiguous.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {Array} aBreak
|
||||
* @param {number} i
|
||||
|
|
|
|||
|
|
@ -56,14 +56,24 @@ if (NODE) {
|
|||
* bufferCols: the width of a single frame buffer row, in pixels (eg, 256)
|
||||
* bufferRows: the number of frame buffer rows (eg, 224)
|
||||
* bufferBits: the number of bits per pixel (default is 1 if omitted)
|
||||
* interruptRate: normally the same as (or some multiple of) the refreshRate (eg, 120)
|
||||
* refreshRate: how many times updateScreen() should be called per second (eg, 60)
|
||||
* interruptRate: normally the same as (or some multiple of) refreshRate (eg, 120)
|
||||
* refreshRate: how many times updateScreen() should be performed per second (eg, 60)
|
||||
*
|
||||
* We record all the above values now, but we defer creation of the frame buffer until our initBus()
|
||||
* handler is called. At that point, we will also compute the extent of the frame buffer, determine the
|
||||
* appropriate "cell" size (ie, the number of pixels that updateScreen() will fetch and process at once),
|
||||
* and allocate our cell cache.
|
||||
*
|
||||
* Why interruptRate in addition to refreshRate? A higher interrupt rate is required for Space Invaders,
|
||||
* because even though the CRT refreshes at 60Hz, the CRT controller interrupts the CPU *twice* per
|
||||
* refresh (once after the top half of the screen has been redrawn, and again after the bottom half has
|
||||
* been redrawn), so we need an interrupt rate of 120Hz. We pass the higher rate on to the CPU, so that
|
||||
* it will call updateScreen() more frequently, but we limit our screen updates to every *other* call.
|
||||
*
|
||||
* TODO: Consider alternatives to screenRotation; it's expedient, but I'm not sure how efficient it is,
|
||||
* and it might be nice (especially for debugging) if we created our own rotated image buffer which we could
|
||||
* then blast directly to the screen canvas.
|
||||
*
|
||||
* @constructor
|
||||
* @extends Component
|
||||
* @param {Object} parmsVideo
|
||||
|
|
|
|||
|
|
@ -1,206 +1,206 @@
|
|||
(function(){var m;function aa(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function q(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function r(a){return"0x"+q(a,4)}function 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 da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||
function q(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function r(a){return"0x"+q(a,4)}function ca(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function da(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||
function ea(a,b){return-1!==a.indexOf(b,a.length-b.length)}var fa={"&":"&","<":"<",">":">",'"':""","'":"'"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}function ha(a,b){return(a+" ").slice(0,b)}function ia(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
|
||||
function ja(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var ka=Date.now||function(){return+new Date};function la(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function ma(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
|
||||
function na(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
typeof b){var l="",k;for(k in b)b.hasOwnProperty(k)&&(l&&(l+="&"),l+=k+"="+encodeURIComponent(b[k]));l=l.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(l)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function oa(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
function pa(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function qa(a){var b=!1;window&&(b=window.confirm(a));return b}var ra=null;function sa(){if(null==ra){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ra=a}return ra}
|
||||
function ta(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function ua(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ba(a){if(window){var b=pa();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ca(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||
function Da(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var Ea={init:[],show:[],exit:[]},Fa=!1,Ga=!0;function Ia(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ja(a){Ea.init.push(a)}
|
||||
function Ka(a){if(Ga)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Pa(a){!Ga&&a?(Ga=!0,Fa&&Qa("init")):Ga=a}function Qa(a){Ea[a]&&Ka(Ea[a])}Ia("onload",function(){Fa=!0;Ka(Ea.init)});Ia("onpageshow",function(){Ka(Ea.show)});Ia(Ba("Opera")||Ba("iOS")?"onunload":"onbeforeunload",function(){Ka(Ea.exit)});
|
||||
function v(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Db=b.comment;this.Rb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Hb=this.id.substr(0,b),this.ab=this.id.substr(b+1)):this.ab=this.id;this[a]=c;this.A={Qa:!1,Na:!1,tb:!1,ha:!1,Pa:!1};this.ob=null;this.A.Pa=!1;this.U={};this.F=null;this.ga=d||0;y.push(this)}var Ra=void 0,Sa={};
|
||||
function ta(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function Aa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Ba(a){if(window){var b=pa();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ca(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
|
||||
function Da(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var Ea={init:[],show:[],exit:[]},Fa=!1,Ha=!0;function Ia(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ja(a){Ea.init.push(a)}
|
||||
function Oa(a){if(Ha)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Pa(a){!Ha&&a?(Ha=!0,Fa&&Qa("init")):Ha=a}function Qa(a){Ea[a]&&Oa(Ea[a])}Ia("onload",function(){Fa=!0;Oa(Ea.init)});Ia("onpageshow",function(){Oa(Ea.show)});Ia(Ba("Opera")||Ba("iOS")?"onunload":"onbeforeunload",function(){Oa(Ea.exit)});
|
||||
function v(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Eb=b.comment;this.Sb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ib=this.id.substr(0,b),this.cb=this.id.substr(b+1)):this.cb=this.id;this[a]=c;this.A={Ra:!1,Oa:!1,vb:!1,ia:!1,Qa:!1};this.pb=null;this.A.Qa=!1;this.V={};this.F=null;this.ha=d||0;y.push(this)}var Ra=void 0,Sa={};
|
||||
if(window){Ra||(Ra=window.location.search.substr(1));for(var Ta,Ua=/\+/g,Va=/([^&=]+)=?([^&]*)/g;Ta=Va.exec(Ra);)Sa[decodeURIComponent(Ta[1].replace(Ua," "))]=decodeURIComponent(Ta[2].replace(Ua," "))}function Wa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function z(a,b){b||(b=v);a.prototype=Wa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var y=[],Xa={};function Ya(a,b,c){Xa[a]&&b&&(Xa[a][b]=c)}function Za(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<y.length;b++){var d=y[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function $a(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<y.length;d++)if(c)c==y[d]&&(c=null);else if(!(a!=y[d].type||b&&y[d].id.indexOf(b)))return y[d]}return null}function B(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
|
||||
function ab(a,b){for(var c=D(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=B(h))&&g.binding&&a.qa(g.type,g.binding,h,g.value),k=l.length}}}}
|
||||
function bb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<y.length;d++)if(c)c==y[d]&&(c=null);else if(!(a!=y[d].type||b&&y[d].id.indexOf(b)))return y[d]}return null}function B(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
|
||||
function cb(a,b){for(var c=D(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var l=g.split(" "),k=0;k<l.length;k++)switch(g=l[k],g){case "pc8080-binding":(g=B(h))&&g.binding&&a.qa(g.type,g.binding,h,g.value),k=l.length}}}}
|
||||
function D(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
|
||||
v.prototype={constructor:v,parent:null,toString:function(){return this.name?this.name:this.id||this.type},qa:function(a,b,c){switch(b){case "clear":return this.U[b]||(this.U[b]=c,c.onclick=function(a){return function(){a.U.print&&(a.U.print.value="")}}(this)),!0;case "print":return this.U[b]||(this.sa=this.U[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.oa=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.ab+": "+a)},oa:function(a,b){b||t(a)},ya:function(){return this.A.ha=!0},xa:function(a,b){b&&(this.A.ha=!1);return!0}};function db(a,b,c,d,e,f){var h=!0;a.F&&(!0===h?h=0:null==h&&(h=a.ga),eb(a.F,a,b,c,d,e,f,h))}function fb(a,b){if(a.F){a===a.F?b|=0:b=b||a.ga;var c=a.F.ga&b;return!!b&&c===b||!!(c&a.F.Xb)}return!1}
|
||||
function gb(a,b){if(a.A.tb)return a.A.Na&&(a.A.Na=!1),a.A.tb=!1;if(a.A.Pa)return a.g(a.toString()+" error"),!1;a.A.Na=b;return a.A.Na}function hb(a,b){a.A.Na&&(b?a.A.tb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.A.Na}function E(a){if(!a.A.Pa&&(a.A.Qa=!0,a.A.Qa)){var b=a.ob;a.ob=null;b&&b()}}function ib(a,b){b&&(a.A.Qa?b():a.ob=b);return a.A.Qa}function jb(a,b){a.A.Pa=!0;a.oa(b)}
|
||||
v.prototype={constructor:v,parent:null,toString:function(){return this.name?this.name:this.id||this.type},qa:function(a,b,c){switch(b){case "clear":return this.V[b]||(this.V[b]=c,c.onclick=function(a){return function(){a.V.print&&(a.V.print.value="")}}(this)),!0;case "print":return this.V[b]||(this.ta=this.V[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.oa=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.cb+": "+a)},oa:function(a,b){b||t(a)},za:function(){return this.A.ia=!0},ya:function(a,b){b&&(this.A.ia=!1);return!0}};function db(a,b,c,d,e,f){var h=!0;a.F&&(!0===h?h=0:null==h&&(h=a.ha),eb(a.F,a,b,c,d,e,f,h))}function fb(a,b){if(a.F){a===a.F?b|=0:b=b||a.ha;var c=a.F.ha&b;return!!b&&c===b||!!(c&a.F.Xb)}return!1}
|
||||
function gb(a,b){if(a.A.vb)return a.A.Oa&&(a.A.Oa=!1),a.A.vb=!1;if(a.A.Qa)return a.g(a.toString()+" error"),!1;a.A.Oa=b;return a.A.Oa}function hb(a,b){a.A.Oa&&(b?a.A.vb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.A.Oa}function E(a){if(!a.A.Qa&&(a.A.Ra=!0,a.A.Ra)){var b=a.pb;a.pb=null;b&&b()}}function ib(a,b){b&&(a.A.Ra?b():a.pb=b);return a.A.Ra}function jb(a,b){a.A.Qa=!0;a.oa(b)}
|
||||
var kb="undefined"!==typeof ArrayBuffer,lb=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function mb(a){v.call(this,"Panel",a,mb)}z(mb);m=mb.prototype;m.qa=function(a,b,c,d){return this.w&&this.w.qa(a,b,c,d)||this.b&&this.b.qa(a,b,c,d)||this.u&&this.u.qa(a,b,c,d)||this.F&&this.F.qa(a,b,c,d)?!0:this.parent.qa.call(this,a,b,c,d)};m.Ba=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.u=nb(a,"Keyboard")};m.ya=function(a,b){b||ob();return!0};m.xa=function(){return!0};m.ta=function(){};
|
||||
function ob(){for(var a=!1,b=D(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=B(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<y.length;h++)if(y[h].id===f){f=y[h];break a}f=null}f||(a=!0,f=new mb(e));ab(f,d);a&&E(f)}}Ja(ob);
|
||||
function pb(a,b,c){v.call(this,"Bus",a,pb);this.b=b;this.F=c;this.M=a.busWidth||16;this.X=Math.pow(2,this.M);this.G=this.X-1|0;this.aa=16>=this.M?10:20>=this.M?12:24>=this.M?14:15;this.la=1<<this.aa;this.Z=this.la>>2;this.D=this.la-1;this.K=this.X/this.la|0;this.V=this.K-1;this.w=[];this.u=[];this.H=this.J=!1;this.ba=[];this.ca=[];a=new F;qb(a,this.F);this.B=Array(this.K);for(b=0;b<this.K;b++)this.B[b]=a;a=this.b;b=this.B;c=this.aa;var d=this.G;a.na=b;a.aa=c;a.la=1<<a.aa;a.G=a.la-1;a.Z=b.length;a.X=
|
||||
a.Z-1;a.K=d;E(this)}z(pb);pb.prototype.reset=function(){};pb.prototype.ya=function(a,b){b||this.reset();return!0};function rb(a,b,c,d){for(var e=b>>>a.aa;0<c&&e<a.B.length;){var f=a.B[e],h=e*a.la,g=a.la-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.C)return f.kb+=f.C-b,f.C=b,!0;if(b>=f.C+f.kb){g=f.size-(b-h);g>c&&(g=c);f.kb=b-f.C+g;b=h+a.la;c-=g;e++;continue}}return sb(1,b,c)}b=new F(b,g,a.la,d);qb(b,a.F,f);a.B[e++]=b;b=h+a.la;c-=g}return 0>=c?!0:sb(2,b,c)}
|
||||
pb.prototype.W=function(a){return this.B[(a&this.G)>>>this.aa].Ka(a&this.D,a)};function tb(a,b){return a.B[(b&a.G)>>>a.aa].ib(b&a.D,b)}function ub(a,b){var c=b&a.D,d=(b&a.G)>>>a.aa;return c!=a.D?a.B[d].yb(c,b):a.B[d++].ib(c,b)|a.B[d&a.V].ib(0,b+1)<<8}function vb(a,b,c){a.B[(b&a.G)>>>a.aa].lb(b&a.D,c&255,b)}function wb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.w[b]&&(a.w[b]=[null,!1]);a.w[b][1]=!a.w[b][1];return a.w[b][1]}
|
||||
function xb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.w[b],g=a.ba[b]||1,l=1==g?255:2==g?65535:-1,k=l;void 0!==h?(h[0]&&(k=h[0](b,c),void 0===k?k=l:k&=l),a.F&&a.H!=h[1]&&Gb(a.F,b,k)):a.F&&(eb(a.F,a,b,null,c),a.H&&Gb(a.F,b,k));e|=k<<f;f+=g<<3;b+=g;d-=g}return e}function Hb(a,b){if(void 0===b)return a.J=!a.J,a.J;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
|
||||
function Ib(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.ca[b]||1,l=1==g?255:2==g?65535:-1,l=(c>>>=f)&l;if(void 0!==h){if(h[0])h[0](b,l,d);a.F&&a.J!=h[1]&&Jb(a.F,b,l)}else a.F&&(eb(a.F,a,b,l,d),a.J&&Jb(a.F,b,l));f+=g<<3;b+=g;e-=g}}function sb(a,b,c){t("Memory block error ("+a+": "+q(b)+","+q(c)+")");return!1}var Kb;if(kb){var Lb=new ArrayBuffer(2);(new DataView(Lb)).setUint16(0,256,!0);Kb=256===(new Uint16Array(Lb))[0]}else Kb=!1;var Mb=Kb;
|
||||
function F(a,b,c,d){this.id=Nb+=2;this.b=null;this.C=a;this.kb=b;this.size=c||0;this.type=d||Ob;this.w=d==Pb;qb(this);this.va=this.Jb=!1;if(c)if(kb)this.G=new ArrayBuffer(c),this.H=new DataView(this.G,0,c),this.B=new Uint8Array(this.G,0,c),this.K=new Uint16Array(this.G,0,c>>1),this.b=new Int32Array(this.G,0,c>>2),Qb(this,Mb?Rb:Sb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Qb(this,Tb)}else Qb(this)}var Ob=0,Pb=2,Ub=["NONE","RAM","ROM","VIDEO","H/W"],Nb=0;
|
||||
F.prototype={constructor:F,parent:null,save:function(){var a,b;if(kb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.H.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(kb)for(b=0;b<a.length;b++)this.H.setInt32(b<<2,a[b],!0);else this.b=a;return this.va=!0}return!1},Fa:function(a,b){b?0===this.u++&&Vb(this,Wb,!1):0===this.U++&&Xb(this,Wb,!1)},M:function(){this.F&&fb(this.F,129)&&this.F.message("attempt to read invalid block %"+q(this.C),!0);
|
||||
return 255},D:function(a,b){this.F&&fb(this.F,129)&&this.F.message("attempt to write "+r(b)+" to invalid block %"+q(this.C),!0)},V:function(a,b){return this.Ka(a++,b++)|this.Ka(a,b)<<8},J:function(a,b,c){this.Za(a++,b&255,c++);this.Za(a,b>>8,c)},ca:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ra:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},Da:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.va=!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.va=!0},Z:function(a,b){if(this.F&&null!=this.C){var c=this.F;Yb(c,this.C+a,1,c.ba)&&c.ea(!0)}return this.ib(a,b)},ja:function(a,b){if(this.F&&null!=this.C){var c=this.F;Yb(c,this.C+a,2,c.ba)&&c.ea(!0)}return this.yb(a,b)},Aa:function(a,b,c){if(this.F&&null!=this.C){var d=this.F;Yb(d,this.C+a,1,d.H)&&d.ea(!0)}this.w?this.D(a,b,c):this.lb(a,b,c)},Ma:function(a,
|
||||
b,c){if(this.F&&null!=this.C){var d=this.F;Yb(d,this.C+a,2,d.H)&&d.ea(!0)}this.w?this.D(a,b,c):this.zb(a,b,c)},X:function(a){return this.B[a]},ba:function(a){return this.B[a]},fa:function(a){return this.H.getUint16(a,!0)},ma:function(a){return a&1?this.B[a]|this.B[a+1]<<8:this.K[a>>1]},ua:function(a,b){this.B[a]=b;this.va=!0},Ca:function(a,b){this.B[a]=b;this.va=!0},Ea:function(a,b){this.H.setUint16(a,b,!0);this.va=!0},$a:function(a,b){a&1?(this.B[a]=b,this.B[a+1]=b>>8):this.K[a>>1]=b;this.va=!0}};
|
||||
function qb(a,b,c){a.F=b;a.U=a.u=0;c&&((a.U=c.U)&&Xb(a,Wb,!1),(a.u=c.u)&&Vb(a,Wb,!1))}function Zb(a,b){b?0===--a.u&&(a.Za=a.w?a.D:a.lb,a.Ub=a.w?a.J:a.zb):0===--a.U&&(a.Ka=a.ib,a.Sb=a.yb)}function Vb(a,b,c){c&&a.u||(a.Za=!a.w&&b[2]||a.D,a.Ub=!a.w&&b[3]||a.J);if(c||void 0===c)a.lb=b[2]||a.D,a.zb=b[3]||a.J}function Xb(a,b,c){c&&a.U||(a.Ka=b[0]||a.M,a.Sb=b[1]||a.V);if(c||void 0===c)a.ib=b[0]||a.M,a.yb=b[1]||a.V}function Qb(a,b){b||(b=$b);Xb(a,b,void 0);Vb(a,b,void 0)}
|
||||
var $b=[],Tb=[F.prototype.ca,F.prototype.ra,F.prototype.Da,F.prototype.ab],Wb=[F.prototype.Z,F.prototype.ja,F.prototype.Aa,F.prototype.Ma];if(kb)var Sb=[F.prototype.X,F.prototype.fa,F.prototype.ua,F.prototype.Ea],Rb=[F.prototype.ba,F.prototype.ma,F.prototype.Ca,F.prototype.$a];
|
||||
function ac(a,b){v.call(this,"CPU",a,ac,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.Xa=c;this.i.qb=0;this.i.Ja=d;this.i.vb=Math.round(this.i.Xa/1E4)/100;this.i.Ha=this.i.vb*this.i.Ja;this.A.ka=!1;this.A.ub=!1;this.A.Ib=a.autoStart;this.A.Kb=!1;this.A.Oa=!1;this.i.bb=this.i.Ua=0;this.i.cb=a.csStart;this.i.Ta=a.csInterval;this.i.Va=a.csStop;this.ja=this.La.bind(this);E(this)}z(ac);var bc=["power","reset"];m=ac.prototype;
|
||||
m.Ba=function(a,b,c,d){this.w=a;this.B=b;this.F=d;for(b=0;b<bc.length;b++)(c=this.U[bc[b]])&&this.w.qa(null,bc[b],c);this.Aa=(b=nb(a,"Video"))&&Math.max(b.Aa,b.Zb)||60;this.V=nb(a,"ChipSet");a=cc(a,"autoStart");null!=a&&(this.A.Ib="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.qb=0};m.save=function(){return null};m.restore=function(){return!1};
|
||||
m.ya=function(a,b){if(!b){if(a&&this.restore){oc(this);if(!this.restore(a))return!1;pc(this)}else this.reset();if(this.F){var c=this.F;c.g("Type ? for help with PC8080 Debugger commands");c.ta();if(c.rb){var d=c.rb;c.rb=null;qc(c,d)}}else this.g("No debugger detected")}rc(this);return!0};m.xa=function(a){return a?this.save():!0};function sc(a){(a.A.Ib||!a.F&&void 0===a.U.run)&&a.La(!0)}m.Nb=function(){return 0};
|
||||
function pc(a){void 0===a.i.cb&&(a.i.cb=0);void 0===a.i.Ta&&(a.i.Ta=-1);void 0===a.i.Va&&(a.i.Va=-1);a.A.Oa=0<=a.i.cb&&0<a.i.Ta;a.A.Oa&&(a.i.bb=0,a.i.Ua=a.i.cb-a.J)}function tc(a,b){if(a.A.Oa){var c=!1;a.i.bb=a.i.bb+a.Nb()|0;a.i.Ua-=b;0>=a.i.Ua&&(a.i.Ua+=a.i.Ta,c=!0);0<=a.i.Va&&a.i.Va<=uc(a)&&(a.i.Ta=a.i.Va=-1,pc(a),a.ea(),c=!0);c&&a.g(uc(a)+" cycles: checksum="+q(a.i.bb))}}
|
||||
m.qa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.U[b]=c;a=!0;break;case "run":this.U[b]=c;c.onclick=function(){var a;if(a=d.w)if(a=d.w,a.A.ha)a=!0;else{var b=null,c,g=Za(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.A.Qa);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.A.ha);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.A.Qa?"powered yet":"ready yet"+(b.ob?" (waiting for notification)":""))+".");a=!1}a&&(d.A.ka?d.ea(!0):d.La(!0))};a=
|
||||
!0;break;case "speed":this.U[b]=c;a=!0;break;case "setSpeed":this.U[b]=c,c.onclick=function(){vc(d,d.i.Ja<<1,!0)},c.textContent=this.i.Ha.toFixed(2)+"Mhz",a=!0}return a};function wc(a,b,c){a.J+=b;c&&(a.D=a.b=0)}
|
||||
function xc(a,b){var c=30;c<a.Aa&&(c=a.Aa);2>c&&(c=2);var d=1;b&&1<a.i.Ja&&a.i.Ga&&(d=a.i.Ga/a.i.vb);a.i.Ob=Math.round(1E3/30);a.i.hc=Math.floor(a.i.Xa/c*d);a.i.wb=Math.floor(a.i.Xa/30*d);a.i.Qb=Math.floor(a.i.Xa/a.Aa*d);a.i.Pb=Math.floor(a.i.Xa/2*d);b||(a.i.Wa=a.i.wb,a.i.fb=a.i.Qb,a.i.eb=a.i.Pb);a.i.xb=0}function uc(a){return a.J+a.H+a.D-a.b}function oc(a){a.i.Ga=0;a.J=a.H=a.D=a.b=0;pc(a);vc(a,1)}
|
||||
function vc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Ga/a.i.Ha?b=1:d=!0;a.i.Ja=b;b=a.i.vb*a.i.Ja;if(a.i.Ha!=b){a.i.Ha=b;b=a.i.Ha.toFixed(2)+"Mhz";var e=a.U.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.w&&a.w.jb()}wc(a,a.H);a.H=0;a.i.Sa=ka();a.i.Ia=0;xc(a);return d}
|
||||
m.La=function(a){if(gb(this,!0)){if(!this.A.ka){vc(this);this.w&&this.w.start(this.i.Sa,uc(this));this.A.ka=!0;this.A.ub=!0;this.V&&this.V.start();var b=this.U.run;b&&(b.textContent="Halt");this.w&&(this.w.ta(!0),a&&this.w.jb(!0))}this.i.xb>=this.i.Xa&&xc(this,!0);this.i.gb=0;this.i.pb=ka();this.i.Ia&&(a=this.i.pb-this.i.Ia,a>this.i.Ob&&(this.i.Sa+=a,this.i.Sa>this.i.pb&&(this.i.Sa=this.i.pb)));try{do{var c=this.A.Oa?1:this.i.hc;try{this.Ya(c)}catch(e){if("number"!=typeof e)throw e;}var d=this.D-
|
||||
this.b;this.H+=d;this.i.gb+=d;wc(this,0,!0);tc(this,d);this.i.fb-=d;0>=this.i.fb&&(this.i.fb+=this.i.Qb,this.w&&yc(this.w,this.i.qb++),this.i.qb>this.Aa&&(this.i.qb=0));this.i.eb-=d;0>=this.i.eb&&(this.i.eb+=this.i.Pb,this.w&&this.w.ta());this.i.Wa-=d;if(0>=this.i.Wa){this.i.Wa+=this.i.wb;break}}while(this.A.ka)}catch(e){this.ea();rc(this);this.w&&this.w.stop(ka(),uc(this));gb(this,!1);jb(this,e.stack||e.message);return}c=setTimeout;d=this.ja;this.i.Ia=ka();a=this.i.Ob;this.i.gb&&(a=Math.round(a*
|
||||
this.i.gb/this.i.wb));a-=this.i.Ia-this.i.pb;if(b=this.i.Ia-this.i.Sa)this.i.Ga=Math.round(this.H/(10*b))/100,864E5<=b&&(this.J=0,vc(this));if(0>a||this.i.Ga<this.i.Ha)a=0;this.i.xb+=this.i.gb;this.i.Ia+=a;c(d,a)}else rc(this),this.w&&this.w.stop(ka(),uc(this))};m.Ya=function(){return 0};m.ea=function(a){hb(this,!0);this.D-=this.b;this.b=0;wc(this,this.H);this.H=0;if(this.A.ka){this.A.ka=!1;this.V&&this.V.stop();var b=this.U.run;b&&(b.textContent="Run")}this.A.nb=a};
|
||||
function rc(a,b){a.w&&(yc(a.w,-1),a.w.ta(b))}function zc(a){this.Ra=a.model||8080;ac.call(this,a,1E6);this.ba=Ac;oc(this);this.A.nb=this.A.Yb=!1;this.fa=0;this.na=[];this.aa=this.la=this.G=this.Z=this.X=this.K=0;this.M=[];this.ca=0;Bc(this)}z(zc,ac);function Cc(a,b){a.M.push(b)}m=zc.prototype;m.reset=function(){this.A.ka&&this.ea();Bc(this);oc(this);this.A.Pa=!1;this.parent.reset.call(this)};function Bc(a){a.j=0;a.N=0;a.O=0;a.P=0;a.R=0;a.S=0;a.T=0;a.da=0;H(a,a.ca);Dc(a,0);a.u=0}
|
||||
function Ec(a,b){a.ca=b;H(a,b)}m.Nb=function(){var a=this.j+this.N+this.O+this.P+this.R+this.S+this.T|0;return a=a+this.da+this.L+Fc(this)|0};
|
||||
m.save=function(){var a=new Gc(this);I(a,0,[this.j,this.N,this.O,this.P,this.R,this.S,this.T,this.da,this.L,Fc(this)]);I(a,1,[this.u,this.J,this.i.Ja]);for(var b=this.B,c=0,d=[],e=0;e<b.K;e++){var f=b.B[e];if(f.va||f.Jb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var n=f[g],p=g+1;p<f.length&&f[p]===n;)p++;k[l++]=p-g;k[l++]=n;g=p}if(k.length<f.length){f=k;break a}}d[h]=f}}I(a,2,d);return a.data()};
|
||||
m.restore=function(a){var b=a[0];this.j=b[0];this.N=b[1];this.O=b[2];this.P=b[3];this.R=b[4];this.S=b[5];this.T=b[6];this.da=b[7]&65535;H(this,b[8]);Dc(this,b[9]);b=a[1];this.u=b[0];this.J=b[1];vc(this,b[3]);a:{b=this.B;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.Z){for(var f=0,h=Array(b.Z),g=0;g<e.length-1;)for(var l=e[g++],k=e[g++];l--;)h[f++]=k;e=h}f=b.B[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
m.qa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.U[b]=c;this.fa++;d=!0;break;default:d=this.parent.qa.call(this,a,b,c)}return d};function Hc(a){return a.N<<8|a.O}function Ic(a,b){a.N=b>>8&255;a.O=b&255}function Jc(a){return a.P<<8|a.R}function Kc(a,b){a.P=b>>8&255;a.R=b&255}function J(a){return a.S<<8|a.T}
|
||||
function Lc(a,b){a.S=b>>8&255;a.T=b&255}function H(a,b){a.L=b&65535}function Mc(a){return a.I&256?1:0}function Nc(a){return lb[a.Y&255]?4:0}function Oc(a){return(a.Y^a.ia)&16?16:0}function Pc(a){return a.I&255?0:64}function Qc(a){return a.Y&128?128:0}function Fc(a){return a.pa&-214|Qc(a)|Pc(a)|Oc(a)|Nc(a)|Mc(a)}function Dc(a,b){a.I=a.Y=a.ia=0;b&1&&(a.I|=256);b&4||(a.Y|=1);b&16&&(a.ia|=16);b&64||(a.I|=255);b&128&&(a.Y^=192);a.pa=a.pa&-513|b&512|2}
|
||||
function Rc(a,b){a.ia=a.j^b;return a.Y=(a.I=a.j+b)&255}function Sc(a,b){a.ia=a.j^b;return a.Y=(a.I=a.j+b+(a.I&256?1:0))&255}function Tc(a,b){a.I=a.Y=a.ia=a.j&b;(a.j|b)&8&&(a.ia^=16);return a.I}function kd(a,b){a.ia=b^255;b=a.Y=b+255&255;a.I=a.I&-256|b;return b}function ld(a,b){a.ia=b;b=a.Y=b+1&255;a.I=a.I&-256|b;return b}function md(a,b){return a.Y=a.I=a.ia=a.j|b}function K(a,b){b^=255;a.ia=a.j^b;return a.Y=(a.I=a.j+b+1^256)&255}
|
||||
function nd(a,b){b^=255;a.ia=a.j^b;return a.Y=(a.I=a.j+b+(a.I&256?0:1)^256)&255}function od(a,b){return a.Y=a.I=a.ia=a.j^b}m.W=function(a){return this.na[(a&this.K)>>>this.aa].Ka(a&this.G,a)};function pd(a,b){var c=b&a.G,d=(b&a.K)>>>a.aa;if(c<a.G)return a.na[d].Sb(c,b);c=a.na[d].Ka(c,b);return c|=a.na[d+1&a.X].Ka(0,b+1)<<8}function L(a,b,c){a.na[(b&a.K)>>>a.aa].Za(b&a.G,c&255,b)}
|
||||
function qd(a,b,c){var d=b&a.G,e=(b&a.K)>>>a.aa;d<a.G?a.na[e].Ub(d,c&65535,b):(a.na[e++].Za(d,c&255,b),a.na[e&a.X].Za(0,c>>8&255,b+1))}function M(a){var b=a.W(a.L);H(a,a.L+1);return b}function N(a){var b=pd(a,a.L);H(a,a.L+2);return b}function O(a){var b=pd(a,a.da);a.da=a.da+2&65535;return b}function P(a,b){a.da=a.da-2&65535;qd(a,a.da,b)}
|
||||
function Q(a,b,c,d){d=d||2;a.U[b]&&(void 0===c&&(jb(a,"Value for "+b+" is invalid"),a.ea()),c=!a.A.ka||a.A.Kb?q(c,d):"--------".substr(0,d),a.U[b].textContent!=c&&(a.U[b].textContent=c))}
|
||||
m.ta=function(a){this.fa&&(a||!this.A.ka||this.A.Kb)&&(Q(this,"A",this.j),Q(this,"B",this.N),Q(this,"C",this.O),Q(this,"BC",Hc(this),4),Q(this,"D",this.P),Q(this,"E",this.R),Q(this,"DE",Jc(this),4),Q(this,"H",this.S),Q(this,"L",this.T),Q(this,"HL",J(this),4),Q(this,"SP",this.da,4),Q(this,"PC",this.L,4),a=Fc(this),Q(this,"PS",a,4),Q(this,"SF",a&128?1:0,1),Q(this,"ZF",a&64?1:0,1),Q(this,"AF",a&16?1:0,1),Q(this,"PF",a&4?1:0,1),Q(this,"CF",a&1?1:0,1));if(a=this.U.speed)a.textContent=this.A.ka&&this.i.Ga?
|
||||
this.i.Ga.toFixed(2)+"Mhz":"Stopped"};
|
||||
m.Ya=function(a){this.A.nb=!0;var b=this.A.Yb=this.F&&rd(this.F),c=a?this.A.ub?0:1:-1;this.A.ub=!1;this.D=this.b=a;do{if(this.u){var d;this.u&8&&this.pa&512?(d=199|(this.u&7)<<3,this.u&=-16,this.pa&=-513,this.ba[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(sd(this.F,this.L,c)){this.ea();break}c=1}this.ba[M(this)].call(this)}while(0<this.b);return this.A.nb?this.D-this.b:void 0===this.A.nb?0:-1};
|
||||
Ja(function(){for(var a=D(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new zc(d);ab(d,c)}});function td(){this.b-=4}function ud(){H(this,N(this));this.b-=10}function vd(){H(this,O(this));this.b-=10}function wd(){var a=N(this);P(this,this.L);H(this,a);this.b-=17}
|
||||
var Ac=[td,function(){Ic(this,N(this));this.b-=10},function(){L(this,Hc(this),this.j);this.b-=7},function(){Ic(this,Hc(this)+1);this.b-=5},function(){this.N=ld(this,this.N);this.b-=5},function(){this.N=kd(this,this.N);this.b-=5},function(){this.N=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;this.I=this.I&255|a&256;this.b-=4},td,function(){var a;Lc(this,a=J(this)+Hc(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.W(Hc(this));this.b-=7},function(){Ic(this,Hc(this)-
|
||||
1);this.b-=5},function(){this.O=ld(this,this.O);this.b-=5},function(){this.O=kd(this,this.O);this.b-=5},function(){this.O=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;this.I=this.I&255|a;this.b-=4},td,function(){Kc(this,N(this));this.b-=10},function(){L(this,Jc(this),this.j);this.b-=7},function(){Kc(this,Jc(this)+1);this.b-=5},function(){this.P=ld(this,this.P);this.b-=5},function(){this.P=kd(this,this.P);this.b-=5},function(){this.P=M(this);this.b-=7},function(){var a=this.j<<
|
||||
1;this.j=a&255|this.I>>8;this.I=this.I&255|a&256;this.b-=4},td,function(){var a;Lc(this,a=J(this)+Jc(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.W(Jc(this));this.b-=7},function(){Kc(this,Jc(this)-1);this.b-=5},function(){this.R=ld(this,this.R);this.b-=5},function(){this.R=kd(this,this.R);this.b-=5},function(){this.R=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(this.I&256|this.j)>>1;this.I=this.I&255|a;this.b-=4},td,function(){Lc(this,N(this));this.b-=10},function(){qd(this,
|
||||
N(this),J(this));this.b-=16},function(){Lc(this,J(this)+1);this.b-=5},function(){this.S=ld(this,this.S);this.b-=5},function(){this.S=kd(this,this.S);this.b-=5},function(){this.S=M(this);this.b-=7},function(){var a=0,b=Mc(this);if(Oc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Rc(this,a);this.I=b?this.I|256:this.I&-257;this.b-=4},td,function(){var a;Lc(this,a=J(this)+J(this));this.I=this.I&255|a>>8&256;this.b-=10},function(){Lc(this,pd(this,N(this)));this.b-=16},function(){Lc(this,
|
||||
J(this)-1);this.b-=5},function(){this.T=ld(this,this.T);this.b-=5},function(){this.T=kd(this,this.T);this.b-=5},function(){this.T=M(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},td,function(){this.da=N(this)&65535;this.b-=10},function(){L(this,N(this),this.j);this.b-=13},function(){this.da=this.da+1&65535;this.b-=5},function(){var a=J(this);L(this,a,ld(this,this.W(a)));this.b-=10},function(){var a=J(this);L(this,a,kd(this,this.W(a)));this.b-=10},function(){L(this,J(this),M(this));this.b-=
|
||||
10},function(){this.I|=256;this.b-=4},td,function(){var a;Lc(this,a=J(this)+this.da);this.I=this.I&255|a>>8&256;this.b-=10},function(){this.j=this.W(N(this));this.b-=13},function(){this.da=this.da-1&65535;this.b-=5},function(){this.j=ld(this,this.j);this.b-=5},function(){this.j=kd(this,this.j);this.b-=5},function(){this.j=M(this);this.b-=7},function(){this.I=Mc(this)?this.I&-257:this.I|256;this.b-=4},function(){this.b-=5},function(){this.N=this.O;this.b-=5},function(){this.N=this.P;this.b-=5},function(){this.N=
|
||||
this.R;this.b-=5},function(){this.N=this.S;this.b-=5},function(){this.N=this.T;this.b-=5},function(){this.N=this.W(J(this));this.b-=7},function(){this.N=this.j;this.b-=5},function(){this.O=this.N;this.b-=5},function(){this.b-=5},function(){this.O=this.P;this.b-=5},function(){this.O=this.R;this.b-=5},function(){this.O=this.S;this.b-=5},function(){this.O=this.T;this.b-=5},function(){this.O=this.W(J(this));this.b-=7},function(){this.O=this.j;this.b-=5},function(){this.P=this.N;this.b-=5},function(){this.P=
|
||||
this.O;this.b-=5},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.T;this.b-=5},function(){this.P=this.W(J(this));this.b-=7},function(){this.P=this.j;this.b-=5},function(){this.R=this.N;this.b-=5},function(){this.R=this.O;this.b-=5},function(){this.R=this.P;this.b-=5},function(){this.b-=5},function(){this.R=this.S;this.b-=5},function(){this.R=this.T;this.b-=5},function(){this.R=this.W(J(this));this.b-=7},function(){this.R=this.j;
|
||||
this.b-=5},function(){this.S=this.N;this.b-=5},function(){this.S=this.O;this.b-=5},function(){this.S=this.P;this.b-=5},function(){this.S=this.R;this.b-=5},function(){this.b-=5},function(){this.S=this.T;this.b-=5},function(){this.S=this.W(J(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.T=this.N;this.b-=5},function(){this.T=this.O;this.b-=5},function(){this.T=this.P;this.b-=5},function(){this.T=this.R;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=
|
||||
this.W(J(this));this.b-=7},function(){this.T=this.j;this.b-=5},function(){L(this,J(this),this.N);this.b-=7},function(){L(this,J(this),this.O);this.b-=7},function(){L(this,J(this),this.P);this.b-=7},function(){L(this,J(this),this.R);this.b-=7},function(){L(this,J(this),this.S);this.b-=7},function(){L(this,J(this),this.T);this.b-=7},function(){var a=this.L-1;if(this.M.length)for(var b=0;b<this.M.length;b++)if(this.M[b](a))return;this.u|=16;this.b-=7;this.F&&fb(this,-2147483648)?(H(this,a),this.F.ea()):
|
||||
this.pa&512||(this.F&&H(this,a),this.ea())},function(){L(this,J(this),this.j);this.b-=7},function(){this.j=this.N;this.b-=5},function(){this.j=this.O;this.b-=5},function(){this.j=this.P;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.T;this.b-=5},function(){this.j=this.W(J(this));this.b-=7},function(){this.b-=5},function(){this.j=Rc(this,this.N);this.b-=4},function(){this.j=Rc(this,this.O);this.b-=4},function(){this.j=Rc(this,this.P);this.b-=
|
||||
4},function(){this.j=Rc(this,this.R);this.b-=4},function(){this.j=Rc(this,this.S);this.b-=4},function(){this.j=Rc(this,this.T);this.b-=4},function(){this.j=Rc(this,this.W(J(this)));this.b-=7},function(){this.j=Rc(this,this.j);this.b-=4},function(){this.j=Sc(this,this.N);this.b-=4},function(){this.j=Sc(this,this.O);this.b-=4},function(){this.j=Sc(this,this.P);this.b-=4},function(){this.j=Sc(this,this.R);this.b-=4},function(){this.j=Sc(this,this.S);this.b-=4},function(){this.j=Sc(this,this.T);this.b-=
|
||||
4},function(){this.j=Sc(this,this.W(J(this)));this.b-=7},function(){this.j=Sc(this,this.j);this.b-=4},function(){this.j=K(this,this.N);this.b-=4},function(){this.j=K(this,this.O);this.b-=4},function(){this.j=K(this,this.P);this.b-=4},function(){this.j=K(this,this.R);this.b-=4},function(){this.j=K(this,this.S);this.b-=4},function(){this.j=K(this,this.T);this.b-=4},function(){this.j=K(this,this.W(J(this)));this.b-=7},function(){this.j=K(this,this.j);this.b-=4},function(){this.j=nd(this,this.N);this.b-=
|
||||
4},function(){this.j=nd(this,this.O);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.S);this.b-=4},function(){this.j=nd(this,this.T);this.b-=4},function(){this.j=nd(this,this.W(J(this)));this.b-=7},function(){this.j=nd(this,this.j);this.b-=4},function(){this.j=Tc(this,this.N);this.b-=4},function(){this.j=Tc(this,this.O);this.b-=4},function(){this.j=Tc(this,this.P);this.b-=4},function(){this.j=Tc(this,this.R);this.b-=
|
||||
4},function(){this.j=Tc(this,this.S);this.b-=4},function(){this.j=Tc(this,this.T);this.b-=4},function(){this.j=Tc(this,this.W(J(this)));this.b-=7},function(){this.j=Tc(this,this.j);this.b-=4},function(){this.j=od(this,this.N);this.b-=4},function(){this.j=od(this,this.O);this.b-=4},function(){this.j=od(this,this.P);this.b-=4},function(){this.j=od(this,this.R);this.b-=4},function(){this.j=od(this,this.S);this.b-=4},function(){this.j=od(this,this.T);this.b-=4},function(){this.j=od(this,this.W(J(this)));
|
||||
this.b-=7},function(){this.j=od(this,this.j);this.b-=4},function(){this.j=md(this,this.N);this.b-=4},function(){this.j=md(this,this.O);this.b-=4},function(){this.j=md(this,this.P);this.b-=4},function(){this.j=md(this,this.R);this.b-=4},function(){this.j=md(this,this.S);this.b-=4},function(){this.j=md(this,this.T);this.b-=4},function(){this.j=md(this,this.W(J(this)));this.b-=7},function(){this.j=md(this,this.j);this.b-=4},function(){K(this,this.N);this.b-=4},function(){K(this,this.O);this.b-=4},function(){K(this,
|
||||
this.P);this.b-=4},function(){K(this,this.R);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.W(J(this)));this.b-=7},function(){K(this,this.j);this.b-=4},function(){Pc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Ic(this,O(this));this.b-=10},function(){var a=N(this);Pc(this)||H(this,a);this.b-=10},ud,function(){var a=N(this);Pc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,Hc(this));this.b-=11},function(){this.j=
|
||||
Rc(this,M(this));this.b-=7},function(){P(this,this.L);H(this,0);this.b-=11},function(){Pc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},vd,function(){var a=N(this);Pc(this)&&H(this,a);this.b-=10},ud,function(){var a=N(this);Pc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},wd,function(){this.j=Sc(this,M(this));this.b-=7},function(){P(this,this.L);H(this,8);this.b-=11},function(){Mc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Kc(this,O(this));this.b-=10},function(){var a=N(this);
|
||||
Mc(this)||H(this,a);this.b-=10},function(){var a=M(this);Ib(this.B,a,this.j,this.L+-2&65535);this.b-=10},function(){var a=N(this);Mc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,Jc(this));this.b-=11},function(){this.j=K(this,M(this));this.b-=7},function(){P(this,this.L);H(this,16);this.b-=11},function(){Mc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},vd,function(){var a=N(this);Mc(this)&&H(this,a);this.b-=10},function(){var a=M(this);this.j=xb(this.B,a,this.L+-2&65535)&
|
||||
255;this.b-=10},function(){var a=N(this);Mc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},wd,function(){this.j=nd(this,M(this));this.b-=7},function(){P(this,this.L);H(this,24);this.b-=11},function(){Nc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Lc(this,O(this));this.b-=10},function(){var a=N(this);Nc(this)||H(this,a);this.b-=10},function(){var a=O(this);P(this,J(this));Lc(this,a);this.b-=18},function(){var a=N(this);Nc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},
|
||||
function(){P(this,J(this));this.b-=11},function(){this.j=Tc(this,M(this));this.b-=7},function(){P(this,this.L);H(this,32);this.b-=11},function(){Nc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,J(this));this.b-=5},function(){var a=N(this);Nc(this)&&H(this,a);this.b-=10},function(){var a=J(this);Lc(this,Jc(this));Kc(this,a);this.b-=5},function(){var a=N(this);Nc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},wd,function(){this.j=od(this,M(this));this.b-=7},function(){P(this,
|
||||
this.L);H(this,40);this.b-=11},function(){Qc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Dc(this,a);this.j=a>>8;this.b-=10},function(){var a=N(this);Qc(this)||H(this,a);this.b-=10},function(){this.pa&=-513;this.b-=4},function(){var a=N(this);Qc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,Fc(this)&255|this.j<<8);this.b-=11},function(){this.j=md(this,M(this));this.b-=7},function(){P(this,this.L);H(this,48);this.b-=11},function(){Qc(this)&&(H(this,
|
||||
O(this)),this.b-=6);this.b-=5},function(){this.da=J(this)&65535;this.b-=5},function(){var a=N(this);Qc(this)&&H(this,a);this.b-=10},function(){this.pa|=512;this.b-=4},function(){var a=N(this);Qc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},wd,function(){K(this,M(this));this.b-=7},function(){P(this,this.L);H(this,56);this.b-=11}];
|
||||
function R(a){v.call(this,"ChipSet",a,R,32768);var b=a.model;b&&!xd[b]&&t("Unrecognized ChipSet model: "+b);this.Ra=xd[b]||yd;a.sound&&(this.V=null,window&&(this.V=window.AudioContext||window.webkitAudioContext),this.V&&new this.V);E(this)}z(R);var yd=1978.1,xd={SI1978:yd};m=R.prototype;m.qa=function(){return!1};
|
||||
m.Ba=function(a,b,c,d){this.B=b;this.b=c;this.F=d;this.w=a;if(this.Ra==yd){var e;a=zd;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.w[g]?t("Input port "+r(g)+" already registered"):c.w[g]=[h,!1]}var l;e=Ad;void 0===l&&(l=0);for(var k in e)if(f=b,a=+k+l,c=e[k].bind(this),void 0!==c)for(d=+k+l;d<=a;d++)void 0!==f.u[d]?t("Output port "+r(d)+" already registered"):f.u[d]=[c,!1]}};
|
||||
m.ya=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.xa=function(a){return a?this.save():!0};m.reset=function(){this.G=this.H=this.D=this.u=this.M=this.K=this.J=0};m.save=function(){var a=new Gc(this);this.Ra==yd&&I(a,0,[this.J,this.K,this.M,this.u,this.D,this.G,this.H]);return a.data()};m.restore=function(a){a=a[0];this.Ra==yd&&(this.J=a[0],this.K=a[1],this.M=a[2],this.u=a[3],this.D=a[4],this.G=a[5],this.H=a[6]);return!0};m.start=function(){};m.stop=function(){};
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function mb(a){v.call(this,"Panel",a,mb)}z(mb);m=mb.prototype;m.qa=function(a,b,c,d){return this.w&&this.w.qa(a,b,c,d)||this.b&&this.b.qa(a,b,c,d)||this.u&&this.u.qa(a,b,c,d)||this.F&&this.F.qa(a,b,c,d)?!0:this.parent.qa.call(this,a,b,c,d)};m.Da=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.u=nb(a,"Keyboard")};m.za=function(a,b){b||ob();return!0};m.ya=function(){return!0};m.va=function(){};
|
||||
function ob(){for(var a=!1,b=D(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=B(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<y.length;h++)if(y[h].id===f){f=y[h];break a}f=null}f||(a=!0,f=new mb(e));cb(f,d);a&&E(f)}}Ja(ob);
|
||||
function pb(a,b,c){v.call(this,"Bus",a,pb);this.b=b;this.F=c;this.J=a.busWidth||16;this.X=Math.pow(2,this.J);this.D=this.X-1|0;this.ea=16>=this.J?10:20>=this.J?12:24>=this.J?14:15;this.ua=1<<this.ea;this.Y=this.ua>>2;this.B=this.ua-1;this.M=this.X/this.ua|0;this.K=this.M-1;this.w=[];this.u=[];this.G=this.I=!1;this.aa=[];this.ba=[];a=new F;qb(a,this.F);this.T=Array(this.M);for(b=0;b<this.M;b++)this.T[b]=a;E(this)}z(pb);m=pb.prototype;m.reset=function(){};m.za=function(a,b){b||this.reset();return!0};
|
||||
function rb(a,b,c,d){for(var e=b>>>a.ea;0<c&&e<a.T.length;){var f=a.T[e],h=e*a.ua,g=a.ua-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.C)return f.mb+=f.C-b,f.C=b,!0;if(b>=f.C+f.mb){g=f.size-(b-h);g>c&&(g=c);f.mb=b-f.C+g;b=h+a.ua;c-=g;e++;continue}}return sb(1,b,c)}b=new F(b,g,a.ua,d);qb(b,a.F,f);a.T[e++]=b;b=h+a.ua;c-=g}return 0>=c?!0:sb(2,b,c)}m.W=function(a){return this.T[(a&this.D)>>>this.ea].Za(a&this.B,a)};function tb(a,b){return a.T[(b&a.D)>>>a.ea].kb(b&a.B,b)}
|
||||
m.Ca=function(a){var b=a&this.B,c=(a&this.D)>>>this.ea;return b!=this.B?this.T[c].Tb(b,a):this.T[c++].Za(b,a)|this.T[c&this.K].Za(0,a+1)<<8};function ub(a,b){var c=b&a.B,d=(b&a.D)>>>a.ea;return c!=a.B?a.T[d].Ab(c,b):a.T[d++].kb(c,b)|a.T[d&a.K].kb(0,b+1)<<8}m.fa=function(a,b){this.T[(a&this.D)>>>this.ea].ab(a&this.B,b&255,a)};function vb(a,b,c){a.T[(b&a.D)>>>a.ea].nb(b&a.B,c&255,b)}
|
||||
m.sb=function(a,b){var c=a&this.B,d=(a&this.D)>>>this.ea;c!=this.B?this.T[d].Vb(c,b&65535,a):(this.T[d++].ab(c,b&255,a),this.T[d&this.K].ab(0,b>>8&255,a+1))};function Eb(a,b){if(void 0===b)return a.G=!a.G,a.G;void 0===a.w[b]&&(a.w[b]=[null,!1]);a.w[b][1]=!a.w[b][1];return a.w[b][1]}
|
||||
function Fb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.w[b],g=a.aa[b]||1,l=1==g?255:2==g?65535:-1,k=l;void 0!==h?(h[0]&&(k=h[0](b,c),void 0===k?k=l:k&=l),a.F&&a.G!=h[1]&&Gb(a.F,b,k)):a.F&&(eb(a.F,a,b,null,c),a.G&&Gb(a.F,b,k));e|=k<<f;f+=g<<3;b+=g;d-=g}return e}function Hb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
|
||||
function Ib(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.u[b],g=a.ba[b]||1,l=1==g?255:2==g?65535:-1,l=(c>>>=f)&l;if(void 0!==h){if(h[0])h[0](b,l,d);a.F&&a.I!=h[1]&&Jb(a.F,b,l)}else a.F&&(eb(a.F,a,b,l,d),a.I&&Jb(a.F,b,l));f+=g<<3;b+=g;e-=g}}function sb(a,b,c){t("Memory block error ("+a+": "+q(b)+","+q(c)+")");return!1}var Kb;if(kb){var Lb=new ArrayBuffer(2);(new DataView(Lb)).setUint16(0,256,!0);Kb=256===(new Uint16Array(Lb))[0]}else Kb=!1;var Mb=Kb;
|
||||
function F(a,b,c,d){this.id=Nb+=2;this.b=null;this.C=a;this.mb=b;this.size=c||0;this.type=d||Ob;this.w=d==Pb;qb(this);this.wa=this.Kb=!1;if(c)if(kb)this.G=new ArrayBuffer(c),this.I=new DataView(this.G,0,c),this.B=new Uint8Array(this.G,0,c),this.K=new Uint16Array(this.G,0,c>>1),this.b=new Int32Array(this.G,0,c>>2),Qb(this,Mb?Rb:Sb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Qb(this,Tb)}else Qb(this)}var Ob=0,Pb=2,Ub=["NONE","RAM","ROM","VIDEO","H/W"],Nb=0;
|
||||
F.prototype={constructor:F,parent:null,save:function(){var a,b;if(kb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.I.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(kb)for(b=0;b<a.length;b++)this.I.setInt32(b<<2,a[b],!0);else this.b=a;return this.wa=!0}return!1},Ha:function(a,b){b?0===this.u++&&Vb(this,Wb,!1):0===this.V++&&Xb(this,Wb,!1)},M:function(){this.F&&fb(this.F,129)&&this.F.message("attempt to read invalid block %"+q(this.C),!0);
|
||||
return 255},D:function(a,b){this.F&&fb(this.F,129)&&this.F.message("attempt to write "+r(b)+" to invalid block %"+q(this.C),!0)},X:function(a,b){return this.Za(a++,b++)|this.Za(a,b)<<8},J:function(a,b,c){this.ab(a++,b&255,c++);this.ab(a,b>>8,c)},ga:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ra:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},Fa:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.wa=!0},cb:function(a,
|
||||
b){var c=a>>2,d=(a&3)<<3;24>d?this.b[c]=this.b[c]&~(65535<<d)|b<<d:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.wa=!0},aa:function(a,b){if(this.F&&null!=this.C){var c=this.F;Yb(c,this.C+a,1,c.ba)&&c.da(!0)}return this.kb(a,b)},ma:function(a,b){if(this.F&&null!=this.C){var c=this.F;Yb(c,this.C+a,2,c.ba)&&c.da(!0)}return this.Ab(a,b)},Ba:function(a,b,c){if(this.F&&null!=this.C){var d=this.F;Yb(d,this.C+a,1,d.I)&&d.da(!0)}this.w?this.D(a,b,c):this.nb(a,b,c)},Na:function(a,
|
||||
b,c){if(this.F&&null!=this.C){var d=this.F;Yb(d,this.C+a,2,d.I)&&d.da(!0)}this.w?this.D(a,b,c):this.Bb(a,b,c)},Y:function(a){return this.B[a]},ba:function(a){return this.B[a]},la:function(a){return this.I.getUint16(a,!0)},na:function(a){return a&1?this.B[a]|this.B[a+1]<<8:this.K[a>>1]},sa:function(a,b){this.B[a]=b;this.wa=!0},Ea:function(a,b){this.B[a]=b;this.wa=!0},Ga:function(a,b){this.I.setUint16(a,b,!0);this.wa=!0},bb:function(a,b){a&1?(this.B[a]=b,this.B[a+1]=b>>8):this.K[a>>1]=b;this.wa=!0}};
|
||||
function qb(a,b,c){a.F=b;a.V=a.u=0;c&&((a.V=c.V)&&Xb(a,Wb,!1),(a.u=c.u)&&Vb(a,Wb,!1))}function Zb(a,b){b?0===--a.u&&(a.ab=a.w?a.D:a.nb,a.Vb=a.w?a.J:a.Bb):0===--a.V&&(a.Za=a.kb,a.Tb=a.Ab)}function Vb(a,b,c){c&&a.u||(a.ab=!a.w&&b[2]||a.D,a.Vb=!a.w&&b[3]||a.J);if(c||void 0===c)a.nb=b[2]||a.D,a.Bb=b[3]||a.J}function Xb(a,b,c){c&&a.V||(a.Za=b[0]||a.M,a.Tb=b[1]||a.X);if(c||void 0===c)a.kb=b[0]||a.M,a.Ab=b[1]||a.X}function Qb(a,b){b||(b=$b);Xb(a,b,void 0);Vb(a,b,void 0)}
|
||||
var $b=[],Tb=[F.prototype.ga,F.prototype.ra,F.prototype.Fa,F.prototype.cb],Wb=[F.prototype.aa,F.prototype.ma,F.prototype.Ba,F.prototype.Na];if(kb)var Sb=[F.prototype.Y,F.prototype.la,F.prototype.sa,F.prototype.Ga],Rb=[F.prototype.ba,F.prototype.na,F.prototype.Ea,F.prototype.bb];
|
||||
function ac(a,b){v.call(this,"CPU",a,ac,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.Ya=c;this.i.rb=0;this.i.La=d;this.i.xb=Math.round(this.i.Ya/1E4)/100;this.i.Ja=this.i.xb*this.i.La;this.A.ka=!1;this.A.wb=!1;this.A.Jb=a.autoStart;this.A.Lb=!1;this.A.Pa=!1;this.i.eb=this.i.Va=0;this.i.fb=a.csStart;this.i.Ua=a.csInterval;this.i.Wa=a.csStop;this.aa=this.Ma.bind(this);E(this)}z(ac);var bc=["power","reset"];m=ac.prototype;
|
||||
m.Da=function(a,b,c,d){this.w=a;this.B=b;this.F=d;for(b=0;b<bc.length;b++)(c=this.V[bc[b]])&&this.w.qa(null,bc[b],c);this.Ba=(b=nb(a,"Video"))&&Math.max(b.Ba,b.Zb)||60;this.K=nb(a,"ChipSet");a=nc(a,"autoStart");null!=a&&(this.A.Jb="true"==a?!0:"false"==a?!1:!!a);E(this)};m.reset=function(){this.i.rb=0};m.save=function(){return null};m.restore=function(){return!1};
|
||||
m.za=function(a,b){if(!b){if(a&&this.restore){oc(this);if(!this.restore(a))return!1;pc(this)}else this.reset();if(this.F){var c=this.F;c.g("Type ? for help with PC8080 Debugger commands");c.va();if(c.tb){var d=c.tb;c.tb=null;qc(c,d)}}else this.g("No debugger detected")}rc(this);return!0};m.ya=function(a){return a?this.save():!0};function sc(a){(a.A.Jb||!a.F&&void 0===a.V.run)&&a.Ma(!0)}m.Ob=function(){return 0};
|
||||
function pc(a){void 0===a.i.fb&&(a.i.fb=0);void 0===a.i.Ua&&(a.i.Ua=-1);void 0===a.i.Wa&&(a.i.Wa=-1);a.A.Pa=0<=a.i.fb&&0<a.i.Ua;a.A.Pa&&(a.i.eb=0,a.i.Va=a.i.fb-a.I)}function tc(a,b){if(a.A.Pa){var c=!1;a.i.eb=a.i.eb+a.Ob()|0;a.i.Va-=b;0>=a.i.Va&&(a.i.Va+=a.i.Ua,c=!0);0<=a.i.Wa&&a.i.Wa<=uc(a)&&(a.i.Ua=a.i.Wa=-1,pc(a),a.da(),c=!0);c&&a.g(uc(a)+" cycles: checksum="+q(a.i.eb))}}
|
||||
m.qa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.V[b]=c;a=!0;break;case "run":this.V[b]=c;c.onclick=function(){var a;if(a=d.w)if(a=d.w,a.A.ia)a=!0;else{var b=null,c,g=Za(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.A.Ra);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.A.ia);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.A.Ra?"powered yet":"ready yet"+(b.pb?" (waiting for notification)":""))+".");a=!1}a&&(d.A.ka?d.da(!0):d.Ma(!0))};a=
|
||||
!0;break;case "speed":this.V[b]=c;a=!0;break;case "setSpeed":this.V[b]=c,c.onclick=function(){vc(d,d.i.La<<1,!0)},c.textContent=this.i.Ja.toFixed(2)+"Mhz",a=!0}return a};function wc(a,b,c){a.I+=b;c&&(a.D=a.b=0)}
|
||||
function xc(a,b){var c=30;c<a.Ba&&(c=a.Ba);2>c&&(c=2);var d=1;b&&1<a.i.La&&a.i.Ia&&(d=a.i.Ia/a.i.xb);a.i.Pb=Math.round(1E3/30);a.i.hc=Math.floor(a.i.Ya/c*d);a.i.yb=Math.floor(a.i.Ya/30*d);a.i.Rb=Math.floor(a.i.Ya/a.Ba*d);a.i.Qb=Math.floor(a.i.Ya/2*d);b||(a.i.Xa=a.i.yb,a.i.hb=a.i.Rb,a.i.gb=a.i.Qb);a.i.zb=0}function uc(a){return a.I+a.G+a.D-a.b}function oc(a){a.i.Ia=0;a.I=a.G=a.D=a.b=0;pc(a);vc(a,1)}
|
||||
function vc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Ia/a.i.Ja?b=1:d=!0;a.i.La=b;b=a.i.xb*a.i.La;if(a.i.Ja!=b){a.i.Ja=b;b=a.i.Ja.toFixed(2)+"Mhz";var e=a.V.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.w&&a.w.lb()}wc(a,a.G);a.G=0;a.i.Ta=ka();a.i.Ka=0;xc(a);return d}
|
||||
m.Ma=function(a){if(gb(this,!0)){if(!this.A.ka){vc(this);this.w&&this.w.start(this.i.Ta,uc(this));this.A.ka=!0;this.A.wb=!0;this.K&&this.K.start();var b=this.V.run;b&&(b.textContent="Halt");this.w&&(this.w.va(!0),a&&this.w.lb(!0))}this.i.zb>=this.i.Ya&&xc(this,!0);this.i.ib=0;this.i.qb=ka();this.i.Ka&&(a=this.i.qb-this.i.Ka,a>this.i.Pb&&(this.i.Ta+=a,this.i.Ta>this.i.qb&&(this.i.Ta=this.i.qb)));try{do{var c=this.A.Pa?1:this.i.hc;try{this.$a(c)}catch(e){if("number"!=typeof e)throw e;}var d=this.D-
|
||||
this.b;this.G+=d;this.i.ib+=d;wc(this,0,!0);tc(this,d);this.i.hb-=d;0>=this.i.hb&&(this.i.hb+=this.i.Rb,this.w&&yc(this.w,this.i.rb++),this.i.rb>this.Ba&&(this.i.rb=0));this.i.gb-=d;0>=this.i.gb&&(this.i.gb+=this.i.Qb,this.w&&this.w.va());this.i.Xa-=d;if(0>=this.i.Xa){this.i.Xa+=this.i.yb;break}}while(this.A.ka)}catch(e){this.da();rc(this);this.w&&this.w.stop(ka(),uc(this));gb(this,!1);jb(this,e.stack||e.message);return}c=setTimeout;d=this.aa;this.i.Ka=ka();a=this.i.Pb;this.i.ib&&(a=Math.round(a*
|
||||
this.i.ib/this.i.yb));a-=this.i.Ka-this.i.qb;if(b=this.i.Ka-this.i.Ta)this.i.Ia=Math.round(this.G/(10*b))/100,864E5<=b&&(this.I=0,vc(this));if(0>a||this.i.Ia<this.i.Ja)a=0;this.i.zb+=this.i.ib;this.i.Ka+=a;c(d,a)}else rc(this),this.w&&this.w.stop(ka(),uc(this))};m.$a=function(){return 0};m.da=function(a){hb(this,!0);this.D-=this.b;this.b=0;wc(this,this.G);this.G=0;if(this.A.ka){this.A.ka=!1;this.K&&this.K.stop();var b=this.V.run;b&&(b.textContent="Run")}this.A.ob=a};
|
||||
function rc(a,b){a.w&&(yc(a.w,-1),a.w.va(b))}function zc(a){this.Sa=a.model||8080;ac.call(this,a,1E6);this.M=Ac;oc(this);this.A.ob=this.A.Yb=!1;this.Y=0;this.J=[];this.X=0;Bc(this)}z(zc,ac);function Cc(a,b){a.J.push(b)}m=zc.prototype;m.reset=function(){this.A.ka&&this.da();Bc(this);oc(this);this.A.Qa=!1;this.parent.reset.call(this)};function Bc(a){a.j=0;a.N=0;a.O=0;a.P=0;a.R=0;a.S=0;a.U=0;a.ca=0;H(a,a.X);Dc(a,0);a.u=0}function Ec(a,b){a.X=b;H(a,b)}
|
||||
m.Ob=function(){var a=this.j+this.N+this.O+this.P+this.R+this.S+this.U|0;return a=a+this.ca+this.L+Fc(this)|0};
|
||||
m.save=function(){var a=new I(this);J(a,0,[this.j,this.N,this.O,this.P,this.R,this.S,this.U,this.ca,this.L,Fc(this)]);J(a,1,[this.u,this.I,this.i.La]);for(var b=this.B,c=0,d=[],e=0;e<b.M;e++){var f=b.T[e];if(f.wa||f.Kb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,l=0,k=[];g<f.length;){for(var n=f[g],p=g+1;p<f.length&&f[p]===n;)p++;k[l++]=p-g;k[l++]=n;g=p}if(k.length<f.length){f=k;break a}}d[h]=f}}J(a,2,d);return a.data()};
|
||||
m.restore=function(a){var b=a[0];this.j=b[0];this.N=b[1];this.O=b[2];this.P=b[3];this.R=b[4];this.S=b[5];this.U=b[6];this.ca=b[7]&65535;H(this,b[8]);Dc(this,b[9]);b=a[1];this.u=b[0];this.I=b[1];vc(this,b[3]);a:{b=this.B;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.Y){for(var f=0,h=Array(b.Y),g=0;g<e.length-1;)for(var l=e[g++],k=e[g++];l--;)h[f++]=k;e=h}f=b.T[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
m.qa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.V[b]=c;this.Y++;d=!0;break;default:d=this.parent.qa.call(this,a,b,c)}return d};function Gc(a){return a.N<<8|a.O}function Hc(a,b){a.N=b>>8&255;a.O=b&255}function Ic(a){return a.P<<8|a.R}function Jc(a,b){a.P=b>>8&255;a.R=b&255}function K(a){return a.S<<8|a.U}
|
||||
function Kc(a,b){a.S=b>>8&255;a.U=b&255}function H(a,b){a.L=b&65535}function Lc(a){return a.H&256?1:0}function Mc(a){return lb[a.Z&255]?4:0}function Nc(a){return(a.Z^a.ja)&16?16:0}function Oc(a){return a.H&255?0:64}function Pc(a){return a.Z&128?128:0}function Fc(a){return a.pa&-214|Pc(a)|Oc(a)|Nc(a)|Mc(a)|Lc(a)}function Dc(a,b){a.H=a.Z=a.ja=0;b&1&&(a.H|=256);b&4||(a.Z|=1);b&16&&(a.ja|=16);b&64||(a.H|=255);b&128&&(a.Z^=192);a.pa=a.pa&-513|b&512|2}
|
||||
function Qc(a,b){a.ja=a.j^b;return a.Z=(a.H=a.j+b)&255}function Rc(a,b){a.ja=a.j^b;return a.Z=(a.H=a.j+b+(a.H&256?1:0))&255}function id(a,b){a.H=a.Z=a.ja=a.j&b;(a.j|b)&8&&(a.ja^=16);return a.H}function jd(a,b){a.ja=b^255;b=a.Z=b+255&255;a.H=a.H&-256|b;return b}function kd(a,b){a.ja=b;b=a.Z=b+1&255;a.H=a.H&-256|b;return b}function ld(a,b){return a.Z=a.H=a.ja=a.j|b}function L(a,b){b^=255;a.ja=a.j^b;return a.Z=(a.H=a.j+b+1^256)&255}
|
||||
function md(a,b){b^=255;a.ja=a.j^b;return a.Z=(a.H=a.j+b+(a.H&256?0:1)^256)&255}function nd(a,b){return a.Z=a.H=a.ja=a.j^b}m.W=function(a){return this.B.W(a)};m.fa=function(a,b){this.B.fa(a,b)};function M(a){var b=a.W(a.L);H(a,a.L+1);return b}function N(a){var b=a.B.Ca(a.L);H(a,a.L+2);return b}function O(a){var b=a.B.Ca(a.ca);a.ca=a.ca+2&65535;return b}function P(a,b){a.ca=a.ca-2&65535;a.B.sb(a.ca,b)}
|
||||
function Q(a,b,c,d){d=d||2;a.V[b]&&(void 0===c&&(jb(a,"Value for "+b+" is invalid"),a.da()),c=!a.A.ka||a.A.Lb?q(c,d):"--------".substr(0,d),a.V[b].textContent!=c&&(a.V[b].textContent=c))}
|
||||
m.va=function(a){this.Y&&(a||!this.A.ka||this.A.Lb)&&(Q(this,"A",this.j),Q(this,"B",this.N),Q(this,"C",this.O),Q(this,"BC",Gc(this),4),Q(this,"D",this.P),Q(this,"E",this.R),Q(this,"DE",Ic(this),4),Q(this,"H",this.S),Q(this,"L",this.U),Q(this,"HL",K(this),4),Q(this,"SP",this.ca,4),Q(this,"PC",this.L,4),a=Fc(this),Q(this,"PS",a,4),Q(this,"SF",a&128?1:0,1),Q(this,"ZF",a&64?1:0,1),Q(this,"AF",a&16?1:0,1),Q(this,"PF",a&4?1:0,1),Q(this,"CF",a&1?1:0,1));if(a=this.V.speed)a.textContent=this.A.ka&&this.i.Ia?
|
||||
this.i.Ia.toFixed(2)+"Mhz":"Stopped"};
|
||||
m.$a=function(a){this.A.ob=!0;var b=this.A.Yb=this.F&&od(this.F),c=a?this.A.wb?0:1:-1;this.A.wb=!1;this.D=this.b=a;do{if(this.u){var d;this.u&8&&this.pa&512?(d=199|(this.u&7)<<3,this.u&=-16,this.pa&=-513,this.M[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.u&16){this.b=0;break}}if(b){if(pd(this.F,this.L,c)){this.da();break}c=1}this.M[M(this)].call(this)}while(0<this.b);return this.A.ob?this.D-this.b:void 0===this.A.ob?0:-1};
|
||||
Ja(function(){for(var a=D(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new zc(d);cb(d,c)}});function qd(){this.b-=4}function rd(){H(this,N(this));this.b-=10}function sd(){H(this,O(this));this.b-=10}function td(){var a=N(this);P(this,this.L);H(this,a);this.b-=17}
|
||||
var Ac=[qd,function(){Hc(this,N(this));this.b-=10},function(){this.fa(Gc(this),this.j);this.b-=7},function(){Hc(this,Gc(this)+1);this.b-=5},function(){this.N=kd(this,this.N);this.b-=5},function(){this.N=jd(this,this.N);this.b-=5},function(){this.N=M(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;this.H=this.H&255|a&256;this.b-=4},qd,function(){var a;Kc(this,a=K(this)+Gc(this));this.H=this.H&255|a>>8&256;this.b-=10},function(){this.j=this.W(Gc(this));this.b-=7},function(){Hc(this,Gc(this)-
|
||||
1);this.b-=5},function(){this.O=kd(this,this.O);this.b-=5},function(){this.O=jd(this,this.O);this.b-=5},function(){this.O=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;this.H=this.H&255|a;this.b-=4},qd,function(){Jc(this,N(this));this.b-=10},function(){this.fa(Ic(this),this.j);this.b-=7},function(){Jc(this,Ic(this)+1);this.b-=5},function(){this.P=kd(this,this.P);this.b-=5},function(){this.P=jd(this,this.P);this.b-=5},function(){this.P=M(this);this.b-=7},function(){var a=this.j<<
|
||||
1;this.j=a&255|this.H>>8;this.H=this.H&255|a&256;this.b-=4},qd,function(){var a;Kc(this,a=K(this)+Ic(this));this.H=this.H&255|a>>8&256;this.b-=10},function(){this.j=this.W(Ic(this));this.b-=7},function(){Jc(this,Ic(this)-1);this.b-=5},function(){this.R=kd(this,this.R);this.b-=5},function(){this.R=jd(this,this.R);this.b-=5},function(){this.R=M(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(this.H&256|this.j)>>1;this.H=this.H&255|a;this.b-=4},qd,function(){Kc(this,N(this));this.b-=10},function(){var a=
|
||||
N(this);this.B.sb(a,K(this));this.b-=16},function(){Kc(this,K(this)+1);this.b-=5},function(){this.S=kd(this,this.S);this.b-=5},function(){this.S=jd(this,this.S);this.b-=5},function(){this.S=M(this);this.b-=7},function(){var a=0,b=Lc(this);if(Nc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Qc(this,a);this.H=b?this.H|256:this.H&-257;this.b-=4},qd,function(){var a;Kc(this,a=K(this)+K(this));this.H=this.H&255|a>>8&256;this.b-=10},function(){var a;a=N(this);a=this.B.Ca(a);Kc(this,a);this.b-=
|
||||
16},function(){Kc(this,K(this)-1);this.b-=5},function(){this.U=kd(this,this.U);this.b-=5},function(){this.U=jd(this,this.U);this.b-=5},function(){this.U=M(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},qd,function(){this.ca=N(this)&65535;this.b-=10},function(){this.fa(N(this),this.j);this.b-=13},function(){this.ca=this.ca+1&65535;this.b-=5},function(){var a=K(this);this.fa(a,kd(this,this.W(a)));this.b-=10},function(){var a=K(this);this.fa(a,jd(this,this.W(a)));this.b-=10},function(){this.fa(K(this),
|
||||
M(this));this.b-=10},function(){this.H|=256;this.b-=4},qd,function(){var a;Kc(this,a=K(this)+this.ca);this.H=this.H&255|a>>8&256;this.b-=10},function(){this.j=this.W(N(this));this.b-=13},function(){this.ca=this.ca-1&65535;this.b-=5},function(){this.j=kd(this,this.j);this.b-=5},function(){this.j=jd(this,this.j);this.b-=5},function(){this.j=M(this);this.b-=7},function(){this.H=Lc(this)?this.H&-257:this.H|256;this.b-=4},function(){this.b-=5},function(){this.N=this.O;this.b-=5},function(){this.N=this.P;
|
||||
this.b-=5},function(){this.N=this.R;this.b-=5},function(){this.N=this.S;this.b-=5},function(){this.N=this.U;this.b-=5},function(){this.N=this.W(K(this));this.b-=7},function(){this.N=this.j;this.b-=5},function(){this.O=this.N;this.b-=5},function(){this.b-=5},function(){this.O=this.P;this.b-=5},function(){this.O=this.R;this.b-=5},function(){this.O=this.S;this.b-=5},function(){this.O=this.U;this.b-=5},function(){this.O=this.W(K(this));this.b-=7},function(){this.O=this.j;this.b-=5},function(){this.P=
|
||||
this.N;this.b-=5},function(){this.P=this.O;this.b-=5},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.U;this.b-=5},function(){this.P=this.W(K(this));this.b-=7},function(){this.P=this.j;this.b-=5},function(){this.R=this.N;this.b-=5},function(){this.R=this.O;this.b-=5},function(){this.R=this.P;this.b-=5},function(){this.b-=5},function(){this.R=this.S;this.b-=5},function(){this.R=this.U;this.b-=5},function(){this.R=this.W(K(this));
|
||||
this.b-=7},function(){this.R=this.j;this.b-=5},function(){this.S=this.N;this.b-=5},function(){this.S=this.O;this.b-=5},function(){this.S=this.P;this.b-=5},function(){this.S=this.R;this.b-=5},function(){this.b-=5},function(){this.S=this.U;this.b-=5},function(){this.S=this.W(K(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){this.U=this.N;this.b-=5},function(){this.U=this.O;this.b-=5},function(){this.U=this.P;this.b-=5},function(){this.U=this.R;this.b-=5},function(){this.U=this.S;this.b-=
|
||||
5},function(){this.b-=5},function(){this.U=this.W(K(this));this.b-=7},function(){this.U=this.j;this.b-=5},function(){this.fa(K(this),this.N);this.b-=7},function(){this.fa(K(this),this.O);this.b-=7},function(){this.fa(K(this),this.P);this.b-=7},function(){this.fa(K(this),this.R);this.b-=7},function(){this.fa(K(this),this.S);this.b-=7},function(){this.fa(K(this),this.U);this.b-=7},function(){var a=this.L-1;if(this.J.length)for(var b=0;b<this.J.length;b++)if(this.J[b](a))return;this.u|=16;this.b-=7;
|
||||
this.F&&fb(this,-2147483648)?(H(this,a),this.F.da()):this.pa&512||(this.F&&H(this,a),this.da())},function(){this.fa(K(this),this.j);this.b-=7},function(){this.j=this.N;this.b-=5},function(){this.j=this.O;this.b-=5},function(){this.j=this.P;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.U;this.b-=5},function(){this.j=this.W(K(this));this.b-=7},function(){this.b-=5},function(){this.j=Qc(this,this.N);this.b-=4},function(){this.j=Qc(this,this.O);
|
||||
this.b-=4},function(){this.j=Qc(this,this.P);this.b-=4},function(){this.j=Qc(this,this.R);this.b-=4},function(){this.j=Qc(this,this.S);this.b-=4},function(){this.j=Qc(this,this.U);this.b-=4},function(){this.j=Qc(this,this.W(K(this)));this.b-=7},function(){this.j=Qc(this,this.j);this.b-=4},function(){this.j=Rc(this,this.N);this.b-=4},function(){this.j=Rc(this,this.O);this.b-=4},function(){this.j=Rc(this,this.P);this.b-=4},function(){this.j=Rc(this,this.R);this.b-=4},function(){this.j=Rc(this,this.S);
|
||||
this.b-=4},function(){this.j=Rc(this,this.U);this.b-=4},function(){this.j=Rc(this,this.W(K(this)));this.b-=7},function(){this.j=Rc(this,this.j);this.b-=4},function(){this.j=L(this,this.N);this.b-=4},function(){this.j=L(this,this.O);this.b-=4},function(){this.j=L(this,this.P);this.b-=4},function(){this.j=L(this,this.R);this.b-=4},function(){this.j=L(this,this.S);this.b-=4},function(){this.j=L(this,this.U);this.b-=4},function(){this.j=L(this,this.W(K(this)));this.b-=7},function(){this.j=L(this,this.j);
|
||||
this.b-=4},function(){this.j=md(this,this.N);this.b-=4},function(){this.j=md(this,this.O);this.b-=4},function(){this.j=md(this,this.P);this.b-=4},function(){this.j=md(this,this.R);this.b-=4},function(){this.j=md(this,this.S);this.b-=4},function(){this.j=md(this,this.U);this.b-=4},function(){this.j=md(this,this.W(K(this)));this.b-=7},function(){this.j=md(this,this.j);this.b-=4},function(){this.j=id(this,this.N);this.b-=4},function(){this.j=id(this,this.O);this.b-=4},function(){this.j=id(this,this.P);
|
||||
this.b-=4},function(){this.j=id(this,this.R);this.b-=4},function(){this.j=id(this,this.S);this.b-=4},function(){this.j=id(this,this.U);this.b-=4},function(){this.j=id(this,this.W(K(this)));this.b-=7},function(){this.j=id(this,this.j);this.b-=4},function(){this.j=nd(this,this.N);this.b-=4},function(){this.j=nd(this,this.O);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.S);this.b-=4},function(){this.j=nd(this,this.U);
|
||||
this.b-=4},function(){this.j=nd(this,this.W(K(this)));this.b-=7},function(){this.j=nd(this,this.j);this.b-=4},function(){this.j=ld(this,this.N);this.b-=4},function(){this.j=ld(this,this.O);this.b-=4},function(){this.j=ld(this,this.P);this.b-=4},function(){this.j=ld(this,this.R);this.b-=4},function(){this.j=ld(this,this.S);this.b-=4},function(){this.j=ld(this,this.U);this.b-=4},function(){this.j=ld(this,this.W(K(this)));this.b-=7},function(){this.j=ld(this,this.j);this.b-=4},function(){L(this,this.N);
|
||||
this.b-=4},function(){L(this,this.O);this.b-=4},function(){L(this,this.P);this.b-=4},function(){L(this,this.R);this.b-=4},function(){L(this,this.S);this.b-=4},function(){L(this,this.U);this.b-=4},function(){L(this,this.W(K(this)));this.b-=7},function(){L(this,this.j);this.b-=4},function(){Oc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Hc(this,O(this));this.b-=10},function(){var a=N(this);Oc(this)||H(this,a);this.b-=10},rd,function(){var a=N(this);Oc(this)||(P(this,this.L),H(this,a),this.b-=
|
||||
6);this.b-=11},function(){P(this,Gc(this));this.b-=11},function(){this.j=Qc(this,M(this));this.b-=7},function(){P(this,this.L);H(this,0);this.b-=11},function(){Oc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},sd,function(){var a=N(this);Oc(this)&&H(this,a);this.b-=10},rd,function(){var a=N(this);Oc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},td,function(){this.j=Rc(this,M(this));this.b-=7},function(){P(this,this.L);H(this,8);this.b-=11},function(){Lc(this)||(H(this,O(this)),this.b-=6);
|
||||
this.b-=5},function(){Jc(this,O(this));this.b-=10},function(){var a=N(this);Lc(this)||H(this,a);this.b-=10},function(){var a=M(this);Ib(this.B,a,this.j,this.L+-2&65535);this.b-=10},function(){var a=N(this);Lc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,Ic(this));this.b-=11},function(){this.j=L(this,M(this));this.b-=7},function(){P(this,this.L);H(this,16);this.b-=11},function(){Lc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},sd,function(){var a=N(this);Lc(this)&&H(this,
|
||||
a);this.b-=10},function(){var a=M(this);this.j=Fb(this.B,a,this.L+-2&65535)&255;this.b-=10},function(){var a=N(this);Lc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},td,function(){this.j=md(this,M(this));this.b-=7},function(){P(this,this.L);H(this,24);this.b-=11},function(){Mc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Kc(this,O(this));this.b-=10},function(){var a=N(this);Mc(this)||H(this,a);this.b-=10},function(){var a=O(this);P(this,K(this));Kc(this,a);this.b-=18},function(){var a=
|
||||
N(this);Mc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,K(this));this.b-=11},function(){this.j=id(this,M(this));this.b-=7},function(){P(this,this.L);H(this,32);this.b-=11},function(){Mc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,K(this));this.b-=5},function(){var a=N(this);Mc(this)&&H(this,a);this.b-=10},function(){var a=K(this);Kc(this,Ic(this));Jc(this,a);this.b-=5},function(){var a=N(this);Mc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=
|
||||
11},td,function(){this.j=nd(this,M(this));this.b-=7},function(){P(this,this.L);H(this,40);this.b-=11},function(){Pc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Dc(this,a);this.j=a>>8;this.b-=10},function(){var a=N(this);Pc(this)||H(this,a);this.b-=10},function(){this.pa&=-513;this.b-=4},function(){var a=N(this);Pc(this)||(P(this,this.L),H(this,a),this.b-=6);this.b-=11},function(){P(this,Fc(this)&255|this.j<<8);this.b-=11},function(){this.j=ld(this,M(this));this.b-=7},function(){P(this,
|
||||
this.L);H(this,48);this.b-=11},function(){Pc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){this.ca=K(this)&65535;this.b-=5},function(){var a=N(this);Pc(this)&&H(this,a);this.b-=10},function(){this.pa|=512;this.b-=4},function(){var a=N(this);Pc(this)&&(P(this,this.L),H(this,a),this.b-=6);this.b-=11},td,function(){L(this,M(this));this.b-=7},function(){P(this,this.L);H(this,56);this.b-=11}];
|
||||
function T(a){v.call(this,"ChipSet",a,T,32768);var b=a.model;b&&!ud[b]&&t("Unrecognized ChipSet model: "+b);this.Sa=ud[b]||vd;a.sound&&(this.X=null,window&&(this.X=window.AudioContext||window.webkitAudioContext),this.X&&new this.X);E(this)}z(T);var vd=1978.1,ud={SI1978:vd};m=T.prototype;m.qa=function(){return!1};
|
||||
m.Da=function(a,b,c,d){this.B=b;this.b=c;this.F=d;this.w=a;if(this.Sa==vd){var e;a=wd;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.w[g]?t("Input port "+r(g)+" already registered"):c.w[g]=[h,!1]}var l;e=xd;void 0===l&&(l=0);for(var k in e)if(f=b,a=+k+l,c=e[k].bind(this),void 0!==c)for(d=+k+l;d<=a;d++)void 0!==f.u[d]?t("Output port "+r(d)+" already registered"):f.u[d]=[c,!1]}};
|
||||
m.za=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.ya=function(a){return a?this.save():!0};m.reset=function(){this.G=this.I=this.D=this.u=this.M=this.K=this.J=0};m.save=function(){var a=new I(this);this.Sa==vd&&J(a,0,[this.J,this.K,this.M,this.u,this.D,this.G,this.I]);return a.data()};m.restore=function(a){a=a[0];this.Sa==vd&&(this.J=a[0],this.K=a[1],this.M=a[2],this.u=a[3],this.D=a[4],this.G=a[5],this.I=a[6]);return!0};m.start=function(){};m.stop=function(){};
|
||||
m.bc=function(a,b){var c=this.J;db(this,a,null,b,"STATUS0",c);return c};m.cc=function(a,b){var c=this.K;db(this,a,null,b,"STATUS1",c);return c};m.dc=function(a,b){var c=this.M;db(this,a,null,b,"STATUS2",c);return c};m.ac=function(a,b){var c=this.u>>8-this.D&255;db(this,a,null,b,"SHIFT.RESULT",c);return c};m.ic=function(a,b,c){db(this,a,b,c,"SHIFT.COUNT",null);this.D=b};m.kc=function(a,b,c){db(this,a,b,c,"SOUND1",null);this.G=b};
|
||||
m.jc=function(a,b,c){db(this,a,b,c,"SHIFT.DATA",null);this.u=b<<8|this.u>>8};m.lc=function(a,b,c){db(this,a,b,c,"SOUND2",null);this.H=b};m.mc=function(a,b,c){db(this,a,b,c,"WATCHDOG",null)};var zd={0:R.prototype.bc,1:R.prototype.cc,2:R.prototype.dc,3:R.prototype.ac},Ad={2:R.prototype.ic,3:R.prototype.kc,4:R.prototype.jc,5:R.prototype.lc,6:R.prototype.mc};Ja(function(){for(var a=D(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new R(d);ab(d,c)}});
|
||||
function Bd(a){v.call(this,"ROM",a,Bd);this.w=null;this.H=a.addr;this.u=a.size;this.J=a.writable;this.D=a.alias;this.G=a.file;this.K=ba(this.G);if(this.G){a=this.G;var b=da(this.K);"json"!=b&&"hex"!=b&&(a=oa()+"/api/v1/dump?file="+this.G+"&format=bytes&decimal=true");var c=this;na(a,null,!0,function(a,b,f){Cd(c,a,b,f)})}}z(Bd);var Dd=[0,5];Bd.prototype.Ba=function(a,b,c,d){this.B=b;this.b=c;this.F=d;Ed(this)};
|
||||
Bd.prototype.ya=function(){if(this.za){if(this.F){var a=this.F,b=this.id,c=this.H,d=this.u,e=this.za,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var l=g.o,k=g.a;if(void 0!==l){var n=f,l=[l>>>0,h],p=ja(n,l,a.Eb);0>p&&n.splice(-(p+1),0,l)}k&&(g.a=k.replace(/''/g,'"'))}a.J.push({nc:b,C:c,gc:d,za:e,Bb:f})}delete this.za}return!0};Bd.prototype.xa=function(){return!0};
|
||||
function Cd(a,b,c,d){if(d)a.oa("Unable to load system ROM (error "+d+": "+b+")");else{Ya(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.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.za=e.symbols;if(!a.w.length){t("Empty ROM: "+b);return}if(1==a.w.length){t(a.w[0]);return}}catch(g){a.oa("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.w=Array(b.length),e=0;e<b.length;e++)a.w[e]=aa(b[e],16);Ed(a)}}
|
||||
function Ed(a){if(!ib(a))if(!a.G)E(a);else if(a.w&&a.B){a.u||(a.u=a.w.length);if(a.w.length!=a.u)jb(a,"ROM size (0x"+q(a.w.length)+") does not match specified size ("+("0x"+q(a.u))+")");else if(Fd(a,a.H)){var b=[];"number"==typeof a.D?b.push(a.D):null!=a.D&&a.D.length&&(b=a.D);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.B,h=d.u,g=[],l=d.H>>>f.aa;0<h&&l<f.B.length;)g.push(f.B[l++]),h-=f.la;f=d.B;d=d.u;h=0;for(e>>>=f.aa;0<d&&e<f.B.length;){l=g[h++];if(!l)break;f.B[e++]=l;d-=f.la}}delete a.w}E(a)}}
|
||||
function Fd(a,b){if(rb(a.B,b,a.u,a.J?1:Pb)){var c;for(c=0;c<a.w.length;c++)vb(a.B,b+c,a.w[c]);if(a.J&&256==b){for(c=0;c<Dd.length;c++)vb(a.B,Dd[c],118);Cc(a.b,function(a){return function(b){if(0<=Dd.indexOf(b)){var c=!1,h=a.b,g=a.F;if(5==b)switch(c=!0,h.O){case 2:Gd(a,String.fromCharCode(h.R));break;case 9:for(var l=Jc(h),k="",n=255;n--;){var p=a.b.W(l++);if(36==p)break;k+=String.fromCharCode(p)}Gd(a,k);break;default:c=!1}c?vd.call(h):g&&(a.g("\nCP/M vector "+r(b)),H(h,b),g.ea());b=!0}else b=!1;return b}}(a));
|
||||
Ec(a.b,b)}return!0}return!1}function Gd(a,b){b=b.replace(/\r/g,"");a.sa&&(a.sa.value+=b,a.sa.scrollTop=a.sa.scrollHeight)}Ja(function(){for(var a=D(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Bd(d);ab(d,c)}});function Hd(a){v.call(this,"RAM",a,Hd);this.D=a.addr;this.u=a.size;this.w=!1}z(Hd);m=Hd.prototype;m.Ba=function(a,b,c,d){this.B=b;this.b=c;this.F=d;E(this)};m.ya=function(a,b){b||this.reset();return!0};m.xa=function(a){return a?this.save():!0};
|
||||
m.reset=function(){!this.w&&this.u&&rb(this.B,this.D,this.u,1)&&(this.w=!0,this.status(Math.floor(this.u/1024)+"Kb allocated"));this.w||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ja(function(){for(var a=D(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Hd(d);ab(d,c)}});function Id(a){v.call(this,"Keyboard",a,Id,65536);E(this)}z(Id);
|
||||
Ja(function(){for(var a=D(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Id(d);ab(d,c)}});
|
||||
function Jd(a,b,c){v.call(this,"Video",a,Jd,262144);this.ma=a.screenWidth;this.ra=a.screenHeight;this.K=a.bufferAddr;this.u=a.bufferCols;this.D=a.bufferRows;this.Z=a.bufferBits||1;this.Zb=a.interruptRate;this.Aa=a.refreshRate||60;this.V=c;this.fa=[[0,0,0,255],[255,255,255,255]];this.X=this.V.createImageData(this.u,this.D);this.H=document.createElement("canvas");this.H.width=this.u;this.H.height=this.D;this.ja=this.H.getContext("2d")}z(Jd);
|
||||
Jd.prototype.Ba=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.J=(this.u*this.Z>>3)*this.D;rb(this.B,this.K,this.J,3)&&(this.ba=this.J>>1,this.ca=16/this.Z|0,this.M=!1,void 0===this.G||this.G.length!=this.ba)&&(this.G=Array(this.ba));E(this)};
|
||||
m.jc=function(a,b,c){db(this,a,b,c,"SHIFT.DATA",null);this.u=b<<8|this.u>>8};m.lc=function(a,b,c){db(this,a,b,c,"SOUND2",null);this.I=b};m.mc=function(a,b,c){db(this,a,b,c,"WATCHDOG",null)};var wd={0:T.prototype.bc,1:T.prototype.cc,2:T.prototype.dc,3:T.prototype.ac},xd={2:T.prototype.ic,3:T.prototype.kc,4:T.prototype.jc,5:T.prototype.lc,6:T.prototype.mc};Ja(function(){for(var a=D(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new T(d);cb(d,c)}});
|
||||
function yd(a){v.call(this,"ROM",a,yd);this.w=null;this.I=a.addr;this.u=a.size;this.J=a.writable;this.D=a.alias;this.G=a.file;this.K=ca(this.G);if(this.G){a=this.G;var b=da(this.K);"json"!=b&&"hex"!=b&&(a=oa()+"/api/v1/dump?file="+this.G+"&format=bytes&decimal=true");var c=this;na(a,null,!0,function(a,b,f){zd(c,a,b,f)})}}z(yd);var Ad=[0,5];yd.prototype.Da=function(a,b,c,d){this.B=b;this.b=c;this.F=d;Bd(this)};
|
||||
yd.prototype.za=function(){if(this.Aa){if(this.F){var a=this.F,b=this.id,c=this.I,d=this.u,e=this.Aa,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var l=g.o,k=g.a;if(void 0!==l){var n=f,l=[l>>>0,h],p=ja(n,l,a.Fb);0>p&&n.splice(-(p+1),0,l)}k&&(g.a=k.replace(/''/g,'"'))}a.J.push({nc:b,C:c,gc:d,Aa:e,Cb:f})}delete this.Aa}return!0};yd.prototype.ya=function(){return!0};
|
||||
function zd(a,b,c,d){if(d)a.oa("Unable to load system ROM (error "+d+": "+b+")");else{Ya(a.Ib,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.w=f;else if(h)for(a.w=Array(4*h.length),d=c=0;c<h.length;c++)a.w[d++]=h[c]&255,a.w[d++]=h[c]>>8&255,a.w[d++]=h[c]>>16&255,a.w[d++]=h[c]>>24&255;else a.w=e;a.Aa=e.symbols;if(!a.w.length){t("Empty ROM: "+b);return}if(1==a.w.length){t(a.w[0]);return}}catch(g){a.oa("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.w=Array(b.length),e=0;e<b.length;e++)a.w[e]=aa(b[e],16);Bd(a)}}
|
||||
function Bd(a){if(!ib(a))if(!a.G)E(a);else if(a.w&&a.B){a.u||(a.u=a.w.length);if(a.w.length!=a.u)jb(a,"ROM size (0x"+q(a.w.length)+") does not match specified size ("+("0x"+q(a.u))+")");else if(Cd(a,a.I)){var b=[];"number"==typeof a.D?b.push(a.D):null!=a.D&&a.D.length&&(b=a.D);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.B,h=d.u,g=[],l=d.I>>>f.ea;0<h&&l<f.T.length;)g.push(f.T[l++]),h-=f.ua;f=d.B;d=d.u;h=0;for(e>>>=f.ea;0<d&&e<f.T.length;){l=g[h++];if(!l)break;f.T[e++]=l;d-=f.ua}}delete a.w}E(a)}}
|
||||
function Cd(a,b){if(rb(a.B,b,a.u,a.J?1:Pb)){var c;for(c=0;c<a.w.length;c++)vb(a.B,b+c,a.w[c]);if(a.J&&256==b){for(c=0;c<Ad.length;c++)vb(a.B,Ad[c],118);Cc(a.b,function(a){return function(b){if(0<=Ad.indexOf(b)){var c=!1,h=a.b,g=a.F;if(5==b)switch(c=!0,h.O){case 2:Dd(a,String.fromCharCode(h.R));break;case 9:for(var l=Ic(h),k="",n=255;n--;){var p=a.b.W(l++);if(36==p)break;k+=String.fromCharCode(p)}Dd(a,k);break;default:c=!1}c?sd.call(h):g&&(a.g("\nCP/M vector "+r(b)),H(h,b),g.da());b=!0}else b=!1;return b}}(a));
|
||||
Ec(a.b,b)}return!0}return!1}function Dd(a,b){b=b.replace(/\r/g,"");a.ta&&(a.ta.value+=b,a.ta.scrollTop=a.ta.scrollHeight)}Ja(function(){for(var a=D(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new yd(d);cb(d,c)}});function Ed(a){v.call(this,"RAM",a,Ed);this.D=a.addr;this.u=a.size;this.w=!1}z(Ed);m=Ed.prototype;m.Da=function(a,b,c,d){this.B=b;this.b=c;this.F=d;E(this)};m.za=function(a,b){b||this.reset();return!0};m.ya=function(a){return a?this.save():!0};
|
||||
m.reset=function(){!this.w&&this.u&&rb(this.B,this.D,this.u,1)&&(this.w=!0,this.status(Math.floor(this.u/1024)+"Kb allocated"));this.w||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ja(function(){for(var a=D(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Ed(d);cb(d,c)}});function Fd(a){v.call(this,"Keyboard",a,Fd,65536);E(this)}z(Fd);
|
||||
Ja(function(){for(var a=D(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Fd(d);cb(d,c)}});
|
||||
function Gd(a,b,c){v.call(this,"Video",a,Gd,262144);this.Y=a.screenWidth;this.K=a.screenHeight;this.X=a.bufferAddr;this.u=a.bufferCols;this.D=a.bufferRows;this.ga=a.bufferBits||1;this.Zb=a.interruptRate;this.Ba=a.refreshRate||60;this.G=c;this.na=a.screenRotation;90==this.na&&(this.G.translate(0,this.K),this.G.rotate(-this.na*Math.PI/180),this.G.scale(this.K/this.Y,this.Y/this.K));this.ra=[[0,0,0,255],[255,255,255,255]];this.ba=this.G.createImageData(this.u,this.D);this.J=document.createElement("canvas");
|
||||
this.J.width=this.u;this.J.height=this.D;this.sa=this.J.getContext("2d")}z(Gd);Gd.prototype.Da=function(a,b,c,d){this.w=a;this.B=b;this.b=c;this.F=d;this.M=(this.u*this.ga>>3)*this.D;rb(this.B,this.X,this.M,3)&&(this.la=this.M>>1,this.ma=16/this.ga|0,this.aa=!1,void 0===this.I||this.I.length!=this.la)&&(this.I=Array(this.la));E(this)};
|
||||
Ja(function(){for(var a=D(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=B(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing <canvas> support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=pa().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
|
||||
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Sa.aspect);f&&.3<=f&&3.33>=f&&(Ia("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ba("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new Jd(d,0,e);ab(d,c)}});
|
||||
function Kd(a){v.call(this,"Debugger",a,Kd);this.Z=Ld;this.fa=this.Ma=this.M=0;this.X=U();this.Fb=U();this.G=-1;this.D=[];this.ma=!1;this.ja=U();this.J=[];this.ra={};this.u=this.ba=this.H=[];Md(this);this.Da=0;Nd(this);this.$a=[];Od(this,a.messages);this.rb=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return qc(b,a)}):void 0===global.$&&(global.$=function(a){return qc(b,a)})}z(Kd);
|
||||
var Pd={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},Ld=8080,Qd="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(" "),
|
||||
Rd="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(" "),Sd="B C D E H L M A BC DE HL SP PC PSW".split(" "),Td=[[45],[42,2067,32],[71,2131,18193],[29,2067],[28,17],[22,17],[44,17,32],[63],[45,32768],
|
||||
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Sa.aspect);f&&.3<=f&&3.33>=f&&(Ia("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Ba("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new Gd(d,0,e);cb(d,c)}});
|
||||
function Hd(a){v.call(this,"Debugger",a,Hd);this.aa=Id;this.la=this.Na=this.M=0;this.Y=U();this.Gb=U();this.G=-1;this.D=[];this.na=!1;this.ma=U();this.J=[];this.ra={};this.u=this.ba=this.I=[];Jd(this);this.Fa=0;Kd(this);this.bb=[];Ld(this,a.messages);this.tb=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return qc(b,a)}):void 0===global.$&&(global.$=function(a){return qc(b,a)})}z(Hd);
|
||||
var Md={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},Id=8080,Nd="NONE ACI ADC ADD ADI ANA ANI CALL CC CM CNC CNZ CP CPE CPO CZ CMA CMC CMP CPI DAA DAD DCR DCX DI EI HLT IN INR INX JMP JC JM JNC JNZ JP JPE JPO JZ LDA LDAX LHLD LXI MOV MVI NOP ORA ORI OUT PCHL POP PUSH RAL RAR RET RC RM RNC RNZ RP RPE RPO RZ RLC RRC RST SBB SBI SHLD SPHL STA STAX STC SUB SUI XCHG XRA XRI XTHL".split(" "),
|
||||
Od="NONE ADC ADC ADD ADD AND AND CALL CALLC CALLS CALLNC CALLNZ CALLNS CALLP CALLNP CALLZ NOT CMC CMP CMP DAA ADD DEC DEC CLI STI HLT IN INC INC JMP JC JS JNC JNZ JNS JP JNP JZ MOV MOV MOV MOV MOV MOV NOP OR OR OUT JMP POP PUSH RCL RCR RET RETC RETS RETNC RETNZ RETNS RETP RETNP RETZ ROL ROR RST SBB SBB MOV MOV MOV MOV STC SUB SUB XCHG XOR XOR XCHG".split(" "),Pd="B C D E H L M A BC DE HL SP PC PSW".split(" "),Qd=[[45],[42,2067,32],[71,2131,18193],[29,2067],[28,17],[22,17],[44,17,32],[63],[45,32768],
|
||||
[21,18963,2067],[40,18193,2131],[23,2067],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2323,32],[71,2387,18193],[29,2323],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,18963,2323],[40,18193,2387],[23,2323],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2579,32],[68,115,18963],[29,2579],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,18963,2579],[41,18963,115],[23,2579],[28,1297],[22,1297],[44,1297,32],[16,18193],[45,32768],[42,2835,32],[70,115,18193],[29,2835],[28,1617],[22,1617],
|
||||
[44,1617,32],[72],[45,32768],[21,18963,2835],[39,18193,115],[23,2835],[28,1809],[22,1809],[44,1809,32],[17],[43,17,17],[43,17,273],[43,17,529],[43,17,785],[43,17,1041],[43,17,1297],[43,17,1617],[43,17,1809],[43,273,17],[43,273,273],[43,273,529],[43,273,785],[43,273,1041],[43,273,1297],[43,273,1617],[43,273,1809],[43,529,17],[43,529,273],[43,529,529],[43,529,785],[43,529,1041],[43,529,1297],[43,529,1617],[43,529,1809],[43,785,17],[43,785,273],[43,785,529],[43,785,785],[43,785,1041],[43,785,1297],[43,
|
||||
785,1617],[43,785,1809],[43,1041,17],[43,1041,273],[43,1041,529],[43,1041,785],[43,1041,1041],[43,1041,1297],[43,1041,1617],[43,1041,1809],[43,1297,17],[43,1297,273],[43,1297,529],[43,1297,785],[43,1297,1041],[43,1297,1297],[43,1297,1617],[43,1297,1809],[43,1617,17],[43,1617,273],[43,1617,529],[43,1617,785],[43,1617,1041],[43,1617,1297],[26],[43,1617,1809],[43,1809,17],[43,1809,273],[43,1809,529],[43,1809,785],[43,1809,1041],[43,1809,1297],[43,1809,1617],[43,1809,1809],[3,18193,17],[3,18193,273],
|
||||
[3,18193,529],[3,18193,785],[3,18193,1041],[3,18193,1297],[3,18193,1617],[3,18193,1809],[2,18193,17],[2,18193,273],[2,18193,529],[2,18193,785],[2,18193,1041],[2,18193,1297],[2,18193,1617],[2,18193,1809],[73,18193,17],[73,18193,273],[73,18193,529],[73,18193,785],[73,18193,1041],[73,18193,1297],[73,18193,1617],[73,18193,1809],[66,18193,17],[66,18193,273],[66,18193,529],[66,18193,785],[66,18193,1041],[66,18193,1297],[66,18193,1617],[66,18193,1809],[5,18193,17],[5,18193,273],[5,18193,529],[5,18193,785],
|
||||
[5,18193,1041],[5,18193,1297],[5,18193,1617],[5,18193,1809],[76,18193,17],[76,18193,273],[76,18193,529],[76,18193,785],[76,18193,1041],[76,18193,1297],[76,18193,1617],[76,18193,1809],[46,18193,17],[46,18193,273],[46,18193,529],[46,18193,785],[46,18193,1041],[46,18193,1297],[46,18193,1617],[46,18193,1809],[18,18193,17],[18,18193,273],[18,18193,529],[18,18193,785],[18,18193,1041],[18,18193,1297],[18,18193,1617],[18,18193,1809],[58],[50,2067],[34,51],[30,51],[11,51],[51,2067],[4,18193,33],[65,128],[62],
|
||||
[54],[38,51],[30,32819],[15,51],[7,51],[1,18193,33],[65,128],[57],[50,2323],[33,51],[48,33,18193],[10,51],[51,2323],[74,18193,33],[65,128],[55],[54,32768],[31,51],[27,18193,33],[8,51],[7,32819],[67,18193,33],[65,128],[61],[50,2579],[37,51],[78,19283,18963],[14,51],[51,2579],[6,18193,33],[65,128],[60],[49,2579],[36,51],[75,18963,18707],[13,51],[7,32819],[77,18193,33],[65,128],[59],[50,3347],[35,51],[24],[12,51],[51,3347],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,
|
||||
18193,33],[65,128]],Ud={cpu:1,bus:64,mem:128,port:256,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};m=Kd.prototype;
|
||||
m.Ba=function(a,b,c,d){this.B=b;this.b=c;this.w=a;(a=cc(a,"messages"))&&Od(this,a);this.Cb=Td;Vd(this,function(a){a:{var b=d.b.na,c=a[0],g=a=0,l=b.length;if(c){a=V(Y(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.b.aa;l=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,k=0;l--;){var n=b[g];n.type==c?k++||d.g("..."):(c=n.type,k=Ub[c],n&&d.g(q(n.id)+" %"+q(g<<d.b.aa)+" %%"+q(n.C)+" "+r(n.kb)+" "+
|
||||
r(n.size)+" "+k),c!=Ob&&(c=-1),k=0);a+=d.b.la;g++}}});E(this)};
|
||||
m.qa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.Ca=this.U[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",qc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.G<d.D.length-1&&(b=d.D[++d.G]):40==a.keyCode&&(0<d.G?b=d.D[--d.G]:(b="",d.G=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.U[b]=c,Da(c,function(){if(d.Ca){var a=d.Ca.value;d.Ca.value=
|
||||
"";qc(d,a,!0);return!0}return!1}),!0;case "step":return this.U[b]=c,Da(c,function(a){var b=!1;hb(d,!0)||(gb(d,!0),b=d.Ya(a?1:0),gb(d,!1));return b}),!0}return!1};m.jb=function(){this.Ca&&this.Ca.focus()};function V(a){a=a&&a.C;null==a&&(a=-1);return a}m.W=function(a,b){var c=255,d=V(a);-1!==d&&(c=tb(this.B,d),b&&Wd(a,b));return c};m.mb=function(a,b){var c=65535,d=V(a);-1!==d&&(c=ub(this.B,d),b&&Wd(a,b));return c};m.Ab=function(a,b,c){var d=V(a);-1!==d&&(vb(this.B,d,b),c&&Wd(a,c),rc(this.b,!0))};
|
||||
m.Vb=function(a,b,c){var d=V(a);if(-1!==d){var e=this.B,f=d&e.D,h=(d&e.G)>>>e.aa;f!=e.D?e.B[h].zb(f,b&65535,d):(e.B[h++].lb(f,b&255,d),e.B[h&e.V].lb(0,b>>8&255,d+1));c&&Wd(a,c);rc(this.b,!0)}};function U(a){return{C:a,wa:!1}}function Xd(a){return[a.C,a.wa]}function Yd(a){return{C:a[0],wa:a[1]}}
|
||||
function Y(a,b,c){var d;c=(c?a.X:a.Fb).C;if(void 0!==b){d=b=Zd(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].za[d];if(void 0!==f){d=f.o;void 0!==d&&(e=U(d));break}}if(d=e)return d;c=$d(a,b,void 0)}null!=c&&(d=U(c));return d}function ae(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Wb=be(a,b.Tb=c[2]))}function Wd(a,b){null!=a.C&&(a.C+=b||1)}function Z(a){return q(a,4)}
|
||||
function ce(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.W(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Od(a,b){a.F=a;a.ga=a.Xb=1073741824;a.Ea=null;var c=be(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Ud)0<=ma(c,d)&&(a.ga|=Ud[d],a.g(d+" messages enabled"))}function Vd(a,b){for(var c in Ud)if(64==Ud[c]){a.$a[c]=b;break}}
|
||||
function de(a,b){var c;a=a.toUpperCase();null==b?c=ma(Sd,a):(c=ma(Sd,a.substr(b,3)),0>c&&(c=ma(Sd,a.substr(b,2))));return c}function ee(a,b){var c=0,d=fe(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 6:c=2;break;case 8:case 9:case 10:case 11:case 12:case 13:c=4}return c?q(d,c):"??"}
|
||||
function fe(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.N;break;case 1:c=d.O;break;case 8:c=Hc(d);break;case 2:c=d.P;break;case 3:c=d.R;break;case 9:c=Jc(d);break;case 4:c=d.S;break;case 5:c=d.T;break;case 10:c=J(d);break;case 6:c=d.W(J(d));break;case 11:c=d.da;break;case 12:c=d.L;break;case 13:c=d.j<<8|Fc(d)&255}}return c}
|
||||
function ge(a,b){b=Zd(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=de(b,c+1),0<=e&&(b=b.substr(0,c)+ee(a,e)+b.substr(c+1+Sd[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=aa(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=Y(a,e))?(d=e+' "'+ce(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=Y(a,e))?(Wd(d),d=e+' "'+
|
||||
ce(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(U(this.b.L).C));if(!this.Ea||a!=this.Ea)if(this.Ea=a,this.ga&-2147483648&&(this.ea(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Wa=0;c.D-=c.b;c.b=0;rc(c)}};function eb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.ga&g)!=g||a.message(b.ab+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+q(d,2):"")+")"+(null!=h?": 0x"+q(h,2):"")+(null!=e?" at "+Z(e):""))}
|
||||
function Nd(a){var b;if(rd(a)){if(!a.V||!a.V.length){a.V=Array(1E3);for(b=0;b<a.V.length;b++)a.V[b]=U();a.ua=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.V&&a.V.length&&a.g("instruction history buffer freed"),a.ua=0,a.V=[],a.K=[]}m.La=function(a){if(!he(this))return!1;this.b.La(a);return!0};
|
||||
m.Ya=function(a,b,c){if(!he(this))return!1;this.M=0;a||rd(this)&&sd(this,this.b.L,0);try{var d=this.b.Ya(a);0<d&&(this.M+=d,wc(this.b,d,!0),tc(this.b,d),this.fa++)}catch(e){"number"!=typeof e&&(this.M=0,jb(this.b,e.stack||e.message))}!1!==c&&rc(this.b);this.ta(b||!1);return 0<this.M};m.ea=function(a){this.b&&this.b.ea(a)};m.ta=function(a){void 0===a&&(a=!0);this.X=U(this.b.L);a&&1!=this.ca?ie(this):je(this)};
|
||||
function he(a){var b;if(b=a.b&&ib(a.b))b=a.b,b.A.ha?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!hb(a.b)?(a=a.b,a.A.Pa?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.ya=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.xa=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){Nd(this);this.fa=this.Ma=0;this.Ea=null;this.M=0;this.X=U(this.b.L);this.A.ka=!1;ke(this);a||this.ta()};
|
||||
m.save=function(){var a=new Gc(this);I(a,0,Xd(this.X));I(a,1,Xd(this.ja));I(a,2,[this.D,this.ma,this.ga]);I(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.X=Yd(a[b++]),this.ja=Yd(a[b++]),this.D=a[b][0],"string"==typeof this.D&&(this.D=[this.D]),this.ma=a[b][1],this.ga|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ca||this.g("running");this.A.ka=!0;this.$b=a;this.ec=b};
|
||||
m.stop=function(a,b){if(this.A.ka){this.A.ka=!1;this.M=b-this.ec;if(!this.ca){var c="stopped";if(this.M){var d=a-this.$b,e=0<d?Math.round(1E3*this.M/d):0,c=c+" (";rd(this)&&(c+=this.fa+" opcodes, ",this.Ma-=this.fa,this.fa=0);c+=this.M+" cycles, "+d+" ms, "+e+" hz)"}else fb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.ta(!0);this.jb();ke(this,this.b.L)}};function rd(a){return 1<a.u.length||!!a.Da}
|
||||
function sd(a,b,c){var d=a.b;if(0<c&&(a.Da&&!--a.Da||Yb(a,b,1,a.u)))return!0;0<=c&&a.K.length&&(a.fa++,b=tb(a.B,b),null!=b&&(a.K[b][1]++,b=a.V[a.ua],b.C=d.L,b.wa=!1,++a.ua==a.V.length&&(a.ua=0)));return!1}function Gb(a,b,c){a.g("break on input from port "+r(b)+": "+q(c));a.ea(!0)}function Jb(a,b,c){a.g("break on output to port "+r(b)+": "+q(c));a.ea(!0)}
|
||||
function Md(a){var b,c;a.u=["bp"];if(void 0!==a.ba)for(b=1;b<a.ba.length;b++){c=a.ba[b];var d=a.b;Zb(d.na[V(c)>>>d.aa],!1)}a.ba=["br"];if(void 0!==a.H)for(b=1;b<a.H.length;b++)c=a.H[b],d=a.b,Zb(d.na[V(c)>>>d.aa],!0);a.H=["bw"];a.Lb=0}m.Fa=function(a,b,c){var d=!0;c||le(this,a,b,!1,!0);if(a!=this.u){var e=V(b);if(-1===e)this.g("invalid address: "+Z(b.C)),d=!1;else{var f=this.b;f.na[e>>>f.aa].Fa(e&f.G,a==this.H)}}d&&(a.push(b),c?b.wa=!0:(me(this,a,a.length-1,"set"),Nd(this)));return d};
|
||||
function le(a,b,c,d,e){var f=!1;c=V(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==V(g)&&(!d||g.wa)){f=!0;g.wa||e||me(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.b,Zb(d.na[c>>>d.aa],b==a.H));g.wa||Nd(a);break}}return f}function ne(a,b){for(var c=1;c<b.length;c++)me(a,b,c);return b.length-1}function me(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.C)+(d?" "+d:c.Tb?' "'+c.Tb+'"':""))}
|
||||
function ke(a,b){if(void 0!==b)Yb(a,b,1,a.u,!0),a.ca=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.wa){if(!le(a,a.u,d,!0))break;c=0}}}
|
||||
function Yb(a,b,c,d,e){var f=!1;if(!a.Lb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.wa)for(var l=V(g),k=0;k<c;k++)if(b+k==l){var n,f=!0;g.wa&&(le(a,d,g,!0),e=!0);if(n=g.Wb){for(var f=!1,p=0;p<n.length;p++)if(!oe(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var w=p+1;w<n.length&&n[w].indexOf("else");w++)p++;if(w==n.length){f=!0;break}}a.b.A.ka||(f=!0)}if(f){e||me(a,d,h,"hit");break}}}a.Lb--;return f}
|
||||
function pe(a,b,c,d){for(var e=U(b.C),f=a.W(b,1),h=a.Cb[f],g="",l=(8086!=a.Z?Qd:Rd)[h[0]],k=h.length-1,n=0,p,w=1;w<=k;w++){var A="";p=h[w];if(void 0!==p&&!(p&16384&&a.Z==Ld)){var u=p&240;if(u){var ca=p&15;ca?n=ca:p|=n;p&61440||(p|=1==w?8192:4096);if(u&32)a:{var A=a,u=p,ca=b,C=" ";switch(u&15){case 1:C=q(A.W(ca,1),2);break;case 2:C=q(A.W(ca,1)<<24>>24,4);break;case 3:C=q(A.mb(ca,2),4);break;default:A="imm("+r(u)+")";break a}8086==A.Z&&u&64?C="["+C+"]":u&16||(C=(A.Z==Ld?"$":"0x")+C);A=C}else u&16?(A=
|
||||
(p&3840)>>8,u=Sd[A],8086==a.Z&&p&64&&(6==A&&(u="HL"),u="["+u+"]"),A=u):u&128&&(A=(f>>3&7).toString());if(!A||!A.length){g="INVALID";break}0<g.length&&(g+=",");g+=A||"???"}}}f="";h=Z(e.C)+" ";if(-1!==e.C&&-1!==b.C){do if(f+=q(a.W(e,1),2),null==e.C)break;while(e.C!=b.C)}h+=ha(f,10);h=h+(p&32768?"*":" ")+ha(l,7);g&&(h+=" "+g);c&&(h=ha(h,40)+";"+c,h=a.b.A.Oa?h+("cycles="+uc(a.b).toString()+" cs="+q(a.b.i.bb)):h+(null!=d?"="+d.toString():""));return h}
|
||||
function Oe(a,b){var c;switch(b){case "I":c=a.b.pa&512;break;case "S":c=Qc(a.b);break;case "Z":c=Pc(a.b);break;case "A":c=Oc(a.b);break;case "P":c=Nc(a.b);break;case "C":c=Mc(a.b);break;default:c=0}return b+(c?"1":"0")+" "}function Pe(a,b){return Sd[b]+"="+ee(a,b)+" "}function Qe(a){return Pe(a,7)+Pe(a,8)+Pe(a,9)+Pe(a,10)+Pe(a,11)+Oe(a,"I")+Oe(a,"S")+Oe(a,"Z")+Oe(a,"A")+Oe(a,"P")+Oe(a,"C")}
|
||||
var Re={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function Se(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]],Rd={cpu:1,bus:64,mem:128,port:256,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};m=Hd.prototype;
|
||||
m.Da=function(a,b,c,d){this.B=b;this.b=c;this.w=a;(a=nc(a,"messages"))&&Ld(this,a);this.Db=Qd;Sd(this,function(a){a:{var b=d.B.T,c=a[0],g=a=0,l=b.length;if(c){a=X(Y(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.B.ea;l=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,k=0;l--;){var n=b[g];n.type==c?k++||d.g("..."):(c=n.type,k=Ub[c],n&&d.g(q(n.id)+" %"+q(g<<d.B.ea)+" %%"+q(n.C)+" "+r(n.mb)+" "+r(n.size)+
|
||||
" "+k),c!=Ob&&(c=-1),k=0);a+=d.B.ua;g++}}});E(this)};
|
||||
m.qa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.Ea=this.V[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",qc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.G<d.D.length-1&&(b=d.D[++d.G]):40==a.keyCode&&(0<d.G?b=d.D[--d.G]:(b="",d.G=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.V[b]=c,Da(c,function(){if(d.Ea){var a=d.Ea.value;d.Ea.value=
|
||||
"";qc(d,a,!0);return!0}return!1}),!0;case "step":return this.V[b]=c,Da(c,function(a){var b=!1;hb(d,!0)||(gb(d,!0),b=d.$a(a?1:0),gb(d,!1));return b}),!0}return!1};m.lb=function(){this.Ea&&this.Ea.focus()};function X(a){a=a&&a.C;null==a&&(a=-1);return a}m.W=function(a,b){var c=255,d=X(a);-1!==d&&(c=tb(this.B,d),b&&Td(a,b));return c};m.Ca=function(a,b){var c=65535,d=X(a);-1!==d&&(c=ub(this.B,d),b&&Td(a,b));return c};m.fa=function(a,b,c){var d=X(a);-1!==d&&(vb(this.B,d,b),c&&Td(a,c),rc(this.b,!0))};
|
||||
m.sb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.B,f=d&e.B,h=(d&e.D)>>>e.ea;f!=e.B?e.T[h].Bb(f,b&65535,d):(e.T[h++].nb(f,b&255,d),e.T[h&e.K].nb(0,b>>8&255,d+1));c&&Td(a,c);rc(this.b,!0)}};function U(a){return{C:a,xa:!1}}function Ud(a){return[a.C,a.xa]}function Vd(a){return{C:a[0],xa:a[1]}}
|
||||
function Y(a,b,c){var d;c=(c?a.Y:a.Gb).C;if(void 0!==b){d=b=Wd(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.J.length;c++){var f=a.J[c].Aa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=U(d));break}}if(d=e)return d;c=Xd(a,b,void 0)}null!=c&&(d=U(c));return d}function Yd(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Wb=Zd(a,b.Ub=c[2]))}function Td(a,b){null!=a.C&&(a.C+=b||1)}function Z(a){return q(a,4)}
|
||||
function $d(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.W(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Ld(a,b){a.F=a;a.ha=a.Xb=1073741824;a.Ga=null;var c=Zd(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Rd)0<=ma(c,d)&&(a.ha|=Rd[d],a.g(d+" messages enabled"))}function Sd(a,b){for(var c in Rd)if(64==Rd[c]){a.bb[c]=b;break}}
|
||||
function ae(a,b){var c;a=a.toUpperCase();null==b?c=ma(Pd,a):(c=ma(Pd,a.substr(b,3)),0>c&&(c=ma(Pd,a.substr(b,2))));return c}function be(a,b){var c=0,d=ce(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 6:c=2;break;case 8:case 9:case 10:case 11:case 12:case 13:c=4}return c?q(d,c):"??"}
|
||||
function ce(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.N;break;case 1:c=d.O;break;case 8:c=Gc(d);break;case 2:c=d.P;break;case 3:c=d.R;break;case 9:c=Ic(d);break;case 4:c=d.S;break;case 5:c=d.U;break;case 10:c=K(d);break;case 6:c=d.W(K(d));break;case 11:c=d.ca;break;case 12:c=d.L;break;case 13:c=d.j<<8|Fc(d)&255}}return c}
|
||||
function de(a,b){b=Wd(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=ae(b,c+1),0<=e&&(b=b.substr(0,c)+be(a,e)+b.substr(c+1+Pd[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=aa(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=Y(a,e))?(d=e+' "'+$d(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=Y(a,e))?(Td(d),d=e+' "'+
|
||||
$d(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(U(this.b.L).C));if(!this.Ga||a!=this.Ga)if(this.Ga=a,this.ha&-2147483648&&(this.da(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Xa=0;c.D-=c.b;c.b=0;rc(c)}};function eb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.ha&g)!=g||a.message(b.cb+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+q(d,2):"")+")"+(null!=h?": 0x"+q(h,2):"")+(null!=e?" at "+Z(e):""))}
|
||||
function Kd(a){var b;if(od(a)){if(!a.X||!a.X.length){a.X=Array(1E3);for(b=0;b<a.X.length;b++)a.X[b]=U();a.sa=0;a.g("instruction history buffer allocated")}if(!a.K||!a.K.length)for(a.K=Array(256),b=0;b<a.K.length;b++)a.K[b]=[b,0]}else a.X&&a.X.length&&a.g("instruction history buffer freed"),a.sa=0,a.X=[],a.K=[]}m.Ma=function(a){if(!ee(this))return!1;this.b.Ma(a);return!0};
|
||||
m.$a=function(a,b,c){if(!ee(this))return!1;this.M=0;a||od(this)&&pd(this,this.b.L,0);try{var d=this.b.$a(a);0<d&&(this.M+=d,wc(this.b,d,!0),tc(this.b,d),this.la++)}catch(e){"number"!=typeof e&&(this.M=0,jb(this.b,e.stack||e.message))}!1!==c&&rc(this.b);this.va(b||!1);return 0<this.M};m.da=function(a){this.b&&this.b.da(a)};m.va=function(a){void 0===a&&(a=!0);this.Y=U(this.b.L);a&&1!=this.ga?fe(this):ge(this)};
|
||||
function ee(a){var b;if(b=a.b&&ib(a.b))b=a.b,b.A.ia?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!hb(a.b)?(a=a.b,a.A.Qa?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.za=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.ya=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){Kd(this);this.la=this.Na=0;this.Ga=null;this.M=0;this.Y=U(this.b.L);this.A.ka=!1;he(this);a||this.va()};
|
||||
m.save=function(){var a=new I(this);J(a,0,Ud(this.Y));J(a,1,Ud(this.ma));J(a,2,[this.D,this.na,this.ha]);J(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.Y=Vd(a[b++]),this.ma=Vd(a[b++]),this.D=a[b][0],"string"==typeof this.D&&(this.D=[this.D]),this.na=a[b][1],this.ha|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ga||this.g("running");this.A.ka=!0;this.$b=a;this.ec=b};
|
||||
m.stop=function(a,b){if(this.A.ka){this.A.ka=!1;this.M=b-this.ec;if(!this.ga){var c="stopped";if(this.M){var d=a-this.$b,e=0<d?Math.round(1E3*this.M/d):0,c=c+" (";od(this)&&(c+=this.la+" opcodes, ",this.Na-=this.la,this.la=0);c+=this.M+" cycles, "+d+" ms, "+e+" hz)"}else fb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.va(!0);this.lb();he(this,this.b.L)}};function od(a){return 1<a.u.length||!!a.Fa}
|
||||
function pd(a,b,c){var d=a.b;if(0<c&&(a.Fa&&!--a.Fa||Yb(a,b,1,a.u)))return!0;0<=c&&a.K.length&&(a.la++,b=tb(a.B,b),null!=b&&(a.K[b][1]++,b=a.X[a.sa],b.C=d.L,b.xa=!1,++a.sa==a.X.length&&(a.sa=0)));return!1}function Gb(a,b,c){a.g("break on input from port "+r(b)+": "+q(c));a.da(!0)}function Jb(a,b,c){a.g("break on output to port "+r(b)+": "+q(c));a.da(!0)}
|
||||
function Jd(a){var b,c;a.u=["bp"];if(void 0!==a.ba)for(b=1;b<a.ba.length;b++){c=a.ba[b];var d=a.B;Zb(d.T[X(c)>>>d.ea],!1)}a.ba=["br"];if(void 0!==a.I)for(b=1;b<a.I.length;b++)c=a.I[b],d=a.B,Zb(d.T[X(c)>>>d.ea],!0);a.I=["bw"];a.Mb=0}m.Ha=function(a,b,c){var d=!0;c||ie(this,a,b,!1,!0);if(a!=this.u){var e=X(b);if(-1===e)this.g("invalid address: "+Z(b.C)),d=!1;else{var f=this.B;f.T[e>>>f.ea].Ha(e&f.B,a==this.I)}}d&&(a.push(b),c?b.xa=!0:(je(this,a,a.length-1,"set"),Kd(this)));return d};
|
||||
function ie(a,b,c,d,e){var f=!1;c=X(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==X(g)&&(!d||g.xa)){f=!0;g.xa||e||je(a,b,h,"cleared");b.splice(h,1);b!=a.u&&(d=a.B,Zb(d.T[c>>>d.ea],b==a.I));g.xa||Kd(a);break}}return f}function ke(a,b){for(var c=1;c<b.length;c++)je(a,b,c);return b.length-1}function je(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.C)+(d?" "+d:c.Ub?' "'+c.Ub+'"':""))}
|
||||
function he(a,b){if(void 0!==b)Yb(a,b,1,a.u,!0),a.ga=0;else for(var c=1;c<a.u.length;c++){var d=a.u[c];if(d.xa){if(!ie(a,a.u,d,!0))break;c=0}}}
|
||||
function Yb(a,b,c,d,e){var f=!1;if(!a.Mb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.xa)for(var l=X(g),k=0;k<c;k++)if(b+k==l){var n,f=!0;g.xa&&(ie(a,d,g,!0),e=!0);if(n=g.Wb){for(var f=!1,p=0;p<n.length;p++)if(!le(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var w=p+1;w<n.length&&n[w].indexOf("else");w++)p++;if(w==n.length){f=!0;break}}a.b.A.ka||(f=!0)}if(f){e||je(a,d,h,"hit");break}}}a.Mb--;return f}
|
||||
function me(a,b,c,d){for(var e=U(b.C),f=a.W(b,1),h=a.Db[f],g="",l=(8086!=a.aa?Nd:Od)[h[0]],k=h.length-1,n=0,p,w=1;w<=k;w++){var A="";p=h[w];if(void 0!==p&&!(p&16384&&a.aa==Id)){var u=p&240;if(u){var ba=p&15;ba?n=ba:p|=n;p&61440||(p|=1==w?8192:4096);if(u&32)a:{var A=a,u=p,ba=b,C=" ";switch(u&15){case 1:C=q(A.W(ba,1),2);break;case 2:C=q(A.W(ba,1)<<24>>24,4);break;case 3:C=q(A.Ca(ba,2),4);break;default:A="imm("+r(u)+")";break a}8086==A.aa&&u&64?C="["+C+"]":u&16||(C=(A.aa==Id?"$":"0x")+C);A=C}else u&
|
||||
16?(A=(p&3840)>>8,u=Pd[A],8086==a.aa&&p&64&&(6==A&&(u="HL"),u="["+u+"]"),A=u):u&128&&(A=(f>>3&7).toString());if(!A||!A.length){g="INVALID";break}0<g.length&&(g+=",");g+=A||"???"}}}f="";h=Z(e.C)+" ";if(-1!==e.C&&-1!==b.C){do if(f+=q(a.W(e,1),2),null==e.C)break;while(e.C!=b.C)}h+=ha(f,10);h=h+(p&32768?"*":" ")+ha(l,7);g&&(h+=" "+g);c&&(h=ha(h,40)+";"+c,h=a.b.A.Pa?h+("cycles="+uc(a.b).toString()+" cs="+q(a.b.i.eb)):h+(null!=d?"="+d.toString():""));return h}
|
||||
function Le(a,b){var c;switch(b){case "I":c=a.b.pa&512;break;case "S":c=Pc(a.b);break;case "Z":c=Oc(a.b);break;case "A":c=Nc(a.b);break;case "P":c=Mc(a.b);break;case "C":c=Lc(a.b);break;default:c=0}return b+(c?"1":"0")+" "}function Me(a,b){return Pd[b]+"="+be(a,b)+" "}function Ne(a){return Me(a,7)+Me(a,8)+Me(a,9)+Me(a,10)+Me(a,11)+Le(a,"I")+Le(a,"S")+Le(a,"Z")+Le(a,"A")+Le(a,"P")+Le(a,"C")}
|
||||
var Oe={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
|
||||
function Pe(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
|
||||
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 $d(a,b,c){var d;if(b){b=Zd(a,b);for(var e=0,f=!1,h=b,g=[],l=[],k=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<k.length;){var n=k[e++],p=n.length,n=ia(n);if(!n){f=!0;break}n=Te(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==k.length)break;var n=k[e++],w=n.length;l.length&&Re[n]<Re[l[l.length-1]]&&Se(g,l,1);l.push(n);b=b.substr(p+w)}Se(g,l)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ue(a,null,
|
||||
d))}return d}function Zd(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=$d(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=Y(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.mb(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.fa-a.Ma}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function Te(a,b,c,d){var e;void 0!==b?(e=de(b),0<=e?e=fe(a,e):(e=a.ra[b],void 0===e&&(e=aa(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
||||
function Ue(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var l=d&255,k=8,n="";void 0===k?k=32:32<k&&(k=32);if(null==l||isNaN(l))for(;0<k--;)n="?"+n;else for(;0<k--;)n=(l&1?"1":"0")+n,l>>=1;h=n+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ve(a,b){if(b)return Ue(a,b,a.ra[b]);var c=0;for(b in a.ra)Ue(a,b,a.ra[b]),c++;return 0<c}Kd.prototype.Eb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
||||
function We(a,b,c){var d=[],e=V(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.C>>>0,g=f.gc;if(e>=h&&e<h+g){e=ja(f.Bb,[e-h],a.Eb);0<=e?Xe(a,b,e,d):c&&(e=~e,Xe(a,b,e-1,d),Xe(a,b,e,d));break}}return d}function Xe(a,b,c,d){var e={},f=a.J[b].Bb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].za[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
|
||||
function Ye(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.Z?Qd:Rd;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Cb[h][0]]+" ").substr(0,5)+" ("+("0x"+q(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
|
||||
function Ze(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ve(a)||a.g("no variables"),!0;if(!c[2])return Ve(a,c[1]);if(!c[3])return delete a.ra[c[1]],!0;var d=$d(a,c[3]);return void 0!==d?(a.ra[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
||||
function $e(a,b,c){var d=null;if(b=Y(a,b,!0)){var e=We(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.C-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.C)&&(h=" - "+r(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
||||
function af(a,b){switch(b[1]){case "8080":a.Z=Ld;break;case "8086":a.Z=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.i.Ta=c;break;case "start":a.b.i.cb=c;break;case "stop":a.b.i.Va=c;break;default:a.g("unknown cs option");return}void 0!==c&&pc(a.b);a.g("checksums "+(a.b.A.Oa?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(vc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Ha.toFixed(2)+"Mhz")+" ("+
|
||||
a.b.i.Ja+"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.Z+"-style mnemonics enabled")}
|
||||
function ie(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=$d(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.N=g&255;break;case "BC":d.N=g>>8&255;case "C":d.O=g&255;break;case "D":d.P=
|
||||
g&255;break;case "DE":d.P=g>>8&255;case "E":d.R=g&255;break;case "H":d.S=g&255;break;case "HL":d.S=g>>8&255;case "L":d.T=g&255;break;case "SP":d.da=g&65535;break;case "PC":H(d,g);a.X=U(d.L);break;case "PS":Dc(d,g);break;case "C":d.I=g?d.I|256:d.I&255;break;case "P":g?Nc(d)||(d.Y^=1):Nc(d)&&(d.Y^=1);break;case "A":d.ia=g?~d.Y&16|d.ia&-17:d.Y&16|d.ia&-17;break;case "Z":d.I=g?d.I&-256:d.I|255;break;case "S":g?Qc(d)||(d.Y^=192):Qc(d)&&(d.Y^=192);break;case "I":d.pa=g?d.pa|512:d.pa&-513;break;default:a.g("unknown register: "+
|
||||
e);return}if(!h){a.g("invalid value: "+f);return}rc(d);a.g("updated registers:")}a.g(Qe(a));c&&(a.X=U(d.L),je(a,Z(a.X.C)))}}function bf(a,b){b=ia(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(ge(a,c[2])):$d(a,b,!0)}function cf(a,b,c){var d="t"!=b;c=Te(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ca(c,function(){return gb(a,!0)&&a.Ya(e,d,!1)},function(){rc(a.b);gb(a,!1)})}
|
||||
function je(a,b,c,d){if(b=Y(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=Y(a,c,!0);if(!d||d.C<b.C)return;e=d.C-b.C;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=hb(a,!1)||a.ca?a.M:null;var h=null!=f?"cycles":null,g=We(a,b),l=b.C;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var k=g[0]+":";g[2]&&(k+=" "+g[2]);a.g(k)}g[3]&&(h=g[3],f=null);f=pe(a,b,h,f);a.g(f);a.X=b;e-=b.C-l;c++}}}
|
||||
function be(a,b,c,d){if(c)if(b){0>a.G&&a.D.length&&(a.G=0);if(0>a.G||b!=a.D[a.G])a.D.splice(0,0,b),a.G=0;a.G--}else a.ma?b="end":b=a.D[a.G+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==d&&!e||!h)a.push(ia(b.substring(c,f))),c=f+1}}return a}
|
||||
function oe(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ma&&(a.g("ended assemble at "+Z(a.ja.C)),a.X=a.ja,a.ma=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.Ea=null;if(ib(a)&&0<b.length){a.ma&&(b="a "+Z(a.ja.C)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),l=1;l<h.length;l++){var k=h.charAt(l);if("?"==g||"r"==g||"a">k||"z"<k){f[0]=h.substr(l);f.unshift(h.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var n=Y(a,f[1],!0);if(n)if(a.ja=
|
||||
n,void 0===f[2])a.g("begin assemble at "+Z(n.C)),a.ma=!0,rc(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var w=0;w<p.length;w++)a.Ab(n,p[w],1);a.g(pe(a,a.ja))}}break;case "b":a:{var A=f[0],u=f[1],ca=b;if("?"==u)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
|
||||
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var C=A.charAt(1);if("l"==C){var va=0,va=va+ne(a,a.u),va=va+ne(a,a.ba);(va+=ne(a,a.H))||a.g("no breakpoints")}else if("n"==C)a.Da=Te(a,u),a.g("break after "+a.Da+" instruction(s)");else if(void 0===u)a.g("missing breakpoint address");else{var x=U();if("*"!=u&&(x=Y(a,u,!0),!x))break a;u=r(x.C);"c"==C?null==x.C?(Md(a),a.g("all breakpoints cleared")):le(a,a.u,x)||le(a,
|
||||
a.ba,x)||le(a,a.H,x)||a.g("breakpoint missing: "+Z(x.C)):"i"==C?a.g("breakpoint "+(wb(a.B,x.C)?"enabled":"cleared")+": port "+u+" (input)"):"o"==C?a.g("breakpoint "+(Hb(a.B,x.C)?"enabled":"cleared")+": port "+u+" (output)"):null!=x.C&&(ae(a,x,ca),"p"==C?a.Fa(a.u,x):"r"==C?a.Fa(a.ba,x):"w"==C?a.Fa(a.H,x):a.g("unknown breakpoint command: "+C))}}}break;case "c":a.sa&&(a.sa.value="");break;case "d":a:{var W,S=f[0],wa=f[1],La=f[2],zf=f[3];if("?"==wa){var xa="";for(W in Ud)a.$a[W]&&(xa&&(xa+=","),xa+=W);
|
||||
xa+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");xa.length&&a.g("dump extension commands:\n\t"+xa)}else if("state"==wa){var qe=df(a.w,!0);"console"==La?console.log(qe):(a.sa&&(a.sa.value=""),a.g(qe))}else if("symbols"==wa)for(var Uc=0;Uc<a.J.length;Uc++){var Vc=a.J[Uc],bb;for(bb in Vc.za)if("."!=
|
||||
bb.charAt(0)){var re=Vc.za[bb].o;if(void 0!==re){var se=Vc.za[bb].l;se&&(bb=se);a.g(Z(re)+" "+bb)}}}else{if("d"==S){for(W in Ud)if(f[1]==W){var te=a.$a[W];te?(f.shift(),f.shift(),te(f)):a.g("no dump registered for "+wa);break a}wa||(S=a.fc||"db")}else a.fc=S;if("dh"==S){var ue=wa,ve=La,we="",xe=0,T=a.ua,ya=a.V;if(ya.length){var X=+ue||a.Mb,cb=+ve||10;isNaN(X)?X=cb:we="more ";X>ya.length&&(a.g("note: only "+ya.length+" available"),X=ya.length);T-=X;0>T&&(null==ya[ya.length-1].C?(X=T+X,T=0):T+=ya.length);
|
||||
var Wc=[];"call"==ve&&(cb=1E5,Wc=["CALL"]);for(void 0!==ue&&a.g(X+" instructions earlier:");0<cb&&T!=a.ua;){var ye=ya[T++];if(null==ye.C)break;var yb=U(ye.C),Af=X--,ze=pe(a,yb,"history",Af);(!Wc.length||0<=ze.indexOf(Wc[0]))&&a.g(ze);yb.sb&&(T+=yb.sb,cb-=yb.sb,X-=yb.sb);T>=ya.length&&(T=0);a.Mb=X;xe++;cb--}}xe||(a.g("no "+we+"history available"),a.Mb=void 0)}else{var dc=Y(a,wa);if(dc){var ec=0;La&&("l"==La.charAt(0)&&(La=La.substr(1)||zf),ec=Te(a,La)>>>0,65536<ec&&(ec=65536));for(var Ma="",fc="dd"==
|
||||
S?4:"dw"==S?2:1,gc=fc*ec||128,Bf=gc+15>>4||1;Bf--&&0<gc;){var hc=0,Xc=0,zb,Ab="",Yc="",wa=Z(dc.C);for(zb=16;0<zb&&0<gc;zb--){var ic=a.W(dc,1),hc=hc|ic<<(Xc++<<3);Xc==fc&&(Ab+=q(hc,2*fc),Ab+=1==fc?9==zb?"-":" ":" ",hc=Xc=0);Yc+=32<=ic&&128>ic?String.fromCharCode(ic):".";gc--}Ma&&(Ma+="\n");Ma+=wa+" "+Ab+(0==zb?" "+Yc:"")}Ma&&a.g(Ma);a.Fb=dc}}}}break;case "e":if("else"==f[0])break;var jc=1,Ae=255,Be=a.W,Ce=a.Ab;"ew"==f[0]&&(jc=2,Ae=65535,Be=a.mb,Ce=a.Vb);var De=jc<<1,Ee=f[1];if(null==Ee)a.g("edit memory commands:"),
|
||||
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var kc=Y(a,Ee);if(kc)for(var lc=2;lc<f.length;lc++){var Bb=$d(a,f[lc]);if(void 0===Bb){a.g("unrecognized value: "+f[lc]);break}Bb&~Ae&&a.g("warning: "+q(Bb)+" exceeds "+jc+"-byte value");var Cf=Be.call(a,kc);a.g("changing "+Z(kc.C)+" from 0x"+q(Cf,De)+" to 0x"+q(Bb,De));Ce.call(a,kc,Bb,jc)}}break;case "f":Ye(a,f[1]);break;case "g":a:{var Fe=f[1],Df=b;if(void 0!==Fe){var Zc=Y(a,Fe,!0);if(!Zc)break a;
|
||||
ae(a,Zc,Df);a.Fa(a.u,Zc,!0)}a.La(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var $c;if(a.A.ka)$c="halting",a.ea();else{if(hb(a,!0))break a;$c="already halted"}c||a.g($c)}break;case "i":if("if"==f[0]){var ad;var Cb=b.substr(2),Cb=ia(Cb);$d(a,Cb)?(c||a.g("true: "+Cb),ad=!0):(c||a.g("false: "+Cb),ad=!1);ad||(d=!1);break}var bd=f[1];if(bd&&"?"!=bd){var cd=Te(a,bd);if(void 0!==cd){var Ef=xb(a.B,cd);a.g(r(cd)+": "+("0x"+q(Ef,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 Ff=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var dd=0,Ge=U(),Db=U(a.b.da);for(a.g("stack trace for "+Z(Db.C));10>dd;){for(var Na=null,Gf=256;65536>Db.C>>>0;){Ge.C=a.mb(Db,2);if(null==Db.C||!Gf--)break;for(var Hf=a,mc=Ge,He=null,Eb=mc.C,Ie=Eb,ed=1;6>=ed&&Eb;ed++){if(2<ed){mc.C=Eb;var nc=pe(Hf,mc);if(0<=nc.indexOf("CALL")){var Je=nc.indexOf(" ");
|
||||
if(Eb+(nc.indexOf(" ",Je+1)-Je-1)/2==Ie){He=nc;break}}}Eb--}mc.C=Ie;if(Na=He)break}if(!Na||null==Na)break;var Ke=null;if("ks"==Ff){var Le=Na.match(/[0-9A-F]+$/);Le&&(Ke=$e(a,Le[0]))}Na=ha(Na,50)+" ;"+(Ke||"stack="+Z(Db.C));a.g(Na);dd++}dd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){$e(a,f[1],!0);break}break;case "m":a:{var za,Aa=null,G=f[1];"?"==G&&(G=void 0);if(void 0!==G){var Oa=0;if("all"==G)Oa=1610481663,G=null;else if("on"==G)Aa=!0,G=null;else if("off"==G)Aa=!1,G=null;else{"keys"==
|
||||
G&&(G="key");"kbd"==G&&(G="keyboard");for(za in Ud)if(G==za){Oa=Ud[za];Aa=!!(a.ga&Oa);break}if(!Oa){a.g("unknown message category: "+G);break a}}Oa&&("on"==f[2]?(a.ga|=Oa,Aa=!0):"off"==f[2]&&(a.ga&=~Oa,Aa=!1))}var If=0,Ha="";for(za in Ud)if(!G||G==za){var Jf=!!(a.ga&Ud[za]);if(null===Aa||Aa==Jf)Ha&&(Ha+=","),++If%10||(Ha+="\n\t"),"key"==za&&(za="keys"),Ha+=za}void 0===G&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Aa?Aa?"messages on: ":"messages off: ":"message categories:\n\t")+
|
||||
(Ha||"none"));Nd(a)}break;case "o":var fd=f[1],Kf=f[2];if(fd&&"?"!=fd){var gd=Te(a,fd,"port #"),hd=Te(a,Kf);void 0!==gd&&void 0!==hd&&(Ib(a.B,gd,hd),a.g(r(gd)+": "+("0x"+q(hd,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 Me="pr"==f[0]?1:0,Lf=1+Me;if(a.ca)a.g("step in progress");else{var id=U(a.b.L);switch(a.W(id)){case 205:a.ca=Lf,Wd(id,3)}a.ca?(a.Fa(a.u,
|
||||
id,!0),a.La()||(a.w&&a.w.jb(),a.ca=0)):cf(a,Me?"tr":"t")}break;case "r":if("reset"==b){a.w&&a.w.reset();break}ie(a,f);break;case "s":af(a,f);break;case "t":cf(a,f[0],f[1]);break;case "u":je(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Ze(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.22.0 ("+a.b.Ra+",RELEASE"+(kb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(pa());break;case "?":if(f[1]){bf(a,b.substr(1));break}var Fb="commands:",jd;for(jd in Pd)Fb+="\n"+ha(jd,7)+Pd[jd];rd(a)||(Fb+="\nnote: frequency/history disabled if no exec breakpoints");
|
||||
a.g(Fb);break;default:a.g("unknown command: "+b),d=!1}}}catch(Ne){a.g("debugger error: "+(Ne.stack||Ne.message)),d=!1}return d}function qc(a,b,c){b=be(a,b,c);for(var d in b)if(!oe(a,b[d]))return!1;return!0}Ja(function(){for(var a=D(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Kd(d);ab(d,c)}});function Gc(a,b,c){this.id=a.id;this.key=ef(a,b,c);this.F=a.F;ff(this,a.Rb)}
|
||||
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}
|
||||
Gc.prototype={constructor:Gc,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){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&&I(a,"parms",b);a.b=!1}function gf(a){var b=!0;if(sa()){var c=JSON.stringify(a[a.id]);ua(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function 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 jf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:sa()&&(b=ta(a.key))?(a[a.id]=b,a.b=!0):!1}function kf(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function lf(a,b,c){v.call(this,"Computer",a,lf,67108864);this.A.ha=!1;mf(this,b);this.ba=cc(this,"autoPower",a);this.D=0;this.ra=a.busWidth||a.buswidth;this.w=nf;this.V=null;this.J=this.ma=!1;this.ua=cc(this,"url")||"";(Math.random()+.1).toString(36);this.u=of(this);if(this.b=$a("CPU",this.id)){this.F=$a("Debugger",this.id);this.Z=[];for(b=null;b=nb(this,"Video",b);)this.Z.push(b);this.B=new pb({id:this.Hb+".bus",busWidth:this.ra},this.b,this.F);var d,e=Za(this.id);if((this.G=$a("Panel",this.id))&&
|
||||
this.G.sa)for(b=0;b<e.length;b++)d=e[b],d.oa=this.G.oa,d.g=this.G.g,d.sa=this.G.sa;for(b=0;b<e.length;b++)d=e[b],d.Ba&&d.Ba(this,this.B,this.b,this.F);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.M=d:this.w=parseInt(d,10));var f;if(a=cc(this,"state")||(f=!0,a.state))b=this.ca=a,f||(this.J=!0,this.w=nf),this.w&&(this.X=new Gc(this,pf),jf(this.X)?b=null:delete this.X);!b&&this.w&&(b=qf(this))&&(this.J=!0);if(b){var h=this;na(b,null,!0,function(a,b,c){c?(h.M=null,h.J=!1,h.oa("Unable to load machine state from server (error "+
|
||||
c+(b?": "+ia(b):"")+")")):(h.V=b,h.ma=!0);E(h)})}else E(this);this.U.power||(this.ba=!0);!c&&this.ba&&rf(this,this.hb)}else t("Unable to find CPU component")}z(lf);var pf="1.22.0",nf=0;function mf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.K=b}
|
||||
function cc(a,b,c){var d=b.toLowerCase(),d=Sa[b]||Sa[d];void 0===d&&a.K&&(d=a.K[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function rf(a,b,c){for(var d=Za(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!ib(f)){ib(f,function(){rf(a,b,c)});return}}b.call(a,c)}
|
||||
function sf(a,b){var c=new Gc(a,pf,"validate");if(jf(c)&&hf(c)){var d=kf(c,"timestamp"),e=b?kf(b,"timestamp"):"unknown";d!=e&&(a.oa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=lf.prototype;
|
||||
m.hb=function(a){void 0===a&&(a=this.w||(this.V?1:nf));if(!this.D){this.D++;var b=!1,c=!1;this.ja=!1;var d=this.X||new Gc(this,pf);if(-1==a)b=!0;else if(a>nf){if(jf(d,this.V)){this.H=new Gc(this,pf,"failsafe");jf(this.H)&&(tf(this,d),a=2,ff(this.H));I(this.H,"timestamp",la());gf(this.H);var e=this.w&&!this.J;if(1==a||qa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=hf(d)){var f=kf(d,"code"),h=kf(d,"data");f&&("ok"==f?jf(d,h):("error"==f&&"no machine state"!=
|
||||
h?(this.oa("Error: "+h),"unable to verify user"==h&&(ua("user",""),this.u=null)):this.g(f+": "+h),ff(d),jf(d)?(c=hf(d),e=!0):c=!1))}e&&sf(this,c?d:null)}else 2==a&&d.clear()}else sf(this);delete this.V;delete this.X}e=Za(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=uf(this,h,d,b,c));b=[d,a,c];-1!=a?rf(this,this.Gb,b):this.Gb(b)}};
|
||||
function uf(a,b,c,d,e){if(!b.A.ha){b.A.ha=!0;if(b.ya){var f=null;e&&((f=kf(c,b.id))||(f=kf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.ya(f,d)&&f&&(t("Unable to restore state for "+b.type),a.ca&&!a.ma?(c.clear(),a.w=nf,window&&window.location.reload()):a.ja=!0,b.ya(null),e=!1)}if(!d&&b.Db)for(a=b.Db.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
m.Gb=function(a){var b=a[0],c=0>a[1];a=a[2];this.A.ha=!0;var d=this.U.power;d&&(d.textContent="Shutdown");this.fa||(this.g("PC8080 v"+pf+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.fa=!0);this.b&&(uf(this,this.b,b,c,a),sc(this.b));this.ja&&(tf(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.D=0};
|
||||
function tf(a,b){if(qa("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.ua,d=a.u||"",e=b.toString(),f={app:"PC8080"};f.ver=pf;f.url=c;f.user=d;f.type="bug";f.data=e;na("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function df(a,b,c){var d,e="none";if(a.D)return null;a.D--;var f=new Gc(a,pf),h=new Gc(a,pf,"validate"),g=la();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.22.0");I(f,"url",window?window.location.href:null);I(f,"browser",pa());a.b&&a.b.xa&&(c&&a.b.ea(),d=a.b.xa(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.A.ha=!1,!1===d&&(e=null)));for(var g=Za(a.id),l=0;l<g.length;l++){var k=g[l];k.A.ha&&(k.xa&&(d=k.xa(b,c),"object"===typeof d&&I(f,k.id,d)),c&&(k.A.ha=!1,!1===d&&(e=null)))}e&&(c?(g=
|
||||
d=!1,b?(a.u&&vf(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.A.ha=!1,b=a.U.power)&&(b.textContent="Power");a.D=0;return e}m.reset=function(){this.B&&this.B.reset&&(this.F&&fb(this,0)&&this.F.message("Resetting "+this.B.type,void 0),this.B.reset());for(var a=Za(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.B&&c.reset&&(this.F&&fb(this,0)&&this.F.message("Resetting "+c.type,void 0),c.reset())}};
|
||||
function Xd(a,b,c){var d;if(b){b=Wd(a,b);for(var e=0,f=!1,h=b,g=[],l=[],k=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<k.length;){var n=k[e++],p=n.length,n=ia(n);if(!n){f=!0;break}n=Qe(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==k.length)break;var n=k[e++],w=n.length;l.length&&Oe[n]<Oe[l[l.length-1]]&&Pe(g,l,1);l.push(n);b=b.substr(p+w)}Pe(g,l)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Re(a,null,
|
||||
d))}return d}function Wd(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Xd(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=Y(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.Ca(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.la-a.Na}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
|
||||
function Qe(a,b,c,d){var e;void 0!==b?(e=ae(b),0<=e?e=ce(a,e):(e=a.ra[b],void 0===e&&(e=aa(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
|
||||
function Re(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var l=d&255,k=8,n="";void 0===k?k=32:32<k&&(k=32);if(null==l||isNaN(l))for(;0<k--;)n="?"+n;else for(;0<k--;)n=(l&1?"1":"0")+n,l>>=1;h=n+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Se(a,b){if(b)return Re(a,b,a.ra[b]);var c=0;for(b in a.ra)Re(a,b,a.ra[b]),c++;return 0<c}Hd.prototype.Fb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
|
||||
function Te(a,b,c){var d=[],e=X(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.C>>>0,g=f.gc;if(e>=h&&e<h+g){e=ja(f.Cb,[e-h],a.Fb);0<=e?Ue(a,b,e,d):c&&(e=~e,Ue(a,b,e-1,d),Ue(a,b,e,d));break}}return d}function Ue(a,b,c,d){var e={},f=a.J[b].Cb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].Aa[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
|
||||
function Ve(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.K)if("clear"==b){for(c=0;c<a.K.length;c++)a.K[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.K.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.aa?Nd:Od;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Db[h][0]]+" ").substr(0,5)+" ("+("0x"+q(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
|
||||
function We(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Se(a)||a.g("no variables"),!0;if(!c[2])return Se(a,c[1]);if(!c[3])return delete a.ra[c[1]],!0;var d=Xd(a,c[3]);return void 0!==d?(a.ra[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
|
||||
function Xe(a,b,c){var d=null;if(b=Y(a,b,!0)){var e=Te(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.C-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.C)&&(h=" - "+r(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
|
||||
function Ye(a,b){switch(b[1]){case "8080":a.aa=Id;break;case "8086":a.aa=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.i.Ua=c;break;case "start":a.b.i.fb=c;break;case "stop":a.b.i.Wa=c;break;default:a.g("unknown cs option");return}void 0!==c&&pc(a.b);a.g("checksums "+(a.b.A.Pa?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(vc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Ja.toFixed(2)+"Mhz")+" ("+
|
||||
a.b.i.La+"x)");return;case "?":a.g("debugger options:");a.g("\t8080\t\tselect 8080-style mnemonics");a.g("\t8086\t\tselect 8086-style mnemonics");a.g("\tcs int #\tset checksum cycle interval to #");a.g("\tcs start #\tset checksum cycle start count to #");a.g("\tcs stop #\tset checksum cycle stop count to #");a.g("\tsp #\t\tset speed multiplier to #");break;default:if(b[1]){a.g("unknown option: "+b[1]);return}}a.g(a.aa+"-style mnemonics enabled")}
|
||||
function fe(a,b){var c;if(b&&"?"==b[1])a.g("register commands:"),a.g("\tr\tdump registers"),a.g("\trx [#]\tset flag or register x to [#]");else{var d=a.b;null==c&&(c=!0);if(null!=b&&1<b.length){var e=b[1],f=null,h=e.indexOf("=");if(0<h)f=e.substr(h+1),e=e.substr(0,h);else if(2<b.length)f=b[2];else{a.g("missing value for "+b[1]);return}var h=!1,g=Xd(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.N=g&255;break;case "BC":d.N=g>>8&255;case "C":d.O=g&255;break;case "D":d.P=
|
||||
g&255;break;case "DE":d.P=g>>8&255;case "E":d.R=g&255;break;case "H":d.S=g&255;break;case "HL":d.S=g>>8&255;case "L":d.U=g&255;break;case "SP":d.ca=g&65535;break;case "PC":H(d,g);a.Y=U(d.L);break;case "PS":Dc(d,g);break;case "C":d.H=g?d.H|256:d.H&255;break;case "P":g?Mc(d)||(d.Z^=1):Mc(d)&&(d.Z^=1);break;case "A":d.ja=g?~d.Z&16|d.ja&-17:d.Z&16|d.ja&-17;break;case "Z":d.H=g?d.H&-256:d.H|255;break;case "S":g?Pc(d)||(d.Z^=192):Pc(d)&&(d.Z^=192);break;case "I":d.pa=g?d.pa|512:d.pa&-513;break;default:a.g("unknown register: "+
|
||||
e);return}if(!h){a.g("invalid value: "+f);return}rc(d);a.g("updated registers:")}a.g(Ne(a));c&&(a.Y=U(d.L),ge(a,Z(a.Y.C)))}}function Ze(a,b){b=ia(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(de(a,c[2])):Xd(a,b,!0)}function $e(a,b,c){var d="t"!=b;c=Qe(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ca(c,function(){return gb(a,!0)&&a.$a(e,d,!1)},function(){rc(a.b);gb(a,!1)})}
|
||||
function ge(a,b,c,d){if(b=Y(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=Y(a,c,!0);if(!d||d.C<b.C)return;e=d.C-b.C;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=hb(a,!1)||a.ga?a.M:null;var h=null!=f?"cycles":null,g=Te(a,b),l=b.C;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var k=g[0]+":";g[2]&&(k+=" "+g[2]);a.g(k)}g[3]&&(h=g[3],f=null);f=me(a,b,h,f);a.g(f);a.Y=b;e-=b.C-l;c++}}}
|
||||
function Zd(a,b,c,d){if(c)if(b){0>a.G&&a.D.length&&(a.G=0);if(0>a.G||b!=a.D[a.G])a.D.splice(0,0,b),a.G=0;a.G--}else a.na?b="end":b=a.D[a.G+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==d&&!e||!h)a.push(ia(b.substring(c,f))),c=f+1}}return a}
|
||||
function le(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.na&&(a.g("ended assemble at "+Z(a.ma.C)),a.Y=a.ma,a.na=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.Ga=null;if(ib(a)&&0<b.length){a.na&&(b="a "+Z(a.ma.C)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),l=1;l<h.length;l++){var k=h.charAt(l);if("?"==g||"r"==g||"a">k||"z"<k){f[0]=h.substr(l);f.unshift(h.substr(0,l));break}}switch(f[0].charAt(0)){case "a":var n=Y(a,f[1],!0);if(n)if(a.ma=
|
||||
n,void 0===f[2])a.g("begin assemble at "+Z(n.C)),a.na=!0,rc(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var w=0;w<p.length;w++)a.fa(n,p[w],1);a.g(me(a,a.ma))}}break;case "b":a:{var A=f[0],u=f[1],ba=b;if("?"==u)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
|
||||
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var C=A.charAt(1);if("l"==C){var ua=0,ua=ua+ke(a,a.u),ua=ua+ke(a,a.ba);(ua+=ke(a,a.I))||a.g("no breakpoints")}else if("n"==C)a.Fa=Qe(a,u),a.g("break after "+a.Fa+" instruction(s)");else if(void 0===u)a.g("missing breakpoint address");else{var x=U();if("*"!=u&&(x=Y(a,u,!0),!x))break a;u=r(x.C);"c"==C?null==x.C?(Jd(a),a.g("all breakpoints cleared")):ie(a,a.u,x)||ie(a,
|
||||
a.ba,x)||ie(a,a.I,x)||a.g("breakpoint missing: "+Z(x.C)):"i"==C?a.g("breakpoint "+(Eb(a.B,x.C)?"enabled":"cleared")+": port "+u+" (input)"):"o"==C?a.g("breakpoint "+(Hb(a.B,x.C)?"enabled":"cleared")+": port "+u+" (output)"):null!=x.C&&(Yd(a,x,ba),"p"==C?a.Ha(a.u,x):"r"==C?a.Ha(a.ba,x):"w"==C?a.Ha(a.I,x):a.g("unknown breakpoint command: "+C))}}}break;case "c":a.ta&&(a.ta.value="");break;case "d":a:{var V,R=f[0],va=f[1],Ka=f[2],wf=f[3];if("?"==va){var wa="";for(V in Rd)a.bb[V]&&(wa&&(wa+=","),wa+=V);
|
||||
wa+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");wa.length&&a.g("dump extension commands:\n\t"+wa)}else if("state"==va){var ne=af(a.w,!0);"console"==Ka?console.log(ne):(a.ta&&(a.ta.value=""),a.g(ne))}else if("symbols"==va)for(var Sc=0;Sc<a.J.length;Sc++){var Tc=a.J[Sc],$a;for($a in Tc.Aa)if("."!=
|
||||
$a.charAt(0)){var oe=Tc.Aa[$a].o;if(void 0!==oe){var pe=Tc.Aa[$a].l;pe&&($a=pe);a.g(Z(oe)+" "+$a)}}}else{if("d"==R){for(V in Rd)if(f[1]==V){var qe=a.bb[V];qe?(f.shift(),f.shift(),qe(f)):a.g("no dump registered for "+va);break a}va||(R=a.fc||"db")}else a.fc=R;if("dh"==R){var re=va,se=Ka,te="",ue=0,S=a.sa,xa=a.X;if(xa.length){var W=+re||a.Nb,ab=+se||10;isNaN(W)?W=ab:te="more ";W>xa.length&&(a.g("note: only "+xa.length+" available"),W=xa.length);S-=W;0>S&&(null==xa[xa.length-1].C?(W=S+W,S=0):S+=xa.length);
|
||||
var Uc=[];"call"==se&&(ab=1E5,Uc=["CALL"]);for(void 0!==re&&a.g(W+" instructions earlier:");0<ab&&S!=a.sa;){var ve=xa[S++];if(null==ve.C)break;var wb=U(ve.C),xf=W--,we=me(a,wb,"history",xf);(!Uc.length||0<=we.indexOf(Uc[0]))&&a.g(we);wb.ub&&(S+=wb.ub,ab-=wb.ub,W-=wb.ub);S>=xa.length&&(S=0);a.Nb=W;ue++;ab--}}ue||(a.g("no "+te+"history available"),a.Nb=void 0)}else{var cc=Y(a,va);if(cc){var dc=0;Ka&&("l"==Ka.charAt(0)&&(Ka=Ka.substr(1)||wf),dc=Qe(a,Ka)>>>0,65536<dc&&(dc=65536));for(var La="",ec="dd"==
|
||||
R?4:"dw"==R?2:1,fc=ec*dc||128,yf=fc+15>>4||1;yf--&&0<fc;){var gc=0,Vc=0,xb,yb="",Wc="",va=Z(cc.C);for(xb=16;0<xb&&0<fc;xb--){var hc=a.W(cc,1),gc=gc|hc<<(Vc++<<3);Vc==ec&&(yb+=q(gc,2*ec),yb+=1==ec?9==xb?"-":" ":" ",gc=Vc=0);Wc+=32<=hc&&128>hc?String.fromCharCode(hc):".";fc--}La&&(La+="\n");La+=va+" "+yb+(0==xb?" "+Wc:"")}La&&a.g(La);a.Gb=cc}}}}break;case "e":if("else"==f[0])break;var ic=1,xe=255,ye=a.W,ze=a.fa;"ew"==f[0]&&(ic=2,xe=65535,ye=a.Ca,ze=a.sb);var Ae=ic<<1,Be=f[1];if(null==Be)a.g("edit memory commands:"),
|
||||
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var jc=Y(a,Be);if(jc)for(var kc=2;kc<f.length;kc++){var zb=Xd(a,f[kc]);if(void 0===zb){a.g("unrecognized value: "+f[kc]);break}zb&~xe&&a.g("warning: "+q(zb)+" exceeds "+ic+"-byte value");var zf=ye.call(a,jc);a.g("changing "+Z(jc.C)+" from 0x"+q(zf,Ae)+" to 0x"+q(zb,Ae));ze.call(a,jc,zb,ic)}}break;case "f":Ve(a,f[1]);break;case "g":a:{var Ce=f[1],Af=b;if(void 0!==Ce){var Xc=Y(a,Ce,!0);if(!Xc)break a;
|
||||
Yd(a,Xc,Af);a.Ha(a.u,Xc,!0)}a.Ma(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var Yc;if(a.A.ka)Yc="halting",a.da();else{if(hb(a,!0))break a;Yc="already halted"}c||a.g(Yc)}break;case "i":if("if"==f[0]){var Zc;var Ab=b.substr(2),Ab=ia(Ab);Xd(a,Ab)?(c||a.g("true: "+Ab),Zc=!0):(c||a.g("false: "+Ab),Zc=!1);Zc||(d=!1);break}var $c=f[1];if($c&&"?"!=$c){var ad=Qe(a,$c);if(void 0!==ad){var Bf=Fb(a.B,ad);a.g(r(ad)+": "+("0x"+q(Bf,2)))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),
|
||||
a.g("warning: port accesses can affect hardware state");break;case "k":var Cf=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var bd=0,De=U(),Bb=U(a.b.ca);for(a.g("stack trace for "+Z(Bb.C));10>bd;){for(var Ma=null,Df=256;65536>Bb.C>>>0;){De.C=a.Ca(Bb,2);if(null==Bb.C||!Df--)break;for(var Ef=a,lc=De,Ee=null,Cb=lc.C,Fe=Cb,cd=1;6>=cd&&Cb;cd++){if(2<cd){lc.C=Cb;var mc=me(Ef,lc);if(0<=mc.indexOf("CALL")){var Ge=mc.indexOf(" ");
|
||||
if(Cb+(mc.indexOf(" ",Ge+1)-Ge-1)/2==Fe){Ee=mc;break}}}Cb--}lc.C=Fe;if(Ma=Ee)break}if(!Ma||null==Ma)break;var He=null;if("ks"==Cf){var Ie=Ma.match(/[0-9A-F]+$/);Ie&&(He=Xe(a,Ie[0]))}Ma=ha(Ma,50)+" ;"+(He||"stack="+Z(Bb.C));a.g(Ma);bd++}bd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Xe(a,f[1],!0);break}break;case "m":a:{var ya,za=null,G=f[1];"?"==G&&(G=void 0);if(void 0!==G){var Na=0;if("all"==G)Na=1610481663,G=null;else if("on"==G)za=!0,G=null;else if("off"==G)za=!1,G=null;else{"keys"==
|
||||
G&&(G="key");"kbd"==G&&(G="keyboard");for(ya in Rd)if(G==ya){Na=Rd[ya];za=!!(a.ha&Na);break}if(!Na){a.g("unknown message category: "+G);break a}}Na&&("on"==f[2]?(a.ha|=Na,za=!0):"off"==f[2]&&(a.ha&=~Na,za=!1))}var Ff=0,Ga="";for(ya in Rd)if(!G||G==ya){var Gf=!!(a.ha&Rd[ya]);if(null===za||za==Gf)Ga&&(Ga+=","),++Ff%10||(Ga+="\n\t"),"key"==ya&&(ya="keys"),Ga+=ya}void 0===G&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==za?za?"messages on: ":"messages off: ":"message categories:\n\t")+
|
||||
(Ga||"none"));Kd(a)}break;case "o":var dd=f[1],Hf=f[2];if(dd&&"?"!=dd){var ed=Qe(a,dd,"port #"),fd=Qe(a,Hf);void 0!==ed&&void 0!==fd&&(Ib(a.B,ed,fd),a.g(r(ed)+": "+("0x"+q(fd,2))))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){Ze(a,b.substr(5));break}var Je="pr"==f[0]?1:0,If=1+Je;if(a.ga)a.g("step in progress");else{var gd=U(a.b.L);switch(a.W(gd)){case 205:a.ga=If,Td(gd,3)}a.ga?(a.Ha(a.u,
|
||||
gd,!0),a.Ma()||(a.w&&a.w.lb(),a.ga=0)):$e(a,Je?"tr":"t")}break;case "r":if("reset"==b){a.w&&a.w.reset();break}fe(a,f);break;case "s":Ye(a,f);break;case "t":$e(a,f[0],f[1]);break;case "u":ge(a,f[1],f[2],8);break;case "v":if("var"==f[0]){We(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.22.0 ("+a.b.Sa+",RELEASE"+(kb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(pa());break;case "?":if(f[1]){Ze(a,b.substr(1));break}var Db="commands:",hd;for(hd in Md)Db+="\n"+ha(hd,7)+Md[hd];od(a)||(Db+="\nnote: frequency/history disabled if no exec breakpoints");
|
||||
a.g(Db);break;default:a.g("unknown command: "+b),d=!1}}}catch(Ke){a.g("debugger error: "+(Ke.stack||Ke.message)),d=!1}return d}function qc(a,b,c){b=Zd(a,b,c);for(var d in b)if(!le(a,b[d]))return!1;return!0}Ja(function(){for(var a=D(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=B(c),d=new Hd(d);cb(d,c)}});function I(a,b,c){this.id=a.id;this.key=bf(a,b,c);this.F=a.F;cf(this,a.Sb)}
|
||||
function bf(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
I.prototype={constructor:I,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){cf(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
|
||||
function cf(a,b){a[a.id]={};b&&J(a,"parms",b);a.b=!1}function df(a){var b=!0;if(sa()){var c=JSON.stringify(a[a.id]);Aa(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function ef(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function ff(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:sa()&&(b=ta(a.key))?(a[a.id]=b,a.b=!0):!1}function gf(a,b){return a[a.id][b]||null}function J(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function hf(a,b,c){v.call(this,"Computer",a,hf,67108864);this.A.ia=!1;jf(this,b);this.ba=nc(this,"autoPower",a);this.D=0;this.ra=a.busWidth||a.buswidth;this.w=kf;this.X=null;this.J=this.na=!1;this.sa=nc(this,"url")||"";(Math.random()+.1).toString(36);this.u=lf(this);if(this.b=bb("CPU",this.id)){this.F=bb("Debugger",this.id);this.aa=[];for(b=null;b=nb(this,"Video",b);)this.aa.push(b);this.B=new pb({id:this.Ib+".bus",busWidth:this.ra},this.b,this.F);var d,e=Za(this.id);if((this.G=bb("Panel",this.id))&&
|
||||
this.G.ta)for(b=0;b<e.length;b++)d=e[b],d.oa=this.G.oa,d.g=this.G.g,d.ta=this.G.ta;for(b=0;b<e.length;b++)d=e[b],d.Da&&d.Da(this,this.B,this.b,this.F);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.M=d:this.w=parseInt(d,10));var f;if(a=nc(this,"state")||(f=!0,a.state))b=this.ga=a,f||(this.J=!0,this.w=kf),this.w&&(this.Y=new I(this,mf),ff(this.Y)?b=null:delete this.Y);!b&&this.w&&(b=nf(this))&&(this.J=!0);if(b){var h=this;na(b,null,!0,function(a,b,c){c?(h.M=null,h.J=!1,h.oa("Unable to load machine state from server (error "+
|
||||
c+(b?": "+ia(b):"")+")")):(h.X=b,h.na=!0);E(h)})}else E(this);this.V.power||(this.ba=!0);!c&&this.ba&&of(this,this.jb)}else t("Unable to find CPU component")}z(hf);var mf="1.22.0",kf=0;function jf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.K=b}
|
||||
function nc(a,b,c){var d=b.toLowerCase(),d=Sa[b]||Sa[d];void 0===d&&a.K&&(d=a.K[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function of(a,b,c){for(var d=Za(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!ib(f)){ib(f,function(){of(a,b,c)});return}}b.call(a,c)}
|
||||
function pf(a,b){var c=new I(a,mf,"validate");if(ff(c)&&ef(c)){var d=gf(c,"timestamp"),e=b?gf(b,"timestamp"):"unknown";d!=e&&(a.oa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=hf.prototype;
|
||||
m.jb=function(a){void 0===a&&(a=this.w||(this.X?1:kf));if(!this.D){this.D++;var b=!1,c=!1;this.ma=!1;var d=this.Y||new I(this,mf);if(-1==a)b=!0;else if(a>kf){if(ff(d,this.X)){this.I=new I(this,mf,"failsafe");ff(this.I)&&(qf(this,d),a=2,cf(this.I));J(this.I,"timestamp",la());df(this.I);var e=this.w&&!this.J;if(1==a||qa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=ef(d)){var f=gf(d,"code"),h=gf(d,"data");f&&("ok"==f?ff(d,h):("error"==f&&"no machine state"!=
|
||||
h?(this.oa("Error: "+h),"unable to verify user"==h&&(Aa("user",""),this.u=null)):this.g(f+": "+h),cf(d),ff(d)?(c=ef(d),e=!0):c=!1))}e&&pf(this,c?d:null)}else 2==a&&d.clear()}else pf(this);delete this.X;delete this.Y}e=Za(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=rf(this,h,d,b,c));b=[d,a,c];-1!=a?of(this,this.Hb,b):this.Hb(b)}};
|
||||
function rf(a,b,c,d,e){if(!b.A.ia){b.A.ia=!0;if(b.za){var f=null;e&&((f=gf(c,b.id))||(f=gf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.za(f,d)&&f&&(t("Unable to restore state for "+b.type),a.ga&&!a.na?(c.clear(),a.w=kf,window&&window.location.reload()):a.ma=!0,b.za(null),e=!1)}if(!d&&b.Eb)for(a=b.Eb.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
m.Hb=function(a){var b=a[0],c=0>a[1];a=a[2];this.A.ia=!0;var d=this.V.power;d&&(d.textContent="Shutdown");this.la||(this.g("PC8080 v"+mf+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.la=!0);this.b&&(rf(this,this.b,b,c,a),sc(this.b));this.ma&&(qf(this,b),b.clear());!c&&this.I&&(this.I.clear(),delete this.I);this.D=0};
|
||||
function qf(a,b){if(qa("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.sa,d=a.u||"",e=b.toString(),f={app:"PC8080"};f.ver=mf;f.url=c;f.user=d;f.type="bug";f.data=e;na("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function af(a,b,c){var d,e="none";if(a.D)return null;a.D--;var f=new I(a,mf),h=new I(a,mf,"validate"),g=la();J(h,"timestamp",g);J(f,"timestamp",g);J(f,"version","1.22.0");J(f,"url",window?window.location.href:null);J(f,"browser",pa());a.b&&a.b.ya&&(c&&a.b.da(),d=a.b.ya(b,c),"object"===typeof d&&J(f,a.b.id,d),c&&(a.b.A.ia=!1,!1===d&&(e=null)));for(var g=Za(a.id),l=0;l<g.length;l++){var k=g[l];k.A.ia&&(k.ya&&(d=k.ya(b,c),"object"===typeof d&&J(f,k.id,d)),c&&(k.A.ia=!1,!1===d&&(e=null)))}e&&(c?(g=d=
|
||||
!1,b?(a.u&&sf(a,a.u,f.toString()),df(h)&&df(f)||(e=null,d=g=!0)):a.w&&(d=!0,g=3==a.w),d&&f.clear(g)):e=f.toString());c&&(a.A.ia=!1,b=a.V.power)&&(b.textContent="Power");a.D=0;return e}m.reset=function(){this.B&&this.B.reset&&(this.F&&fb(this,0)&&this.F.message("Resetting "+this.B.type,void 0),this.B.reset());for(var a=Za(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.B&&c.reset&&(this.F&&fb(this,0)&&this.F.message("Resetting "+c.type,void 0),c.reset())}};
|
||||
m.start=function(a,b){for(var c=Za(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=Za(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
||||
m.qa=function(a,b,c){var d=this;switch(b){case "power":return this.U[b]=c,c.onclick=function(){d.D||(d.A.ha?df(d,!1,!0):rf(d,d.hb))},!0;case "reset":return this.U[b]=c,c.onclick=function(){if(d.A.ha&&!d.D)if(d.w&&!d.M){var a=qa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");df(d,a,!0);!a&&d.ca?window&&window.location.reload():d.hb(nf)}else d.reset(),d.b&&sc(d.b)},!0;case "save":if(ea(oa(),"pcjs.org")){c.parentNode.removeChild(c);
|
||||
break}this.U[b]=c;c.onclick=function(){var a=of(d,!0);if(a){var b=!!(d.w&&!d.M||d.ca),c=df(d,b);b?vf(d,a,c):d.oa("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function of(a,b){var c=a.u;c||(c=ta("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=wf(a,c))||a.oa("The user ID is invalid."))):b&&a.oa("Browser local storage is not available"));return c}
|
||||
function wf(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&&(ua("user",c.data),a.u=c.data)}catch(e){t(e.message+" ("+d+")")}return a.u}function qf(a){var b=null;a.u&&(b=oa()+"/api/v1/user?req=load&user="+a.u+"&state="+ef(a,pf));return b}
|
||||
function vf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=ef(a,pf);d.data=c;b=na(oa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.oa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.oa(c),ua("user",""),a.u=null)}}
|
||||
function nb(a,b,c){a=Za(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.jb=function(){};m.ta=function(a){this.b&&this.b.ta(a);this.G&&this.G.ta(a)};
|
||||
function yc(a,b){for(var c=0;c<a.Z.length;c++)a:{var d=a.Z[c];if(0<=b){if(b&1){d=d.b;d.u=d.u&-8|10;break a}var e=d.b;e.u=e.u&-8|9;if(e=d.M){for(var e=d.B,f=d.J,h=!0,g=d.K>>>e.aa;0<f&&g<e.B.length;)e.B[g].va&&(e.B[g].va=h=!1,e.B[g].Jb=!0),f-=e.la,g++;e=h}if(e)break a}for(var e=d.K,f=e+d.J,h=0,g=d.fa,l=0,k=0,n=d.u,p=0,w=d.D,A=0;e<f;){var u=ub(d.B,e);if(d.M&&u===d.G[h])l+=d.ca;else{d.G[h]=u;var u=u>>8|(u&255)<<8,ca=65536,C=16;l<n&&(n=l);for(var va=0;va<d.ca;va++){var x=(u&(ca>>=1))>>--C,W=d.X,S=l++,
|
||||
x=g[x],S=(S+k*W.width)*x.length;W.data[S]=x[0];W.data[S+1]=x[1];W.data[S+2]=x[2];W.data[S+3]=x[3]}l>p&&(p=l);k<w&&(w=k);k>=A&&(A=k+1)}e+=2;h++;if(l>=d.u&&(l=0,k++,k>d.D))break}d.M=!0;n<d.u&&(d.ja.putImageData(d.X,0,0,n,w,p-n,A-w),d.V.drawImage(d.H,0,0,d.u,d.D,0,0,d.ma,d.ra))}}Ja(function(){for(var a=D(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=B(c),c=D(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=B(f),h=new lf(h,d,!0);ab(h,f);h.ba&&rf(h,h.hb)}});
|
||||
Ea.show.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=B(a[b]);(c=$a("Computer",c.id))&&c.fa&&!c.A.ha&&c.hb(-1)}});Ea.exit.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=B(a[b]);(c=$a("Computer",c.id))&&c.A.ha&&df(c,!(!c.w||c.M),!0)}});var xf=0;function yf(a,b,c,d,e,f){e("Loading "+a+"...");na(a,null,!0,function(h,g,l){l?(g||(g="unable to load "+a+" ("+l+")"),f(g,null)):Mf(g,a,b,c,d,e,f)})}
|
||||
function Mf(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ya(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(p){g=null,a=p.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Nf(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
||||
function Nf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");na(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=g[0],k,n=/( [a-z]+=)(['"])(.*?)\2/g;k=n.exec(f);)l=0>l.indexOf(k[1])?l.replace(">",k[0]+">"):l.replace(new RegExp(k[1]+"(['\"])(.*?)\\1"),k[0]);g[0]!=l&&(h=h.replace(g[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],h);Nf(a,b,c)}})}else c(a,null)}
|
||||
function Of(a,b,c,d){function e(a){if(void 0===g){var b=h&&D(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function f(a){e("Error: "+a);l&&(--xf||Pa(!0));l=!1}var h,g,l=!0;xf++;Xa[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=k:p.appendChild(document.createTextNode(k));n.appendChild(p)}c||
|
||||
(c="/versions/pc8080/1.22.0/components.xsl");k=function(d,g){g?yf(c,null,null,!1,e,function(d,l){if(l)if(Ya(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--xf||Pa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--xf||Pa(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?yf(b,a,d,!0,e,k):Mf(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(w){f(w.message)}return l}window.embedPC8080=function(a,b,c,d){Pa(!1);return Of(a,b,c,d)};window.enableEvents=Pa;window.sendEvent=Qa;
|
||||
function Pf(a,b,c,d){if(!c&&b){d.push(b);a=Xa[d[0]];b=null;for(var e in a)if(ea(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?na(b,null,!0,function(a,b){Qf(b,d)}):Qf(null,d)}else t("Error ("+c+") requesting "+a)}
|
||||
function Qf(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Xa[f],l={},k;for(k in g){var n=g[k],p=da(k);if("xml"==p){for(p=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=p.exec(g[k]);){var w=d[2];w&&(g[w]||(n=n.replace(d[0],"")))}d=k=ba(k)}else"xsl"==p&&(e=k=ba(k));l[k]=n}a&&(l[k="css"]=a);b[2]&&(l[k="parms"]=b[2]);b[3]&&(l[k="state"]=b[3]);d&&e?(k=JSON.stringify(l),h+=".js",c=c[1]+"var resources="+k+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
m.qa=function(a,b,c){var d=this;switch(b){case "power":return this.V[b]=c,c.onclick=function(){d.D||(d.A.ia?af(d,!1,!0):of(d,d.jb))},!0;case "reset":return this.V[b]=c,c.onclick=function(){if(d.A.ia&&!d.D)if(d.w&&!d.M){var a=qa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");af(d,a,!0);!a&&d.ga?window&&window.location.reload():d.jb(kf)}else d.reset(),d.b&&sc(d.b)},!0;case "save":if(ea(oa(),"pcjs.org")){c.parentNode.removeChild(c);
|
||||
break}this.V[b]=c;c.onclick=function(){var a=lf(d,!0);if(a){var b=!!(d.w&&!d.M||d.ga),c=af(d,b);b?sf(d,a,c):d.oa("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function lf(a,b){var c=a.u;c||(c=ta("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=tf(a,c))||a.oa("The user ID is invalid."))):b&&a.oa("Browser local storage is not available"));return c}
|
||||
function tf(a,b){a.u=null;var c=na(oa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Aa("user",c.data),a.u=c.data)}catch(e){t(e.message+" ("+d+")")}return a.u}function nf(a){var b=null;a.u&&(b=oa()+"/api/v1/user?req=load&user="+a.u+"&state="+bf(a,mf));return b}
|
||||
function sf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=bf(a,mf);d.data=c;b=na(oa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.oa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.oa(c),Aa("user",""),a.u=null)}}
|
||||
function nb(a,b,c){a=Za(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.lb=function(){};m.va=function(a){this.b&&this.b.va(a);this.G&&this.G.va(a)};
|
||||
function yc(a,b){for(var c=0;c<a.aa.length;c++)a:{var d=a.aa[c];if(0<=b){if(b&1){d=d.b;d.u=d.u&-8|10;break a}var e=d.b;e.u=e.u&-8|9;if(e=d.aa){for(var e=d.B,f=d.M,h=!0,g=d.X>>>e.ea;0<f&&g<e.T.length;)e.T[g].wa&&(e.T[g].wa=h=!1,e.T[g].Kb=!0),f-=e.ua,g++;e=h}if(e)break a}for(var e=d.X,f=e+d.M,h=0,g=d.ra,l=0,k=0,n=d.u,p=0,w=d.D,A=0;e<f;){var u=ub(d.B,e);if(d.aa&&u===d.I[h])l+=d.ma;else{d.I[h]=u;var u=u>>8|(u&255)<<8,ba=65536,C=16;l<n&&(n=l);for(var ua=0;ua<d.ma;ua++){var x=(u&(ba>>=1))>>--C,V=d.ba,R=
|
||||
l++,x=g[x],R=(R+k*V.width)*x.length;V.data[R]=x[0];V.data[R+1]=x[1];V.data[R+2]=x[2];V.data[R+3]=x[3]}l>p&&(p=l);k<w&&(w=k);k>=A&&(A=k+1)}e+=2;h++;if(l>=d.u&&(l=0,k++,k>d.D))break}d.aa=!0;n<d.u&&(d.sa.putImageData(d.ba,0,0,n,w,p-n,A-w),d.G.drawImage(d.J,0,0,d.u,d.D,0,0,d.Y,d.K))}}Ja(function(){for(var a=D(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=B(c),c=D(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=B(f),h=new hf(h,d,!0);cb(h,f);h.ba&&of(h,h.jb)}});
|
||||
Ea.show.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=B(a[b]);(c=bb("Computer",c.id))&&c.la&&!c.A.ia&&c.jb(-1)}});Ea.exit.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=B(a[b]);(c=bb("Computer",c.id))&&c.A.ia&&af(c,!(!c.w||c.M),!0)}});var uf=0;function vf(a,b,c,d,e,f){e("Loading "+a+"...");na(a,null,!0,function(h,g,l){l?(g||(g="unable to load "+a+" ("+l+")"),f(g,null)):Jf(g,a,b,c,d,e,f)})}
|
||||
function Jf(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ya(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(p){g=null,a=p.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Kf(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
||||
function Kf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");na(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=g[0],k,n=/( [a-z]+=)(['"])(.*?)\2/g;k=n.exec(f);)l=0>l.indexOf(k[1])?l.replace(">",k[0]+">"):l.replace(new RegExp(k[1]+"(['\"])(.*?)\\1"),k[0]);g[0]!=l&&(h=h.replace(g[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],h);Kf(a,b,c)}})}else c(a,null)}
|
||||
function Lf(a,b,c,d){function e(a){if(void 0===g){var b=h&&D(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function f(a){e("Error: "+a);l&&(--uf||Pa(!0));l=!1}var h,g,l=!0;uf++;Xa[a]={};try{if(h=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=k:p.appendChild(document.createTextNode(k));n.appendChild(p)}c||
|
||||
(c="/versions/pc8080/1.22.0/components.xsl");k=function(d,g){g?vf(c,null,null,!1,e,function(d,l){if(l)if(Ya(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--uf||Pa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--uf||Pa(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?vf(b,a,d,!0,e,k):Jf(b,null,a,d,!1,e,k)}else f("missing machine element: "+a)}catch(w){f(w.message)}return l}window.embedPC8080=function(a,b,c,d){Pa(!1);return Lf(a,b,c,d)};window.enableEvents=Pa;window.sendEvent=Qa;
|
||||
function Mf(a,b,c,d){if(!c&&b){d.push(b);a=Xa[d[0]];b=null;for(var e in a)if(ea(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?na(b,null,!0,function(a,b){Nf(b,d)}):Nf(null,d)}else t("Error ("+c+") requesting "+a)}
|
||||
function Nf(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Xa[f],l={},k;for(k in g){var n=g[k],p=da(k);if("xml"==p){for(p=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=p.exec(g[k]);){var w=d[2];w&&(g[w]||(n=n.replace(d[0],"")))}d=k=ca(k)}else"xsl"==p&&(e=k=ca(k));l[k]=n}a&&(l[k="css"]=a);b[2]&&(l[k="parms"]=b[2]);b[3]&&(l[k="state"]=b[3]);d&&e?(k=JSON.stringify(l),h+=".js",c=c[1]+"var resources="+k+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),k=h,g=null,l="data:application/javascript,",l=Ba("Firefox")?l+encodeURIComponent(c):l+encodeURI(c),k&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=l,g.download=k,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+k+"."):(window.open(l),c="Check your browser for a new window/tab containing the requested data"+(k?" ("+k+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
|
||||
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",t(c)):t("Missing XML/XSL resources")}
|
||||
window.savePC=function(a,b,c){var d=$a("Computer",a),e=$a("Debugger",a);if(d){var f=df(d,!0),h=d.K?JSON.stringify(d.K):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Rb:h}))return!0;na(b,null,!0,function(c,d,e){Pf(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=bb("Computer",a),e=bb("Debugger",a);if(d){var f=af(d,!0),h=d.K?JSON.stringify(d.K):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Sb:h}))return!0;na(b,null,!0,function(c,d,e){Mf(c,d,e,[a,ca(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();
|
||||
|
|
|
|||
|
|
@ -1,129 +1,129 @@
|
|||
(function(){var m;function aa(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
|
||||
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ba(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
|
||||
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&","<":"<",">":">",'"':""","'":"'"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var ga=Date.now||function(){return+new Date};function ia(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&","<":"<",">":">",'"':""","'":"'"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var ha=Date.now||function(){return+new Date};function ia(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
|
||||
function p(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
|
||||
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function ja(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
||||
function q(a){window&&window.alert(a)}function ka(a){var b=!1;window&&(b=window.confirm(a));return b}var ma=null;function na(){if(null==ma){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ma=a}return ma}function oa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
|
||||
function pa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function qa(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var ta={init:[],show:[],exit:[]},ua=!1,va=!0;function wa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function xa(a){ta.init.push(a)}
|
||||
function ya(a){if(va)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){q("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function za(a){!va&&a?(va=!0,ua&&Aa("init")):va=a}function Aa(a){ta[a]&&ya(ta[a])}wa("onload",function(){ua=!0;ya(ta.init)});wa("onpageshow",function(){ya(ta.show)});wa(qa("Opera")||qa("iOS")?"onunload":"onbeforeunload",function(){ya(ta.exit)});
|
||||
function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Sa=b.comment;this.eb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ua=this.id.substr(0,b),this.Ta=this.id.substr(b+1)):this.Ta=this.id;this[a]=c;this.g={ia:!1,qa:!1,Ia:!1,K:!1,ba:!1};this.Ba=null;this.g.ba=!1;this.A={};this.I=null;u.push(this)}var Ba=void 0,Ca={};
|
||||
if(window){Ba||(Ba=window.location.search.substr(1));for(var Da,Ea=/\+/g,Ha=/([^&=]+)=?([^&]*)/g;Da=Ha.exec(Ba);)Ca[decodeURIComponent(Da[1].replace(Ea," "))]=decodeURIComponent(Da[2].replace(Ea," "))}function Ia(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function v(a,b){b||(b=t);a.prototype=Ia(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var u=[],Ja={};function Ka(a,b,c){Ja[a]&&b&&(Ja[a][b]=c)}function w(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<u.length;b++){var d=u[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function La(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<u.length;d++)if(c)c==u[d]&&(c=null);else if(!(a!=u[d].type||b&&u[d].id.indexOf(b)))return u[d]}return null}function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){q(c.message+" ("+a+")")}return b}
|
||||
function Ma(a,b){for(var c=z(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.P(g.type,g.binding,h,g.value),l=k.length}}}}
|
||||
function z(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
|
||||
t.prototype={constructor:t,parent:null,toString:function(){return this.name?this.name:this.id||this.type},P: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.Z=this.A[b]=c,c.value="",this.O=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.L=function(a,b,c){this.O(a,"notice",c)}),!0;default:return!1}},log:function(){},O:function(){},status:function(a){this.O(this.Ta+": "+a)},L:function(a,b){b||q(a)},X:function(){return this.g.K=!0},W:function(a,b){b&&(this.g.K=!1);return!0}};function Na(a,b){if(a.g.Ia)return a.g.qa&&(a.g.qa=!1),a.g.Ia=!1;if(a.g.ba)return a.O(a.toString()+" error"),!1;a.g.qa=b;return a.g.qa}function B(a){if(!a.g.ba&&(a.g.ia=!0,a.g.ia)){var b=a.Ba;a.Ba=null;b&&b()}}
|
||||
function Oa(a,b){b&&(a.g.ia?b():a.Ba=b);return a.g.ia}
|
||||
var Pa="undefined"!==typeof ArrayBuffer,Qa=[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 Ra(a){t.call(this,"Panel",a,Ra)}v(Ra);m=Ra.prototype;m.P=function(a,b,c,d){return this.v&&this.v.P(a,b,c,d)||this.a&&this.a.P(a,b,c,d)||this.b&&this.b.P(a,b,c,d)?!0:this.parent.P.call(this,a,b,c,d)};m.ca=function(a,b,c,d){this.v=a;this.w=b;this.a=c;this.I=d;this.b=Sa(a,"Keyboard")};m.X=function(a,b){b||Ta();return!0};m.W=function(){return!0};m.fa=function(){};
|
||||
function Ta(){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<u.length;h++)if(u[h].id===f){f=u[h];break a}f=null}f||(a=!0,f=new Ra(e));Ma(f,d);a&&B(f)}}xa(Ta);
|
||||
function Ua(a,b,c){t.call(this,"Bus",a,Ua);this.a=b;this.I=c;this.i=a.busWidth||16;this.m=Math.pow(2,this.i);this.h=this.m-1|0;this.C=16>=this.i?10:20>=this.i?12:24>=this.i?14:15;this.H=1<<this.C;this.w=this.H>>2;this.c=this.H-1;this.f=this.m/this.H|0;this.v=this.f-1;this.j=[];this.l=[];this.o=[];this.B=[];a=new C;Va(a,this.I);this.b=Array(this.f);for(b=0;b<this.f;b++)this.b[b]=a;a=this.a;b=this.b;c=this.C;var d=this.h;a.M=b;a.C=c;a.H=1<<a.C;a.T=a.H-1;a.Oa=b.length;a.Ha=a.Oa-1;a.$=d;B(this)}v(Ua);
|
||||
Ua.prototype.reset=function(){};Ua.prototype.X=function(a,b){b||this.reset();return!0};function Wa(a,b,c,d){for(var e=b>>>a.C;0<c&&e<a.b.length;){var f=a.b[e],h=e*a.H,g=a.H-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.pa)return f.Ga+=f.pa-b,f.pa=b,!0;if(b>=f.pa+f.Ga){g=f.size-(b-h);g>c&&(g=c);f.Ga=b-f.pa+g;b=h+a.H;c-=g;e++;continue}}return Xa(1,b,c)}b=new C(b,g,a.H,d);Va(b,a.I,f);a.b[e++]=b;b=h+a.H;c-=g}return 0>=c?!0:Xa(2,b,c)}
|
||||
Ua.prototype.F=function(a){return this.b[(a&this.h)>>>this.C].oa(a&this.c,a)};function Ya(a,b,c){a.b[(b&a.h)>>>a.C].hb(b&a.c,c&255,b)}function Xa(a,b,c){q("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Za;if(Pa){var $a=new ArrayBuffer(2);(new DataView($a)).setUint16(0,256,!0);Za=256===(new Uint16Array($a))[0]}else Za=!1;var ab=Za;
|
||||
function C(a,b,c,d){this.id=bb+=2;this.a=null;this.pa=a;this.Ga=b;this.size=c||0;this.type=d||cb;this.h=d==db;Va(this);this.R=this.Xa=!1;if(c)if(Pa)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.l=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),eb(this,ab?fb:gb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;eb(this,hb)}else eb(this)}var cb=0,db=2,bb=0;
|
||||
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(Pa)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Pa)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.R=!0}return!1},m:function(){return 255},w:function(){},A:function(a,b){return this.oa(a++,b++)|this.oa(a,b)<<8},v:function(a,b,c){this.ya(a++,b&255,c++);this.ya(a,b>>8,c)},D:function(a){return this.a[a>>
|
||||
2]>>>((a&3)<<3)&255},M: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},V:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.R=!0},ha: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.R=!0},B:function(a,b){return this.Ma(a,b)},H:function(a,b){return this.fb(a,b)},T:function(a,b,c){this.h||this.hb(a,b,c)},$:function(a,b,
|
||||
c){this.h||this.aa(a,b,c)},o:function(a){return this.b[a]},C:function(a){return this.b[a]},G:function(a){return this.f.getUint16(a,!0)},J:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.l[a>>1]},N:function(a,b){this.b[a]=b;this.R=!0},U:function(a,b){this.b[a]=b;this.R=!0},Y:function(a,b){this.f.setUint16(a,b,!0);this.R=!0},ga:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.l[a>>1]=b;this.R=!0}};function Va(a,b,c){a.I=b;a.i=a.j=0;c&&((a.i=c.i)&&ib(a,jb,!1),(a.j=c.j)&&kb(a,jb,!1))}
|
||||
function kb(a,b,c){c&&a.j||(a.ya=!a.h&&b[2]||a.w,a.wb=!a.h&&b[3]||a.v);if(c||void 0===c)a.hb=b[2]||a.w,a.aa=b[3]||a.v}function ib(a,b,c){c&&a.i||(a.oa=b[0]||a.m,a.vb=b[1]||a.A);if(c||void 0===c)a.Ma=b[0]||a.m,a.fb=b[1]||a.A}function eb(a,b){b||(b=lb);ib(a,b,void 0);kb(a,b,void 0)}var lb=[],hb=[C.prototype.D,C.prototype.M,C.prototype.V,C.prototype.ha],jb=[C.prototype.B,C.prototype.H,C.prototype.T,C.prototype.$];
|
||||
if(Pa)var gb=[C.prototype.o,C.prototype.G,C.prototype.N,C.prototype.Y],fb=[C.prototype.C,C.prototype.J,C.prototype.U,C.prototype.ga];
|
||||
function mb(a,b){t.call(this,"CPU",a,mb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.na=c;this.c.Fa=0;this.c.ma=d;this.c.Ja=Math.round(this.c.na/1E4)/100;this.c.ja=this.c.Ja*this.c.ma;this.g.S=!1;this.g.Za=!1;this.g.Wa=a.autoStart;this.g.Ya=!1;this.g.za=!1;this.c.Da=this.c.la=0;this.c.Ea=a.csStart;this.c.ra=a.csInterval;this.c.sa=a.csStop;this.ib=this.Na.bind(this);B(this)}v(mb);var nb=["power","reset"];m=mb.prototype;
|
||||
m.ca=function(a,b,c,d){this.v=a;this.w=b;this.I=d;for(b=0;b<nb.length;b++)(c=this.A[nb[b]])&&this.v.P(null,nb[b],c);this.Y=(b=Sa(a,"Video"))&&Math.max(b.Y,b.jb)||60;this.ha=Sa(a,"ChipSet");a=ob(a,"autoStart");null!=a&&(this.g.Wa="true"==a?!0:"false"==a?!1:!!a);B(this)};m.reset=function(){this.c.Fa=0};m.save=function(){return null};m.restore=function(){return!1};
|
||||
m.X=function(a,b){if(!b){if(a&&this.restore){pb(this);if(!this.restore(a))return!1;qb(this)}else this.reset();this.O("No debugger detected")}rb(this);return!0};m.W=function(a){return a?this.save():!0};function sb(a){(a.g.Wa||void 0===a.A.run)&&a.Na()}m.$a=function(){return 0};function qb(a){void 0===a.c.Ea&&(a.c.Ea=0);void 0===a.c.ra&&(a.c.ra=-1);void 0===a.c.sa&&(a.c.sa=-1);a.g.za=0<=a.c.Ea&&0<a.c.ra;a.g.za&&(a.c.Da=0,a.c.la=a.c.Ea-a.V)}
|
||||
m.P=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.g.K)a=!0;else{var b=null,c,g=w(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.g.ia);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.g.K);c++);c==g.length&&(b=a);q("The "+b.type+" component ("+b.id+") is not "+(b.g.ia?"powered yet":"ready yet"+(b.Ba?" (waiting for notification)":""))+".");a=!1}a&&(d.g.S?tb(d,!0):d.Na())};a=!0;break;
|
||||
case "speed":this.A[b]=c;a=!0;break;case "setSpeed":this.A[b]=c,c.onclick=function(){ub(d,d.c.ma<<1)},c.textContent=this.c.ja.toFixed(2)+"Mhz",a=!0}return a};function vb(a,b,c){a.V+=b;c&&(a.U=a.a=0)}
|
||||
function xb(a,b){var c=30;c<a.Y&&(c=a.Y);2>c&&(c=2);var d=1;b&&1<a.c.ma&&a.c.da&&(d=a.c.da/a.c.Ja);a.c.ab=Math.round(1E3/30);a.c.pb=Math.floor(a.c.na/c*d);a.c.Ka=Math.floor(a.c.na/30*d);a.c.cb=Math.floor(a.c.na/a.Y*d);a.c.bb=Math.floor(a.c.na/2*d);b||(a.c.va=a.c.Ka,a.c.ua=a.c.cb,a.c.ta=a.c.bb);a.c.La=0}function yb(a){return a.V+a.N+a.U-a.a}function pb(a){a.c.da=0;a.V=a.N=a.U=a.a=0;qb(a);ub(a,1)}
|
||||
function ub(a,b){if(void 0!==b){.8>a.c.da/a.c.ja&&(b=1);a.c.ma=b;var c=a.c.Ja*a.c.ma;if(a.c.ja!=c){a.c.ja=c;var c=a.c.ja.toFixed(2)+"Mhz",d=a.A.setSpeed;d&&(d.textContent=c);a.O("target speed: "+c)}}vb(a,a.N);a.N=0;a.c.ka=ga();a.c.ea=0;xb(a)}
|
||||
m.Na=function(){if(Na(this,!0)){if(!this.g.S){ub(this);this.v&&this.v.start(this.c.ka,yb(this));this.g.S=!0;this.g.Za=!0;this.ha&&this.ha.start();var a=this.A.run;a&&(a.textContent="Halt");this.v&&this.v.fa(!0)}this.c.La>=this.c.na&&xb(this,!0);this.c.wa=0;this.c.Ca=ga();this.c.ea&&(a=this.c.Ca-this.c.ea,a>this.c.ab&&(this.c.ka+=a,this.c.ka>this.c.Ca&&(this.c.ka=this.c.Ca)));try{do{var b=this.g.za?1:this.c.pb;try{this.gb(b)}catch(e){if("number"!=typeof e)throw e;}var c=this.U-this.a;this.N+=c;this.c.wa+=
|
||||
c;vb(this,0,!0);a=c;if(this.g.za){var d=!1;this.c.Da=this.c.Da+this.$a()|0;this.c.la-=a;0>=this.c.la&&(this.c.la+=this.c.ra,d=!0);0<=this.c.sa&&this.c.sa<=yb(this)&&(this.c.ra=this.c.sa=-1,qb(this),tb(this),d=!0);d&&this.O(yb(this)+" cycles: checksum="+n(this.c.Da))}this.c.ua-=c;0>=this.c.ua&&(this.c.ua+=this.c.cb,this.v&&zb(this.v,this.c.Fa++),this.c.Fa>this.Y&&(this.c.Fa=0));this.c.ta-=c;0>=this.c.ta&&(this.c.ta+=this.c.bb,this.v&&this.v.fa());this.c.va-=c;if(0>=this.c.va){this.c.va+=this.c.Ka;
|
||||
break}}while(this.g.S)}catch(e){tb(this);rb(this);this.v&&this.v.stop(ga(),yb(this));Na(this,!1);b=e.stack||e.message;this.g.ba=!0;this.L(b);return}b=setTimeout;c=this.ib;this.c.ea=ga();a=this.c.ab;this.c.wa&&(a=Math.round(a*this.c.wa/this.c.Ka));a-=this.c.ea-this.c.Ca;if(d=this.c.ea-this.c.ka)this.c.da=Math.round(this.N/(10*d))/100,864E5<=d&&(this.V=0,ub(this));if(0>a||this.c.da<this.c.ja)a=0;this.c.La+=this.c.wa;this.c.ea+=a;b(c,a)}else rb(this),this.v&&this.v.stop(ga(),yb(this))};m.gb=function(){return 0};
|
||||
function tb(a,b){a.g.qa&&(a.g.Ia=!0);a.U-=a.a;a.a=0;vb(a,a.N);a.N=0;if(a.g.S){a.g.S=!1;a.ha&&a.ha.stop();var c=a.A.run;c&&(c.textContent="Run")}a.g.Aa=b}function rb(a){a.v&&(zb(a.v,-1),a.v.fa(void 0))}function Ab(a){this.aa=a.model||8080;mb.call(this,a,1E6);this.Pa=Bb;pb(this);this.g.Aa=this.g.kb=!1;this.Ra=0;this.M=[];this.C=this.H=this.T=this.Oa=this.Ha=this.$=0;this.ga=[];this.Qa=0;Cb(this)}v(Ab,mb);function Db(a,b){a.ga.push(b)}m=Ab.prototype;
|
||||
m.reset=function(){this.g.S&&tb(this);Cb(this);pb(this);this.g.ba=!1;this.parent.reset.call(this)};function Cb(a){a.b=0;a.h=0;a.s=0;a.i=0;a.u=0;a.j=0;a.l=0;a.B=0;D(a,a.Qa);Eb(a,0);a.G=0}function Fb(a,b){a.Qa=b;D(a,b)}m.$a=function(){var a=this.b+this.h+this.s+this.i+this.u+this.j+this.l|0;return a=a+this.B+this.m+Gb(this)|0};
|
||||
m.save=function(){var a=new E(this);F(a,0,[this.b,this.h,this.s,this.i,this.u,this.j,this.l,this.B,this.m,Gb(this)]);F(a,1,[this.G,this.V,this.c.ma]);for(var b=this.w,c=0,d=[],e=0;e<b.f;e++){var f=b.b[e];if(f.R||f.Xa){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var x=f[g],r=g+1;r<f.length&&f[r]===x;)r++;l[k++]=r-g;l[k++]=x;g=r}if(l.length<f.length){f=l;break a}}d[h]=f}}F(a,2,d);return a.data()};
|
||||
m.restore=function(a){var b=a[0];this.b=b[0];this.h=b[1];this.s=b[2];this.i=b[3];this.u=b[4];this.j=b[5];this.l=b[6];this.B=b[7]&65535;D(this,b[8]);Eb(this,b[9]);b=a[1];this.G=b[0];this.V=b[1];ub(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.b[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
m.P=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.A[b]=c;this.Ra++;d=!0;break;default:d=this.parent.P.call(this,a,b,c)}return d};function Hb(a){return a.h<<8|a.s}function Ib(a,b){a.h=b>>8&255;a.s=b&255}function G(a){return a.i<<8|a.u}function Jb(a,b){a.i=b>>8&255;a.u=b&255}function H(a){return a.j<<8|a.l}
|
||||
function I(a,b){a.j=b>>8&255;a.l=b&255}function D(a,b){a.m=b&65535}function J(a){return a.f&256?1:0}function Kb(a){return Qa[a.o&255]?4:0}function Gb(a){return a.J&-214|(a.o&128?128:0)|(a.f&255?0:64)|((a.o^a.D)&16?16:0)|Kb(a)|J(a)}function Eb(a,b){a.f=a.o=a.D=0;b&1&&(a.f|=256);b&4||(a.o|=1);b&16&&(a.D|=16);b&64||(a.f|=255);b&128&&(a.o^=192);a.J=a.J&-513|b&512|2}function K(a,b){a.D=a.b^b;return a.o=(a.f=a.b+b)&255}function L(a,b){a.D=a.b^b;return a.o=(a.f=a.b+b+(a.f&256?1:0))&255}
|
||||
function M(a,b){a.f=a.o=a.D=a.b&b;(a.b|b)&8&&(a.D^=16);return a.f}function Lb(a,b){a.D=b^255;b=a.o=b+255&255;a.f=a.f&-256|b;return b}function Mb(a,b){a.D=b;b=a.o=b+1&255;a.f=a.f&-256|b;return b}function N(a,b){return a.o=a.f=a.D=a.b|b}function O(a,b){b^=255;a.D=a.b^b;return a.o=(a.f=a.b+b+1^256)&255}function P(a,b){b^=255;a.D=a.b^b;return a.o=(a.f=a.b+b+(a.f&256?0:1)^256)&255}function Q(a,b){return a.o=a.f=a.D=a.b^b}m.F=function(a){return this.M[(a&this.$)>>>this.C].oa(a&this.T,a)};
|
||||
function Nb(a,b){var c=b&a.T,d=(b&a.$)>>>a.C;if(c<a.T)return a.M[d].vb(c,b);c=a.M[d].oa(c,b);return c|=a.M[d+1&a.Ha].oa(0,b+1)<<8}function R(a,b,c){a.M[(b&a.$)>>>a.C].ya(b&a.T,c&255,b)}function Ob(a,b,c){var d=b&a.T,e=(b&a.$)>>>a.C;d<a.T?a.M[e].wb(d,c&65535,b):(a.M[e++].ya(d,c&255,b),a.M[e&a.Ha].ya(0,c>>8&255,b+1))}function S(a){var b=a.F(a.m);D(a,a.m+1);return b}function T(a){var b=Nb(a,a.m);D(a,a.m+2);return b}function U(a){var b=Nb(a,a.B);a.B=a.B+2&65535;return b}
|
||||
function V(a,b){a.B=a.B-2&65535;Ob(a,a.B,b)}function W(a,b,c,d){d=d||2;a.A[b]&&(void 0===c&&(a.g.ba=!0,a.L("Value for "+b+" is invalid"),tb(a)),c=!a.g.S||a.g.Ya?n(c,d):"--------".substr(0,d),a.A[b].textContent!=c&&(a.A[b].textContent=c))}
|
||||
m.fa=function(a){this.Ra&&(a||!this.g.S||this.g.Ya)&&(W(this,"A",this.b),W(this,"B",this.h),W(this,"C",this.s),W(this,"BC",Hb(this),4),W(this,"D",this.i),W(this,"E",this.u),W(this,"DE",G(this),4),W(this,"H",this.j),W(this,"L",this.l),W(this,"HL",H(this),4),W(this,"SP",this.B,4),W(this,"PC",this.m,4),a=Gb(this),W(this,"PS",a,4),W(this,"SF",a&128?1:0,1),W(this,"ZF",a&64?1:0,1),W(this,"AF",a&16?1:0,1),W(this,"PF",a&4?1:0,1),W(this,"CF",a&1?1:0,1));if(a=this.A.speed)a.textContent=this.g.S&&this.c.da?
|
||||
this.c.da.toFixed(2)+"Mhz":"Stopped"};m.gb=function(a){this.g.Aa=!0;this.g.kb=!1;this.g.Za=!1;this.U=this.a=a;do{if(a=this.G)this.G&8&&this.J&512?(a=199|(this.G&7)<<3,this.G&=-16,this.J&=-513,this.Pa[a].call(this),a=!0):a=!1,a=!a;if(a&&this.G&16){this.a=0;break}this.Pa[S(this)].call(this)}while(0<this.a);return this.g.Aa?this.U-this.a:void 0===this.g.Aa?0:-1};xa(function(){for(var a=z(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ab(d);Ma(d,c)}});function Pb(){this.a-=4}
|
||||
function Qb(){D(this,T(this));this.a-=10}function Rb(){D(this,U(this));this.a-=10}function Sb(){var a=T(this);V(this,this.m);D(this,a);this.a-=17}
|
||||
var Bb=[Pb,function(){Ib(this,T(this));this.a-=10},function(){R(this,Hb(this),this.b);this.a-=7},function(){Ib(this,Hb(this)+1);this.a-=5},function(){this.h=Mb(this,this.h);this.a-=5},function(){this.h=Lb(this,this.h);this.a-=5},function(){this.h=S(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;this.f=this.f&255|a&256;this.a-=4},Pb,function(){var a;I(this,a=H(this)+Hb(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(Hb(this));this.a-=7},function(){Ib(this,Hb(this)-
|
||||
1);this.a-=5},function(){this.s=Mb(this,this.s);this.a-=5},function(){this.s=Lb(this,this.s);this.a-=5},function(){this.s=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;this.f=this.f&255|a;this.a-=4},Pb,function(){Jb(this,T(this));this.a-=10},function(){R(this,G(this),this.b);this.a-=7},function(){Jb(this,G(this)+1);this.a-=5},function(){this.i=Mb(this,this.i);this.a-=5},function(){this.i=Lb(this,this.i);this.a-=5},function(){this.i=S(this);this.a-=7},function(){var a=this.b<<
|
||||
1;this.b=a&255|this.f>>8;this.f=this.f&255|a&256;this.a-=4},Pb,function(){var a;I(this,a=H(this)+G(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(G(this));this.a-=7},function(){Jb(this,G(this)-1);this.a-=5},function(){this.u=Mb(this,this.u);this.a-=5},function(){this.u=Lb(this,this.u);this.a-=5},function(){this.u=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(this.f&256|this.b)>>1;this.f=this.f&255|a;this.a-=4},Pb,function(){I(this,T(this));this.a-=10},function(){Ob(this,
|
||||
T(this),H(this));this.a-=16},function(){I(this,H(this)+1);this.a-=5},function(){this.j=Mb(this,this.j);this.a-=5},function(){this.j=Lb(this,this.j);this.a-=5},function(){this.j=S(this);this.a-=7},function(){var a=0,b=J(this);if((this.o^this.D)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=K(this,a);this.f=b?this.f|256:this.f&-257;this.a-=4},Pb,function(){var a;I(this,a=H(this)+H(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){I(this,Nb(this,T(this)));this.a-=16},function(){I(this,
|
||||
H(this)-1);this.a-=5},function(){this.l=Mb(this,this.l);this.a-=5},function(){this.l=Lb(this,this.l);this.a-=5},function(){this.l=S(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Pb,function(){this.B=T(this)&65535;this.a-=10},function(){R(this,T(this),this.b);this.a-=13},function(){this.B=this.B+1&65535;this.a-=5},function(){var a=H(this);R(this,a,Mb(this,this.F(a)));this.a-=10},function(){var a=H(this);R(this,a,Lb(this,this.F(a)));this.a-=10},function(){R(this,H(this),S(this));this.a-=
|
||||
10},function(){this.f|=256;this.a-=4},Pb,function(){var a;I(this,a=H(this)+this.B);this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(T(this));this.a-=13},function(){this.B=this.B-1&65535;this.a-=5},function(){this.b=Mb(this,this.b);this.a-=5},function(){this.b=Lb(this,this.b);this.a-=5},function(){this.b=S(this);this.a-=7},function(){this.f=J(this)?this.f&-257:this.f|256;this.a-=4},function(){this.a-=5},function(){this.h=this.s;this.a-=5},function(){this.h=this.i;this.a-=5},function(){this.h=
|
||||
this.u;this.a-=5},function(){this.h=this.j;this.a-=5},function(){this.h=this.l;this.a-=5},function(){this.h=this.F(H(this));this.a-=7},function(){this.h=this.b;this.a-=5},function(){this.s=this.h;this.a-=5},function(){this.a-=5},function(){this.s=this.i;this.a-=5},function(){this.s=this.u;this.a-=5},function(){this.s=this.j;this.a-=5},function(){this.s=this.l;this.a-=5},function(){this.s=this.F(H(this));this.a-=7},function(){this.s=this.b;this.a-=5},function(){this.i=this.h;this.a-=5},function(){this.i=
|
||||
this.s;this.a-=5},function(){this.a-=5},function(){this.i=this.u;this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.l;this.a-=5},function(){this.i=this.F(H(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.u=this.h;this.a-=5},function(){this.u=this.s;this.a-=5},function(){this.u=this.i;this.a-=5},function(){this.a-=5},function(){this.u=this.j;this.a-=5},function(){this.u=this.l;this.a-=5},function(){this.u=this.F(H(this));this.a-=7},function(){this.u=this.b;
|
||||
this.a-=5},function(){this.j=this.h;this.a-=5},function(){this.j=this.s;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.j=this.u;this.a-=5},function(){this.a-=5},function(){this.j=this.l;this.a-=5},function(){this.j=this.F(H(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.l=this.h;this.a-=5},function(){this.l=this.s;this.a-=5},function(){this.l=this.i;this.a-=5},function(){this.l=this.u;this.a-=5},function(){this.l=this.j;this.a-=5},function(){this.a-=5},function(){this.l=
|
||||
this.F(H(this));this.a-=7},function(){this.l=this.b;this.a-=5},function(){R(this,H(this),this.h);this.a-=7},function(){R(this,H(this),this.s);this.a-=7},function(){R(this,H(this),this.i);this.a-=7},function(){R(this,H(this),this.u);this.a-=7},function(){R(this,H(this),this.j);this.a-=7},function(){R(this,H(this),this.l);this.a-=7},function(){var a=this.m-1;if(this.ga.length)for(var b=0;b<this.ga.length;b++)if(this.ga[b](a))return;this.G|=16;this.a-=7;this.J&512||tb(this)},function(){R(this,H(this),
|
||||
this.b);this.a-=7},function(){this.b=this.h;this.a-=5},function(){this.b=this.s;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.u;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.l;this.a-=5},function(){this.b=this.F(H(this));this.a-=7},function(){this.a-=5},function(){this.b=K(this,this.h);this.a-=4},function(){this.b=K(this,this.s);this.a-=4},function(){this.b=K(this,this.i);this.a-=4},function(){this.b=K(this,this.u);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.F(H(this)));this.a-=7},function(){this.b=K(this,this.b);this.a-=4},function(){this.b=L(this,this.h);this.a-=4},function(){this.b=L(this,this.s);this.a-=4},function(){this.b=L(this,this.i);this.a-=4},function(){this.b=L(this,this.u);this.a-=4},function(){this.b=L(this,this.j);this.a-=4},function(){this.b=L(this,this.l);this.a-=4},function(){this.b=L(this,this.F(H(this)));this.a-=7},function(){this.b=L(this,
|
||||
this.b);this.a-=4},function(){this.b=O(this,this.h);this.a-=4},function(){this.b=O(this,this.s);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.u);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.l);this.a-=4},function(){this.b=O(this,this.F(H(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){this.b=P(this,this.h);this.a-=4},function(){this.b=P(this,this.s);this.a-=4},function(){this.b=P(this,this.i);
|
||||
this.a-=4},function(){this.b=P(this,this.u);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.l);this.a-=4},function(){this.b=P(this,this.F(H(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=M(this,this.h);this.a-=4},function(){this.b=M(this,this.s);this.a-=4},function(){this.b=M(this,this.i);this.a-=4},function(){this.b=M(this,this.u);this.a-=4},function(){this.b=M(this,this.j);this.a-=4},function(){this.b=M(this,this.l);this.a-=
|
||||
4},function(){this.b=M(this,this.F(H(this)));this.a-=7},function(){this.b=M(this,this.b);this.a-=4},function(){this.b=Q(this,this.h);this.a-=4},function(){this.b=Q(this,this.s);this.a-=4},function(){this.b=Q(this,this.i);this.a-=4},function(){this.b=Q(this,this.u);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.l);this.a-=4},function(){this.b=Q(this,this.F(H(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){this.b=N(this,this.h);this.a-=
|
||||
4},function(){this.b=N(this,this.s);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.u);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.l);this.a-=4},function(){this.b=N(this,this.F(H(this)));this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){O(this,this.h);this.a-=4},function(){O(this,this.s);this.a-=4},function(){O(this,this.i);this.a-=4},function(){O(this,this.u);this.a-=4},function(){O(this,this.j);this.a-=
|
||||
4},function(){O(this,this.l);this.a-=4},function(){O(this,this.F(H(this)));this.a-=7},function(){O(this,this.b);this.a-=4},function(){this.f&255&&(D(this,U(this)),this.a-=6);this.a-=5},function(){Ib(this,U(this));this.a-=10},function(){var a=T(this);this.f&255&&D(this,a);this.a-=10},Qb,function(){var a=T(this);this.f&255&&(V(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){V(this,Hb(this));this.a-=11},function(){this.b=K(this,S(this));this.a-=7},function(){V(this,this.m);D(this,0);this.a-=
|
||||
11},function(){this.f&255||(D(this,U(this)),this.a-=6);this.a-=5},Rb,function(){var a=T(this);this.f&255||D(this,a);this.a-=10},Qb,function(){var a=T(this);this.f&255||(V(this,this.m),D(this,a),this.a-=6);this.a-=11},Sb,function(){this.b=L(this,S(this));this.a-=7},function(){V(this,this.m);D(this,8);this.a-=11},function(){J(this)||(D(this,U(this)),this.a-=6);this.a-=5},function(){Jb(this,U(this));this.a-=10},function(){var a=T(this);J(this)||D(this,a);this.a-=10},function(){for(var a=S(this),b=this.w,
|
||||
c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var h=b.l[a],g=b.B[a]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h&&h[0])h[0](a,k,d);f+=g<<3;a+=g;e-=g}this.a-=10},function(){var a=T(this);J(this)||(V(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){V(this,G(this));this.a-=11},function(){this.b=O(this,S(this));this.a-=7},function(){V(this,this.m);D(this,16);this.a-=11},function(){J(this)&&(D(this,U(this)),this.a-=6);this.a-=5},Rb,function(){var a=T(this);J(this)&&D(this,a);this.a-=10},function(){for(var a=
|
||||
S(this),b=this.w,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.j[a],g=b.o[a]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h&&h[0]&&(l=h[0](a,c),void 0===l?l=k:l&=k);e|=l<<f;f+=g<<3;a+=g;d-=g}this.b=e&255;this.a-=10},function(){var a=T(this);J(this)&&(V(this,this.m),D(this,a),this.a-=6);this.a-=11},Sb,function(){this.b=P(this,S(this));this.a-=7},function(){V(this,this.m);D(this,24);this.a-=11},function(){Kb(this)||(D(this,U(this)),this.a-=6);this.a-=5},function(){I(this,U(this));this.a-=10},function(){var a=
|
||||
T(this);Kb(this)||D(this,a);this.a-=10},function(){var a=U(this);V(this,H(this));I(this,a);this.a-=18},function(){var a=T(this);Kb(this)||(V(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){V(this,H(this));this.a-=11},function(){this.b=M(this,S(this));this.a-=7},function(){V(this,this.m);D(this,32);this.a-=11},function(){Kb(this)&&(D(this,U(this)),this.a-=6);this.a-=5},function(){D(this,H(this));this.a-=5},function(){var a=T(this);Kb(this)&&D(this,a);this.a-=10},function(){var a=H(this);I(this,
|
||||
G(this));Jb(this,a);this.a-=5},function(){var a=T(this);Kb(this)&&(V(this,this.m),D(this,a),this.a-=6);this.a-=11},Sb,function(){this.b=Q(this,S(this));this.a-=7},function(){V(this,this.m);D(this,40);this.a-=11},function(){this.o&128||(D(this,U(this)),this.a-=6);this.a-=5},function(){var a=U(this);Eb(this,a);this.b=a>>8;this.a-=10},function(){var a=T(this);this.o&128||D(this,a);this.a-=10},function(){this.J&=-513;this.a-=4},function(){var a=T(this);this.o&128||(V(this,this.m),D(this,a),this.a-=6);
|
||||
this.a-=11},function(){V(this,Gb(this)&255|this.b<<8);this.a-=11},function(){this.b=N(this,S(this));this.a-=7},function(){V(this,this.m);D(this,48);this.a-=11},function(){this.o&128&&(D(this,U(this)),this.a-=6);this.a-=5},function(){this.B=H(this)&65535;this.a-=5},function(){var a=T(this);this.o&128&&D(this,a);this.a-=10},function(){this.J|=512;this.a-=4},function(){var a=T(this);this.o&128&&(V(this,this.m),D(this,a),this.a-=6);this.a-=11},Sb,function(){O(this,S(this));this.a-=7},function(){V(this,
|
||||
this.m);D(this,56);this.a-=11}];function X(a){t.call(this,"ChipSet",a,X);var b=a.model;b&&!Tb[b]&&q("Unrecognized ChipSet model: "+b);this.aa=Tb[b]||Ub;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);B(this)}v(X);var Ub=1978.1,Tb={SI1978:Ub};m=X.prototype;m.P=function(){return!1};
|
||||
m.ca=function(a,b,c,d){this.w=b;this.a=c;this.I=d;this.v=a;if(this.aa==Ub){var e;a=Vb;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.j[g]?q("Input port 0x"+n(g,4)+" already registered"):c.j[g]=[h,!1]}var k;e=Wb;void 0===k&&(k=0);for(var l in e)if(f=b,a=+l+k,c=e[l].bind(this),void 0!==c)for(d=+l+k;d<=a;d++)void 0!==f.l[d]?q("Output port 0x"+n(d,4)+" already registered"):f.l[d]=[c,!1]}};
|
||||
m.X=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.W=function(a){return a?this.save():!0};m.reset=function(){this.f=this.h=this.c=this.b=this.l=this.j=this.i=0};m.save=function(){var a=new E(this);this.aa==Ub&&F(a,0,[this.i,this.j,this.l,this.b,this.c,this.f,this.h]);return a.data()};m.restore=function(a){a=a[0];this.aa==Ub&&(this.i=a[0],this.j=a[1],this.l=a[2],this.b=a[3],this.c=a[4],this.f=a[5],this.h=a[6]);return!0};m.start=function(){};m.stop=function(){};
|
||||
m.mb=function(){return this.i};m.nb=function(){return this.j};m.ob=function(){return this.l};m.lb=function(){return this.b>>8-this.c&255};m.qb=function(a,b){this.c=b};m.sb=function(a,b){this.f=b};m.rb=function(a,b){this.b=b<<8|this.b>>8};m.tb=function(a,b){this.h=b};m.ub=function(){};var Vb={0:X.prototype.mb,1:X.prototype.nb,2:X.prototype.ob,3:X.prototype.lb},Wb={2:X.prototype.qb,3:X.prototype.sb,4:X.prototype.rb,5:X.prototype.tb,6:X.prototype.ub};
|
||||
xa(function(){for(var a=z(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new X(d);Ma(d,c)}});function Xb(a){t.call(this,"ROM",a,Xb);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.h=a.file;this.m=ba(this.h);if(this.h){a=this.h;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=ja()+"/api/v1/dump?file="+this.h+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){Yb(c,a,b,f)})}}v(Xb);var Zb=[0,5];
|
||||
Xb.prototype.ca=function(a,b,c,d){this.w=b;this.a=c;this.I=d;$b(this)};Xb.prototype.X=function(){this.i&&(this.I&&this.I.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Xb.prototype.W=function(){return!0};
|
||||
function Yb(a,b,c,d){if(d)a.L("Unable to load system ROM (error "+d+": "+b+")");else{Ka(a.Ua,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.L("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]);$b(a)}}
|
||||
function $b(a){if(!Oa(a))if(!a.h)B(a);else if(a.b&&a.w){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.g.ba=!0;a.L(b)}else if(ac(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.w,h=d.c,g=[],k=d.j>>>f.C;0<h&&k<f.b.length;)g.push(f.b[k++]),h-=f.H;f=d.w;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.H}}delete a.b}B(a)}}
|
||||
function ac(a,b){if(Wa(a.w,b,a.c,a.l?1:db)){var c;for(c=0;c<a.b.length;c++)Ya(a.w,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Zb.length;c++)Ya(a.w,Zb[c],118);Db(a.a,function(a){return function(b){if(0<=Zb.indexOf(b)){var c=!1,h=a.a,g=a.I;if(5==b)switch(c=!0,h.s){case 2:bc(a,String.fromCharCode(h.u));break;case 9:for(var k=G(h),l="",x=255;x--;){var r=a.a.F(k++);if(36==r)break;l+=String.fromCharCode(r)}bc(a,l);break;default:c=!1}c?Rb.call(h):g&&(a.O("\nCP/M vector 0x"+n(b,4)),D(h,b),tb(g));b=!0}else b=!1;
|
||||
return b}}(a));Fb(a.a,b)}return!0}return!1}function bc(a,b){b=b.replace(/\r/g,"");a.Z&&(a.Z.value+=b,a.Z.scrollTop=a.Z.scrollHeight)}xa(function(){for(var a=z(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Xb(d);Ma(d,c)}});function cc(a){t.call(this,"RAM",a,cc);this.f=a.addr;this.c=a.size;this.b=!1}v(cc);m=cc.prototype;m.ca=function(a,b,c,d){this.w=b;this.a=c;this.I=d;B(this)};m.X=function(a,b){b||this.reset();return!0};m.W=function(a){return a?this.save():!0};
|
||||
m.reset=function(){!this.b&&this.c&&Wa(this.w,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||q("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};xa(function(){for(var a=z(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new cc(d);Ma(d,c)}});function dc(a){t.call(this,"Keyboard",a,dc);B(this)}v(dc);
|
||||
xa(function(){for(var a=z(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new dc(d);Ma(d,c)}});
|
||||
function ec(a,b,c){t.call(this,"Video",a,ec);this.J=a.screenWidth;this.M=a.screenHeight;this.j=a.bufferAddr;this.b=a.bufferCols;this.c=a.bufferRows;this.B=a.bufferBits||1;this.jb=a.interruptRate;this.Y=a.refreshRate||60;this.m=c;this.G=[[0,0,0,255],[255,255,255,255]];this.o=this.m.createImageData(this.b,this.c);this.h=document.createElement("canvas");this.h.width=this.b;this.h.height=this.c;this.H=this.h.getContext("2d")}v(ec);
|
||||
ec.prototype.ca=function(a,b,c,d){this.v=a;this.w=b;this.a=c;this.I=d;this.i=(this.b*this.B>>3)*this.c;Wa(this.w,this.j,this.i,3)&&(this.C=this.i>>1,this.D=16/this.B|0,this.l=!1,void 0===this.f||this.f.length!=this.C)&&(this.f=Array(this.C));B(this)};
|
||||
xa(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 <canvas> support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
|
||||
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ca.aspect);f&&.3<=f&&3.33>=f&&(wa("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");qa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new ec(d,0,e);Ma(d,c)}});
|
||||
function E(a,b,c){this.id=a.id;this.key=fc(a,b,c);this.I=a.I;gc(this,a.eb)}function fc(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
E.prototype={constructor:E,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){gc(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 gc(a,b){a[a.id]={};b&&F(a,"parms",b);a.a=!1}function hc(a){var b=!0;if(na()){var c=JSON.stringify(a[a.id]);pa(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function ic(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){q(c.message||c),b=!1}return b}function jc(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:na()&&(b=oa(a.key))?(a[a.id]=b,a.a=!0):!1}function kc(a,b){return a[a.id][b]||null}function F(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function lc(a,b,c){t.call(this,"Computer",a,lc);this.g.K=!1;mc(this,b);this.C=ob(this,"autoPower",a);this.f=0;this.M=a.busWidth||a.buswidth;this.b=nc;this.v=null;this.j=this.J=!1;this.N=ob(this,"url")||"";(Math.random()+.1).toString(36);this.c=oc(this);if(this.a=La("CPU",this.id)){this.I=La("Debugger",this.id);this.B=[];for(b=null;b=Sa(this,"Video",b);)this.B.push(b);this.w=new Ua({id:this.Ua+".bus",busWidth:this.M},this.a,this.I);var d,e=w(this.id);if((this.h=La("Panel",this.id))&&this.h.Z)for(b=
|
||||
0;b<e.length;b++)d=e[b],d.L=this.h.L,d.O=this.h.O,d.Z=this.h.Z;for(b=0;b<e.length;b++)d=e[b],d.ca&&d.ca(this,this.w,this.a,this.I);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=ob(this,"state")||(f=!0,a.state))b=this.D=a,f||(this.j=!0,this.b=nc),this.b&&(this.o=new E(this,Y),jc(this.o)?b=null:delete this.o);!b&&this.b&&(b=pc(this))&&(this.j=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.m=null,h.j=!1,h.L("Unable to load machine state from server (error "+
|
||||
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.v=b,h.J=!0);B(h)})}else B(this);this.A.power||(this.C=!0);!c&&this.C&&qc(this,this.xa)}else q("Unable to find CPU component")}v(lc);var Y="1.22.0",nc=0;function mc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){q(d.message+" ("+c+")")}}a.l=b}
|
||||
function ob(a,b,c){var d=b.toLowerCase(),d=Ca[b]||Ca[d];void 0===d&&a.l&&(d=a.l[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function qc(a,b,c){for(var d=w(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Oa(f)){Oa(f,function(){qc(a,b,c)});return}}b.call(a,c)}
|
||||
function rc(a,b){var c=new E(a,Y,"validate");if(jc(c)&&ic(c)){var d=kc(c,"timestamp"),e=b?kc(b,"timestamp"):"unknown";d!=e&&(a.L("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=lc.prototype;
|
||||
m.xa=function(a){void 0===a&&(a=this.b||(this.v?1:nc));if(!this.f){this.f++;var b=!1,c=!1;this.H=!1;var d=this.o||new E(this,Y);if(-1==a)b=!0;else if(a>nc){if(jc(d,this.v)){this.i=new E(this,Y,"failsafe");jc(this.i)&&(sc(this,d),a=2,gc(this.i));F(this.i,"timestamp",ia());hc(this.i);var e=this.b&&!this.j;if(1==a||ka("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=ic(d)){var f=kc(d,"code"),h=kc(d,"data");f&&("ok"==f?jc(d,h):("error"==f&&"no machine state"!=
|
||||
h?(this.L("Error: "+h),"unable to verify user"==h&&(pa("user",""),this.c=null)):this.O(f+": "+h),gc(d),jc(d)?(c=ic(d),e=!0):c=!1))}e&&rc(this,c?d:null)}else 2==a&&d.clear()}else rc(this);delete this.v;delete this.o}e=w(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=tc(this,h,d,b,c));b=[d,a,c];-1!=a?qc(this,this.Va,b):this.Va(b)}};
|
||||
function tc(a,b,c,d,e){if(!b.g.K){b.g.K=!0;if(b.X){var f=null;e&&((f=kc(c,b.id))||(f=kc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.X(f,d)&&f&&(q("Unable to restore state for "+b.type),a.D&&!a.J?(c.clear(),a.b=nc,window&&window.location.reload()):a.H=!0,b.X(null),e=!1)}if(!d&&b.Sa)for(a=b.Sa.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
m.Va=function(a){var b=a[0],c=0>a[1];a=a[2];this.g.K=!0;var d=this.A.power;d&&(d.textContent="Shutdown");this.G||(this.O("PC8080 v"+Y+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.G=!0);this.a&&(tc(this,this.a,b,c,a),sb(this.a));this.H&&(sc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
|
||||
function sc(a,b){if(ka("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.N,d=a.c||"",e=b.toString(),f={app:"PC8080"};f.ver=Y;f.url=c;f.user=d;f.type="bug";f.data=e;p("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function uc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new E(a,Y),h=new E(a,Y,"validate"),g=ia();F(h,"timestamp",g);F(f,"timestamp",g);F(f,"version","1.22.0");F(f,"url",window?window.location.href:null);F(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.W&&(c&&tb(a.a),d=a.a.W(b,c),"object"===typeof d&&F(f,a.a.id,d),c&&(a.a.g.K=!1,!1===d&&(e=null)));for(var g=w(a.id),k=0;k<g.length;k++){var l=g[k];l.g.K&&(l.W&&(d=l.W(b,c),"object"===typeof d&&F(f,l.id,d)),c&&(l.g.K=!1,!1===d&&(e=
|
||||
null)))}e&&(c?(g=d=!1,b?(a.c&&vc(a,a.c,f.toString()),hc(h)&&hc(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.g.K=!1,b=a.A.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.w&&this.w.reset&&this.w.reset();for(var a=w(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.w&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=w(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};
|
||||
m.stop=function(a,b){for(var c=w(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
||||
m.P=function(a,b,c){var d=this;switch(b){case "power":return this.A[b]=c,c.onclick=function(){d.f||(d.g.K?uc(d,!1,!0):qc(d,d.xa))},!0;case "reset":return this.A[b]=c,c.onclick=function(){if(d.g.K&&!d.f)if(d.b&&!d.m){var a=ka("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");uc(d,a,!0);!a&&d.D?window&&window.location.reload():d.xa(nc)}else d.reset(),d.a&&sb(d.a)},!0;case "save":if(da(ja(),"pcjs.org")){c.parentNode.removeChild(c);break}this.A[b]=
|
||||
c;c.onclick=function(){var a=oc(d,!0);if(a){var b=!!(d.b&&!d.m||d.D),c=uc(d,b);b?vc(d,a,c):d.L("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function oc(a,b){var c=a.c;c||(c=oa("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=wc(a,c))||a.L("The user ID is invalid."))):b&&a.L("Browser local storage is not available"));return c}
|
||||
function wc(a,b){a.c=null;var c=p(ja()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(pa("user",c.data),a.c=c.data)}catch(e){q(e.message+" ("+d+")")}return a.c}function pc(a){var b=null;a.c&&(b=ja()+"/api/v1/user?req=load&user="+a.c+"&state="+fc(a,Y));return b}
|
||||
function vc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=fc(a,Y);d.data=c;b=p(ja()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.L("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.L(c),pa("user",""),a.c=null)}}
|
||||
function Sa(a,b,c){a=w(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.fa=function(a){this.a&&this.a.fa(a);this.h&&this.h.fa(a)};
|
||||
function zb(a,b){for(var c=0;c<a.B.length;c++)a:{var d=a.B[c];if(0<=b){if(b&1){d=d.a;d.G=d.G&-8|10;break a}var e=d.a;e.G=e.G&-8|9;if(e=d.l){for(var e=d.w,f=d.i,h=!0,g=d.j>>>e.C;0<f&&g<e.b.length;)e.b[g].R&&(e.b[g].R=h=!1,e.b[g].Xa=!0),f-=e.H,g++;e=h}if(e)break a}for(var e=d.j,f=e+d.i,h=0,g=d.G,k=0,l=0,x=d.b,r=0,Z=d.c,wb=0;e<f;){var A;A=d.w;var ha=e,Fa=ha&A.c,ra=(ha&A.h)>>>A.C;A=Fa!=A.c?A.b[ra].fb(Fa,ha):A.b[ra++].Ma(Fa,ha)|A.b[ra&A.v].Ma(0,ha+1)<<8;if(d.l&&A===d.f[h])k+=d.D;else{d.f[h]=A;A=A>>8|(A&
|
||||
255)<<8;ha=65536;Fa=16;k<x&&(x=k);for(ra=0;ra<d.D;ra++){var la=(A&(ha>>=1))>>--Fa,Ga=d.o,sa=k++,la=g[la],sa=(sa+l*Ga.width)*la.length;Ga.data[sa]=la[0];Ga.data[sa+1]=la[1];Ga.data[sa+2]=la[2];Ga.data[sa+3]=la[3]}k>r&&(r=k);l<Z&&(Z=l);l>=wb&&(wb=l+1)}e+=2;h++;if(k>=d.b&&(k=0,l++,l>d.c))break}d.l=!0;x<d.b&&(d.H.putImageData(d.o,0,0,x,Z,r-x,wb-Z),d.m.drawImage(d.h,0,0,d.b,d.c,0,0,d.J,d.M))}}
|
||||
xa(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 lc(h,d,!0);Ma(h,f);h.C&&qc(h,h.xa)}});ta.show.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=La("Computer",c.id))&&c.G&&!c.g.K&&c.xa(-1)}});
|
||||
ta.exit.push(function(){for(var a=z(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=La("Computer",c.id))&&c.g.K&&uc(c,!(!c.b||c.m),!0)}});var xc=0;function yc(a,b,c,d,e,f){e("Loading "+a+"...");p(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):zc(g,a,b,c,d,e,f)})}
|
||||
function zc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ka(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){g=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Ac(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
||||
function Ac(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,x=/( [a-z]+=)(['"])(.*?)\2/g;l=x.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],h);Ac(a,b,c)}})}else c(a,null)}
|
||||
function Bc(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&&(--xc||za(!0));k=!1}var h,g,k=!0;xc++;Ja[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var x=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=l:r.appendChild(document.createTextNode(l));x.appendChild(r)}c||
|
||||
(c="/versions/pc8080/1.22.0/components.xsl");l=function(d,g){g?yc(c,null,null,!1,e,function(d,l){if(l)if(Ka(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--xc||za(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--xc||za(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?yc(b,a,d,!0,e,l):zc(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(Z){f(Z.message)}return k}window.embedPC8080=function(a,b,c,d){za(!1);return Bc(a,b,c,d)};window.enableEvents=za;window.sendEvent=Aa;
|
||||
function Cc(a,b,c,d){if(!c&&b){d.push(b);a=Ja[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Dc(b,d)}):Dc(null,d)}else q("Error ("+c+") requesting "+a)}
|
||||
function Dc(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=Ja[f],k={},l;for(l in g){var x=g[l],r=ca(l);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(g[l]);){var Z=d[2];Z&&(g[Z]||(x=x.replace(d[0],"")))}d=l=ba(l)}else"xsl"==r&&(e=l=ba(l));k[l]=x}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),l=h,g=null,k="data:application/javascript,",k=qa("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 pa(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function sa(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var t={init:[],show:[],exit:[]},ta=!1,ua=!0;function va(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function wa(a){t.init.push(a)}
|
||||
function xa(a){if(ua)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){q("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function ya(a){!ua&&a?(ua=!0,ta&&za("init")):ua=a}function za(a){t[a]&&xa(t[a])}va("onload",function(){ta=!0;xa(t.init)});va("onpageshow",function(){xa(t.show)});va(sa("Opera")||sa("iOS")?"onunload":"onbeforeunload",function(){xa(t.exit)});
|
||||
function u(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.ya=b.comment;this.Ya=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Oa=this.id.substr(0,b),this.za=this.id.substr(b+1)):this.za=this.id;this[a]=c;this.h={ea:!1,la:!1,Ia:!1,J:!1,Y:!1};this.Ca=null;this.h.Y=!1;this.B={};this.H=null;v.push(this)}var Aa=void 0,Ba={};
|
||||
if(window){Aa||(Aa=window.location.search.substr(1));for(var Ca,Da=/\+/g,Ga=/([^&=]+)=?([^&]*)/g;Ca=Ga.exec(Aa);)Ba[decodeURIComponent(Ca[1].replace(Da," "))]=decodeURIComponent(Ca[2].replace(Da," "))}function Ha(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
|
||||
function w(a,b){b||(b=u);a.prototype=Ha(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var v=[],Ia={};function Ja(a,b,c){Ia[a]&&b&&(Ia[a][b]=c)}function y(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<v.length;b++){var d=v[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
||||
function Ka(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<v.length;d++)if(c)c==v[d]&&(c=null);else if(!(a!=v[d].type||b&&v[d].id.indexOf(b)))return v[d]}return null}function z(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){q(c.message+" ("+a+")")}return b}
|
||||
function La(a,b){for(var c=B(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=z(h))&&g.binding&&a.P(g.type,g.binding,h,g.value),l=k.length}}}}
|
||||
function B(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
|
||||
u.prototype={constructor:u,parent:null,toString:function(){return this.name?this.name:this.id||this.type},P:function(a,b,c){switch(b){case "clear":return this.B[b]||(this.B[b]=c,c.onclick=function(a){return function(){a.B.print&&(a.B.print.value="")}}(this)),!0;case "print":return this.B[b]||(this.X=this.B[b]=c,c.value="",this.O=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
|
||||
this.K=function(a,b,c){this.O(a,"notice",c)}),!0;default:return!1}},log:function(){},O:function(){},status:function(a){this.O(this.za+": "+a)},K:function(a,b){b||q(a)},V:function(){return this.h.J=!0},U:function(a,b){b&&(this.h.J=!1);return!0}};function Ma(a,b){if(a.h.Ia)return a.h.la&&(a.h.la=!1),a.h.Ia=!1;if(a.h.Y)return a.O(a.toString()+" error"),!1;a.h.la=b;return a.h.la}function C(a){if(!a.h.Y&&(a.h.ea=!0,a.h.ea)){var b=a.Ca;a.Ca=null;b&&b()}}
|
||||
function Na(a,b){b&&(a.h.ea?b():a.Ca=b);return a.h.ea}
|
||||
var Oa="undefined"!==typeof ArrayBuffer,Pa=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
|
||||
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function Qa(a){u.call(this,"Panel",a,Qa)}w(Qa);m=Qa.prototype;m.P=function(a,b,c,d){return this.u&&this.u.P(a,b,c,d)||this.a&&this.a.P(a,b,c,d)||this.b&&this.b.P(a,b,c,d)?!0:this.parent.P.call(this,a,b,c,d)};m.Z=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.b=Ra(a,"Keyboard")};m.V=function(a,b){b||Sa();return!0};m.U=function(){return!0};m.ba=function(){};
|
||||
function Sa(){for(var a=!1,b=B(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=z(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<v.length;h++)if(v[h].id===f){f=v[h];break a}f=null}f||(a=!0,f=new Qa(e));La(f,d);a&&C(f)}}wa(Sa);
|
||||
function Ta(a,b,c){u.call(this,"Bus",a,Ta);this.a=b;this.H=c;this.j=a.busWidth||16;this.s=Math.pow(2,this.j);this.i=this.s-1|0;this.c=16>=this.j?10:20>=this.j?12:24>=this.j?14:15;this.f=1<<this.c;this.A=this.f>>2;this.g=this.f-1;this.l=this.s/this.f|0;this.u=this.l-1;this.o=[];this.m=[];this.C=[];this.D=[];a=new D;Ua(a,this.H);this.b=Array(this.l);for(b=0;b<this.l;b++)this.b[b]=a;C(this)}w(Ta);Ta.prototype.reset=function(){};Ta.prototype.V=function(a,b){b||this.reset();return!0};
|
||||
function Va(a,b,c,d){for(var e=b>>>a.c;0<c&&e<a.b.length;){var f=a.b[e],h=e*a.f,g=a.f-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.ka)return f.Ha+=f.ka-b,f.ka=b,!0;if(b>=f.ka+f.Ha){g=f.size-(b-h);g>c&&(g=c);f.Ha=b-f.ka+g;b=h+a.f;c-=g;e++;continue}}return Wa(1,b,c)}b=new D(b,g,a.f,d);Ua(b,a.H,f);a.b[e++]=b;b=h+a.f;c-=g}return 0>=c?!0:Wa(2,b,c)}Ta.prototype.F=function(a){return this.b[(a&this.i)>>>this.c].ta(a&this.g,a)};
|
||||
function Xa(a,b){var c=b&a.g,d=(b&a.i)>>>a.c;return c!=a.g?a.b[d].pb(c,b):a.b[d++].ta(c,b)|a.b[d&a.u].ta(0,b+1)<<8}Ta.prototype.M=function(a,b){this.b[(a&this.i)>>>this.c].ua(a&this.g,b&255,a)};function Ya(a,b,c){a.b[(b&a.i)>>>a.c].ab(b&a.g,c&255,b)}function Za(a,b,c){var d=b&a.g,e=(b&a.i)>>>a.c;d!=a.g?a.b[e].qb(d,c&65535,b):(a.b[e++].ua(d,c&255,b),a.b[e&a.u].ua(0,c>>8&255,b+1))}function Wa(a,b,c){q("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var $a;
|
||||
if(Oa){var ab=new ArrayBuffer(2);(new DataView(ab)).setUint16(0,256,!0);$a=256===(new Uint16Array(ab))[0]}else $a=!1;var bb=$a;
|
||||
function D(a,b,c,d){this.id=cb+=2;this.a=null;this.ka=a;this.Ha=b;this.size=c||0;this.type=d||db;this.g=d==eb;Ua(this);this.S=this.Ra=!1;if(c)if(Oa)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.l=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),fb(this,bb?gb:hb);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;fb(this,ib)}else fb(this)}var db=0,eb=2,cb=0;
|
||||
D.prototype={constructor:D,parent:null,save:function(){var a,b;if(Oa)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Oa)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.S=!0}return!1},o:function(){return 255},B:function(){},m:function(a,b){return this.ta(a++,b++)|this.ta(a,b)<<8},u:function(a,b,c){this.ua(a++,b&255,c++);this.ua(a,b>>8,c)},D:function(a){return this.a[a>>
|
||||
2]>>>((a&3)<<3)&255},N:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},da:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.S=!0},za:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.S=!0},A:function(a,b){return this.Ma(a,b)},I:function(a,b){return this.Za(a,b)},R:function(a,b,c){this.g||this.ab(a,b,c)},wa:function(a,
|
||||
b,c){this.g||this.xa(a,b,c)},s:function(a){return this.b[a]},C:function(a){return this.b[a]},G:function(a){return this.f.getUint16(a,!0)},L:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.l[a>>1]},W:function(a,b){this.b[a]=b;this.S=!0},ca:function(a,b){this.b[a]=b;this.S=!0},va:function(a,b){this.f.setUint16(a,b,!0);this.S=!0},ya:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.l[a>>1]=b;this.S=!0}};function Ua(a,b,c){a.H=b;a.i=a.j=0;c&&((a.i=c.i)&&jb(a,kb,!1),(a.j=c.j)&&lb(a,kb,!1))}
|
||||
function lb(a,b,c){c&&a.j||(a.ua=!a.g&&b[2]||a.B,a.qb=!a.g&&b[3]||a.u);if(c||void 0===c)a.ab=b[2]||a.B,a.xa=b[3]||a.u}function jb(a,b,c){c&&a.i||(a.ta=b[0]||a.o,a.pb=b[1]||a.m);if(c||void 0===c)a.Ma=b[0]||a.o,a.Za=b[1]||a.m}function fb(a,b){b||(b=mb);jb(a,b,void 0);lb(a,b,void 0)}var mb=[],ib=[D.prototype.D,D.prototype.N,D.prototype.da,D.prototype.za],kb=[D.prototype.A,D.prototype.I,D.prototype.R,D.prototype.wa];
|
||||
if(Oa)var hb=[D.prototype.s,D.prototype.G,D.prototype.W,D.prototype.va],gb=[D.prototype.C,D.prototype.L,D.prototype.ca,D.prototype.ya];
|
||||
function nb(a,b){u.call(this,"CPU",a,nb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.ja=c;this.c.Ga=0;this.c.ia=d;this.c.Ja=Math.round(this.c.ja/1E4)/100;this.c.fa=this.c.Ja*this.c.ia;this.h.T=!1;this.h.Ta=!1;this.h.Qa=a.autoStart;this.h.Sa=!1;this.h.Aa=!1;this.c.Ea=this.c.ha=0;this.c.Fa=a.csStart;this.c.ma=a.csInterval;this.c.na=a.csStop;this.cb=this.Na.bind(this);C(this)}w(nb);var ob=["power","reset"];m=nb.prototype;
|
||||
m.Z=function(a,b,c,d){this.u=a;this.o=b;this.H=d;for(b=0;b<ob.length;b++)(c=this.B[ob[b]])&&this.u.P(null,ob[b],c);this.W=(b=Ra(a,"Video"))&&Math.max(b.W,b.bb)||60;this.da=Ra(a,"ChipSet");a=pb(a,"autoStart");null!=a&&(this.h.Qa="true"==a?!0:"false"==a?!1:!!a);C(this)};m.reset=function(){this.c.Ga=0};m.save=function(){return null};m.restore=function(){return!1};
|
||||
m.V=function(a,b){if(!b){if(a&&this.restore){qb(this);if(!this.restore(a))return!1;rb(this)}else this.reset();this.O("No debugger detected")}sb(this);return!0};m.U=function(a){return a?this.save():!0};function tb(a){(a.h.Qa||void 0===a.B.run)&&a.Na()}m.Ua=function(){return 0};function rb(a){void 0===a.c.Fa&&(a.c.Fa=0);void 0===a.c.ma&&(a.c.ma=-1);void 0===a.c.na&&(a.c.na=-1);a.h.Aa=0<=a.c.Fa&&0<a.c.ma;a.h.Aa&&(a.c.Ea=0,a.c.ha=a.c.Fa-a.N)}
|
||||
m.P=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.B[b]=c;a=!0;break;case "run":this.B[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.h.J)a=!0;else{var b=null,c,g=y(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.h.ea);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.h.J);c++);c==g.length&&(b=a);q("The "+b.type+" component ("+b.id+") is not "+(b.h.ea?"powered yet":"ready yet"+(b.Ca?" (waiting for notification)":""))+".");a=!1}a&&(d.h.T?ub(d,!0):d.Na())};a=!0;break;
|
||||
case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(){wb(d,d.c.ia<<1)},c.textContent=this.c.fa.toFixed(2)+"Mhz",a=!0}return a};function xb(a,b,c){a.N+=b;c&&(a.L=a.a=0)}
|
||||
function yb(a,b){var c=30;c<a.W&&(c=a.W);2>c&&(c=2);var d=1;b&&1<a.c.ia&&a.c.$&&(d=a.c.$/a.c.Ja);a.c.Va=Math.round(1E3/30);a.c.jb=Math.floor(a.c.ja/c*d);a.c.Ka=Math.floor(a.c.ja/30*d);a.c.Xa=Math.floor(a.c.ja/a.W*d);a.c.Wa=Math.floor(a.c.ja/2*d);b||(a.c.qa=a.c.Ka,a.c.pa=a.c.Xa,a.c.oa=a.c.Wa);a.c.La=0}function zb(a){return a.N+a.I+a.L-a.a}function qb(a){a.c.$=0;a.N=a.I=a.L=a.a=0;rb(a);wb(a,1)}
|
||||
function wb(a,b){if(void 0!==b){.8>a.c.$/a.c.fa&&(b=1);a.c.ia=b;var c=a.c.Ja*a.c.ia;if(a.c.fa!=c){a.c.fa=c;var c=a.c.fa.toFixed(2)+"Mhz",d=a.B.setSpeed;d&&(d.textContent=c);a.O("target speed: "+c)}}xb(a,a.I);a.I=0;a.c.ga=ha();a.c.aa=0;yb(a)}
|
||||
m.Na=function(){if(Ma(this,!0)){if(!this.h.T){wb(this);this.u&&this.u.start(this.c.ga,zb(this));this.h.T=!0;this.h.Ta=!0;this.da&&this.da.start();var a=this.B.run;a&&(a.textContent="Halt");this.u&&this.u.ba(!0)}this.c.La>=this.c.ja&&yb(this,!0);this.c.ra=0;this.c.Da=ha();this.c.aa&&(a=this.c.Da-this.c.aa,a>this.c.Va&&(this.c.ga+=a,this.c.ga>this.c.Da&&(this.c.ga=this.c.Da)));try{do{var b=this.h.Aa?1:this.c.jb;try{this.$a(b)}catch(e){if("number"!=typeof e)throw e;}var c=this.L-this.a;this.I+=c;this.c.ra+=
|
||||
c;xb(this,0,!0);a=c;if(this.h.Aa){var d=!1;this.c.Ea=this.c.Ea+this.Ua()|0;this.c.ha-=a;0>=this.c.ha&&(this.c.ha+=this.c.ma,d=!0);0<=this.c.na&&this.c.na<=zb(this)&&(this.c.ma=this.c.na=-1,rb(this),ub(this),d=!0);d&&this.O(zb(this)+" cycles: checksum="+n(this.c.Ea))}this.c.pa-=c;0>=this.c.pa&&(this.c.pa+=this.c.Xa,this.u&&Ab(this.u,this.c.Ga++),this.c.Ga>this.W&&(this.c.Ga=0));this.c.oa-=c;0>=this.c.oa&&(this.c.oa+=this.c.Wa,this.u&&this.u.ba());this.c.qa-=c;if(0>=this.c.qa){this.c.qa+=this.c.Ka;
|
||||
break}}while(this.h.T)}catch(e){ub(this);sb(this);this.u&&this.u.stop(ha(),zb(this));Ma(this,!1);b=e.stack||e.message;this.h.Y=!0;this.K(b);return}b=setTimeout;c=this.cb;this.c.aa=ha();a=this.c.Va;this.c.ra&&(a=Math.round(a*this.c.ra/this.c.Ka));a-=this.c.aa-this.c.Da;if(d=this.c.aa-this.c.ga)this.c.$=Math.round(this.I/(10*d))/100,864E5<=d&&(this.N=0,wb(this));if(0>a||this.c.$<this.c.fa)a=0;this.c.La+=this.c.ra;this.c.aa+=a;b(c,a)}else sb(this),this.u&&this.u.stop(ha(),zb(this))};m.$a=function(){return 0};
|
||||
function ub(a,b){a.h.la&&(a.h.Ia=!0);a.L-=a.a;a.a=0;xb(a,a.I);a.I=0;if(a.h.T){a.h.T=!1;a.da&&a.da.stop();var c=a.B.run;c&&(c.textContent="Run")}a.h.Ba=b}function sb(a){a.u&&(Ab(a.u,-1),a.u.ba(void 0))}function Bb(a){this.R=a.model||8080;nb.call(this,a,1E6);this.va=Cb;qb(this);this.h.Ba=this.h.eb=!1;this.xa=0;this.ca=[];this.wa=0;Db(this)}w(Bb,nb);function Eb(a,b){a.ca.push(b)}m=Bb.prototype;m.reset=function(){this.h.T&&ub(this);Db(this);qb(this);this.h.Y=!1;this.parent.reset.call(this)};
|
||||
function Db(a){a.b=0;a.g=0;a.v=0;a.i=0;a.w=0;a.j=0;a.l=0;a.A=0;E(a,a.wa);Fb(a,0);a.D=0}function Gb(a,b){a.wa=b;E(a,b)}m.Ua=function(){var a=this.b+this.g+this.v+this.i+this.w+this.j+this.l|0;return a=a+this.A+this.m+Hb(this)|0};
|
||||
m.save=function(){var a=new F(this);G(a,0,[this.b,this.g,this.v,this.i,this.w,this.j,this.l,this.A,this.m,Hb(this)]);G(a,1,[this.D,this.N,this.c.ia]);for(var b=this.o,c=0,d=[],e=0;e<b.l;e++){var f=b.b[e];if(f.S||f.Ra){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var x=f[g],r=g+1;r<f.length&&f[r]===x;)r++;l[k++]=r-g;l[k++]=x;g=r}if(l.length<f.length){f=l;break a}}d[h]=f}}G(a,2,d);return a.data()};
|
||||
m.restore=function(a){var b=a[0];this.b=b[0];this.g=b[1];this.v=b[2];this.i=b[3];this.w=b[4];this.j=b[5];this.l=b[6];this.A=b[7]&65535;E(this,b[8]);Fb(this,b[9]);b=a[1];this.D=b[0];this.N=b[1];wb(this,b[3]);a:{b=this.o;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.A){for(var f=0,h=Array(b.A),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.b[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
||||
m.P=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.B[b]=c;this.xa++;d=!0;break;default:d=this.parent.P.call(this,a,b,c)}return d};function Ib(a){return a.g<<8|a.v}function Jb(a,b){a.g=b>>8&255;a.v=b&255}function H(a){return a.i<<8|a.w}function Kb(a,b){a.i=b>>8&255;a.w=b&255}function I(a){return a.j<<8|a.l}
|
||||
function J(a,b){a.j=b>>8&255;a.l=b&255}function E(a,b){a.m=b&65535}function K(a){return a.f&256?1:0}function Lb(a){return Pa[a.s&255]?4:0}function Hb(a){return a.G&-214|(a.s&128?128:0)|(a.f&255?0:64)|((a.s^a.C)&16?16:0)|Lb(a)|K(a)}function Fb(a,b){a.f=a.s=a.C=0;b&1&&(a.f|=256);b&4||(a.s|=1);b&16&&(a.C|=16);b&64||(a.f|=255);b&128&&(a.s^=192);a.G=a.G&-513|b&512|2}function L(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b)&255}function M(a,b){a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?1:0))&255}
|
||||
function N(a,b){a.f=a.s=a.C=a.b&b;(a.b|b)&8&&(a.C^=16);return a.f}function Mb(a,b){a.C=b^255;b=a.s=b+255&255;a.f=a.f&-256|b;return b}function Nb(a,b){a.C=b;b=a.s=b+1&255;a.f=a.f&-256|b;return b}function O(a,b){return a.s=a.f=a.C=a.b|b}function P(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+1^256)&255}function Q(a,b){b^=255;a.C=a.b^b;return a.s=(a.f=a.b+b+(a.f&256?0:1)^256)&255}function R(a,b){return a.s=a.f=a.C=a.b^b}m.F=function(a){return this.o.F(a)};m.M=function(a,b){this.o.M(a,b)};
|
||||
function S(a){var b=a.F(a.m);E(a,a.m+1);return b}function T(a){var b=Xa(a.o,a.m);E(a,a.m+2);return b}function U(a){var b=Xa(a.o,a.A);a.A=a.A+2&65535;return b}function V(a,b){a.A=a.A-2&65535;Za(a.o,a.A,b)}function W(a,b,c,d){d=d||2;a.B[b]&&(void 0===c&&(a.h.Y=!0,a.K("Value for "+b+" is invalid"),ub(a)),c=!a.h.T||a.h.Sa?n(c,d):"--------".substr(0,d),a.B[b].textContent!=c&&(a.B[b].textContent=c))}
|
||||
m.ba=function(a){this.xa&&(a||!this.h.T||this.h.Sa)&&(W(this,"A",this.b),W(this,"B",this.g),W(this,"C",this.v),W(this,"BC",Ib(this),4),W(this,"D",this.i),W(this,"E",this.w),W(this,"DE",H(this),4),W(this,"H",this.j),W(this,"L",this.l),W(this,"HL",I(this),4),W(this,"SP",this.A,4),W(this,"PC",this.m,4),a=Hb(this),W(this,"PS",a,4),W(this,"SF",a&128?1:0,1),W(this,"ZF",a&64?1:0,1),W(this,"AF",a&16?1:0,1),W(this,"PF",a&4?1:0,1),W(this,"CF",a&1?1:0,1));if(a=this.B.speed)a.textContent=this.h.T&&this.c.$?this.c.$.toFixed(2)+
|
||||
"Mhz":"Stopped"};m.$a=function(a){this.h.Ba=!0;this.h.eb=!1;this.h.Ta=!1;this.L=this.a=a;do{if(a=this.D)this.D&8&&this.G&512?(a=199|(this.D&7)<<3,this.D&=-16,this.G&=-513,this.va[a].call(this),a=!0):a=!1,a=!a;if(a&&this.D&16){this.a=0;break}this.va[S(this)].call(this)}while(0<this.a);return this.h.Ba?this.L-this.a:void 0===this.h.Ba?0:-1};wa(function(){for(var a=B(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Bb(d);La(d,c)}});function Ob(){this.a-=4}
|
||||
function Pb(){E(this,T(this));this.a-=10}function Qb(){E(this,U(this));this.a-=10}function Rb(){var a=T(this);V(this,this.m);E(this,a);this.a-=17}
|
||||
var Cb=[Ob,function(){Jb(this,T(this));this.a-=10},function(){this.M(Ib(this),this.b);this.a-=7},function(){Jb(this,Ib(this)+1);this.a-=5},function(){this.g=Nb(this,this.g);this.a-=5},function(){this.g=Mb(this,this.g);this.a-=5},function(){this.g=S(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+Ib(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(Ib(this));this.a-=7},function(){Jb(this,Ib(this)-
|
||||
1);this.a-=5},function(){this.v=Nb(this,this.v);this.a-=5},function(){this.v=Mb(this,this.v);this.a-=5},function(){this.v=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){Kb(this,T(this));this.a-=10},function(){this.M(H(this),this.b);this.a-=7},function(){Kb(this,H(this)+1);this.a-=5},function(){this.i=Nb(this,this.i);this.a-=5},function(){this.i=Mb(this,this.i);this.a-=5},function(){this.i=S(this);this.a-=7},function(){var a=this.b<<
|
||||
1;this.b=a&255|this.f>>8;this.f=this.f&255|a&256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+H(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(H(this));this.a-=7},function(){Kb(this,H(this)-1);this.a-=5},function(){this.w=Nb(this,this.w);this.a-=5},function(){this.w=Mb(this,this.w);this.a-=5},function(){this.w=S(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(this.f&256|this.b)>>1;this.f=this.f&255|a;this.a-=4},Ob,function(){J(this,T(this));this.a-=10},function(){var a=
|
||||
T(this);Za(this.o,a,I(this));this.a-=16},function(){J(this,I(this)+1);this.a-=5},function(){this.j=Nb(this,this.j);this.a-=5},function(){this.j=Mb(this,this.j);this.a-=5},function(){this.j=S(this);this.a-=7},function(){var a=0,b=K(this);if((this.s^this.C)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=L(this,a);this.f=b?this.f|256:this.f&-257;this.a-=4},Ob,function(){var a;J(this,a=I(this)+I(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){var a;a=T(this);a=Xa(this.o,a);J(this,
|
||||
a);this.a-=16},function(){J(this,I(this)-1);this.a-=5},function(){this.l=Nb(this,this.l);this.a-=5},function(){this.l=Mb(this,this.l);this.a-=5},function(){this.l=S(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Ob,function(){this.A=T(this)&65535;this.a-=10},function(){this.M(T(this),this.b);this.a-=13},function(){this.A=this.A+1&65535;this.a-=5},function(){var a=I(this);this.M(a,Nb(this,this.F(a)));this.a-=10},function(){var a=I(this);this.M(a,Mb(this,this.F(a)));this.a-=10},function(){this.M(I(this),
|
||||
S(this));this.a-=10},function(){this.f|=256;this.a-=4},Ob,function(){var a;J(this,a=I(this)+this.A);this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.F(T(this));this.a-=13},function(){this.A=this.A-1&65535;this.a-=5},function(){this.b=Nb(this,this.b);this.a-=5},function(){this.b=Mb(this,this.b);this.a-=5},function(){this.b=S(this);this.a-=7},function(){this.f=K(this)?this.f&-257:this.f|256;this.a-=4},function(){this.a-=5},function(){this.g=this.v;this.a-=5},function(){this.g=this.i;this.a-=
|
||||
5},function(){this.g=this.w;this.a-=5},function(){this.g=this.j;this.a-=5},function(){this.g=this.l;this.a-=5},function(){this.g=this.F(I(this));this.a-=7},function(){this.g=this.b;this.a-=5},function(){this.v=this.g;this.a-=5},function(){this.a-=5},function(){this.v=this.i;this.a-=5},function(){this.v=this.w;this.a-=5},function(){this.v=this.j;this.a-=5},function(){this.v=this.l;this.a-=5},function(){this.v=this.F(I(this));this.a-=7},function(){this.v=this.b;this.a-=5},function(){this.i=this.g;this.a-=
|
||||
5},function(){this.i=this.v;this.a-=5},function(){this.a-=5},function(){this.i=this.w;this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.l;this.a-=5},function(){this.i=this.F(I(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.w=this.g;this.a-=5},function(){this.w=this.v;this.a-=5},function(){this.w=this.i;this.a-=5},function(){this.a-=5},function(){this.w=this.j;this.a-=5},function(){this.w=this.l;this.a-=5},function(){this.w=this.F(I(this));this.a-=7},function(){this.w=
|
||||
this.b;this.a-=5},function(){this.j=this.g;this.a-=5},function(){this.j=this.v;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.j=this.w;this.a-=5},function(){this.a-=5},function(){this.j=this.l;this.a-=5},function(){this.j=this.F(I(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.l=this.g;this.a-=5},function(){this.l=this.v;this.a-=5},function(){this.l=this.i;this.a-=5},function(){this.l=this.w;this.a-=5},function(){this.l=this.j;this.a-=5},function(){this.a-=5},
|
||||
function(){this.l=this.F(I(this));this.a-=7},function(){this.l=this.b;this.a-=5},function(){this.M(I(this),this.g);this.a-=7},function(){this.M(I(this),this.v);this.a-=7},function(){this.M(I(this),this.i);this.a-=7},function(){this.M(I(this),this.w);this.a-=7},function(){this.M(I(this),this.j);this.a-=7},function(){this.M(I(this),this.l);this.a-=7},function(){var a=this.m-1;if(this.ca.length)for(var b=0;b<this.ca.length;b++)if(this.ca[b](a))return;this.D|=16;this.a-=7;this.G&512||ub(this)},function(){this.M(I(this),
|
||||
this.b);this.a-=7},function(){this.b=this.g;this.a-=5},function(){this.b=this.v;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.w;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.l;this.a-=5},function(){this.b=this.F(I(this));this.a-=7},function(){this.a-=5},function(){this.b=L(this,this.g);this.a-=4},function(){this.b=L(this,this.v);this.a-=4},function(){this.b=L(this,this.i);this.a-=4},function(){this.b=L(this,this.w);this.a-=4},function(){this.b=L(this,
|
||||
this.j);this.a-=4},function(){this.b=L(this,this.l);this.a-=4},function(){this.b=L(this,this.F(I(this)));this.a-=7},function(){this.b=L(this,this.b);this.a-=4},function(){this.b=M(this,this.g);this.a-=4},function(){this.b=M(this,this.v);this.a-=4},function(){this.b=M(this,this.i);this.a-=4},function(){this.b=M(this,this.w);this.a-=4},function(){this.b=M(this,this.j);this.a-=4},function(){this.b=M(this,this.l);this.a-=4},function(){this.b=M(this,this.F(I(this)));this.a-=7},function(){this.b=M(this,
|
||||
this.b);this.a-=4},function(){this.b=P(this,this.g);this.a-=4},function(){this.b=P(this,this.v);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.w);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.l);this.a-=4},function(){this.b=P(this,this.F(I(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=Q(this,this.g);this.a-=4},function(){this.b=Q(this,this.v);this.a-=4},function(){this.b=Q(this,this.i);
|
||||
this.a-=4},function(){this.b=Q(this,this.w);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.l);this.a-=4},function(){this.b=Q(this,this.F(I(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){this.b=N(this,this.g);this.a-=4},function(){this.b=N(this,this.v);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.w);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.l);this.a-=
|
||||
4},function(){this.b=N(this,this.F(I(this)));this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){this.b=R(this,this.g);this.a-=4},function(){this.b=R(this,this.v);this.a-=4},function(){this.b=R(this,this.i);this.a-=4},function(){this.b=R(this,this.w);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.l);this.a-=4},function(){this.b=R(this,this.F(I(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=O(this,this.g);this.a-=
|
||||
4},function(){this.b=O(this,this.v);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.w);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.l);this.a-=4},function(){this.b=O(this,this.F(I(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){P(this,this.g);this.a-=4},function(){P(this,this.v);this.a-=4},function(){P(this,this.i);this.a-=4},function(){P(this,this.w);this.a-=4},function(){P(this,this.j);this.a-=
|
||||
4},function(){P(this,this.l);this.a-=4},function(){P(this,this.F(I(this)));this.a-=7},function(){P(this,this.b);this.a-=4},function(){this.f&255&&(E(this,U(this)),this.a-=6);this.a-=5},function(){Jb(this,U(this));this.a-=10},function(){var a=T(this);this.f&255&&E(this,a);this.a-=10},Pb,function(){var a=T(this);this.f&255&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,Ib(this));this.a-=11},function(){this.b=L(this,S(this));this.a-=7},function(){V(this,this.m);E(this,0);this.a-=
|
||||
11},function(){this.f&255||(E(this,U(this)),this.a-=6);this.a-=5},Qb,function(){var a=T(this);this.f&255||E(this,a);this.a-=10},Pb,function(){var a=T(this);this.f&255||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=M(this,S(this));this.a-=7},function(){V(this,this.m);E(this,8);this.a-=11},function(){K(this)||(E(this,U(this)),this.a-=6);this.a-=5},function(){Kb(this,U(this));this.a-=10},function(){var a=T(this);K(this)||E(this,a);this.a-=10},function(){for(var a=S(this),b=this.o,
|
||||
c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var h=b.m[a],g=b.D[a]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h&&h[0])h[0](a,k,d);f+=g<<3;a+=g;e-=g}this.a-=10},function(){var a=T(this);K(this)||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,H(this));this.a-=11},function(){this.b=P(this,S(this));this.a-=7},function(){V(this,this.m);E(this,16);this.a-=11},function(){K(this)&&(E(this,U(this)),this.a-=6);this.a-=5},Qb,function(){var a=T(this);K(this)&&E(this,a);this.a-=10},function(){for(var a=
|
||||
S(this),b=this.o,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.o[a],g=b.C[a]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h&&h[0]&&(l=h[0](a,c),void 0===l?l=k:l&=k);e|=l<<f;f+=g<<3;a+=g;d-=g}this.b=e&255;this.a-=10},function(){var a=T(this);K(this)&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=Q(this,S(this));this.a-=7},function(){V(this,this.m);E(this,24);this.a-=11},function(){Lb(this)||(E(this,U(this)),this.a-=6);this.a-=5},function(){J(this,U(this));this.a-=10},function(){var a=
|
||||
T(this);Lb(this)||E(this,a);this.a-=10},function(){var a=U(this);V(this,I(this));J(this,a);this.a-=18},function(){var a=T(this);Lb(this)||(V(this,this.m),E(this,a),this.a-=6);this.a-=11},function(){V(this,I(this));this.a-=11},function(){this.b=N(this,S(this));this.a-=7},function(){V(this,this.m);E(this,32);this.a-=11},function(){Lb(this)&&(E(this,U(this)),this.a-=6);this.a-=5},function(){E(this,I(this));this.a-=5},function(){var a=T(this);Lb(this)&&E(this,a);this.a-=10},function(){var a=I(this);J(this,
|
||||
H(this));Kb(this,a);this.a-=5},function(){var a=T(this);Lb(this)&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){this.b=R(this,S(this));this.a-=7},function(){V(this,this.m);E(this,40);this.a-=11},function(){this.s&128||(E(this,U(this)),this.a-=6);this.a-=5},function(){var a=U(this);Fb(this,a);this.b=a>>8;this.a-=10},function(){var a=T(this);this.s&128||E(this,a);this.a-=10},function(){this.G&=-513;this.a-=4},function(){var a=T(this);this.s&128||(V(this,this.m),E(this,a),this.a-=6);
|
||||
this.a-=11},function(){V(this,Hb(this)&255|this.b<<8);this.a-=11},function(){this.b=O(this,S(this));this.a-=7},function(){V(this,this.m);E(this,48);this.a-=11},function(){this.s&128&&(E(this,U(this)),this.a-=6);this.a-=5},function(){this.A=I(this)&65535;this.a-=5},function(){var a=T(this);this.s&128&&E(this,a);this.a-=10},function(){this.G|=512;this.a-=4},function(){var a=T(this);this.s&128&&(V(this,this.m),E(this,a),this.a-=6);this.a-=11},Rb,function(){P(this,S(this));this.a-=7},function(){V(this,
|
||||
this.m);E(this,56);this.a-=11}];function X(a){u.call(this,"ChipSet",a,X);var b=a.model;b&&!Sb[b]&&q("Unrecognized ChipSet model: "+b);this.R=Sb[b]||Tb;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);C(this)}w(X);var Tb=1978.1,Sb={SI1978:Tb};m=X.prototype;m.P=function(){return!1};
|
||||
m.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;this.u=a;if(this.R==Tb){var e;a=Ub;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.o[g]?q("Input port 0x"+n(g,4)+" already registered"):c.o[g]=[h,!1]}var k;e=Vb;void 0===k&&(k=0);for(var l in e)if(f=b,a=+l+k,c=e[l].bind(this),void 0!==c)for(d=+l+k;d<=a;d++)void 0!==f.m[d]?q("Output port 0x"+n(d,4)+" already registered"):f.m[d]=[c,!1]}};
|
||||
m.V=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.U=function(a){return a?this.save():!0};m.reset=function(){this.f=this.g=this.c=this.b=this.l=this.j=this.i=0};m.save=function(){var a=new F(this);this.R==Tb&&G(a,0,[this.i,this.j,this.l,this.b,this.c,this.f,this.g]);return a.data()};m.restore=function(a){a=a[0];this.R==Tb&&(this.i=a[0],this.j=a[1],this.l=a[2],this.b=a[3],this.c=a[4],this.f=a[5],this.g=a[6]);return!0};m.start=function(){};m.stop=function(){};
|
||||
m.gb=function(){return this.i};m.hb=function(){return this.j};m.ib=function(){return this.l};m.fb=function(){return this.b>>8-this.c&255};m.kb=function(a,b){this.c=b};m.mb=function(a,b){this.f=b};m.lb=function(a,b){this.b=b<<8|this.b>>8};m.nb=function(a,b){this.g=b};m.ob=function(){};var Ub={0:X.prototype.gb,1:X.prototype.hb,2:X.prototype.ib,3:X.prototype.fb},Vb={2:X.prototype.kb,3:X.prototype.mb,4:X.prototype.lb,5:X.prototype.nb,6:X.prototype.ob};
|
||||
wa(function(){for(var a=B(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new X(d);La(d,c)}});function Wb(a){u.call(this,"ROM",a,Wb);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.g=a.file;this.m=ba(this.g);if(this.g){a=this.g;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=ja()+"/api/v1/dump?file="+this.g+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){Xb(c,a,b,f)})}}w(Wb);var Yb=[0,5];
|
||||
Wb.prototype.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;Zb(this)};Wb.prototype.V=function(){this.i&&(this.H&&this.H.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Wb.prototype.U=function(){return!0};
|
||||
function Xb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Ja(a.Oa,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.K("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
|
||||
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=aa(b[e]);Zb(a)}}
|
||||
function Zb(a){if(!Na(a))if(!a.g)C(a);else if(a.b&&a.o){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.c))+")";a.h.Y=!0;a.K(b)}else if($b(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.o,h=d.c,g=[],k=d.j>>>f.c;0<h&&k<f.b.length;)g.push(f.b[k++]),h-=f.f;f=d.o;d=d.c;h=0;for(e>>>=f.c;0<d&&e<f.b.length;){k=g[h++];if(!k)break;f.b[e++]=k;d-=f.f}}delete a.b}C(a)}}
|
||||
function $b(a,b){if(Va(a.o,b,a.c,a.l?1:eb)){var c;for(c=0;c<a.b.length;c++)Ya(a.o,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Yb.length;c++)Ya(a.o,Yb[c],118);Eb(a.a,function(a){return function(b){if(0<=Yb.indexOf(b)){var c=!1,h=a.a,g=a.H;if(5==b)switch(c=!0,h.v){case 2:ac(a,String.fromCharCode(h.w));break;case 9:for(var k=H(h),l="",x=255;x--;){var r=a.a.F(k++);if(36==r)break;l+=String.fromCharCode(r)}ac(a,l);break;default:c=!1}c?Qb.call(h):g&&(a.O("\nCP/M vector 0x"+n(b,4)),E(h,b),ub(g));b=!0}else b=!1;
|
||||
return b}}(a));Gb(a.a,b)}return!0}return!1}function ac(a,b){b=b.replace(/\r/g,"");a.X&&(a.X.value+=b,a.X.scrollTop=a.X.scrollHeight)}wa(function(){for(var a=B(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Wb(d);La(d,c)}});function bc(a){u.call(this,"RAM",a,bc);this.f=a.addr;this.c=a.size;this.b=!1}w(bc);m=bc.prototype;m.Z=function(a,b,c,d){this.o=b;this.a=c;this.H=d;C(this)};m.V=function(a,b){b||this.reset();return!0};m.U=function(a){return a?this.save():!0};
|
||||
m.reset=function(){!this.b&&this.c&&Va(this.o,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||q("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};wa(function(){for(var a=B(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new bc(d);La(d,c)}});function cc(a){u.call(this,"Keyboard",a,cc);C(this)}w(cc);
|
||||
wa(function(){for(var a=B(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new cc(d);La(d,c)}});
|
||||
function dc(a,b,c){u.call(this,"Video",a,dc);this.s=a.screenWidth;this.j=a.screenHeight;this.m=a.bufferAddr;this.b=a.bufferCols;this.c=a.bufferRows;this.D=a.bufferBits||1;this.bb=a.interruptRate;this.W=a.refreshRate||60;this.f=c;this.L=a.screenRotation;90==this.L&&(this.f.translate(0,this.j),this.f.rotate(-this.L*Math.PI/180),this.f.scale(this.j/this.s,this.s/this.j));this.N=[[0,0,0,255],[255,255,255,255]];this.C=this.f.createImageData(this.b,this.c);this.i=document.createElement("canvas");this.i.width=
|
||||
this.b;this.i.height=this.c;this.R=this.i.getContext("2d")}w(dc);dc.prototype.Z=function(a,b,c,d){this.u=a;this.o=b;this.a=c;this.H=d;this.l=(this.b*this.D>>3)*this.c;Va(this.o,this.m,this.l,3)&&(this.G=this.l>>1,this.I=16/this.D|0,this.A=!1,void 0===this.g||this.g.length!=this.G)&&(this.g=Array(this.G));C(this)};
|
||||
wa(function(){for(var a=B(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=z(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing <canvas> support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
|
||||
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ba.aspect);f&&.3<=f&&3.33>=f&&(va("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");sa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e=e.getContext("2d");d=new dc(d,0,e);La(d,c)}});
|
||||
function F(a,b,c){this.id=a.id;this.key=ec(a,b,c);this.H=a.H;fc(this,a.Ya)}function ec(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
|
||||
F.prototype={constructor:F,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){fc(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
|
||||
function fc(a,b){a[a.id]={};b&&G(a,"parms",b);a.a=!1}function gc(a){var b=!0;if(na()){var c=JSON.stringify(a[a.id]);pa(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function hc(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){q(c.message||c),b=!1}return b}function ic(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:na()&&(b=oa(a.key))?(a[a.id]=b,a.a=!0):!1}function jc(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
|
||||
function kc(a,b,c){u.call(this,"Computer",a,kc);this.h.J=!1;lc(this,b);this.C=pb(this,"autoPower",a);this.f=0;this.N=a.busWidth||a.buswidth;this.b=mc;this.u=null;this.j=this.L=!1;this.R=pb(this,"url")||"";(Math.random()+.1).toString(36);this.c=nc(this);if(this.a=Ka("CPU",this.id)){this.H=Ka("Debugger",this.id);this.A=[];for(b=null;b=Ra(this,"Video",b);)this.A.push(b);this.o=new Ta({id:this.Oa+".bus",busWidth:this.N},this.a,this.H);var d,e=y(this.id);if((this.g=Ka("Panel",this.id))&&this.g.X)for(b=
|
||||
0;b<e.length;b++)d=e[b],d.K=this.g.K,d.O=this.g.O,d.X=this.g.X;for(b=0;b<e.length;b++)d=e[b],d.Z&&d.Z(this,this.o,this.a,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=pb(this,"state")||(f=!0,a.state))b=this.D=a,f||(this.j=!0,this.b=mc),this.b&&(this.s=new F(this,Z),ic(this.s)?b=null:delete this.s);!b&&this.b&&(b=oc(this))&&(this.j=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.m=null,h.j=!1,h.K("Unable to load machine state from server (error "+
|
||||
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.u=b,h.L=!0);C(h)})}else C(this);this.B.power||(this.C=!0);!c&&this.C&&pc(this,this.sa)}else q("Unable to find CPU component")}w(kc);var Z="1.22.0",mc=0;function lc(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){q(d.message+" ("+c+")")}}a.l=b}
|
||||
function pb(a,b,c){var d=b.toLowerCase(),d=Ba[b]||Ba[d];void 0===d&&a.l&&(d=a.l[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function pc(a,b,c){for(var d=y(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Na(f)){Na(f,function(){pc(a,b,c)});return}}b.call(a,c)}
|
||||
function qc(a,b){var c=new F(a,Z,"validate");if(ic(c)&&hc(c)){var d=jc(c,"timestamp"),e=b?jc(b,"timestamp"):"unknown";d!=e&&(a.K("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=kc.prototype;
|
||||
m.sa=function(a){void 0===a&&(a=this.b||(this.u?1:mc));if(!this.f){this.f++;var b=!1,c=!1;this.I=!1;var d=this.s||new F(this,Z);if(-1==a)b=!0;else if(a>mc){if(ic(d,this.u)){this.i=new F(this,Z,"failsafe");ic(this.i)&&(rc(this,d),a=2,fc(this.i));G(this.i,"timestamp",ia());gc(this.i);var e=this.b&&!this.j;if(1==a||ka("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=hc(d)){var f=jc(d,"code"),h=jc(d,"data");f&&("ok"==f?ic(d,h):("error"==f&&"no machine state"!=
|
||||
h?(this.K("Error: "+h),"unable to verify user"==h&&(pa("user",""),this.c=null)):this.O(f+": "+h),fc(d),ic(d)?(c=hc(d),e=!0):c=!1))}e&&qc(this,c?d:null)}else 2==a&&d.clear()}else qc(this);delete this.u;delete this.s}e=y(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=sc(this,h,d,b,c));b=[d,a,c];-1!=a?pc(this,this.Pa,b):this.Pa(b)}};
|
||||
function sc(a,b,c,d,e){if(!b.h.J){b.h.J=!0;if(b.V){var f=null;e&&((f=jc(c,b.id))||(f=jc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.V(f,d)&&f&&(q("Unable to restore state for "+b.type),a.D&&!a.L?(c.clear(),a.b=mc,window&&window.location.reload()):a.I=!0,b.V(null),e=!1)}if(!d&&b.ya)for(a=b.ya.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
|
||||
m.Pa=function(a){var b=a[0],c=0>a[1];a=a[2];this.h.J=!0;var d=this.B.power;d&&(d.textContent="Shutdown");this.G||(this.O("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.G=!0);this.a&&(sc(this,this.a,b,c,a),tb(this.a));this.I&&(rc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
|
||||
function rc(a,b){if(ka("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.R,d=a.c||"",e=b.toString(),f={app:"PC8080"};f.ver=Z;f.url=c;f.user=d;f.type="bug";f.data=e;p("http://www.pcjs.org/api/v1/report",f,!0)}}
|
||||
function tc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new F(a,Z),h=new F(a,Z,"validate"),g=ia();G(h,"timestamp",g);G(f,"timestamp",g);G(f,"version","1.22.0");G(f,"url",window?window.location.href:null);G(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.U&&(c&&ub(a.a),d=a.a.U(b,c),"object"===typeof d&&G(f,a.a.id,d),c&&(a.a.h.J=!1,!1===d&&(e=null)));for(var g=y(a.id),k=0;k<g.length;k++){var l=g[k];l.h.J&&(l.U&&(d=l.U(b,c),"object"===typeof d&&G(f,l.id,d)),c&&(l.h.J=!1,!1===d&&(e=
|
||||
null)))}e&&(c?(g=d=!1,b?(a.c&&uc(a,a.c,f.toString()),gc(h)&&gc(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.h.J=!1,b=a.B.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.o&&this.o.reset&&this.o.reset();for(var a=y(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.o&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=y(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};
|
||||
m.stop=function(a,b){for(var c=y(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
|
||||
m.P=function(a,b,c){var d=this;switch(b){case "power":return this.B[b]=c,c.onclick=function(){d.f||(d.h.J?tc(d,!1,!0):pc(d,d.sa))},!0;case "reset":return this.B[b]=c,c.onclick=function(){if(d.h.J&&!d.f)if(d.b&&!d.m){var a=ka("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");tc(d,a,!0);!a&&d.D?window&&window.location.reload():d.sa(mc)}else d.reset(),d.a&&tb(d.a)},!0;case "save":if(da(ja(),"pcjs.org")){c.parentNode.removeChild(c);break}this.B[b]=
|
||||
c;c.onclick=function(){var a=nc(d,!0);if(a){var b=!!(d.b&&!d.m||d.D),c=tc(d,b);b?uc(d,a,c):d.K("Resume disabled, machine state not saved")}};return!0}return!1};
|
||||
function nc(a,b){var c=a.c;c||(c=oa("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=vc(a,c))||a.K("The user ID is invalid."))):b&&a.K("Browser local storage is not available"));return c}
|
||||
function vc(a,b){a.c=null;var c=p(ja()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(pa("user",c.data),a.c=c.data)}catch(e){q(e.message+" ("+d+")")}return a.c}function oc(a){var b=null;a.c&&(b=ja()+"/api/v1/user?req=load&user="+a.c+"&state="+ec(a,Z));return b}
|
||||
function uc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=ec(a,Z);d.data=c;b=p(ja()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.K("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.K(c),pa("user",""),a.c=null)}}
|
||||
function Ra(a,b,c){a=y(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.ba=function(a){this.a&&this.a.ba(a);this.g&&this.g.ba(a)};
|
||||
function Ab(a,b){for(var c=0;c<a.A.length;c++)a:{var d=a.A[c];if(0<=b){if(b&1){d=d.a;d.D=d.D&-8|10;break a}var e=d.a;e.D=e.D&-8|9;if(e=d.A){for(var e=d.o,f=d.l,h=!0,g=d.m>>>e.c;0<f&&g<e.b.length;)e.b[g].S&&(e.b[g].S=h=!1,e.b[g].Ra=!0),f-=e.f,g++;e=h}if(e)break a}for(var e=d.m,f=e+d.l,h=0,g=d.N,k=0,l=0,x=d.b,r=0,Y=d.c,vb=0;e<f;){var A;A=d.o;var ga=e,Ea=ga&A.g,qa=(ga&A.i)>>>A.c;A=Ea!=A.g?A.b[qa].Za(Ea,ga):A.b[qa++].Ma(Ea,ga)|A.b[qa&A.u].Ma(0,ga+1)<<8;if(d.A&&A===d.g[h])k+=d.I;else{d.g[h]=A;A=A>>8|(A&
|
||||
255)<<8;ga=65536;Ea=16;k<x&&(x=k);for(qa=0;qa<d.I;qa++){var la=(A&(ga>>=1))>>--Ea,Fa=d.C,ra=k++,la=g[la],ra=(ra+l*Fa.width)*la.length;Fa.data[ra]=la[0];Fa.data[ra+1]=la[1];Fa.data[ra+2]=la[2];Fa.data[ra+3]=la[3]}k>r&&(r=k);l<Y&&(Y=l);l>=vb&&(vb=l+1)}e+=2;h++;if(k>=d.b&&(k=0,l++,l>d.c))break}d.A=!0;x<d.b&&(d.R.putImageData(d.C,0,0,x,Y,r-x,vb-Y),d.f.drawImage(d.i,0,0,d.b,d.c,0,0,d.s,d.j))}}
|
||||
wa(function(){for(var a=B(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=z(c),c=B(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=z(f),h=new kc(h,d,!0);La(h,f);h.C&&pc(h,h.sa)}});t.show.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Ka("Computer",c.id))&&c.G&&!c.h.J&&c.sa(-1)}});
|
||||
t.exit.push(function(){for(var a=B(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Ka("Computer",c.id))&&c.h.J&&tc(c,!(!c.b||c.m),!0)}});var wc=0;function xc(a,b,c,d,e,f){e("Loading "+a+"...");p(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):yc(g,a,b,c,d,e,f)})}
|
||||
function yc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ja(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));
|
||||
g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){g=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?zc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
|
||||
function zc(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,x=/( [a-z]+=)(['"])(.*?)\2/g;l=x.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],h);zc(a,b,c)}})}else c(a,null)}
|
||||
function Ac(a,b,c,d){function e(a){if(void 0===g){var b=h&&B(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);k&&(--wc||ya(!0));k=!1}var h,g,k=!0;wc++;Ia[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var x=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=l:r.appendChild(document.createTextNode(l));x.appendChild(r)}c||
|
||||
(c="/versions/pc8080/1.22.0/components.xsl");l=function(d,g){g?xc(c,null,null,!1,e,function(d,l){if(l)if(Ja(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--wc||ya(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--wc||ya(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?xc(b,a,d,!0,e,l):yc(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(Y){f(Y.message)}return k}window.embedPC8080=function(a,b,c,d){ya(!1);return Ac(a,b,c,d)};window.enableEvents=ya;window.sendEvent=za;
|
||||
function Bc(a,b,c,d){if(!c&&b){d.push(b);a=Ia[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){Cc(b,d)}):Cc(null,d)}else q("Error ("+c+") requesting "+a)}
|
||||
function Cc(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Ia[f],k={},l;for(l in g){var x=g[l],r=ca(l);if("xml"==r){for(r=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=r.exec(g[l]);){var Y=d[2];Y&&(g[Y]||(x=x.replace(d[0],"")))}d=l=ba(l)}else"xsl"==r&&(e=l=ba(l));k[l]=x}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
|
||||
"©"),l=h,g=null,k="data:application/javascript,",k=sa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
|
||||
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",q(c)):q("Missing XML/XSL resources")}
|
||||
window.savePC=function(a,b,c){var d=La("Computer",a),e=La("Debugger",a);if(d){var f=uc(d,!0),h=d.l?JSON.stringify(d.l):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,eb:h}))return!0;p(b,null,!0,function(c,d,e){Cc(c,d,e,[a,ba(b,!0),h,f])});return!0}q("Unable to identify machine '"+a+"'");return!1};})();
|
||||
window.savePC=function(a,b,c){var d=Ka("Computer",a),e=Ka("Debugger",a);if(d){var f=tc(d,!0),h=d.l?JSON.stringify(d.l):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Ya:h}))return!0;p(b,null,!0,function(c,d,e){Bc(c,d,e,[a,ba(b,!0),h,f])});return!0}q("Unable to identify machine '"+a+"'");return!1};})();
|
||||
|
|
|
|||
Loading…
Reference in a new issue