Some more Debugger factoring

This commit is contained in:
Jeff Parsons 2016-09-14 21:11:57 -07:00
commit e5c5a8e6be
17 changed files with 1124 additions and 1539 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
(function(){var l,aa,ba={163840:[40,1,8],184320:[40,1,9],327680:[40,2,8],368640:[40,2,9],737280:[80,2,9],1228800:[80,2,15],1474560:[80,2,18],2949120:[80,2,36],21368320:[615,4,17]};
function ca(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function ca(a,b){var c;if(a){b||(b=10);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 ea(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 fa(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 ga(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ha(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ia={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ja(a){return a.replace(/[&<>"']/g,function(a){return ia[a]})}function ka(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
var la={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ma=Date.now||function(){return+new Date};

View file

@ -37,6 +37,7 @@ if (DEBUGGER) {
var usr = require("../../shared/lib/usrlib");
var web = require("../../shared/lib/weblib");
var Component = require("../../shared/lib/component");
var Debugger = require("../../shared/lib/debugger");
var PC6502 = require("./defines");
var Messages = require("./messages");
var Memory = require("./memory");
@ -68,7 +69,7 @@ var DbgAddr6502;
* Debugger6502(parmsDbg)
*
* @constructor
* @extends Component
* @extends Debugger
* @param {Object} parmsDbg
*
* The Debugger6502 component supports the following optional (parmsDbg) properties:
@ -89,17 +90,6 @@ function Debugger6502(parmsDbg)
this.style = Debugger6502.STYLE_8080;
/*
* These keep track of instruction activity, but only when tracing or when Debugger checks
* have been enabled (eg, one or more breakpoints have been set).
*
* They are zeroed by the reset() notification handler. cInstructions is advanced by
* stepCPU() and checkInstruction() calls. nCycles is updated by every stepCPU() or stop()
* call and simply represents the number of cycles performed by the last run of instructions.
*/
this.nCycles = 0;
this.cOpcodes = this.cOpcodesStart = 0;
/*
* Most commands that require an address call parseAddr(), which defaults to dbgAddrNextCode
* or dbgAddrNextData when no address has been given. doDump() and doUnassemble(), in turn,
@ -110,18 +100,6 @@ function Debugger6502(parmsDbg)
*/
this.dbgAddrNextCode = this.newAddr();
this.dbgAddrNextData = this.newAddr();
/*
* This maintains command history. New commands are inserted at index 0 of the array.
* When Enter is pressed on an empty input buffer, we default to the command at aPrevCmds[0].
*/
this.iPrevCmd = -1;
this.aPrevCmds = [];
/*
* fAssemble is true when "assemble mode" is active, false when not.
*/
this.fAssemble = false;
this.dbgAddrAssemble = this.newAddr();
/*
@ -138,21 +116,6 @@ function Debugger6502(parmsDbg)
*/
this.aSymbolTable = [];
/*
* aVariables is an object with properties that grows as setVariable() assigns more variables;
* each property corresponds to one variable, where the property name is the variable name (ie,
* a string beginning with a letter or underscore, followed by zero or more additional letters,
* digits, or underscores) and the property value is the variable's numeric value. See doVar()
* and setVariable() for details.
*
* Note that parseValue(), through its reliance on str.parseInt(), assumes a default base of 16
* if no base is explicitly indicated (eg, a trailing decimal period), and if you define variable
* names containing exclusively hex alpha characters (a-f), those variables will take precedence
* over the corresponding hex values. In other words, if you define variables "a" and "b", you
* will no longer be able to simply type "a" or "b" to specify the decimal values 10 or 11.
*/
this.aVariables = {};
/*
* clearBreakpoints() initializes the breakpoints lists: aBreakExec is a list of addresses
* to halt on whenever attempting to execute an instruction at the corresponding address,
@ -214,7 +177,7 @@ function Debugger6502(parmsDbg)
if (DEBUGGER) {
Component.subclass(Debugger6502);
Component.subclass(Debugger6502, Debugger);
/*
* NOTE: Every Debugger property from here to the first prototype function definition (initBus()) is a
@ -2652,379 +2615,6 @@ if (DEBUGGER) {
return s;
};
Debugger6502.aBinOpPrecedence = {
'||': 0, // logical OR
'&&': 1, // logical AND
'|': 2, // bitwise OR
'^': 3, // bitwise XOR
'&': 4, // bitwise AND
'!=': 5, // inequality
'==': 5, // equality
'>=': 6, // greater than or equal to
'>': 6, // greater than
'<=': 6, // less than or equal to
'<': 6, // less than
'>>>': 7, // unsigned bitwise right shift
'>>': 7, // bitwise right shift
'<<': 7, // bitwise left shift
'-': 8, // subtraction
'+': 8, // addition
'%': 9, // remainder
'/': 9, // division
'*': 9 // multiplication
};
/**
* evalExpression(aVals, aOps, cOps)
*
* In Node, if you set a variable to 0x80000001; ie:
*
* foo=0x80000001|0
*
* and then calculate foo*foo using "(foo*foo).toString(2)", the result is:
*
* '11111111111111111111111111111100000000000000000000000000000000'
*
* which is slightly incorrect because it has overflowed JavaScript's floating-point precision.
*
* 0x80000001 in decimal is -2147483647, so the product is 4611686014132420609, which is 0x3FFFFFFF00000001.
*
* @this {Debugger6502}
* @param {Array.<number>} aVals
* @param {Array.<string>} aOps
* @param {number} [cOps] (default is all)
* @return {boolean} true if successful, false if error
*/
Debugger6502.prototype.evalExpression = function(aVals, aOps, cOps)
{
cOps = cOps || -1;
while (cOps-- && aOps.length) {
var chOp = aOps.pop();
if (aVals.length < 2) return false;
var valNew;
var val2 = aVals.pop();
var val1 = aVals.pop();
switch(chOp) {
case '*':
valNew = val1 * val2;
break;
case '/':
if (!val2) return false;
valNew = val1 / val2;
break;
case '%':
if (!val2) return false;
valNew = val1 % val2;
break;
case '+':
valNew = val1 + val2;
break;
case '-':
valNew = val1 - val2;
break;
case '<<':
valNew = val1 << val2;
break;
case '>>':
valNew = val1 >> val2;
break;
case '>>>':
valNew = val1 >>> val2;
break;
case '<':
valNew = (val1 < val2? 1 : 0);
break;
case '<=':
valNew = (val1 <= val2? 1 : 0);
break;
case '>':
valNew = (val1 > val2? 1 : 0);
break;
case '>=':
valNew = (val1 >= val2? 1 : 0);
break;
case '==':
valNew = (val1 == val2? 1 : 0);
break;
case '!=':
valNew = (val1 != val2? 1 : 0);
break;
case '&':
valNew = val1 & val2;
break;
case '^':
valNew = val1 ^ val2;
break;
case '|':
valNew = val1 | val2;
break;
case '&&':
valNew = (val1 && val2? 1 : 0);
break;
case '||':
valNew = (val1 || val2? 1 : 0);
break;
default:
return false;
}
aVals.push(valNew|0);
}
return true;
};
/**
* parseExpression(sExp, fPrint)
*
* A quick-and-dirty expression parser. It takes an expression like:
*
* EDX+EDX*4+12345678
*
* and builds a value stack in aVals and a "binop" (binary operator) stack in aOps:
*
* aVals aOps
* ----- ----
* EDX +
* EDX *
* 4 +
* ...
*
* We pop 1 "binop" from aOps and 2 values from aVals whenever a "binop" of lower priority than its
* predecessor is encountered, evaluate, and push the result back onto aVals.
*
* Unary operators like '~' and ternary operators like '?:' are not supported; neither are parentheses.
*
* However, parseReference() now makes it possible to write parenthetical-style sub-expressions by using
* {...} (braces), as well as address references by using [...] (brackets).
*
* Why am I using braces instead of parentheses for sub-expressions? Because parseReference() serves
* multiple purposes, the other being reference replacement in message strings passing through replaceRegs(),
* and I didn't want parentheses taking on a new meaning in message strings.
*
* @this {Debugger6502}
* @param {string|undefined} sExp
* @param {boolean} [fPrint] is true to print all resolved values, false for quiet parsing
* @return {number|undefined} numeric value, or undefined if sExp contains any undefined or invalid values
*/
Debugger6502.prototype.parseExpression = function(sExp, fPrint)
{
var value;
if (sExp) {
/*
* First process (and eliminate) any references, aka sub-expressions.
*/
sExp = this.parseReference(sExp);
var i = 0;
var fError = false;
var sExpOrig = sExp;
var aVals = [], aOps = [];
/*
* All browsers (including, I believe, IE9 and up) support the following idiosyncrasy of a regexp split():
* when the regexp uses a capturing pattern, the resulting array will include entries for all the pattern
* matches along with the non-matches. This effectively means that, in the set of expressions that we
* support, all even entries in asValues will contain "values" and all odd entries will contain "operators".
*
* And although I tried to list the supported operators in "precedential" order, bitwise operators must
* be out-of-order so that we don't mistakenly match either '>' or '<' when they're part of '>>' or '<<'.
*/
var regExp = /(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/;
var asValues = sExp.split(regExp);
while (i < asValues.length) {
var sValue = asValues[i++];
var cchValue = sValue.length;
var s = str.trim(sValue);
if (!s) {
fError = true;
break;
}
var v = this.parseValue(s, null, fPrint === false);
if (v === undefined) {
fError = true;
fPrint = false;
break;
}
aVals.push(v);
if (i == asValues.length) break;
var sOp = asValues[i++], cchOp = sOp.length;
this.assert(Debugger6502.aBinOpPrecedence[sOp] != null);
if (aOps.length && Debugger6502.aBinOpPrecedence[sOp] < Debugger6502.aBinOpPrecedence[aOps[aOps.length-1]]) {
this.evalExpression(aVals, aOps, 1);
}
aOps.push(sOp);
sExp = sExp.substr(cchValue + cchOp);
}
if (!this.evalExpression(aVals, aOps) || aVals.length != 1) {
fError = true;
}
if (!fError) {
value = aVals.pop();
if (fPrint) this.printValue(null, value);
} else {
if (fPrint) this.println("error parsing '" + sExpOrig + "' at character " + (sExpOrig.length - sExp.length));
}
}
return value;
};
/**
* parseReference(s)
*
* Returns the given string with any "{expression}" sequences replaced with the value of the expression,
* and any "[address]" references replaced with the contents of the address. Expressions are parsed BEFORE
* addresses. Owing to this function's simplistic parsing, nested braces/brackets are not supported
* (define intermediate variables if needed).
*
* @this {Debugger6502}
* @param {string} s
* @return {string}
*/
Debugger6502.prototype.parseReference = function(s)
{
var a;
while (a = s.match(/\{(.*?)}/)) {
if (a[1].indexOf('{') >= 0) break; // unsupported nested brace(s)
var value = this.parseExpression(a[1]);
s = s.replace('{' + a[1] + '}', value != null? str.toHex(value) : "undefined");
}
while (a = s.match(/\[(.*?)]/)) {
if (a[1].indexOf('[') >= 0) break; // unsupported nested bracket(s)
var dbgAddr = this.parseAddr(a[1]);
s = s.replace('[' + a[1] + ']', dbgAddr? str.toHex(this.getWord(dbgAddr), 4) : "undefined");
}
return this.parseSysVars(s);
};
/**
* parseSysVars(s)
*
* Returns the given string with any recognized "$var" replaced with its value; eg:
*
* $ops: the number of opcodes executed since the last time it was displayed (or reset)
*
* @this {Debugger6502}
* @param {string} s
* @return {string}
*/
Debugger6502.prototype.parseSysVars = function(s)
{
var a;
while (a = s.match(/\$([a-z]+)/i)) {
var v = null;
switch(a[1].toLowerCase()) {
case "ops":
v = this.cOpcodes - this.cOpcodesStart;
break;
}
if (v == null) break;
s = s.replace(a[0], v.toString());
}
return s;
};
/**
* parseValue(sValue, sName, fQuiet)
*
* @this {Debugger6502}
* @param {string|undefined} sValue
* @param {string|null} [sName] is the name of the value, if any
* @param {boolean} [fQuiet]
* @return {number|undefined} numeric value, or undefined if sValue is either undefined or invalid
*/
Debugger6502.prototype.parseValue = function(sValue, sName, fQuiet)
{
var value;
if (sValue !== undefined) {
var iReg = this.getRegIndex(sValue);
if (iReg >= 0) {
value = this.getRegValue(iReg);
} else {
value = this.getVariable(sValue);
if (value === undefined) value = str.parseInt(sValue);
}
if (value === undefined && !fQuiet) this.println("invalid " + (sName? sName : "value") + ": " + sValue);
} else {
if (!fQuiet) this.println("missing " + (sName || "value"));
}
return value;
};
/**
* printValue(sVar, value)
*
* @this {Debugger6502}
* @param {string|null} sVar
* @param {number|undefined} value
* @return {boolean} true if value defined, false if not
*/
Debugger6502.prototype.printValue = function(sVar, value)
{
var sValue;
var fDefined = false;
if (value !== undefined) {
fDefined = true;
sValue = str.toHexLong(value) + " " + value + ". (" + str.toBinBytes(value) + ")";
}
sVar = (sVar != null? (sVar + ": ") : "");
this.println(sVar + sValue);
return fDefined;
};
/**
* printVariable(sVar)
*
* @this {Debugger6502}
* @param {string} [sVar]
* @return {boolean} true if all value(s) defined, false if not
*/
Debugger6502.prototype.printVariable = function(sVar)
{
if (sVar) {
return this.printValue(sVar, this.aVariables[sVar]);
}
var cVariables = 0;
for (sVar in this.aVariables) {
this.printValue(sVar, this.aVariables[sVar]);
cVariables++;
}
return cVariables > 0;
};
/**
* delVariable(sVar)
*
* @this {Debugger6502}
* @param {string} sVar
*/
Debugger6502.prototype.delVariable = function(sVar)
{
delete this.aVariables[sVar];
};
/**
* getVariable(sVar)
*
* @this {Debugger6502}
* @param {string} sVar
* @return {number|undefined}
*/
Debugger6502.prototype.getVariable = function(sVar)
{
return this.aVariables[sVar];
};
/**
* setVariable(sVar, value)
*
* @this {Debugger6502}
* @param {string} sVar
* @param {number} value
*/
Debugger6502.prototype.setVariable = function(sVar, value)
{
this.aVariables[sVar] = value;
};
/**
* comparePairs(p1, p2)
*

View file

@ -100,11 +100,6 @@ function Debugger8080(parmsDbg)
*/
this.dbgAddrNextCode = this.newAddr();
this.dbgAddrNextData = this.newAddr();
/*
* fAssemble is true when "assemble mode" is active, false when not.
*/
this.fAssemble = false;
this.dbgAddrAssemble = this.newAddr();
/*

View file

@ -73,18 +73,21 @@ try {
* ]
*
* Every component name comes from the component filename, minus the ".js" extension;
* Create is the constructor returned by require(). The only bit of fudging we do is
* overriding the constructor for component "cpu" with the constructor for "x86cpu",
* because when a "cpu" definition is encountered, it's the "x86cpu" subclass that we
* actually want to create, not the "cpu" superclass. See aSubClasses for the complete
* list of subclassed components we manage like that.
* Create is the constructor returned by require().
*
* TODO: Update the list of ignored (ie, ignorable) components.
*/
var Component;
var dbg;
var aComponents = [];
var asComponentsIgnore = ["embed","save"];
var asComponentsIgnore = ["embed", "save"];
/*
* A few of the components are subclasses of other classes (eg, "x86cpu" is a subclass
* of "cpu"). In those situations, we "hoist" the subclass constructor into the
* corresponding superclass, because it is the name of the superclass that we rely on during
* machine initialization.
*/
var aSubClasses = {
"pcx86/lib/x86cpu": "pcx86/lib/cpu",
"pcx86/lib/debugger": "shared/lib/debugger"

View file

@ -164,11 +164,6 @@ function DebuggerX86(parmsDbg)
*/
this.dbgAddrNextCode = this.newAddr();
this.dbgAddrNextData = this.newAddr();
/*
* fAssemble is true when "assemble mode" is active, false when not.
*/
this.fAssemble = false;
this.dbgAddrAssemble = this.newAddr();
/*

View file

@ -2631,7 +2631,7 @@ Card.prototype.dumpVideoCard = function()
* TODO: Make these options more general-purpose (it currently assumes a conventional VGA planar layout).
*
* @this {Card}
* @param {Array.<string>} asArgs
* @param {Array.<string>} asArgs (all numeric arguments default to base 16 unless otherwise specified)
*/
Card.prototype.dumpVideoBuffer = function(asArgs)
{
@ -2648,12 +2648,12 @@ Card.prototype.dumpVideoBuffer = function(asArgs)
var s = asArgs[i];
if (!i) {
idw = str.parseInt(s);
idw = str.parseInt(s, 16);
continue;
}
var ch = s.charAt(0);
j = str.parseInt(s.substr(1));
j = str.parseInt(s.substr(1), 16);
switch(ch) {
case 'l':

View file

@ -99,11 +99,6 @@ function DebuggerPDP11(parmsDbg)
*/
this.dbgAddrNextCode = this.newAddr();
this.dbgAddrNextData = this.newAddr();
/*
* fAssemble is true when "assemble mode" is active, false when not.
*/
this.fAssemble = false;
this.dbgAddrAssemble = this.newAddr();
/*
@ -3434,83 +3429,6 @@ if (DEBUGGER) {
}
};
/**
* parseCommand(sCmd, fSave, chSep)
*
* @this {DebuggerPDP11}
* @param {string|undefined} sCmd
* @param {boolean} [fSave] is true to save the command, false if not
* @param {string} [chSep] is the command separator character (default is ';')
* @return {Array.<string>}
*/
DebuggerPDP11.prototype.parseCommand = function(sCmd, fSave, chSep)
{
if (fSave) {
if (!sCmd) {
if (this.fAssemble) {
sCmd = "end";
} else {
sCmd = this.aPrevCmds[this.iPrevCmd+1];
}
} else {
if (this.iPrevCmd < 0 && this.aPrevCmds.length) {
this.iPrevCmd = 0;
}
if (this.iPrevCmd < 0 || sCmd != this.aPrevCmds[this.iPrevCmd]) {
this.aPrevCmds.splice(0, 0, sCmd);
this.iPrevCmd = 0;
}
this.iPrevCmd--;
}
}
var a = [];
if (sCmd) {
/*
* With the introduction of breakpoint commands (ie, quoted command sequences
* associated with a breakpoint), we can no longer perform simplistic splitting.
*
* a = sCmd.split(chSep || ';');
* for (var i = 0; i < a.length; i++) a[i] = str.trim(a[i]);
*
* We may now split on semi-colons ONLY if they are outside a quoted sequence.
*
* Also, to allow quoted strings *inside* breakpoint commands, we first replace all
* DOUBLE double-quotes with single quotes.
*/
sCmd = sCmd.toLowerCase().replace(/""/g, "'");
var iPrev = 0;
var chQuote = null;
chSep = chSep || ';';
/*
* NOTE: Processing charAt() up to and INCLUDING length is not a typo; we're taking
* advantage of the fact that charAt() with an invalid index returns an empty string,
* allowing us to use the same substring() call to capture the final portion of sCmd.
*
* In a sense, it allows us to pretend that the string ends with a zero terminator.
*/
for (var i = 0; i <= sCmd.length; i++) {
var ch = sCmd.charAt(i);
if (ch == '"' || ch == "'") {
if (!chQuote) {
chQuote = ch;
} else if (ch == chQuote) {
chQuote = null;
}
}
else if (ch == chSep && !chQuote || !ch) {
/*
* Recall that substring() accepts starting (inclusive) and ending (exclusive)
* indexes, whereas substr() accepts a starting index and a length. We need the former.
*/
a.push(str.trim(sCmd.substring(iPrev, i)));
iPrev = i + 1;
}
}
}
return a;
};
/**
* shiftArgs(asArgs)
*

View file

@ -66,6 +66,11 @@ function Debugger(parmsDbg)
this.nCycles = 0;
this.cOpcodes = this.cOpcodesStart = 0;
/*
* fAssemble is true when "assemble mode" is active, false when not.
*/
this.fAssemble = false;
/*
* This maintains command history. New commands are inserted at index 0 of the array.
* When Enter is pressed on an empty input buffer, we default to the command at aPrevCmds[0].
@ -215,6 +220,83 @@ if (DEBUGGER) {
return true;
};
/**
* parseCommand(sCmd, fSave, chSep)
*
* @this {Debugger}
* @param {string|undefined} sCmd
* @param {boolean} [fSave] is true to save the command, false if not
* @param {string} [chSep] is the command separator character (default is ';')
* @return {Array.<string>}
*/
Debugger.prototype.parseCommand = function(sCmd, fSave, chSep)
{
if (fSave) {
if (!sCmd) {
if (this.fAssemble) {
sCmd = "end";
} else {
sCmd = this.aPrevCmds[this.iPrevCmd+1];
}
} else {
if (this.iPrevCmd < 0 && this.aPrevCmds.length) {
this.iPrevCmd = 0;
}
if (this.iPrevCmd < 0 || sCmd != this.aPrevCmds[this.iPrevCmd]) {
this.aPrevCmds.splice(0, 0, sCmd);
this.iPrevCmd = 0;
}
this.iPrevCmd--;
}
}
var a = [];
if (sCmd) {
/*
* With the introduction of breakpoint commands (ie, quoted command sequences
* associated with a breakpoint), we can no longer perform simplistic splitting.
*
* a = sCmd.split(chSep || ';');
* for (var i = 0; i < a.length; i++) a[i] = str.trim(a[i]);
*
* We may now split on semi-colons ONLY if they are outside a quoted sequence.
*
* Also, to allow quoted strings *inside* breakpoint commands, we first replace all
* DOUBLE double-quotes with single quotes.
*/
sCmd = sCmd.toLowerCase().replace(/""/g, "'");
var iPrev = 0;
var chQuote = null;
chSep = chSep || ';';
/*
* NOTE: Processing charAt() up to and INCLUDING length is not a typo; we're taking
* advantage of the fact that charAt() with an invalid index returns an empty string,
* allowing us to use the same substring() call to capture the final portion of sCmd.
*
* In a sense, it allows us to pretend that the string ends with a zero terminator.
*/
for (var i = 0; i <= sCmd.length; i++) {
var ch = sCmd.charAt(i);
if (ch == '"' || ch == "'") {
if (!chQuote) {
chQuote = ch;
} else if (ch == chQuote) {
chQuote = null;
}
}
else if (ch == chSep && !chQuote || !ch) {
/*
* Recall that substring() accepts starting (inclusive) and ending (exclusive)
* indexes, whereas substr() accepts a starting index and a length. We need the former.
*/
a.push(str.trim(sCmd.substring(iPrev, i)));
iPrev = i + 1;
}
}
}
return a;
};
/**
* parseExpression(sExp, fPrint)
*
@ -383,7 +465,7 @@ if (DEBUGGER) {
value = this.getRegValue(iReg);
} else {
value = this.getVariable(sValue);
if (value === undefined) value = str.parseInt(sValue);
if (value === undefined) value = str.parseInt(sValue, 16);
}
if (value === undefined && !fQuiet) this.println("invalid " + (sName? sName : "value") + ": " + sValue);
} else {

View file

@ -41,7 +41,7 @@ var str = {};
* So use this function to validate the entire string.
*
* @param {string} s is the string representation of some number
* @param {number} [base] is the radix of the number represented above; 10 is the default (only 2, 8, 10 and 16 are supported)
* @param {number} [base] is the radix of the above number; 10 is the default (only 2, 8, 10 and 16 are supported)
* @return {boolean} true if valid, false if invalid (or the specified base isn't supported)
*/
str.isValidInt = function(s, base)
@ -63,14 +63,14 @@ str.isValidInt = function(s, base)
* for binary, because 1) it's not commonly used, and 2) it conflicts with valid hex sequences.
*
* @param {string} s is the string representation of some number
* @param {number} [base] is the default radix to use (default is 16); can be overridden by prefixes/suffixes
* @param {number} [base] is the default radix to use (default is 10); can be overridden by prefixes/suffixes
* @return {number|undefined} corresponding value, or undefined if invalid
*/
str.parseInt = function(s, base)
{
var value;
if (s) {
if (!base) base = 16;
if (!base) base = 10;
if (s.charAt(0) == '$') {
base = 16;
s = s.substr(1);

View file

@ -232,7 +232,7 @@ TextOut.prototype.massageLines = function()
var cBytes = 0, c;
var sBytes = match[1], sASCIILine = "";
for (var i = 0; i < sBytes.length; i += 2) {
c = str.parseInt(sBytes.substr(i, 2));
c = str.parseInt(sBytes.substr(i, 2), 16);
if (c != 0x0D && c != 0x0A && (c < 0x20 || c >= 0x7F)) {
c = 0x2E;
fASCII = false;
@ -357,7 +357,7 @@ TextOut.prototype.labelTargets = function()
} else {
sTarget = sTarget.substr(sShort.length);
}
target = str.parseInt(sTarget);
target = str.parseInt(sTarget, 16);
if (target == undefined) continue;
if (aTargets.indexOf(target) < 0) {
aTargets.push(target);
@ -376,7 +376,7 @@ TextOut.prototype.labelTargets = function()
for (i = 0; i < this.asLines.length; i++) {
as = this.getLineParts(i);
if (!as) continue;
addr = str.parseInt(as[4]);
addr = str.parseInt(as[4], 16);
if (addr == undefined) continue;
j = aTargets.indexOf(addr);
if (j >= 0) {
@ -398,7 +398,7 @@ TextOut.prototype.labelTargets = function()
as = this.getLineParts(i);
if (!as) continue;
if (as[3].charAt(0) == chPrefix) {
addr = str.parseInt(as[3].substr(1));
addr = str.parseInt(as[3].substr(1), 16);
if (aTargets.indexOf(addr) >= 0) {
/*
* Instead of putting back the original target address, let's just convert the line to a "db"

View file

@ -1,154 +1,155 @@
(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(){var l;function aa(a){var b=16,c;if(a){b||(b=10);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function da(a){return"0x"+n(a,2)}function t(a){return"0x"+n(a,4)}function ea(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function fa(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ga(){var a=ha();return-1!==a.indexOf("pcjs.org",a.length-8)}var ja={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ka(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}function la(a,b){return(a+" ").slice(0,b)}function ma(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
var na={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"};function oa(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 pa=Date.now||function(){return+new Date};
function qa(){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 ra(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 sa(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 ha(){return"http://"+(window?window.location.host:"www.pcjs.org")}
typeof b){var k="",m;for(m in b)b.hasOwnProperty(m)&&(k&&(k+="&"),k+=m+"="+encodeURIComponent(b[m]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function ha(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function ta(){return window?window.navigator.userAgent:""}function v(a){window&&window.alert(a)}function va(a){var b=!1;window&&(b=window.confirm(a));return b}var wa=null;function xa(){if(null==wa){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}wa=a}return wa}
function ya(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function za(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function Aa(a){if(window){var b=ta();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ba(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Ca(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);f=!0}}var Da={init:[],show:[],exit:[]},Ea=!1,Ja=!1,Ka=!0;function La(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ma(a){Da.init.push(a)}
function Na(a){if(Ka)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){Oa("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function Pa(a){!Ka&&a?(Ka=!0,Ea&&Qa("init"),Ja&&Qa("show")):Ka=a}function Qa(a){Da[a]&&Na(Da[a])}La("onload",function(){Ea=!0;Na(Da.init)});La("onpageshow",function(){Ja=!0;Na(Da.show)});La(Aa("Opera")||Aa("iOS")?"onunload":"onbeforeunload",function(){Na(Da.exit)});
function w(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.fc=b.comment;this.Hd=b;b=this.id.indexOf(".");0>b?this.Xa=this.id:(this.Ab=this.id.substr(0,b),this.Xa=this.id.substr(b+1));this[a]=c;this.C={ready:!1,cb:!1,Gb:!1,wa:!1,error:!1};this.Cb=null;this.C.error=!1;this.N={};this.H=null;this.sa=d||0;Ta.push(this)}var Ua=void 0,Va={};
function w(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.gc=b.comment;this.Id=b;b=this.id.indexOf(".");0>b?this.Xa=this.id:(this.Ab=this.id.substr(0,b),this.Xa=this.id.substr(b+1));this[a]=c;this.C={ready:!1,cb:!1,Hb:!1,wa:!1,error:!1};this.Cb=null;this.C.error=!1;this.N={};this.I=null;this.sa=d||0;Ra.push(this)}var Ua=void 0,Va={};
if(window){Ua||(Ua=window.location.search.substr(1));for(var Wa,Za=/\+/g,$a=/([^&=]+)=?([^&]*)/g;Wa=$a.exec(Ua);)Va[decodeURIComponent(Wa[1].replace(Za," "))]=decodeURIComponent(Wa[2].replace(Za," "))}function ab(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=w);a.prototype=ab(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var bb=window.PCjs.Machines||(window.PCjs.Machines={}),Ta=window.PCjs.Components||(window.PCjs.Components=[])}else bb={},Ta=[];function cb(a,b,c){bb[a]&&b&&(bb[a][b]=c)}function Oa(a,b,c){b||v((c?c+": ":"")+a)}
function db(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Ta.length;b++){var d=Ta[b];a&&d.id.indexOf(a)||c.push(d)}return c}function eb(a){if(void 0!==a){var b;for(b=0;b<Ta.length;b++)if(Ta[b].id===a)return Ta[b]}return null}function fb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Ta.length;d++)if(c)c==Ta[d]&&(c=null);else if(!(a!=Ta[d].type||b&&Ta[d].id.indexOf(b)))return Ta[d]}return null}
function C(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){v(c.message+" ("+a+")")}return b}function gb(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 k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=C(h))&&g.binding&&a.oa(g.type,g.binding,h,g.value),l=k.length}}}}
function z(a,b){b||(b=w);a.prototype=ab(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var bb=window.PCjs.Machines||(window.PCjs.Machines={}),Ra=window.PCjs.Components||(window.PCjs.Components=[])}else bb={},Ra=[];function cb(a,b,c){bb[a]&&b&&(bb[a][b]=c)}function Oa(a,b,c){b||v((c?c+": ":"")+a)}
function db(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<Ra.length;b++){var d=Ra[b];a&&d.id.indexOf(a)||c.push(d)}return c}function eb(a){if(void 0!==a){var b;for(b=0;b<Ra.length;b++)if(Ra[b].id===a)return Ra[b]}return null}function fb(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<Ra.length;d++)if(c)c==Ra[d]&&(c=null);else if(!(a!=Ra[d].type||b&&Ra[d].id.indexOf(b)))return Ra[d]}return null}
function C(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){v(c.message+" ("+a+")")}return b}function gb(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 k=g.split(" "),m=0;m<k.length;m++)switch(g=k[m],g){case "pc8080-binding":(g=C(h))&&g.binding&&a.oa(g.type,g.binding,h,g.value),m=k.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}
w.prototype={constructor:w,parent:null,toString:function(){return this.name?this.name:this.id||this.type},oa:function(a,b,c){switch(b){case "clear":return this.N[b]||(this.N[b]=c,c.onclick=function(a){return function(){a.N.print&&(a.N.print.value="")}}(this)),!0;case "print":return this.N[b]||(this.Fa=this.N[b]=c,c.value="",this.g=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),
this.ja=function(a){this.g(a,this.Xa)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Xa+": "+a)},ja:function(a,b,c){Oa(a,b,c||this.type)},Da:function(){return this.C.wa=!0},Ha:function(a,b){b&&(this.C.wa=!1);return!0}};function E(a,b,c,d,e,f,h){a.H&&(!0===h?h=0:null==h&&(h=a.sa),hb(a.H,a,b,c,d,e,f,h))}function ib(a,b){a.H&&jb(a,0)&&a.H.message(b,void 0)}function jb(a,b){if(a.H){a===a.H?b|=0:b=b||a.sa;var c=a.H.sa&b;return!!b&&c===b||!!(c&a.H.ed)}return!1}
function kb(a,b){if(a.C.Gb)return a.C.cb&&(a.C.cb=!1),a.C.Gb=!1;if(a.C.error)return a.g(a.toString()+" error"),!1;a.C.cb=b;return a.C.cb}function lb(a,b){a.C.cb&&(b?a.C.Gb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.C.cb}function F(a){if(!a.C.error&&(a.C.ready=!0,a.C.ready)){var b=a.Cb;a.Cb=null;b&&b()}}function mb(a,b){b&&(a.C.ready?b():a.Cb=b);return a.C.ready}function pb(a,b){a.C.error=!0;a.ja(b)}
this.ja=function(a){this.g(a,this.Xa)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.Xa+": "+a)},ja:function(a,b,c){Oa(a,b,c||this.type)},Da:function(){return this.C.wa=!0},Ha:function(a,b){b&&(this.C.wa=!1);return!0}};function E(a,b,c,d,e,f,h){a.I&&(!0===h?h=0:null==h&&(h=a.sa),hb(a.I,a,b,c,d,e,f,h))}function ib(a,b){a.I&&jb(a,0)&&a.I.message(b,void 0)}function jb(a,b){if(a.I){a===a.I?b|=0:b=b||a.sa;var c=a.I.sa&b;return!!b&&c===b||!!(c&a.I.fd)}return!1}
function kb(a,b){if(a.C.Hb)return a.C.cb&&(a.C.cb=!1),a.C.Hb=!1;if(a.C.error)return a.g(a.toString()+" error"),!1;a.C.cb=b;return a.C.cb}function lb(a,b){a.C.cb&&(b?a.C.Hb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.C.cb}function F(a){if(!a.C.error&&(a.C.ready=!0,a.C.ready)){var b=a.Cb;a.Cb=null;b&&b()}}function mb(a,b){b&&(a.C.ready?b():a.Cb=b);return a.C.ready}function pb(a,b){a.C.error=!0;a.ja(b)}
var qb="undefined"!==typeof ArrayBuffer,rb=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1],sb={cpu:1,bus:64,mem:128,port:256,nvr:16384,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};function tb(a){w.call(this,"Panel",a,tb)}z(tb);m=tb.prototype;
m.oa=function(a,b,c,d){return this.B&&this.B.oa(a,b,c,d)||this.b&&this.b.oa(a,b,c,d)||this.K&&this.K.oa(a,b,c,d)||this.H&&this.H.oa(a,b,c,d)?!0:this.parent.oa.call(this,a,b,c,d)};m.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.H=d;this.K=ub(a,"Keyboard")};m.Da=function(a,b){b||vb();return!0};m.Ha=function(){return!0};m.Ia=function(){};function vb(){for(var a=!1,b=D(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=C(d),f=eb(e.id);f||(a=!0,f=new tb(e));gb(f,d);a&&F(f)}}Ma(vb);
function wb(a,b,c){w.call(this,"Bus",a,wb);this.b=b;this.H=c;this.G=a.busWidth||16;this.L=Math.pow(2,this.G);this.w=this.L-1|0;this.ra=16>=this.G?10:20>=this.G?12:24>=this.G?14:15;this.Ga=1<<this.ra;this.M=this.Ga>>2;this.u=this.Ga-1;this.J=this.L/this.Ga|0;this.K=this.J-1;this.B=[];this.j=[];this.I=this.D=!1;this.O=[];this.P=[];a=new G;xb(a,this.H);this.X=Array(this.J);for(b=0;b<this.J;b++)this.X[b]=a;F(this)}z(wb);m=wb.prototype;m.reset=function(){};m.Da=function(a,b){b||this.reset();return!0};
function yb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ra;0<f&&h<a.X.length;){var g=a.X[h],k=h*a.Ga,l=a.Ga-(e-k);l>f&&(l=f);if(g&&g.size){if(g.type==d){if(e+f<=g.F)return g.wb+=g.F-e,g.F=e,!0;if(e>=g.F+g.wb){l=g.size-(e-k);l>f&&(l=f);g.wb=e-g.F+l;e=k+a.Ga;f-=l;h++;continue}}return zb(1,e,f)}e=new G(e,l,a.Ga,d);xb(e,a.H,g);a.X[h++]=e;e=k+a.Ga;f-=l}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+Ab[d]+" at "+t(b)),!0):zb(2,b,c)}m.$=function(a){return this.X[(a&this.w)>>>this.ra].ib(a&this.u,a)};
function Bb(a,b){return a.X[(b&a.w)>>>a.ra].ub(b&a.u,b)}m.Ra=function(a){var b=a&this.u,c=(a&this.w)>>>this.ra;return b!=this.u?this.X[c].rc(b,a):this.X[c++].ib(b,a)|this.X[c&this.K].ib(0,a+1)<<8};function Cb(a,b){var c=b&a.u,d=(b&a.w)>>>a.ra;return c!=a.u?a.X[d].Lb(c,b):a.X[d++].ub(c,b)|a.X[d&a.K].ub(0,b+1)<<8}m.ua=function(a,b){this.X[(a&this.w)>>>this.ra].kb(a&this.u,b&255,a)};function Db(a,b,c){a.X[(b&a.w)>>>a.ra].xb(b&a.u,c&255,b)}
m.Fb=function(a,b){var c=a&this.u,d=(a&this.w)>>>this.ra;c!=this.u?this.X[d].wc(c,b&65535,a):(this.X[d++].kb(c,b&255,a),this.X[d&this.K].kb(0,b>>8&255,a+1))};function Eb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.B[b]&&(a.B[b]=[null,!1]);a.B[b][1]=!a.B[b][1];return a.B[b][1]}function Gb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.B[k]?v("Input port "+t(k)+" already registered"):f.B[k]=[g,!1]}}
function Hb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.B[b],g=a.O[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.H&&a.I!=h[1]&&Ib(a.H,b,l)):a.H&&(hb(a.H,a,b,null,c),a.I&&Ib(a.H,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Rb(a,b){if(void 0===b)return a.D=!a.D,a.D;void 0===a.j[b]&&(a.j[b]=[null,!1]);a.j[b][1]=!a.j[b][1];return a.j[b][1]}
function Sb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.j[k]?v("Output port "+t(k)+" already registered"):f.j[k]=[g,!1]}}function Tb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.j[b],g=a.P[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.H&&a.D!=h[1]&&Ub(a.H,b,k)}else a.H&&(hb(a.H,a,b,k,d),a.D&&Ub(a.H,b,k));f+=g<<3;b+=g;e-=g}}
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],sb={cpu:1,bus:64,mem:128,port:256,nvr:16384,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};function tb(a){w.call(this,"Panel",a,tb)}z(tb);l=tb.prototype;
l.oa=function(a,b,c,d){return this.B&&this.B.oa(a,b,c,d)||this.b&&this.b.oa(a,b,c,d)||this.K&&this.K.oa(a,b,c,d)||this.I&&this.I.oa(a,b,c,d)?!0:this.parent.oa.call(this,a,b,c,d)};l.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.I=d;this.K=ub(a,"Keyboard")};l.Da=function(a,b){b||vb();return!0};l.Ha=function(){return!0};l.Ia=function(){};function vb(){for(var a=!1,b=D(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=C(d),f=eb(e.id);f||(a=!0,f=new tb(e));gb(f,d);a&&F(f)}}Ma(vb);
function wb(a,b,c){w.call(this,"Bus",a,wb);this.b=b;this.I=c;this.G=a.busWidth||16;this.L=Math.pow(2,this.G);this.w=this.L-1|0;this.ra=16>=this.G?10:20>=this.G?12:24>=this.G?14:15;this.Ga=1<<this.ra;this.M=this.Ga>>2;this.u=this.Ga-1;this.J=this.L/this.Ga|0;this.K=this.J-1;this.B=[];this.j=[];this.H=this.D=!1;this.O=[];this.P=[];a=new G;xb(a,this.I);this.Y=Array(this.J);for(b=0;b<this.J;b++)this.Y[b]=a;F(this)}z(wb);l=wb.prototype;l.reset=function(){};l.Da=function(a,b){b||this.reset();return!0};
function yb(a,b,c,d){for(var e=b,f=c,h=e>>>a.ra;0<f&&h<a.Y.length;){var g=a.Y[h],k=h*a.Ga,m=a.Ga-(e-k);m>f&&(m=f);if(g&&g.size){if(g.type==d){if(e+f<=g.F)return g.wb+=g.F-e,g.F=e,!0;if(e>=g.F+g.wb){m=g.size-(e-k);m>f&&(m=f);g.wb=e-g.F+m;e=k+a.Ga;f-=m;h++;continue}}return zb(1,e,f)}e=new G(e,m,a.Ga,d);xb(e,a.I,g);a.Y[h++]=e;e=k+a.Ga;f-=m}return 0>=f?(a.status(Math.floor(c/1024)+"Kb "+Ab[d]+" at "+t(b)),!0):zb(2,b,c)}l.$=function(a){return this.Y[(a&this.w)>>>this.ra].ib(a&this.u,a)};
function Bb(a,b){return a.Y[(b&a.w)>>>a.ra].ub(b&a.u,b)}l.Ra=function(a){var b=a&this.u,c=(a&this.w)>>>this.ra;return b!=this.u?this.Y[c].sc(b,a):this.Y[c++].ib(b,a)|this.Y[c&this.K].ib(0,a+1)<<8};function Cb(a,b){var c=b&a.u,d=(b&a.w)>>>a.ra;return c!=a.u?a.Y[d].Mb(c,b):a.Y[d++].ub(c,b)|a.Y[d&a.K].ub(0,b+1)<<8}l.ua=function(a,b){this.Y[(a&this.w)>>>this.ra].kb(a&this.u,b&255,a)};function Db(a,b,c){a.Y[(b&a.w)>>>a.ra].xb(b&a.u,c&255,b)}
l.Gb=function(a,b){var c=a&this.u,d=(a&this.w)>>>this.ra;c!=this.u?this.Y[d].xc(c,b&65535,a):(this.Y[d++].kb(c,b&255,a),this.Y[d&this.K].kb(0,b>>8&255,a+1))};function Eb(a,b){if(void 0===b)return a.H=!a.H,a.H;void 0===a.B[b]&&(a.B[b]=[null,!1]);a.B[b][1]=!a.B[b][1];return a.B[b][1]}function Gb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.B[k]?v("Input port "+t(k)+" already registered"):f.B[k]=[g,!1]}}
function Hb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.B[b],g=a.O[b]||1,k=1==g?255:2==g?65535:-1,m=k;void 0!==h?(h[0]&&(m=h[0](b,c),void 0===m?m=k:m&=k),a.I&&a.H!=h[1]&&Ib(a.I,b,m)):a.I&&(hb(a.I,a,b,null,c),a.H&&Ib(a.I,b,m));e|=m<<f;f+=g<<3;b+=g;d-=g}return e}function Rb(a,b){if(void 0===b)return a.D=!a.D,a.D;void 0===a.j[b]&&(a.j[b]=[null,!1]);a.j[b][1]=!a.j[b][1];return a.j[b][1]}
function Sb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,h=+e+d,g=c[e].bind(b);if(void 0!==g)for(var k=+e+d;k<=h;k++)void 0!==f.j[k]?v("Output port "+t(k)+" already registered"):f.j[k]=[g,!1]}}function Tb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.j[b],g=a.P[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.I&&a.D!=h[1]&&Ub(a.I,b,k)}else a.I&&(hb(a.I,a,b,k,d),a.D&&Ub(a.I,b,k));f+=g<<3;b+=g;e-=g}}
function zb(a,b,c){v("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Vb;if(qb){var Wb=new ArrayBuffer(2);(new DataView(Wb)).setUint16(0,256,!0);Vb=256===(new Uint16Array(Wb))[0]}else Vb=!1;var Xb=Vb;
function G(a,b,c,d){this.id=Yb+=2;this.b=null;this.F=a;this.wb=b;this.size=c||0;this.type=d||Zb;this.N=d==$b;xb(this);this.Ma=this.dc=!1;if(c)if(qb)this.I=new ArrayBuffer(c),this.D=new DataView(this.I,0,c),this.u=new Uint8Array(this.I,0,c),this.K=new Uint16Array(this.I,0,c>>1),this.b=new Int32Array(this.I,0,c>>2),ac(this,Xb?bc:cc);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;ac(this,dc)}else ac(this)}var Zb=0,$b=2,Ab=["NONE","RAM","ROM","VID","H/W"],Yb=0;
G.prototype={constructor:G,parent:null,save:function(){var a,b;if(qb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.D.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(qb)for(b=0;b<a.length;b++)this.D.setInt32(b<<2,a[b],!0);else this.b=a;return this.Ma=!0}return!1},Ya:function(a,b){b?0===this.j++&&ec(this,fc,!1):0===this.B++&&gc(this,fc,!1)},J:function(){this.H&&jb(this.H,129)&&this.H.message("attempt to read invalid block %"+n(this.F),!0);
return 255},w:function(a,b){this.H&&jb(this.H,129)&&this.H.message("attempt to write "+t(b)+" to invalid block %"+n(this.F),!0)},L:function(a,b){return this.ib(a++,b++)|this.ib(a,b)<<8},G:function(a,b,c){this.kb(a++,b&255,c++);this.kb(a,b>>8,c)},Z:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ea: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},ia:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Ma=!0},ya: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.Ma=!0},O:function(a,b){if(this.H&&null!=this.F){var c=this.H;hc(c,this.F+a,1,c.O)&&c.pa(!0)}return this.ub(a,b)},ba:function(a,b){if(this.H&&null!=this.F){var c=this.H;hc(c,this.F+a,2,c.O)&&c.pa(!0)}return this.Lb(a,b)},ha:function(a,b,c){if(this.H&&null!=this.F){var d=this.H;hc(d,this.F+a,1,d.D)&&d.pa(!0)}this.N?this.w(a,b,c):this.xb(a,b,c)},la:function(a,
b,c){if(this.H&&null!=this.F){var d=this.H;hc(d,this.F+a,2,d.D)&&d.pa(!0)}this.N?this.w(a,b,c):this.Pb(a,b,c)},M:function(a){return this.u[a]},P:function(a){return this.u[a]},aa:function(a){return this.D.getUint16(a,!0)},da:function(a){return a&1?this.u[a]|this.u[a+1]<<8:this.K[a>>1]},ga:function(a,b){this.u[a]=b;this.Ma=!0},Xa:function(a,b){this.u[a]=b;this.Ma=!0},ka:function(a,b){this.D.setUint16(a,b,!0);this.Ma=!0},va:function(a,b){a&1?(this.u[a]=b,this.u[a+1]=b>>8):this.K[a>>1]=b;this.Ma=!0}};
function xb(a,b,c){a.H=b;a.B=a.j=0;c&&((a.B=c.B)&&gc(a,fc,!1),(a.j=c.j)&&ec(a,fc,!1))}function ic(a,b){b?0===--a.j&&(a.kb=a.N?a.w:a.xb,a.wc=a.N?a.G:a.Pb):0===--a.B&&(a.ib=a.ub,a.rc=a.Lb)}function ec(a,b,c){c&&a.j||(a.kb=!a.N&&b[2]||a.w,a.wc=!a.N&&b[3]||a.G);if(c||void 0===c)a.xb=b[2]||a.w,a.Pb=b[3]||a.G}function gc(a,b,c){c&&a.B||(a.ib=b[0]||a.J,a.rc=b[1]||a.L);if(c||void 0===c)a.ub=b[0]||a.J,a.Lb=b[1]||a.L}function ac(a,b){b||(b=jc);gc(a,b,void 0);ec(a,b,void 0)}
var jc=[],dc=[G.prototype.Z,G.prototype.ea,G.prototype.ia,G.prototype.ya],fc=[G.prototype.O,G.prototype.ba,G.prototype.ha,G.prototype.la];if(qb)var cc=[G.prototype.M,G.prototype.aa,G.prototype.ga,G.prototype.ka],bc=[G.prototype.P,G.prototype.da,G.prototype.Xa,G.prototype.va];
function kc(a,b){w.call(this,"CPU",a,kc,1);var c=a.multiplier||1;this.Z=a.cycles||b;this.Qa=c;this.ga=Math.round(this.Z/1E4)/100;this.ab=this.ga*this.Qa;this.C.za=!1;this.C.Ob=!1;this.C.nb=a.autoStart;this.C.bc=!1;this.C.eb=!1;this.rb=this.O=0;this.sb=a.csStart;this.gb=a.csInterval;this.hb=a.csStop;this.w=[];this.Ea=this.bb.bind(this);F(this)}z(kc);var lc=["power","reset"];m=kc.prototype;
m.Oa=function(a,b,c,d){this.B=a;this.u=b;this.H=d;for(b=0;b<lc.length;b++)(c=this.N[lc[b]])&&this.B.oa(null,lc[b],c);this.I=ub(a,"ChipSet");a=mc(a,"autoStart");null!=a&&(this.C.nb="true"==a?!0:"false"==a?!1:!!a);F(this)};m.reset=function(){};m.save=function(){return null};m.restore=function(){return!1};
m.Da=function(a,b){if(!b){if(a&&this.restore){nc(this);if(!this.restore(a))return!1;oc(this)}else this.reset();if(this.H){var c=this.H;c.g("Type ? for help with PC8080 Debugger commands");c.Ia();if(c.ya){var d=c.ya;c.ya=null;pc(c,d)}}else this.g("No debugger detected")}Cc(this);return!0};m.Ha=function(a){return a?this.save():!0};m.nb=function(){return this.C.nb||!this.H&&void 0===this.N.run?(this.bb(!0),!0):!1};m.ec=function(){return 0};
function oc(a){void 0===a.sb&&(a.sb=0);void 0===a.gb&&(a.gb=-1);void 0===a.hb&&(a.hb=-1);a.C.eb=0<=a.sb&&0<a.gb;a.C.eb&&(a.rb=0,a.O=a.sb-a.M)}function Dc(a,b){if(a.C.eb){var c=!1;a.rb=a.rb+a.ec()|0;a.O-=b;0>=a.O&&(a.O+=a.gb,c=!0);0<=a.hb&&a.hb<=Ec(a)&&(a.gb=a.hb=-1,oc(a),a.pa(),c=!0);c&&a.g(Ec(a)+" cycles: checksum="+n(a.rb))}}
m.oa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.N[b]=c;a=!0;break;case "run":this.N[b]=c;c.onclick=function(){var a;if(a=d.B)if(a=d.B,a.C.wa)a=!0;else{var b=null,c,g=db(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.C.ready);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.C.wa);c++);c==g.length&&(b=a);v("The "+b.type+" component ("+b.id+") is not "+(b.C.ready?"powered yet":"ready yet"+(b.Cb?" (waiting for notification)":""))+".");a=!1}a&&(d.C.za?d.pa():d.bb())};
a=!0;break;case "speed":this.N[b]=c;a=!0;break;case "setSpeed":this.N[b]=c,c.onclick=function(){Fc(d,d.Qa<<1,!0)},c.textContent=this.ab.toFixed(2)+"Mhz",a=!0}return a};function Gc(a,b,c){a.M+=b;c&&(a.L=a.b=0)}function Hc(a,b){var c=1;b&&1<a.Qa&&a.K&&(c=a.K/a.ga);a.va=Math.round(1E3/30);a.ea=Math.floor(a.Z/30*c);b||(a.P=a.ea);a.ha=0}function Ec(a){return a.M+a.G+a.L-a.b}function nc(a){a.K=0;a.ya=0;a.M=a.G=a.L=a.b=0;oc(a);Fc(a,1)}
function Fc(a,b,c){var d=!1;if(void 0!==b){.8>a.K/a.ab?b=1:d=!0;a.Qa=b;b=a.ga*a.Qa;if(a.ab!=b){a.ab=b;b=a.ab.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.B&&a.B.vb()}Gc(a,a.G);a.G=0;a.D=pa();a.J=0;Hc(a);return d}function Ic(a,b){var c=a.w.length;a.w.push([-1,b]);return c}function Jc(a,b,c){var d=-1;0<=b&&b<a.w.length&&(d=a.Z*a.Qa/1E3*c,a.w[b][0]=d)}function Kc(a){a.L-=a.b;a.b=0}
m.bb=function(a){if(kb(this,!0)){if(!this.C.za){Fc(this);this.B&&this.B.start(this.D,Ec(this));this.C.za=!0;this.C.Ob=!0;this.I&&this.I.start();var b=this.N.run;b&&(b.textContent="Halt");this.B&&(this.B.Ia(!0),a&&this.B.vb(!0))}this.ha>=this.Z&&Hc(this,!0);this.aa=0;this.da=pa();this.J&&(a=this.da-this.J,a>this.va&&(this.D+=a,this.D>this.da&&(this.D=this.da)));try{do{for(var c=this.C.eb?1:this.ea,d=this.w.length-1;0<=d;d--){var e=this.w[d];0>e[0]||c>e[0]&&(c=e[0])}this.jb(c);var f=this.L-this.b;a=
f;for(var h=this.w.length-1;0<=h;h--){var g=this.w[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.aa+=f;this.G+=f;Gc(this,0,!0);Dc(this,f);this.P-=f;if(0>=this.P){this.P+=this.ea;15<=++this.ya&&(this.B&&this.B.Ia(),this.ya=0);break}}while(this.C.za)}catch(k){this.pa();Cc(this);this.B&&this.B.stop(pa(),Ec(this));kb(this,!1);pb(this,k.stack||k.message);return}c=setTimeout;d=this.Ea;this.J=pa();e=this.va;this.aa&&(e=Math.round(e*this.aa/this.ea));e=e-(this.J-this.da);if(f=this.J-this.D)this.K=Math.round(this.G/
(10*f))/100,864E5<=f&&(this.M=0,Fc(this));if(0>e||this.K<this.ab)-1E3>e&&(this.D-=e),e=0;this.ha+=this.aa;this.J+=e;c(d,e)}else Cc(this),this.B&&this.B.stop(pa(),Ec(this))};m.jb=function(){return 0};m.pa=function(a){lb(this,!0);Kc(this);Gc(this,this.G);this.G=0;if(this.C.za){this.C.za=!1;this.I&&this.I.stop();var b=this.N.run;b&&(b.textContent="Run")}this.C.complete=a};function Cc(a,b){if(a.B){for(var c=a.B,d=0;d<c.G.length;d++)Lc(c.G[d],b);a.B.Ia(b)}}
function Mc(a){this.lc=+a.model||8080;kc.call(this,a,1E6);this.ia=Nc;nc(this);this.C.complete=this.C.fd=!1;this.la=0;this.ba=[];this.ka=0;Oc(this)}z(Mc,kc);function Pc(a,b){a.ba.push(b)}m=Mc.prototype;m.reset=function(){this.C.za&&this.pa();Oc(this);nc(this);this.C.error=!1;this.parent.reset.call(this)};function Oc(a){a.i=0;a.S=0;a.T=0;a.U=0;a.V=0;a.W=0;a.Y=0;a.na=0;H(a,a.ka);Qc(a,0);a.j=0}function Rc(a,b){a.ka=b;H(a,b)}
m.ec=function(){var a=this.i+this.S+this.T+this.U+this.V+this.W+this.Y|0;return a=a+this.na+this.R+Sc(this)|0};
m.save=function(){var a=new Tc(this);I(a,0,[this.i,this.S,this.T,this.U,this.V,this.W,this.Y,this.na,this.R,Sc(this)]);I(a,1,[this.j,this.M,this.Qa]);for(var b=this.u,c=0,d=[],e=0;e<b.J;e++){var f=b.X[e];if(f.Ma||f.dc){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var p=f[g],q=g+1;q<f.length&&f[q]===p;)q++;l[k++]=q-g;l[k++]=p;g=q}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.i=b[0];this.S=b[1];this.T=b[2];this.U=b[3];this.V=b[4];this.W=b[5];this.Y=b[6];this.na=b[7]&65535;H(this,b[8]);Qc(this,b[9]);b=a[1];this.j=b[0];this.M=b[1];Fc(this,b[3]);a:{b=this.u;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.M){for(var f=0,h=Array(b.M),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.X[d];if(!f||!f.restore(e)){v("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.oa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.N[b]=c;this.la++;d=!0;break;default:d=this.parent.oa.call(this,a,b,c)}return d};function Uc(a){return a.S<<8|a.T}function Vc(a,b){a.S=b>>8&255;a.T=b&255}function Wc(a){return a.U<<8|a.V}function Xc(a,b){a.U=b>>8&255;a.V=b&255}function J(a){return a.W<<8|a.Y}
function Yc(a,b){a.W=b>>8&255;a.Y=b&255}function H(a,b){a.R=b&65535}function Zc(a){return a.ca&256?1:0}function $c(a,b){a.ca=a.ca&255|b}function ad(a){return rb[a.fa&255]?4:0}function bd(a){return(a.fa^a.xa)&16?16:0}function cd(a){return a.ca&255?0:64}function dd(a){return a.fa&128?128:0}function Sc(a){return a.ta&-214|dd(a)|cd(a)|bd(a)|ad(a)|Zc(a)}function Qc(a,b){a.ca=a.fa=a.xa=0;b&1&&(a.ca|=256);b&4||(a.fa|=1);b&16&&(a.xa|=16);b&64||(a.ca|=255);b&128&&(a.fa^=192);a.ta=a.ta&-726|b&512|2}
function G(a,b,c,d){this.id=Yb+=2;this.b=null;this.F=a;this.wb=b;this.size=c||0;this.type=d||Zb;this.N=d==$b;xb(this);this.Ma=this.ec=!1;if(c)if(qb)this.H=new ArrayBuffer(c),this.D=new DataView(this.H,0,c),this.u=new Uint8Array(this.H,0,c),this.K=new Uint16Array(this.H,0,c>>1),this.b=new Int32Array(this.H,0,c>>2),ac(this,Xb?bc:cc);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;ac(this,dc)}else ac(this)}var Zb=0,$b=2,Ab=["NONE","RAM","ROM","VID","H/W"],Yb=0;
G.prototype={constructor:G,parent:null,save:function(){var a,b;if(qb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.D.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(qb)for(b=0;b<a.length;b++)this.D.setInt32(b<<2,a[b],!0);else this.b=a;return this.Ma=!0}return!1},Ya:function(a,b){b?0===this.j++&&ec(this,fc,!1):0===this.B++&&gc(this,fc,!1)},J:function(){this.I&&jb(this.I,129)&&this.I.message("attempt to read invalid block %"+n(this.F),!0);
return 255},w:function(a,b){this.I&&jb(this.I,129)&&this.I.message("attempt to write "+t(b)+" to invalid block %"+n(this.F),!0)},L:function(a,b){return this.ib(a++,b++)|this.ib(a,b)<<8},G:function(a,b,c){this.kb(a++,b&255,c++);this.kb(a,b>>8,c)},X:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ea: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},ia:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Ma=!0},ya: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.Ma=!0},O:function(a,b){if(this.I&&null!=this.F){var c=this.I;hc(c,this.F+a,1,c.O)&&c.pa(!0)}return this.ub(a,b)},ba:function(a,b){if(this.I&&null!=this.F){var c=this.I;hc(c,this.F+a,2,c.O)&&c.pa(!0)}return this.Mb(a,b)},ha:function(a,b,c){if(this.I&&null!=this.F){var d=this.I;hc(d,this.F+a,1,d.D)&&d.pa(!0)}this.N?this.w(a,b,c):this.xb(a,b,c)},la:function(a,
b,c){if(this.I&&null!=this.F){var d=this.I;hc(d,this.F+a,2,d.D)&&d.pa(!0)}this.N?this.w(a,b,c):this.Qb(a,b,c)},M:function(a){return this.u[a]},P:function(a){return this.u[a]},aa:function(a){return this.D.getUint16(a,!0)},da:function(a){return a&1?this.u[a]|this.u[a+1]<<8:this.K[a>>1]},ga:function(a,b){this.u[a]=b;this.Ma=!0},Xa:function(a,b){this.u[a]=b;this.Ma=!0},ka:function(a,b){this.D.setUint16(a,b,!0);this.Ma=!0},va:function(a,b){a&1?(this.u[a]=b,this.u[a+1]=b>>8):this.K[a>>1]=b;this.Ma=!0}};
function xb(a,b,c){a.I=b;a.B=a.j=0;c&&((a.B=c.B)&&gc(a,fc,!1),(a.j=c.j)&&ec(a,fc,!1))}function ic(a,b){b?0===--a.j&&(a.kb=a.N?a.w:a.xb,a.xc=a.N?a.G:a.Qb):0===--a.B&&(a.ib=a.ub,a.sc=a.Mb)}function ec(a,b,c){c&&a.j||(a.kb=!a.N&&b[2]||a.w,a.xc=!a.N&&b[3]||a.G);if(c||void 0===c)a.xb=b[2]||a.w,a.Qb=b[3]||a.G}function gc(a,b,c){c&&a.B||(a.ib=b[0]||a.J,a.sc=b[1]||a.L);if(c||void 0===c)a.ub=b[0]||a.J,a.Mb=b[1]||a.L}function ac(a,b){b||(b=jc);gc(a,b,void 0);ec(a,b,void 0)}
var jc=[],dc=[G.prototype.X,G.prototype.ea,G.prototype.ia,G.prototype.ya],fc=[G.prototype.O,G.prototype.ba,G.prototype.ha,G.prototype.la];if(qb)var cc=[G.prototype.M,G.prototype.aa,G.prototype.ga,G.prototype.ka],bc=[G.prototype.P,G.prototype.da,G.prototype.Xa,G.prototype.va];
function kc(a,b){w.call(this,"CPU",a,kc,1);var c=a.multiplier||1;this.X=a.cycles||b;this.Qa=c;this.ga=Math.round(this.X/1E4)/100;this.ab=this.ga*this.Qa;this.C.za=!1;this.C.Pb=!1;this.C.nb=a.autoStart;this.C.cc=!1;this.C.eb=!1;this.rb=this.O=0;this.sb=a.csStart;this.gb=a.csInterval;this.hb=a.csStop;this.w=[];this.Ea=this.bb.bind(this);F(this)}z(kc);var lc=["power","reset"];l=kc.prototype;
l.Oa=function(a,b,c,d){this.B=a;this.u=b;this.I=d;for(b=0;b<lc.length;b++)(c=this.N[lc[b]])&&this.B.oa(null,lc[b],c);this.H=ub(a,"ChipSet");a=mc(a,"autoStart");null!=a&&(this.C.nb="true"==a?!0:"false"==a?!1:!!a);F(this)};l.reset=function(){};l.save=function(){return null};l.restore=function(){return!1};
l.Da=function(a,b){if(!b){if(a&&this.restore){nc(this);if(!this.restore(a))return!1;oc(this)}else this.reset();if(this.I){var c=this.I;c.g("Type ? for help with PC8080 Debugger commands");c.Ia();if(c.ya){var d=c.ya;c.ya=null;pc(c,d)}}else this.g("No debugger detected")}qc(this);return!0};l.Ha=function(a){return a?this.save():!0};l.nb=function(){return this.C.nb||!this.I&&void 0===this.N.run?(this.bb(!0),!0):!1};l.fc=function(){return 0};
function oc(a){void 0===a.sb&&(a.sb=0);void 0===a.gb&&(a.gb=-1);void 0===a.hb&&(a.hb=-1);a.C.eb=0<=a.sb&&0<a.gb;a.C.eb&&(a.rb=0,a.O=a.sb-a.M)}function Dc(a,b){if(a.C.eb){var c=!1;a.rb=a.rb+a.fc()|0;a.O-=b;0>=a.O&&(a.O+=a.gb,c=!0);0<=a.hb&&a.hb<=Ec(a)&&(a.gb=a.hb=-1,oc(a),a.pa(),c=!0);c&&a.g(Ec(a)+" cycles: checksum="+n(a.rb))}}
l.oa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.N[b]=c;a=!0;break;case "run":this.N[b]=c;c.onclick=function(){var a;if(a=d.B)if(a=d.B,a.C.wa)a=!0;else{var b=null,c,g=db(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.C.ready);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.C.wa);c++);c==g.length&&(b=a);v("The "+b.type+" component ("+b.id+") is not "+(b.C.ready?"powered yet":"ready yet"+(b.Cb?" (waiting for notification)":""))+".");a=!1}a&&(d.C.za?d.pa():d.bb())};
a=!0;break;case "speed":this.N[b]=c;a=!0;break;case "setSpeed":this.N[b]=c,c.onclick=function(){Fc(d,d.Qa<<1,!0)},c.textContent=this.ab.toFixed(2)+"Mhz",a=!0}return a};function Gc(a,b,c){a.M+=b;c&&(a.L=a.b=0)}function Hc(a,b){var c=1;b&&1<a.Qa&&a.K&&(c=a.K/a.ga);a.va=Math.round(1E3/30);a.ea=Math.floor(a.X/30*c);b||(a.P=a.ea);a.ha=0}function Ec(a){return a.M+a.G+a.L-a.b}function nc(a){a.K=0;a.ya=0;a.M=a.G=a.L=a.b=0;oc(a);Fc(a,1)}
function Fc(a,b,c){var d=!1;if(void 0!==b){.8>a.K/a.ab?b=1:d=!0;a.Qa=b;b=a.ga*a.Qa;if(a.ab!=b){a.ab=b;b=a.ab.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.B&&a.B.vb()}Gc(a,a.G);a.G=0;a.D=pa();a.J=0;Hc(a);return d}function Ic(a,b){var c=a.w.length;a.w.push([-1,b]);return c}function Jc(a,b,c){var d=-1;0<=b&&b<a.w.length&&(d=a.X*a.Qa/1E3*c,a.w[b][0]=d)}function Kc(a){a.L-=a.b;a.b=0}
l.bb=function(a){if(kb(this,!0)){if(!this.C.za){Fc(this);this.B&&this.B.start(this.D,Ec(this));this.C.za=!0;this.C.Pb=!0;this.H&&this.H.start();var b=this.N.run;b&&(b.textContent="Halt");this.B&&(this.B.Ia(!0),a&&this.B.vb(!0))}this.ha>=this.X&&Hc(this,!0);this.aa=0;this.da=pa();this.J&&(a=this.da-this.J,a>this.va&&(this.D+=a,this.D>this.da&&(this.D=this.da)));try{do{for(var c=this.C.eb?1:this.ea,d=this.w.length-1;0<=d;d--){var e=this.w[d];0>e[0]||c>e[0]&&(c=e[0])}this.jb(c);var f=this.L-this.b;a=
f;for(var h=this.w.length-1;0<=h;h--){var g=this.w[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.aa+=f;this.G+=f;Gc(this,0,!0);Dc(this,f);this.P-=f;if(0>=this.P){this.P+=this.ea;15<=++this.ya&&(this.B&&this.B.Ia(),this.ya=0);break}}while(this.C.za)}catch(k){this.pa();qc(this);this.B&&this.B.stop(pa(),Ec(this));kb(this,!1);pb(this,k.stack||k.message);return}c=setTimeout;d=this.Ea;this.J=pa();e=this.va;this.aa&&(e=Math.round(e*this.aa/this.ea));e=e-(this.J-this.da);if(f=this.J-this.D)this.K=Math.round(this.G/
(10*f))/100,864E5<=f&&(this.M=0,Fc(this));if(0>e||this.K<this.ab)-1E3>e&&(this.D-=e),e=0;this.ha+=this.aa;this.J+=e;c(d,e)}else qc(this),this.B&&this.B.stop(pa(),Ec(this))};l.jb=function(){return 0};l.pa=function(a){lb(this,!0);Kc(this);Gc(this,this.G);this.G=0;if(this.C.za){this.C.za=!1;this.H&&this.H.stop();var b=this.N.run;b&&(b.textContent="Run")}this.C.complete=a};function qc(a,b){if(a.B){for(var c=a.B,d=0;d<c.G.length;d++)Lc(c.G[d],b);a.B.Ia(b)}}
function Mc(a){this.mc=+a.model||8080;kc.call(this,a,1E6);this.ia=Nc;nc(this);this.C.complete=this.C.gd=!1;this.la=0;this.ba=[];this.ka=0;Oc(this)}z(Mc,kc);function Pc(a,b){a.ba.push(b)}l=Mc.prototype;l.reset=function(){this.C.za&&this.pa();Oc(this);nc(this);this.C.error=!1;this.parent.reset.call(this)};function Oc(a){a.i=0;a.S=0;a.T=0;a.U=0;a.V=0;a.W=0;a.Z=0;a.na=0;H(a,a.ka);Qc(a,0);a.j=0}function Rc(a,b){a.ka=b;H(a,b)}
l.fc=function(){var a=this.i+this.S+this.T+this.U+this.V+this.W+this.Z|0;return a=a+this.na+this.R+Sc(this)|0};
l.save=function(){var a=new Tc(this);I(a,0,[this.i,this.S,this.T,this.U,this.V,this.W,this.Z,this.na,this.R,Sc(this)]);I(a,1,[this.j,this.M,this.Qa]);for(var b=this.u,c=0,d=[],e=0;e<b.J;e++){var f=b.Y[e];if(f.Ma||f.ec){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,m=[];g<f.length;){for(var p=f[g],q=g+1;q<f.length&&f[q]===p;)q++;m[k++]=q-g;m[k++]=p;g=q}if(m.length<f.length){f=m;break a}}d[h]=f}}I(a,2,d);return a.data()};
l.restore=function(a){var b=a[0];this.i=b[0];this.S=b[1];this.T=b[2];this.U=b[3];this.V=b[4];this.W=b[5];this.Z=b[6];this.na=b[7]&65535;H(this,b[8]);Qc(this,b[9]);b=a[1];this.j=b[0];this.M=b[1];Fc(this,b[3]);a:{b=this.u;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.M){for(var f=0,h=Array(b.M),g=0;g<e.length-1;)for(var k=e[g++],m=e[g++];k--;)h[f++]=m;e=h}f=b.Y[d];if(!f||!f.restore(e)){v("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
l.oa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "IF":case "SF":case "ZF":case "AF":case "PF":case "CF":this.N[b]=c;this.la++;d=!0;break;default:d=this.parent.oa.call(this,a,b,c)}return d};function Uc(a){return a.S<<8|a.T}function Vc(a,b){a.S=b>>8&255;a.T=b&255}function Wc(a){return a.U<<8|a.V}function Xc(a,b){a.U=b>>8&255;a.V=b&255}function J(a){return a.W<<8|a.Z}
function Yc(a,b){a.W=b>>8&255;a.Z=b&255}function H(a,b){a.R=b&65535}function Zc(a){return a.ca&256?1:0}function $c(a,b){a.ca=a.ca&255|b}function ad(a){return rb[a.fa&255]?4:0}function bd(a){return(a.fa^a.xa)&16?16:0}function cd(a){return a.ca&255?0:64}function dd(a){return a.fa&128?128:0}function Sc(a){return a.ta&-214|dd(a)|cd(a)|bd(a)|ad(a)|Zc(a)}function Qc(a,b){a.ca=a.fa=a.xa=0;b&1&&(a.ca|=256);b&4||(a.fa|=1);b&16&&(a.xa|=16);b&64||(a.ca|=255);b&128&&(a.fa^=192);a.ta=a.ta&-726|b&512|2}
function ed(a,b){a.xa=a.i^b;return a.fa=(a.ca=a.i+b)&255}function fd(a,b){a.xa=a.i^b;return a.fa=(a.ca=a.i+b+(a.ca&256?1:0))&255}function gd(a,b){a.ca=a.fa=a.xa=a.i&b;(a.i|b)&8&&(a.xa^=16);return a.ca}function hd(a,b){a.xa=b^255;b=a.fa=b+255&255;a.ca=a.ca&-256|b;return b}function id(a,b){a.xa=b;b=a.fa=b+1&255;a.ca=a.ca&-256|b;return b}function jd(a,b){return a.fa=a.ca=a.xa=a.i|b}function K(a,b){b^=255;a.xa=a.i^b;return a.fa=(a.ca=a.i+b+1^256)&255}
function kd(a,b){b^=255;a.xa=a.i^b;return a.fa=(a.ca=a.i+b+(a.ca&256?0:1)^256)&255}function ld(a,b){return a.fa=a.ca=a.xa=a.i^b}m.$=function(a){return this.u.$(a)};m.ua=function(a,b){this.u.ua(a,b)};function L(a){var b=a.$(a.R);H(a,a.R+1);return b}function M(a){var b=a.u.Ra(a.R);H(a,a.R+2);return b}function O(a){var b=a.u.Ra(a.na);a.na=a.na+2&65535;return b}function P(a,b){a.na=a.na-2&65535;a.u.Fb(a.na,b)}
function Fd(a){if(a.b&&a.j&255&&a.ta&512){for(var b=0;8>b&&!(a.j&1<<b);b++);a.j&=~(0>b?255:1<<b);a.ta&=-513;a.j&=-257;a.ia[199|b<<3].call(a)}return a.j&256?(Kc(a),!1):!0}function Gd(a,b){a.j|=1<<b;a.ta&512&&Kc(a)}function R(a,b,c,d){d=d||2;a.N[b]&&(void 0===c&&(pb(a,"Value for "+b+" is invalid"),a.pa()),c=!a.C.za||a.C.bc?n(c,d):"--------".substr(0,d),a.N[b].textContent!=c&&(a.N[b].textContent=c))}
m.Ia=function(a){this.la&&(a||!this.C.za||this.C.bc)&&(R(this,"A",this.i),R(this,"B",this.S),R(this,"C",this.T),R(this,"BC",Uc(this),4),R(this,"D",this.U),R(this,"E",this.V),R(this,"DE",Wc(this),4),R(this,"H",this.W),R(this,"L",this.Y),R(this,"HL",J(this),4),R(this,"SP",this.na,4),R(this,"PC",this.R,4),a=Sc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.N.speed)a.textContent=
this.C.za&&this.K?this.K.toFixed(2)+"Mhz":"Stopped"};m.jb=function(a){this.C.complete=!0;var b=this.C.fd=this.H&&Hd(this.H),c=a?this.C.Ob?0:1:-1;this.C.Ob=!1;this.L=this.b=a;if(Fd(this)){do{if(b){if(Id(this.H,this.R,c)){this.pa();break}c=1}this.ia[L(this)].call(this)}while(0<this.b)}return this.C.complete?this.L-this.b:void 0===this.C.complete?0:-1};Ma(function(){for(var a=D(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Mc(d);gb(d,c)}});function Jd(){this.b-=4}
function kd(a,b){b^=255;a.xa=a.i^b;return a.fa=(a.ca=a.i+b+(a.ca&256?0:1)^256)&255}function Ed(a,b){return a.fa=a.ca=a.xa=a.i^b}l.$=function(a){return this.u.$(a)};l.ua=function(a,b){this.u.ua(a,b)};function L(a){var b=a.$(a.R);H(a,a.R+1);return b}function M(a){var b=a.u.Ra(a.R);H(a,a.R+2);return b}function O(a){var b=a.u.Ra(a.na);a.na=a.na+2&65535;return b}function P(a,b){a.na=a.na-2&65535;a.u.Gb(a.na,b)}
function Fd(a){if(a.b&&a.j&255&&a.ta&512){for(var b=0;8>b&&!(a.j&1<<b);b++);a.j&=~(0>b?255:1<<b);a.ta&=-513;a.j&=-257;a.ia[199|b<<3].call(a)}return a.j&256?(Kc(a),!1):!0}function Gd(a,b){a.j|=1<<b;a.ta&512&&Kc(a)}function R(a,b,c,d){d=d||2;a.N[b]&&(void 0===c&&(pb(a,"Value for "+b+" is invalid"),a.pa()),c=!a.C.za||a.C.cc?n(c,d):"--------".substr(0,d),a.N[b].textContent!=c&&(a.N[b].textContent=c))}
l.Ia=function(a){this.la&&(a||!this.C.za||this.C.cc)&&(R(this,"A",this.i),R(this,"B",this.S),R(this,"C",this.T),R(this,"BC",Uc(this),4),R(this,"D",this.U),R(this,"E",this.V),R(this,"DE",Wc(this),4),R(this,"H",this.W),R(this,"L",this.Z),R(this,"HL",J(this),4),R(this,"SP",this.na,4),R(this,"PC",this.R,4),a=Sc(this),R(this,"PS",a,4),R(this,"IF",a&512?1:0,1),R(this,"SF",a&128?1:0,1),R(this,"ZF",a&64?1:0,1),R(this,"AF",a&16?1:0,1),R(this,"PF",a&4?1:0,1),R(this,"CF",a&1?1:0,1));if(a=this.N.speed)a.textContent=
this.C.za&&this.K?this.K.toFixed(2)+"Mhz":"Stopped"};l.jb=function(a){this.C.complete=!0;var b=this.C.gd=this.I&&Hd(this.I),c=a?this.C.Pb?0:1:-1;this.C.Pb=!1;this.L=this.b=a;if(Fd(this)){do{if(b){if(Id(this.I,this.R,c)){this.pa();break}c=1}this.ia[L(this)].call(this)}while(0<this.b)}return this.C.complete?this.L-this.b:void 0===this.C.complete?0:-1};Ma(function(){for(var a=D(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Mc(d);gb(d,c)}});function Jd(){this.b-=4}
function Kd(){H(this,M(this));this.b-=10}function Ld(){H(this,O(this));this.b-=10}function Md(){var a=M(this);P(this,this.R);H(this,a);this.b-=17}
var Nc=[Jd,function(){Vc(this,M(this));this.b-=10},function(){this.ua(Uc(this),this.i);this.b-=7},function(){Vc(this,Uc(this)+1);this.b-=5},function(){this.S=id(this,this.S);this.b-=5},function(){this.S=hd(this,this.S);this.b-=5},function(){this.S=L(this);this.b-=7},function(){var a=this.i<<1;this.i=a&255|a>>8;$c(this,a&256);this.b-=4},Jd,function(){var a;Yc(this,a=J(this)+Uc(this));$c(this,a>>8&256);this.b-=10},function(){this.i=this.$(Uc(this));this.b-=7},function(){Vc(this,Uc(this)-1);this.b-=
5},function(){this.T=id(this,this.T);this.b-=5},function(){this.T=hd(this,this.T);this.b-=5},function(){this.T=L(this);this.b-=7},function(){var a=this.i<<8&256;this.i=(a|this.i)>>1;$c(this,a);this.b-=4},Jd,function(){Xc(this,M(this));this.b-=10},function(){this.ua(Wc(this),this.i);this.b-=7},function(){Xc(this,Wc(this)+1);this.b-=5},function(){this.U=id(this,this.U);this.b-=5},function(){this.U=hd(this,this.U);this.b-=5},function(){this.U=L(this);this.b-=7},function(){var a=this.i<<1;this.i=a&255|
Zc(this);$c(this,a&256);this.b-=4},Jd,function(){var a;Yc(this,a=J(this)+Wc(this));$c(this,a>>8&256);this.b-=10},function(){this.i=this.$(Wc(this));this.b-=7},function(){Xc(this,Wc(this)-1);this.b-=5},function(){this.V=id(this,this.V);this.b-=5},function(){this.V=hd(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){var a=this.i<<8;this.i=(Zc(this)<<8|this.i)>>1;$c(this,a&256);this.b-=4},Jd,function(){Yc(this,M(this));this.b-=10},function(){var a=M(this);this.u.Fb(a,J(this));
this.b-=16},function(){Yc(this,J(this)+1);this.b-=5},function(){this.W=id(this,this.W);this.b-=5},function(){this.W=hd(this,this.W);this.b-=5},function(){this.W=L(this);this.b-=7},function(){var a=0,b=Zc(this);if(bd(this)||9<(this.i&15))a|=6;if(b||154<=this.i)a|=96,b=1;this.i=ed(this,a);$c(this,b?256:0);this.b-=4},Jd,function(){var a;Yc(this,a=J(this)+J(this));$c(this,a>>8&256);this.b-=10},function(){var a;a=M(this);a=this.u.Ra(a);Yc(this,a);this.b-=16},function(){Yc(this,J(this)-1);this.b-=5},function(){this.Y=
id(this,this.Y);this.b-=5},function(){this.Y=hd(this,this.Y);this.b-=5},function(){this.Y=L(this);this.b-=7},function(){this.i=~this.i&255;this.b-=4},Jd,function(){this.na=M(this)&65535;this.b-=10},function(){this.ua(M(this),this.i);this.b-=13},function(){this.na=this.na+1&65535;this.b-=5},function(){var a=J(this);this.ua(a,id(this,this.$(a)));this.b-=10},function(){var a=J(this);this.ua(a,hd(this,this.$(a)));this.b-=10},function(){this.ua(J(this),L(this));this.b-=10},function(){this.ca|=256;this.b-=
Zc(this);$c(this,a&256);this.b-=4},Jd,function(){var a;Yc(this,a=J(this)+Wc(this));$c(this,a>>8&256);this.b-=10},function(){this.i=this.$(Wc(this));this.b-=7},function(){Xc(this,Wc(this)-1);this.b-=5},function(){this.V=id(this,this.V);this.b-=5},function(){this.V=hd(this,this.V);this.b-=5},function(){this.V=L(this);this.b-=7},function(){var a=this.i<<8;this.i=(Zc(this)<<8|this.i)>>1;$c(this,a&256);this.b-=4},Jd,function(){Yc(this,M(this));this.b-=10},function(){var a=M(this);this.u.Gb(a,J(this));
this.b-=16},function(){Yc(this,J(this)+1);this.b-=5},function(){this.W=id(this,this.W);this.b-=5},function(){this.W=hd(this,this.W);this.b-=5},function(){this.W=L(this);this.b-=7},function(){var a=0,b=Zc(this);if(bd(this)||9<(this.i&15))a|=6;if(b||154<=this.i)a|=96,b=1;this.i=ed(this,a);$c(this,b?256:0);this.b-=4},Jd,function(){var a;Yc(this,a=J(this)+J(this));$c(this,a>>8&256);this.b-=10},function(){var a;a=M(this);a=this.u.Ra(a);Yc(this,a);this.b-=16},function(){Yc(this,J(this)-1);this.b-=5},function(){this.Z=
id(this,this.Z);this.b-=5},function(){this.Z=hd(this,this.Z);this.b-=5},function(){this.Z=L(this);this.b-=7},function(){this.i=~this.i&255;this.b-=4},Jd,function(){this.na=M(this)&65535;this.b-=10},function(){this.ua(M(this),this.i);this.b-=13},function(){this.na=this.na+1&65535;this.b-=5},function(){var a=J(this);this.ua(a,id(this,this.$(a)));this.b-=10},function(){var a=J(this);this.ua(a,hd(this,this.$(a)));this.b-=10},function(){this.ua(J(this),L(this));this.b-=10},function(){this.ca|=256;this.b-=
4},Jd,function(){var a;Yc(this,a=J(this)+this.na);$c(this,a>>8&256);this.b-=10},function(){this.i=this.$(M(this));this.b-=13},function(){this.na=this.na-1&65535;this.b-=5},function(){this.i=id(this,this.i);this.b-=5},function(){this.i=hd(this,this.i);this.b-=5},function(){this.i=L(this);this.b-=7},function(){$c(this,Zc(this)?0:256);this.b-=4},function(){this.b-=5},function(){this.S=this.T;this.b-=5},function(){this.S=this.U;this.b-=5},function(){this.S=this.V;this.b-=5},function(){this.S=this.W;this.b-=
5},function(){this.S=this.Y;this.b-=5},function(){this.S=this.$(J(this));this.b-=7},function(){this.S=this.i;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=this.U;this.b-=5},function(){this.T=this.V;this.b-=5},function(){this.T=this.W;this.b-=5},function(){this.T=this.Y;this.b-=5},function(){this.T=this.$(J(this));this.b-=7},function(){this.T=this.i;this.b-=5},function(){this.U=this.S;this.b-=5},function(){this.U=this.T;this.b-=5},function(){this.b-=5},function(){this.U=
this.V;this.b-=5},function(){this.U=this.W;this.b-=5},function(){this.U=this.Y;this.b-=5},function(){this.U=this.$(J(this));this.b-=7},function(){this.U=this.i;this.b-=5},function(){this.V=this.S;this.b-=5},function(){this.V=this.T;this.b-=5},function(){this.V=this.U;this.b-=5},function(){this.b-=5},function(){this.V=this.W;this.b-=5},function(){this.V=this.Y;this.b-=5},function(){this.V=this.$(J(this));this.b-=7},function(){this.V=this.i;this.b-=5},function(){this.W=this.S;this.b-=5},function(){this.W=
this.T;this.b-=5},function(){this.W=this.U;this.b-=5},function(){this.W=this.V;this.b-=5},function(){this.b-=5},function(){this.W=this.Y;this.b-=5},function(){this.W=this.$(J(this));this.b-=7},function(){this.W=this.i;this.b-=5},function(){this.Y=this.S;this.b-=5},function(){this.Y=this.T;this.b-=5},function(){this.Y=this.U;this.b-=5},function(){this.Y=this.V;this.b-=5},function(){this.Y=this.W;this.b-=5},function(){this.b-=5},function(){this.Y=this.$(J(this));this.b-=7},function(){this.Y=this.i;
this.b-=5},function(){this.ua(J(this),this.S);this.b-=7},function(){this.ua(J(this),this.T);this.b-=7},function(){this.ua(J(this),this.U);this.b-=7},function(){this.ua(J(this),this.V);this.b-=7},function(){this.ua(J(this),this.W);this.b-=7},function(){this.ua(J(this),this.Y);this.b-=7},function(){var a=this.R-1;if(this.ba.length)for(var b=0;b<this.ba.length;b++)if(this.ba[b](a))return;this.b-=7;this.j|=256;Kc(this);this.H&&jb(this,-2147483648)?(H(this,a),this.H.pa()):this.ta&512||(this.H&&H(this,
a),this.pa())},function(){this.ua(J(this),this.i);this.b-=7},function(){this.i=this.S;this.b-=5},function(){this.i=this.T;this.b-=5},function(){this.i=this.U;this.b-=5},function(){this.i=this.V;this.b-=5},function(){this.i=this.W;this.b-=5},function(){this.i=this.Y;this.b-=5},function(){this.i=this.$(J(this));this.b-=7},function(){this.b-=5},function(){this.i=ed(this,this.S);this.b-=4},function(){this.i=ed(this,this.T);this.b-=4},function(){this.i=ed(this,this.U);this.b-=4},function(){this.i=ed(this,
this.V);this.b-=4},function(){this.i=ed(this,this.W);this.b-=4},function(){this.i=ed(this,this.Y);this.b-=4},function(){this.i=ed(this,this.$(J(this)));this.b-=7},function(){this.i=ed(this,this.i);this.b-=4},function(){this.i=fd(this,this.S);this.b-=4},function(){this.i=fd(this,this.T);this.b-=4},function(){this.i=fd(this,this.U);this.b-=4},function(){this.i=fd(this,this.V);this.b-=4},function(){this.i=fd(this,this.W);this.b-=4},function(){this.i=fd(this,this.Y);this.b-=4},function(){this.i=fd(this,
this.$(J(this)));this.b-=7},function(){this.i=fd(this,this.i);this.b-=4},function(){this.i=K(this,this.S);this.b-=4},function(){this.i=K(this,this.T);this.b-=4},function(){this.i=K(this,this.U);this.b-=4},function(){this.i=K(this,this.V);this.b-=4},function(){this.i=K(this,this.W);this.b-=4},function(){this.i=K(this,this.Y);this.b-=4},function(){this.i=K(this,this.$(J(this)));this.b-=7},function(){this.i=K(this,this.i);this.b-=4},function(){this.i=kd(this,this.S);this.b-=4},function(){this.i=kd(this,
this.T);this.b-=4},function(){this.i=kd(this,this.U);this.b-=4},function(){this.i=kd(this,this.V);this.b-=4},function(){this.i=kd(this,this.W);this.b-=4},function(){this.i=kd(this,this.Y);this.b-=4},function(){this.i=kd(this,this.$(J(this)));this.b-=7},function(){this.i=kd(this,this.i);this.b-=4},function(){this.i=gd(this,this.S);this.b-=4},function(){this.i=gd(this,this.T);this.b-=4},function(){this.i=gd(this,this.U);this.b-=4},function(){this.i=gd(this,this.V);this.b-=4},function(){this.i=gd(this,
this.W);this.b-=4},function(){this.i=gd(this,this.Y);this.b-=4},function(){this.i=gd(this,this.$(J(this)));this.b-=7},function(){this.i=gd(this,this.i);this.b-=4},function(){this.i=ld(this,this.S);this.b-=4},function(){this.i=ld(this,this.T);this.b-=4},function(){this.i=ld(this,this.U);this.b-=4},function(){this.i=ld(this,this.V);this.b-=4},function(){this.i=ld(this,this.W);this.b-=4},function(){this.i=ld(this,this.Y);this.b-=4},function(){this.i=ld(this,this.$(J(this)));this.b-=7},function(){this.i=
ld(this,this.i);this.b-=4},function(){this.i=jd(this,this.S);this.b-=4},function(){this.i=jd(this,this.T);this.b-=4},function(){this.i=jd(this,this.U);this.b-=4},function(){this.i=jd(this,this.V);this.b-=4},function(){this.i=jd(this,this.W);this.b-=4},function(){this.i=jd(this,this.Y);this.b-=4},function(){this.i=jd(this,this.$(J(this)));this.b-=7},function(){this.i=jd(this,this.i);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.U);this.b-=
4},function(){K(this,this.V);this.b-=4},function(){K(this,this.W);this.b-=4},function(){K(this,this.Y);this.b-=4},function(){K(this,this.$(J(this)));this.b-=7},function(){K(this,this.i);this.b-=4},function(){cd(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Vc(this,O(this));this.b-=10},function(){var a=M(this);cd(this)||H(this,a);this.b-=10},Kd,function(){var a=M(this);cd(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Uc(this));this.b-=11},function(){this.i=ed(this,
5},function(){this.S=this.Z;this.b-=5},function(){this.S=this.$(J(this));this.b-=7},function(){this.S=this.i;this.b-=5},function(){this.T=this.S;this.b-=5},function(){this.b-=5},function(){this.T=this.U;this.b-=5},function(){this.T=this.V;this.b-=5},function(){this.T=this.W;this.b-=5},function(){this.T=this.Z;this.b-=5},function(){this.T=this.$(J(this));this.b-=7},function(){this.T=this.i;this.b-=5},function(){this.U=this.S;this.b-=5},function(){this.U=this.T;this.b-=5},function(){this.b-=5},function(){this.U=
this.V;this.b-=5},function(){this.U=this.W;this.b-=5},function(){this.U=this.Z;this.b-=5},function(){this.U=this.$(J(this));this.b-=7},function(){this.U=this.i;this.b-=5},function(){this.V=this.S;this.b-=5},function(){this.V=this.T;this.b-=5},function(){this.V=this.U;this.b-=5},function(){this.b-=5},function(){this.V=this.W;this.b-=5},function(){this.V=this.Z;this.b-=5},function(){this.V=this.$(J(this));this.b-=7},function(){this.V=this.i;this.b-=5},function(){this.W=this.S;this.b-=5},function(){this.W=
this.T;this.b-=5},function(){this.W=this.U;this.b-=5},function(){this.W=this.V;this.b-=5},function(){this.b-=5},function(){this.W=this.Z;this.b-=5},function(){this.W=this.$(J(this));this.b-=7},function(){this.W=this.i;this.b-=5},function(){this.Z=this.S;this.b-=5},function(){this.Z=this.T;this.b-=5},function(){this.Z=this.U;this.b-=5},function(){this.Z=this.V;this.b-=5},function(){this.Z=this.W;this.b-=5},function(){this.b-=5},function(){this.Z=this.$(J(this));this.b-=7},function(){this.Z=this.i;
this.b-=5},function(){this.ua(J(this),this.S);this.b-=7},function(){this.ua(J(this),this.T);this.b-=7},function(){this.ua(J(this),this.U);this.b-=7},function(){this.ua(J(this),this.V);this.b-=7},function(){this.ua(J(this),this.W);this.b-=7},function(){this.ua(J(this),this.Z);this.b-=7},function(){var a=this.R-1;if(this.ba.length)for(var b=0;b<this.ba.length;b++)if(this.ba[b](a))return;this.b-=7;this.j|=256;Kc(this);this.I&&jb(this,-2147483648)?(H(this,a),this.I.pa()):this.ta&512||(this.I&&H(this,
a),this.pa())},function(){this.ua(J(this),this.i);this.b-=7},function(){this.i=this.S;this.b-=5},function(){this.i=this.T;this.b-=5},function(){this.i=this.U;this.b-=5},function(){this.i=this.V;this.b-=5},function(){this.i=this.W;this.b-=5},function(){this.i=this.Z;this.b-=5},function(){this.i=this.$(J(this));this.b-=7},function(){this.b-=5},function(){this.i=ed(this,this.S);this.b-=4},function(){this.i=ed(this,this.T);this.b-=4},function(){this.i=ed(this,this.U);this.b-=4},function(){this.i=ed(this,
this.V);this.b-=4},function(){this.i=ed(this,this.W);this.b-=4},function(){this.i=ed(this,this.Z);this.b-=4},function(){this.i=ed(this,this.$(J(this)));this.b-=7},function(){this.i=ed(this,this.i);this.b-=4},function(){this.i=fd(this,this.S);this.b-=4},function(){this.i=fd(this,this.T);this.b-=4},function(){this.i=fd(this,this.U);this.b-=4},function(){this.i=fd(this,this.V);this.b-=4},function(){this.i=fd(this,this.W);this.b-=4},function(){this.i=fd(this,this.Z);this.b-=4},function(){this.i=fd(this,
this.$(J(this)));this.b-=7},function(){this.i=fd(this,this.i);this.b-=4},function(){this.i=K(this,this.S);this.b-=4},function(){this.i=K(this,this.T);this.b-=4},function(){this.i=K(this,this.U);this.b-=4},function(){this.i=K(this,this.V);this.b-=4},function(){this.i=K(this,this.W);this.b-=4},function(){this.i=K(this,this.Z);this.b-=4},function(){this.i=K(this,this.$(J(this)));this.b-=7},function(){this.i=K(this,this.i);this.b-=4},function(){this.i=kd(this,this.S);this.b-=4},function(){this.i=kd(this,
this.T);this.b-=4},function(){this.i=kd(this,this.U);this.b-=4},function(){this.i=kd(this,this.V);this.b-=4},function(){this.i=kd(this,this.W);this.b-=4},function(){this.i=kd(this,this.Z);this.b-=4},function(){this.i=kd(this,this.$(J(this)));this.b-=7},function(){this.i=kd(this,this.i);this.b-=4},function(){this.i=gd(this,this.S);this.b-=4},function(){this.i=gd(this,this.T);this.b-=4},function(){this.i=gd(this,this.U);this.b-=4},function(){this.i=gd(this,this.V);this.b-=4},function(){this.i=gd(this,
this.W);this.b-=4},function(){this.i=gd(this,this.Z);this.b-=4},function(){this.i=gd(this,this.$(J(this)));this.b-=7},function(){this.i=gd(this,this.i);this.b-=4},function(){this.i=Ed(this,this.S);this.b-=4},function(){this.i=Ed(this,this.T);this.b-=4},function(){this.i=Ed(this,this.U);this.b-=4},function(){this.i=Ed(this,this.V);this.b-=4},function(){this.i=Ed(this,this.W);this.b-=4},function(){this.i=Ed(this,this.Z);this.b-=4},function(){this.i=Ed(this,this.$(J(this)));this.b-=7},function(){this.i=
Ed(this,this.i);this.b-=4},function(){this.i=jd(this,this.S);this.b-=4},function(){this.i=jd(this,this.T);this.b-=4},function(){this.i=jd(this,this.U);this.b-=4},function(){this.i=jd(this,this.V);this.b-=4},function(){this.i=jd(this,this.W);this.b-=4},function(){this.i=jd(this,this.Z);this.b-=4},function(){this.i=jd(this,this.$(J(this)));this.b-=7},function(){this.i=jd(this,this.i);this.b-=4},function(){K(this,this.S);this.b-=4},function(){K(this,this.T);this.b-=4},function(){K(this,this.U);this.b-=
4},function(){K(this,this.V);this.b-=4},function(){K(this,this.W);this.b-=4},function(){K(this,this.Z);this.b-=4},function(){K(this,this.$(J(this)));this.b-=7},function(){K(this,this.i);this.b-=4},function(){cd(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Vc(this,O(this));this.b-=10},function(){var a=M(this);cd(this)||H(this,a);this.b-=10},Kd,function(){var a=M(this);cd(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Uc(this));this.b-=11},function(){this.i=ed(this,
L(this));this.b-=7},function(){P(this,this.R);H(this,0);this.b-=11},function(){cd(this)&&(H(this,O(this)),this.b-=6);this.b-=5},Ld,function(){var a=M(this);cd(this)&&H(this,a);this.b-=10},Kd,function(){var a=M(this);cd(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Md,function(){this.i=fd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,8);this.b-=11},function(){Zc(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Xc(this,O(this));this.b-=10},function(){var a=M(this);Zc(this)||
H(this,a);this.b-=10},function(){var a=L(this);Tb(this.u,a,this.i,this.R+-2&65535);this.b-=10},function(){var a=M(this);Zc(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Wc(this));this.b-=11},function(){this.i=K(this,L(this));this.b-=7},function(){P(this,this.R);H(this,16);this.b-=11},function(){Zc(this)&&(H(this,O(this)),this.b-=6);this.b-=5},Ld,function(){var a=M(this);Zc(this)&&H(this,a);this.b-=10},function(){var a=L(this);this.i=Hb(this.u,a,this.R+-2&65535)&255;this.b-=
10},function(){var a=M(this);Zc(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Md,function(){this.i=kd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,24);this.b-=11},function(){ad(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){Yc(this,O(this));this.b-=10},function(){var a=M(this);ad(this)||H(this,a);this.b-=10},function(){var a=O(this);P(this,J(this));Yc(this,a);this.b-=18},function(){var a=M(this);ad(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,
J(this));this.b-=11},function(){this.i=gd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,32);this.b-=11},function(){ad(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,J(this));this.b-=5},function(){var a=M(this);ad(this)&&H(this,a);this.b-=10},function(){var a=J(this);Yc(this,Wc(this));Xc(this,a);this.b-=5},function(){var a=M(this);ad(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Md,function(){this.i=ld(this,L(this));this.b-=7},function(){P(this,this.R);H(this,
J(this));this.b-=11},function(){this.i=gd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,32);this.b-=11},function(){ad(this)&&(H(this,O(this)),this.b-=6);this.b-=5},function(){H(this,J(this));this.b-=5},function(){var a=M(this);ad(this)&&H(this,a);this.b-=10},function(){var a=J(this);Yc(this,Wc(this));Xc(this,a);this.b-=5},function(){var a=M(this);ad(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Md,function(){this.i=Ed(this,L(this));this.b-=7},function(){P(this,this.R);H(this,
40);this.b-=11},function(){dd(this)||(H(this,O(this)),this.b-=6);this.b-=5},function(){var a=O(this);Qc(this,a&255|this.ta&-256);this.i=a>>8;this.b-=10},function(){var a=M(this);dd(this)||H(this,a);this.b-=10},function(){this.ta&=-513;this.b-=4},function(){var a=M(this);dd(this)||(P(this,this.R),H(this,a),this.b-=6);this.b-=11},function(){P(this,Sc(this)&255|this.i<<8);this.b-=11},function(){this.i=jd(this,L(this));this.b-=7},function(){P(this,this.R);H(this,48);this.b-=11},function(){dd(this)&&(H(this,
O(this)),this.b-=6);this.b-=5},function(){this.na=J(this)&65535;this.b-=5},function(){var a=M(this);dd(this)&&H(this,a);this.b-=10},function(){this.ta|=512;this.b-=4;Fd(this)},function(){var a=M(this);dd(this)&&(P(this,this.R),H(this,a),this.b-=6);this.b-=11},Md,function(){K(this,L(this));this.b-=7},function(){P(this,this.R);H(this,56);this.b-=11}];
function S(a){w.call(this,"ChipSet",a,S,32768);var b=a.model;b&&!Nd[b]&&Oa("Unrecognized ChipSet model: "+b);this.w=Nd[b]||{};a.sound&&(this.ea=null,window&&(this.ea=window.AudioContext||window.webkitAudioContext),this.ea&&new this.ea);F(this)}z(S);
var T={Aa:1978.1,ad:{Ba:0,Md:1,Qd:16,Xd:32,fe:64,ee:128,lb:14},Wa:{Ba:1,Cc:1,Vc:2,Rc:4,Sc:16,Tc:32,Uc:64,lb:8},bd:{Ba:2,Ld:3,ne:4,Nd:8,ae:16,be:32,ce:64,Od:128,lb:0},je:{Ba:3},he:{Ba:2,Yd:7},le:{Ba:3,oe:1,ke:2,de:4,Vd:8,Pd:16,Id:32},ie:{Ba:4},me:{Ba:5,Rd:1,Sd:2,Td:4,Ud:8,pe:16}},U={Aa:100,Ja:{Ba:66,Zb:1,Vb:2,Qc:4,$d:8,Zd:16,Xb:32,Wb:64,Sb:128},Bc:{Ba:66,INIT:0},Ua:{Ba:194,Kd:0,Rb:16,Wc:32,Yb:48,Gc:0,Hc:32},yb:{Ba:162,ge:0,Jc:0,Fc:0,Ic:0,Ec:0},Ka:{Wd:{Ba:98},Ta:{yc:0,xc:1,Yc:2,cd:4,Dc:5,Xc:6,Zc:7},
zb:16383}},Nd={SI1978:T,VT100:U};S.prototype.oa=function(){return!1};S.prototype.Oa=function(a,b,c,d){this.u=b;this.b=c;this.H=d;this.B=a;this.K=ub(a,"Keyboard");this.Ea=ub(a,"SerialPort");this.video=ub(a,"Video");Gb(b,this,this.w.Db);Sb(b,this,this.w.Eb);if(d){var e=this;Od(d,16384,function(){for(var a="",b=0;b<e.I.length;b++)a&&(a+=b&&b%10?", ":",\n"),a+=t(e.I[b]);e.H.g(a)})}};S.prototype.Da=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};
S.prototype.Ha=function(a){return a?this.save():!0};T.INIT=[[T.ad.lb,T.Wa.lb,T.bd.lb,0,0,0,0]];
U.INIT=[[U.Bc.INIT,U.Ja.Vb|U.Ja.Qc],[U.Ua.Gc,U.Ua.Hc],[U.yb.Jc,U.yb.Fc,U.yb.Ic,U.yb.Ec],[0,0,0,0,[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11776,11984,11888,11776,11808,11776,12E3,12E3,11901,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11808,11984,11856,11776,11808,11776,12E3,12E3,11881,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]];m=S.prototype;m.reset=function(){this.w.INIT&&!this.restore(this.w.INIT)&&this.ja("reset error")};
m.save=function(){var a=new Tc(this);switch(this.w.Aa){case T.Aa:I(a,0,[this.va,this.G,this.ya,this.Z,this.da,this.ka,this.la]);break;case U.Aa:I(a,0,[this.ga,this.J]),I(a,1,[this.L,this.M]),I(a,2,[this.D,this.aa,this.ia,this.ha]),I(a,3,[this.P,this.j,this.O,this.ba,this.I])}return a.data()};
m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.w.Aa){case T.Aa:return this.va=b[0],this.G=b[1],this.ya=b[2],this.Z=b[3],this.da=b[4],this.ka=b[5],this.la=b[6],!0;case U.Aa:return this.ga=b[0],this.J=b[1],b=a[1],this.L=b[0],this.M=b[1],b=a[2],this.D=b[0],this.aa=b[1],this.ia=b[2],this.ha=b[3],b=a[3],this.P=b[0],this.j=b[1],this.O=b[2],this.ba=b[3],this.I=b[4],!0}return!1};m.start=function(){};m.stop=function(){};m.kd=function(a,b){var c=this.va;E(this,a,null,b,"STATUS0",c,!0);return c};
m.ld=function(a,b){var c=this.G;E(this,a,null,b,"STATUS1",c,!0);return c};m.md=function(a,b){var c=this.ya;E(this,a,null,b,"STATUS2",c,!0);return c};m.jd=function(a,b){var c=this.Z>>8-this.da&255;E(this,a,null,b,"SHIFT.RESULT",c,!0);return c};m.td=function(a,b,c){E(this,a,b,c,"SHIFT.COUNT",null,!0);this.da=b};m.vd=function(a,b,c){E(this,a,b,c,"SOUND1",null,!0);this.ka=b};m.ud=function(a,b,c){E(this,a,b,c,"SHIFT.DATA",null,!0);this.Z=b<<8|this.Z>>8};
m.wd=function(a,b,c){E(this,a,b,c,"SOUND2",null,!0);this.la=b};m.xd=function(a,b,c){E(this,a,b,c,"WATCHDOG",null,!0)};function Pd(a){var b=0,c=0,d=~a.P;for(a=0;10>a;a++)d&1&&(b=9-a),d>>=1;for(a=0;10>a;a++)d&1&&(c=9-a),d>>=1;return 10*b+c}
m.nd=function(a,b){var c=this.J,c=c&~U.Ja.Wb;if((Ec(this.b)&64)<<1&&(c|=U.Ja.Wb,c!=this.J)){var d,e;d=this.O&1;e=this.O>>1&7;switch(e){case U.Ka.Ta.Zc:break;case U.Ka.Ta.xc:this.P=this.P<<1|d;break;case U.Ka.Ta.Dc:d=Pd(this);this.I[d]=U.Ka.zb;ib(this,"doNVRCommand(): erase data at addr "+t(d));break;case U.Ka.Ta.yc:this.j=this.j<<1|d;break;case U.Ka.Ta.cd:d=Pd(this);e=this.j&U.Ka.zb;this.I[d]=e;ib(this,"doNVRCommand(): write data "+t(e)+" to addr "+t(d));break;case U.Ka.Ta.Xc:d=Pd(this);e=this.I[d];
null==e&&(e=U.Ka.zb);this.j=e;ib(this,"doNVRCommand(): read data "+t(e)+" from addr "+t(d));break;case U.Ka.Ta.Yc:this.j<<=1;this.ba=this.j&U.Ka.zb+1;break;default:ib(this,"doNVRCommand(): unrecognized command "+da(e))}}c&=~U.Ja.Xb;this.ba&&(c|=U.Ja.Xb);c&=~U.Ja.Sb;if(d=this.K){d=this.K;if(e=d.D)e=d.b,e=Ec(d.b)>=d.J+e.Z*e.Qa/1E3*1.2731488;e&&(d.D=!1);d=!d.D}d&&(c|=U.Ja.Sb);c&=~U.Ja.Zb;this.Ea&&this.Ea.Ca&1&&(c|=U.Ja.Zb);this.J=c;E(this,a,null,b,"FLAGS",c);return c};
m.yd=function(a,b,c){E(this,a,b,c,"BRIGHTNESS");this.ga=b};m.Bd=function(a,b,c){E(this,a,b,c,"NVR.LATCH");this.O=b};m.Ad=function(a,b,c){E(this,a,b,c,"DC012");a=b&3;switch(b>>2&3){case 0:this.D=this.D&-4|a;break;case 1:this.D=this.D&-13|a<<2;this.video&&(b=this.video,a=this.D,ib(b,"updateScrollOffset("+a+")"),b.ob!==a&&((b.ob=a)?Lc(b,!0):b.qb=!0));break;case 2:switch(a){case 0:this.aa=~this.aa;break;case 2:case 3:this.ia=3-a}break;case 3:this.ha=a}};
m.zd=function(a,b,c){E(this,a,b,c,"DC011");b&U.Ua.Wc?(b&=U.Ua.Yb,this.M!=b&&(this.M=b,this.video&&(a=this.video,b=this.M==U.Ua.Yb?50:60,ib(a,"updateRate("+b+")"),a.tc=b))):(b&=U.Ua.Rb,this.L!=b&&(this.L=b,this.video&&(a=this.L==U.Ua.Rb?132:80,b=this.video,ib(b,"updateDimensions("+a+","+(80<a&&this.J&U.Ja.Vb?14:24)+")"),b.ba=a,b.qa=b.hc,80<a&&b.qa--,Qd(b)&&Rd(b))))};T.Db={0:S.prototype.kd,1:S.prototype.ld,2:S.prototype.md,3:S.prototype.jd};
T.Eb={2:S.prototype.td,3:S.prototype.vd,4:S.prototype.ud,5:S.prototype.wd,6:S.prototype.xd};U.Db={66:S.prototype.nd};U.Eb={66:S.prototype.yd,98:S.prototype.Bd,162:S.prototype.Ad,194:S.prototype.zd};Ma(function(){for(var a=D(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new S(d);gb(d,c)}});
function Sd(a){w.call(this,"ROM",a,Sd);this.B=null;this.D=a.addr;this.j=a.size;this.G=a.writable;this.w=a.alias;this.I=a.file;this.K=ea(this.I);if(this.I){a=this.I;var b=fa(this.K);"json"!=b&&"hex"!=b&&(a=ha()+"/api/v1/dump?file="+this.I+"&format=bytes&decimal=true");var c=this;sa(a,null,!0,function(a,b,f){Td(c,a,b,f)})}}z(Sd);var Ud=[0,5];Sd.prototype.Oa=function(a,b,c,d){this.u=b;this.b=c;this.H=d;Vd(this)};
Sd.prototype.Da=function(){if(this.Pa){if(this.H){var a=this.H,b=this.id,c=this.D,d=this.j,e=this.Pa,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var p=f,k=[k>>>0,h],q=oa(p,k,a.ac);0>q&&p.splice(-(q+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.G.push({re:b,F:c,pd:d,Pa:e,$b:f})}delete this.Pa}return!0};Sd.prototype.Ha=function(){return!0};
var T={Aa:1978.1,bd:{Ba:0,Nd:1,Rd:16,Yd:32,ge:64,fe:128,lb:14},Wa:{Ba:1,Dc:1,Wc:2,Sc:4,Tc:16,Uc:32,Vc:64,lb:8},cd:{Ba:2,Md:3,oe:4,Od:8,be:16,ce:32,de:64,Pd:128,lb:0},ke:{Ba:3},ie:{Ba:2,Zd:7},me:{Ba:3,pe:1,le:2,ee:4,Wd:8,Qd:16,Jd:32},je:{Ba:4},ne:{Ba:5,Sd:1,Td:2,Ud:4,Vd:8,qe:16}},U={Aa:100,Ja:{Ba:66,$b:1,Wb:2,Rc:4,ae:8,$d:16,Yb:32,Xb:64,Tb:128},Cc:{Ba:66,INIT:0},Ua:{Ba:194,Ld:0,Sb:16,Xc:32,Zb:48,Hc:0,Ic:32},yb:{Ba:162,he:0,Kc:0,Gc:0,Jc:0,Fc:0},Ka:{Xd:{Ba:98},Ta:{zc:0,yc:1,Zc:2,dd:4,Ec:5,Yc:6,$c:7},
zb:16383}},Nd={SI1978:T,VT100:U};S.prototype.oa=function(){return!1};S.prototype.Oa=function(a,b,c,d){this.u=b;this.b=c;this.I=d;this.B=a;this.K=ub(a,"Keyboard");this.Ea=ub(a,"SerialPort");this.video=ub(a,"Video");Gb(b,this,this.w.Eb);Sb(b,this,this.w.Fb);if(d){var e=this;Od(d,16384,function(){for(var a="",b=0;b<e.H.length;b++)a&&(a+=b&&b%10?", ":",\n"),a+=t(e.H[b]);e.I.g(a)})}};S.prototype.Da=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};
S.prototype.Ha=function(a){return a?this.save():!0};T.INIT=[[T.bd.lb,T.Wa.lb,T.cd.lb,0,0,0,0]];
U.INIT=[[U.Cc.INIT,U.Ja.Wb|U.Ja.Rc],[U.Ua.Hc,U.Ua.Ic],[U.yb.Kc,U.yb.Gc,U.yb.Jc,U.yb.Fc],[0,0,0,0,[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11776,11984,11888,11776,11808,11776,12E3,12E3,11901,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11904,11776,11784,11918,11808,11984,11856,11776,11808,11776,12E3,12E3,11881,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]];l=S.prototype;l.reset=function(){this.w.INIT&&!this.restore(this.w.INIT)&&this.ja("reset error")};
l.save=function(){var a=new Tc(this);switch(this.w.Aa){case T.Aa:I(a,0,[this.va,this.G,this.ya,this.X,this.da,this.ka,this.la]);break;case U.Aa:I(a,0,[this.ga,this.J]),I(a,1,[this.L,this.M]),I(a,2,[this.D,this.aa,this.ia,this.ha]),I(a,3,[this.P,this.j,this.O,this.ba,this.H])}return a.data()};
l.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.w.Aa){case T.Aa:return this.va=b[0],this.G=b[1],this.ya=b[2],this.X=b[3],this.da=b[4],this.ka=b[5],this.la=b[6],!0;case U.Aa:return this.ga=b[0],this.J=b[1],b=a[1],this.L=b[0],this.M=b[1],b=a[2],this.D=b[0],this.aa=b[1],this.ia=b[2],this.ha=b[3],b=a[3],this.P=b[0],this.j=b[1],this.O=b[2],this.ba=b[3],this.H=b[4],!0}return!1};l.start=function(){};l.stop=function(){};l.ld=function(a,b){var c=this.va;E(this,a,null,b,"STATUS0",c,!0);return c};
l.md=function(a,b){var c=this.G;E(this,a,null,b,"STATUS1",c,!0);return c};l.nd=function(a,b){var c=this.ya;E(this,a,null,b,"STATUS2",c,!0);return c};l.kd=function(a,b){var c=this.X>>8-this.da&255;E(this,a,null,b,"SHIFT.RESULT",c,!0);return c};l.ud=function(a,b,c){E(this,a,b,c,"SHIFT.COUNT",null,!0);this.da=b};l.wd=function(a,b,c){E(this,a,b,c,"SOUND1",null,!0);this.ka=b};l.vd=function(a,b,c){E(this,a,b,c,"SHIFT.DATA",null,!0);this.X=b<<8|this.X>>8};
l.xd=function(a,b,c){E(this,a,b,c,"SOUND2",null,!0);this.la=b};l.yd=function(a,b,c){E(this,a,b,c,"WATCHDOG",null,!0)};function Pd(a){var b=0,c=0,d=~a.P;for(a=0;10>a;a++)d&1&&(b=9-a),d>>=1;for(a=0;10>a;a++)d&1&&(c=9-a),d>>=1;return 10*b+c}
l.od=function(a,b){var c=this.J,c=c&~U.Ja.Xb;if((Ec(this.b)&64)<<1&&(c|=U.Ja.Xb,c!=this.J)){var d,e;d=this.O&1;e=this.O>>1&7;switch(e){case U.Ka.Ta.$c:break;case U.Ka.Ta.yc:this.P=this.P<<1|d;break;case U.Ka.Ta.Ec:d=Pd(this);this.H[d]=U.Ka.zb;ib(this,"doNVRCommand(): erase data at addr "+t(d));break;case U.Ka.Ta.zc:this.j=this.j<<1|d;break;case U.Ka.Ta.dd:d=Pd(this);e=this.j&U.Ka.zb;this.H[d]=e;ib(this,"doNVRCommand(): write data "+t(e)+" to addr "+t(d));break;case U.Ka.Ta.Yc:d=Pd(this);e=this.H[d];
null==e&&(e=U.Ka.zb);this.j=e;ib(this,"doNVRCommand(): read data "+t(e)+" from addr "+t(d));break;case U.Ka.Ta.Zc:this.j<<=1;this.ba=this.j&U.Ka.zb+1;break;default:ib(this,"doNVRCommand(): unrecognized command "+da(e))}}c&=~U.Ja.Yb;this.ba&&(c|=U.Ja.Yb);c&=~U.Ja.Tb;if(d=this.K){d=this.K;if(e=d.D)e=d.b,e=Ec(d.b)>=d.J+e.X*e.Qa/1E3*1.2731488;e&&(d.D=!1);d=!d.D}d&&(c|=U.Ja.Tb);c&=~U.Ja.$b;this.Ea&&this.Ea.Ca&1&&(c|=U.Ja.$b);this.J=c;E(this,a,null,b,"FLAGS",c);return c};
l.zd=function(a,b,c){E(this,a,b,c,"BRIGHTNESS");this.ga=b};l.Cd=function(a,b,c){E(this,a,b,c,"NVR.LATCH");this.O=b};l.Bd=function(a,b,c){E(this,a,b,c,"DC012");a=b&3;switch(b>>2&3){case 0:this.D=this.D&-4|a;break;case 1:this.D=this.D&-13|a<<2;this.video&&(b=this.video,a=this.D,ib(b,"updateScrollOffset("+a+")"),b.ob!==a&&((b.ob=a)?Lc(b,!0):b.qb=!0));break;case 2:switch(a){case 0:this.aa=~this.aa;break;case 2:case 3:this.ia=3-a}break;case 3:this.ha=a}};
l.Ad=function(a,b,c){E(this,a,b,c,"DC011");b&U.Ua.Xc?(b&=U.Ua.Zb,this.M!=b&&(this.M=b,this.video&&(a=this.video,b=this.M==U.Ua.Zb?50:60,ib(a,"updateRate("+b+")"),a.uc=b))):(b&=U.Ua.Sb,this.L!=b&&(this.L=b,this.video&&(a=this.L==U.Ua.Sb?132:80,b=this.video,ib(b,"updateDimensions("+a+","+(80<a&&this.J&U.Ja.Wb?14:24)+")"),b.ba=a,b.qa=b.ic,80<a&&b.qa--,Qd(b)&&Rd(b))))};T.Eb={0:S.prototype.ld,1:S.prototype.md,2:S.prototype.nd,3:S.prototype.kd};
T.Fb={2:S.prototype.ud,3:S.prototype.wd,4:S.prototype.vd,5:S.prototype.xd,6:S.prototype.yd};U.Eb={66:S.prototype.od};U.Fb={66:S.prototype.zd,98:S.prototype.Cd,162:S.prototype.Bd,194:S.prototype.Ad};Ma(function(){for(var a=D(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new S(d);gb(d,c)}});
function Sd(a){w.call(this,"ROM",a,Sd);this.B=null;this.D=a.addr;this.j=a.size;this.G=a.writable;this.w=a.alias;this.H=a.file;this.K=ea(this.H);if(this.H){a=this.H;var b=fa(this.K);"json"!=b&&"hex"!=b&&(a=ha()+"/api/v1/dump?file="+this.H+"&format=bytes&decimal=true");var c=this;sa(a,null,!0,function(a,b,f){Td(c,a,b,f)})}}z(Sd);var Ud=[0,5];Sd.prototype.Oa=function(a,b,c,d){this.u=b;this.b=c;this.I=d;Vd(this)};
Sd.prototype.Da=function(){if(this.Pa){if(this.I){var a=this.I,b=this.id,c=this.D,d=this.j,e=this.Pa,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,m=g.a;if(void 0!==k){var p=f,k=[k>>>0,h],q=oa(p,k,a.bc);0>q&&p.splice(-(q+1),0,k)}m&&(g.a=m.replace(/''/g,'"'))}a.G.push({se:b,F:c,qd:d,Pa:e,ac:f})}delete this.Pa}return!0};Sd.prototype.Ha=function(){return!0};
function Td(a,b,c,d){if(d)a.ja("Unable to load system ROM (error "+d+": "+b+")");else{cb(a.Ab,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.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.Pa=e.symbols;if(!a.B.length){v("Empty ROM: "+b);return}if(1==a.B.length){v(a.B[0]);return}}catch(g){a.ja("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],16);Vd(a)}}
function Vd(a){if(!mb(a))if(!a.I)F(a);else if(a.B&&a.u){a.j||(a.j=a.B.length);if(a.B.length!=a.j)pb(a,"ROM size (0x"+n(a.B.length)+") does not match specified size ("+("0x"+n(a.j))+")");else if(Wd(a,a.D)){var b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.u,h=d.j,g=[],k=d.D>>>f.ra;0<h&&k<f.X.length;)g.push(f.X[k++]),h-=f.Ga;f=d.u;d=d.j;h=0;for(e>>>=f.ra;0<d&&e<f.X.length;){k=g[h++];if(!k)break;f.X[e++]=k;d-=f.Ga}}delete a.B}F(a)}}
function Wd(a,b){if(yb(a.u,b,a.j,a.G?1:$b)){var c;for(c=0;c<a.B.length;c++)Db(a.u,b+c,a.B[c]);if(a.G&&256==b){for(c=0;c<Ud.length;c++)Db(a.u,Ud[c],118);Pc(a.b,function(a){return function(b){if(0<=Ud.indexOf(b)){var c=!1,h=a.b,g=a.H;if(5==b)switch(c=!0,h.T){case 2:Xd(a,String.fromCharCode(h.V));break;case 9:for(var k=Wc(h),l="",p=255;p--;){var q=a.b.$(k++);if(36==q)break;l+=String.fromCharCode(q)}Xd(a,l);break;default:c=!1}c?Ld.call(h):g&&(a.g("\nCP/M vector "+t(b)),H(h,b),g.pa());b=!0}else b=!1;return b}}(a));
Rc(a.b,b)}return!0}return!1}function Xd(a,b){b=b.replace(/\r/g,"");a.Fa&&(a.Fa.value+=b,a.Fa.scrollTop=a.Fa.scrollHeight)}Ma(function(){for(var a=D(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Sd(d);gb(d,c)}});function Yd(a){w.call(this,"RAM",a,Yd);this.w=a.addr;this.j=a.size;this.B=!1}z(Yd);m=Yd.prototype;m.Oa=function(a,b,c,d){this.u=b;this.b=c;this.H=d;F(this)};m.Da=function(a,b){b||this.reset();return!0};m.Ha=function(a){return a?this.save():!0};
m.reset=function(){!this.B&&this.j&&yb(this.u,this.w,this.j,1)&&(this.B=!0);this.B||v("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ma(function(){for(var a=D(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Yd(d);gb(d,c)}});function Zd(a){w.call(this,"Keyboard",a,Zd,65536);(a=a.model)&&!$d[a]&&Oa("Unrecognized Keyboard8080 model: "+a);this.u=$d[a]||{};this.reset();F(this)}z(Zd);
var ae={Aa:1978.1,A:{},Qb:{65:37,68:39,76:32},mb:{},Va:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},V={Aa:100,A:{},Qb:{},mb:{},Va:{setup:120},zc:{Ba:130,INIT:127},La:{Ba:130,Oc:1,Nc:2,Mc:4,Lc:8,Pc:16,Ub:32,Tb:63,$c:64,Jd:128,INIT:0},Kc:127};V.A[46]=3;V.A[80]=5;V.A[79]=6;V.A[89]=7;V.A[84]=8;V.A[87]=9;V.A[81]=10;V.A[39]=16;V.A[221]=20;V.A[219]=21;V.A[73]=22;V.A[85]=23;V.A[82]=24;V.A[69]=25;V.A[49]=26;V.A[37]=32;V.A[40]=34;V.A[117]=35;V.A[19]=35;V.A[192]=36;V.A[189]=37;V.A[57]=38;V.A[55]=39;
" ").replace(/ +$/,"").split(" "),a.B=Array(b.length),e=0;e<b.length;e++)a.B[e]=aa(b[e]);Vd(a)}}
function Vd(a){if(!mb(a))if(!a.H)F(a);else if(a.B&&a.u){a.j||(a.j=a.B.length);if(a.B.length!=a.j)pb(a,"ROM size (0x"+n(a.B.length)+") does not match specified size ("+("0x"+n(a.j))+")");else if(Wd(a,a.D)){var b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.u,h=d.j,g=[],k=d.D>>>f.ra;0<h&&k<f.Y.length;)g.push(f.Y[k++]),h-=f.Ga;f=d.u;d=d.j;h=0;for(e>>>=f.ra;0<d&&e<f.Y.length;){k=g[h++];if(!k)break;f.Y[e++]=k;d-=f.Ga}}delete a.B}F(a)}}
function Wd(a,b){if(yb(a.u,b,a.j,a.G?1:$b)){var c;for(c=0;c<a.B.length;c++)Db(a.u,b+c,a.B[c]);if(a.G&&256==b){for(c=0;c<Ud.length;c++)Db(a.u,Ud[c],118);Pc(a.b,function(a){return function(b){if(0<=Ud.indexOf(b)){var c=!1,h=a.b,g=a.I;if(5==b)switch(c=!0,h.T){case 2:Xd(a,String.fromCharCode(h.V));break;case 9:for(var k=Wc(h),m="",p=255;p--;){var q=a.b.$(k++);if(36==q)break;m+=String.fromCharCode(q)}Xd(a,m);break;default:c=!1}c?Ld.call(h):g&&(a.g("\nCP/M vector "+t(b)),H(h,b),g.pa());b=!0}else b=!1;return b}}(a));
Rc(a.b,b)}return!0}return!1}function Xd(a,b){b=b.replace(/\r/g,"");a.Fa&&(a.Fa.value+=b,a.Fa.scrollTop=a.Fa.scrollHeight)}Ma(function(){for(var a=D(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Sd(d);gb(d,c)}});function Yd(a){w.call(this,"RAM",a,Yd);this.w=a.addr;this.j=a.size;this.B=!1}z(Yd);l=Yd.prototype;l.Oa=function(a,b,c,d){this.u=b;this.b=c;this.I=d;F(this)};l.Da=function(a,b){b||this.reset();return!0};l.Ha=function(a){return a?this.save():!0};
l.reset=function(){!this.B&&this.j&&yb(this.u,this.w,this.j,1)&&(this.B=!0);this.B||v("No RAM allocated")};l.save=function(){return null};l.restore=function(){return!0};Ma(function(){for(var a=D(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Yd(d);gb(d,c)}});function Zd(a){w.call(this,"Keyboard",a,Zd,65536);(a=a.model)&&!$d[a]&&Oa("Unrecognized Keyboard8080 model: "+a);this.u=$d[a]||{};this.reset();F(this)}z(Zd);
var ae={Aa:1978.1,A:{},Rb:{65:37,68:39,76:32},mb:{},Va:{"1p":49,"2p":50,coin:51,left:37,right:39,fire:32}},V={Aa:100,A:{},Rb:{},mb:{},Va:{setup:120},Ac:{Ba:130,INIT:127},La:{Ba:130,Pc:1,Oc:2,Nc:4,Mc:8,Qc:16,Vb:32,Ub:63,ad:64,Kd:128,INIT:0},Lc:127};V.A[46]=3;V.A[80]=5;V.A[79]=6;V.A[89]=7;V.A[84]=8;V.A[87]=9;V.A[81]=10;V.A[39]=16;V.A[221]=20;V.A[219]=21;V.A[73]=22;V.A[85]=23;V.A[82]=24;V.A[69]=25;V.A[49]=26;V.A[37]=32;V.A[40]=34;V.A[117]=35;V.A[19]=35;V.A[192]=36;V.A[189]=37;V.A[57]=38;V.A[55]=39;
V.A[52]=40;V.A[51]=41;V.A[27]=42;V.A[38]=48;V.A[114]=49;V.A[112]=50;V.A[8]=51;V.A[187]=52;V.A[48]=53;V.A[56]=54;V.A[54]=55;V.A[53]=56;V.A[50]=57;V.A[9]=58;V.A[103]=64;V.A[115]=65;V.A[113]=66;V.A[96]=67;V.A[118]=68;V.A[220]=69;V.A[76]=70;V.A[75]=71;V.A[71]=72;V.A[70]=73;V.A[65]=74;V.A[104]=80;V.A[2013]=81;V.A[98]=82;V.A[97]=83;V.A[222]=85;V.A[186]=86;V.A[74]=87;V.A[72]=88;V.A[68]=89;V.A[83]=90;V.A[110]=96;V.A[116]=97;V.A[101]=98;V.A[100]=99;V.A[13]=100;V.A[190]=101;V.A[188]=102;V.A[78]=103;
V.A[66]=104;V.A[88]=105;V.A[119]=106;V.A[105]=112;V.A[99]=113;V.A[102]=114;V.A[109]=115;V.A[191]=117;V.A[77]=118;V.A[32]=119;V.A[86]=120;V.A[67]=121;V.A[90]=122;V.A[120]=123;V.A[17]=124;V.A[16]=125;V.A[20]=126;V.mb={l4:V.La.Oc,l3:V.La.Nc,l2:V.La.Mc,l1:V.La.Lc,locked:V.La.Pc,local:V.La.Ub,online:~V.La.Ub};var $d={SI1978:ae,VT100:V};
V.A[66]=104;V.A[88]=105;V.A[119]=106;V.A[105]=112;V.A[99]=113;V.A[102]=114;V.A[109]=115;V.A[191]=117;V.A[77]=118;V.A[32]=119;V.A[86]=120;V.A[67]=121;V.A[90]=122;V.A[120]=123;V.A[17]=124;V.A[16]=125;V.A[20]=126;V.mb={l4:V.La.Pc,l3:V.La.Oc,l2:V.La.Nc,l1:V.La.Mc,locked:V.La.Qc,local:V.La.Vb,online:~V.La.Vb};var $d={SI1978:ae,VT100:V};
Zd.prototype.oa=function(a,b,c){var d=this,e=a+"-"+b;if(void 0===this.N[e]){if("led"==a&&this.u.mb[b])return this.N[e]=c,!0;switch(b){case "kbd":return c.onkeydown=function(a){return be(d,a,!0)},c.onkeyup=function(a){return be(d,a,!1)},!0;default:if(this.u.Va&&void 0!==this.u.Va[b])return this.N[e]=c,a=function(a,b){return function(c){c.preventDefault();ce(a,b,!0)}}(this,this.u.Va[b]),b=function(a,b){return function(){ce(a,b,!1)}}(this,this.u.Va[b]),"ontouchstart"in window?(c.ontouchstart=a,c.ontouchend=
b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};Zd.prototype.Oa=function(a,b,c,d){this.B=a;this.b=c;this.H=d;this.I=ub(a,"ChipSet");Gb(b,this,this.u.Db);Sb(b,this,this.u.Eb)};Zd.prototype.Da=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Zd.prototype.Ha=function(a){return a?this.save():!0};V.INIT=[[V.La.INIT,V.zc.INIT,!1,0,-1]];m=Zd.prototype;m.reset=function(){this.j=[];this.u.INIT&&!this.restore(this.u.INIT)&&this.ja("reset error")};
m.save=function(){var a=new Tc(this);switch(this.u.Aa){case V.Aa:I(a,0,[this.K,this.G,this.D,this.J,-1])}return a.data()};m.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.u.Aa){case ae.Aa:return!0;case V.Aa:return this.K=b[0],de(this,this.K&V.La.Tb),this.G=b[1],this.D=b[2],this.J=b[3],this.w=b[4],!0}return!1};function de(a,b){for(var c in a.u.mb){var d=a.N["led-"+c];if(d){var e=a.u.mb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function be(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=a.u.Qb[e]||e,!a.u.A[e]){for(var f in a.u.Va)if(a.u.Va[f]===e){e=f;break a}e=null}e&&(d=ce(a,e,c),b.preventDefault());return d}
function ce(a,b,c){var d;a:{for(d=0;d<a.j.length;d++)if(a.j[d].Nb==b)break a;d=-1}if(c)0>d?a.j.push({Nb:b,Kb:Date.now(),Bb:!1}):(a.j[d].Kb=Date.now(),a.j[d].Bb=!1);else if(0<=d){if(!a.j[d].Bb){var e=a.j[d].Kb;if(e&&100>Date.now()-e)return a.j[d].Bb=!0,ee(a),!0}a.j.splice(d,1)}if(a.I){d=0;switch(b){case "1p":d=T.Wa.Rc;break;case "2p":d=T.Wa.Vc;break;case "coin":d=T.Wa.Cc;break;case "left":d=T.Wa.Tc;break;case "right":d=T.Wa.Uc;break;case "fire":d=T.Wa.Sc}d&&(a=a.I,b=d,a.G&=~b,c&&(a.G|=b))}return!0}
function ee(a){for(var b=0,c=-1;b<a.j.length;){if(a.j[b].Bb){var d=a.j[b].Nb,e=100-(Date.now()-a.j[b].Kb);if(0<e){if(0>c||c>e)c=e}else{ce(a,d,!1);b=0;continue}}b++}0<=c&&setTimeout(function(){ee(a)},c)}m.od=function(a,b){var c=this.G;0<=this.w&&(this.w<this.j.length?(c=this.j[this.w],this.w++,c=V.A[c.Nb],c&128&&(c&=127)):(this.w=-1,c=V.Kc),this.G=c,Gd(this.b,1));E(this,a,null,b,"KBDUART.ADDRESS",c);return c};
m.Cd=function(a,b,c){E(this,a,b,c,"KBDUART.STATUS");this.K=b;this.D=!0;this.J=Ec(this.b);de(this,b&V.La.Tb);b&V.La.$c&&(this.w=0,Gd(this.b,1))};V.Db={130:Zd.prototype.od};V.Eb={130:Zd.prototype.Cd};Ma(function(){for(var a=D(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Zd(d);gb(d,c)}});
function fe(a,b,c,d,e){var f=this;this.mc=Aa("Gecko/");var h=["","moz","ms","webkit"];w.call(this,"Video",a,fe,262144);this.Z=a.screenWidth;this.O=a.screenHeight;this.Sa=a.bufferAddr;this.Fd=a.bufferRAM;var g=a.bufferFormat;this.la=g&&ge[g.toUpperCase()]||he;this.ba=a.bufferCols;this.va=a.bufferRows;this.hc=this.qa=a.cellWidth||1;this.ma=a.cellHeight||1;this.ya=null;this.kc=!1;this.Za=a.bufferBits||1;this.Gd=a.bufferLeft||0;if(this.w=a.bufferRotate)this.w=this.w%360,0<this.w&&(this.w-=360),-90!=this.w&&
(this.ja("unsupported buffer rotation: "+this.w),this.w=0);this.$a=a.interruptRate;this.uc=a.refreshRate||60;this.M=b;this.I=c;this.ia=(this.Ac=d)||b||null;this.Dd=this.Z;this.Ed=this.O;this.ic=this.Z/this.ba|0;this.jc=this.O/this.va|0;1<this.ma&&(this.va++,this.ob=0,this.qb=!1);b=a.smoothing;(c=Va.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.I[d]){this.I[d]=b;break}if(this.D=a.screenRotate)this.D=this.D%
360,0<this.D&&(this.D-=360),-90!=this.D?(this.ja("unsupported screen rotation: "+this.D),this.D=0):(this.I.translate(0,this.O),this.I.rotate(this.D*Math.PI/180),this.I.scale(this.O/this.Z,this.Z/this.O));if(this.j=e)if(this.j.fb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.j.fb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){ie(f,document.fullscreenElement||document.msFullscreenElement||
document.mozFullScreenElement||document.webkitFullscreenElement?!0:!1)},!1);break}for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){ie(f,null)},!1);break}}if(this.da=a.fontROM)"json"!=fa(this.da)&&(this.da=ha()+"/api/v1/dump?file="+this.da+"&format=bytes"),sa(this.da,null,!0,function(a,b,c){je(f,a,b,c)});this.Jb={}}z(fe);var he=0,ge={SI1978:1,VT100:2};
function Qd(a){a.J=a.ba*a.qa;a.aa=a.va*a.ma;var b=a.J,c=a.aa;a.w&&(b=a.aa,c=a.J);a.P=0;if(!a.Fd&&(a.P=(a.J*a.Za>>3)*a.aa,!yb(a.u,a.Sa,a.P,3)))return!1;a.P?(a.nc=a.I.createImageData(b,c),a.pc=16/a.Za|0,ke(a,a.P>>1)):ke(a,(a.ba+1)*a.va);a.L=document.createElement("canvas");a.L.width=b;a.L.height=c;a.pb=a.L.getContext("2d");a.ea={};a.ka=1<<a.Za;a.ga=Array(a.ka+2);a.ga[0]=[0,0,0,255];a.ga[1]=[255,255,255,255];1==a.la&&(a.ga[a.ka+0]=[255,255,0,255],a.ga[a.ka+1]=[0,255,0,255]);2==a.la&&(a.tc=60,a.Ib=!1,
a.Ea=Array(a.ba));return!0}fe.prototype.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.H=d;Qd(this);if(this.K=ub(a,"Keyboard")){for(var e in this.Jb)this.K.oa("led",e,this.Jb[e]);this.M&&this.K.oa(this.Ac?"textarea":"canvas","kbd",this.ia)}var f=this;this.vc=Ic(this.b,function(){Lc(f)});Jc(this.b,this.vc,1E3/Math.max(this.uc,this.$a));this.qc=0;this.da||F(this)};
function je(a,b,c,d){if(d)a.ja("Unable to load font ROM (error "+d+": "+b+")");else{cb(a.Ab,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){v("Empty font ROM: "+b);return}if(1==f.length){v(f[0]);return}if(2048==f.length)a.ya=f,Rd(a);else{a.ja("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ja("Font ROM data error: "+h.message);return}(a.I||a.H)&&F(a)}}
function Rd(a){a.ya&&(a.kc=2==a.la,a.ea[96]=[le(a,a.qa,a.ma),le(a,a.qa,a.ma,a.Ib)],a.ea[64]=[le(a,2*a.qa,a.ma),le(a,2*a.qa,a.ma,a.Ib)],a.ea[32]=a.ea[0]=[le(a,2*a.qa,2*a.ma),le(a,2*a.qa,2*a.ma,a.Ib)])}
function le(a,b,c,d){var e=8>=a.hc?8:16,f=8<e?15:0,h=a.ya.length/e,g=!1===d,k={qa:b,ma:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=h/16*c;k.context=k.canvas.getContext("2d");for(var l=k.context.createImageData(b,c),p=0;p<h;p++){for(var q=0,x=q;q<a.ma;q++)for(var u=p*e+(f+q&e-1),u=d&&8==q?255:a.ya[u],r=0;r<c/a.ma;r++){for(var B=0,y=0,X=y;y<a.qa;y++){for(var A=u&128>>(7<y?7:y),B=a.kc&&!A&&B?B:A,Q=0;Q<b/a.qa;Q++)g&&(B=!B),me(a,l,X,x,B?1:0),X++;B=A}x++}k.context.putImageData(l,
(p&15)*b,(p>>4)*c)}return k}fe.prototype.Da=function(){return!0};fe.prototype.oa=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.Jb[b]=c,!0;switch(b){case "fullScreen":return this.N[b]=c,this.j&&this.j.fb?c.onclick=function(){d.fb()}:c.parentNode.removeChild(c),!0}return!1};
fe.prototype.fb=function(){var a=!1;if(this.j){if(this.j.fb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.Z/this.O;b>c&&(a=Math.round(c/b*100)+"%")}this.mc?(this.M.style.width=a,this.M.style.width=a,this.M.style.display="block",this.M.style.margin="auto"):(this.j.style.width=a,this.j.style.height="auto");this.j.style.backgroundColor="black";this.j.fb();a=!0}this.ia&&this.ia.focus()}return a};
function ie(a,b){!b&&a.j&&(a.mc?a.M.style.width=a.M.style.height="":a.j.style.width=a.j.style.height="");ib(a,"notifyFullScreen("+b+")")}function ke(a,b){a.oc=b;a.ha=!1;if(void 0===a.G||a.G.length!=a.oc)a.G=Array(a.oc)}function me(a,b,c,d,e){d=a.w?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.la&&(208<=c&&236>c?e=a.ka+0:28<=c&&72>c&&(e=a.ka+1));a=a.ga[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
function Lc(a,b){var c=!0;if(!b){a.$a&&(120==a.$a?a.qc&1?(Gd(a.b,2),c=!1):Gd(a.b,1):Gd(a.b,4));if(c&&a.ha&&a.P){for(var d=a.u,e=a.P,f=!0,h=a.Sa>>>d.ra;0<e&&h<d.X.length;)d.X[h].Ma&&(d.X[h].Ma=f=!1,d.X[h].dc=!0),e-=d.Ga,h++;f&&(c=!1)}Jc(a.b,a.vc,1E3/Math.max(a.uc,a.$a));a.qc++}if(c)if(1<a.qa)switch(a.la){case 2:for(var c=a.Sa,d=-1,e=0,f=60==a.tc?2:5,g=h=0,k=-1;e<a.va;){var l=0,p=c,q=d,x=a.ba;for(96!=q&&(x>>=1);;){var u=Bb(a.u,p++);if(127==(u&127)){var r=Bb(a.u,p++),d=r&96,c=(r&15)<<8|Bb(a.u,p),c=c+
(r&16?8192:16384);break}if(l<x)a.Ea[l++]=u;else break}if(f)f--;else{for(;l<a.Ea.length;)a.Ea[l++]=0;if(0<=q)for(p=a.ha&&a.G[h]==x,a.G[h++]=x,x=0;x<l;x++){u=a.Ea[x];if(!p||u!==a.G[h]){a.G[k=h]=u;var r=a,B=a.pb,y=u&127;if(u=r.ea[q][u&128?1:0]){var X=(y&15)*u.qa,y=(y>>4)*u.ma,A=void 0,Q=void 0,ba=void 0,Y=void 0,ua=u.qa,Fb=u.ma;B?(A=x*r.qa,Q=e*r.ma,ba=r.qa,Y=r.ma):(A=x*r.ic,Q=e*r.jc,ba=r.ic,Y=r.jc);u.qa>r.qa&&(A*=2,ba*=2);u.ma>r.ma&&(0==q&&(y+=r.ma),Fb=r.ma);B?B.drawImage(u.canvas,X,y,ua,Fb,A,Q,ba,Y):
(A+=0,Q+=0,r.I.drawImage(u.canvas,X,y,ua,Fb,A,Q,ba,Y))}g++}h++}e++}}a.ha=!0;!b&&a.qb&&1==g&&(a.G[k]=-1,g=0);a.qb=!1;(g||b)&&a.pb&&a.I.drawImage(a.L,0,a.ob,a.J,a.aa-a.ma,0,0,a.Dd,a.Ed)}else{f=a.Sa;h=f+a.P;l=k=g=0;c=a.J;q=0;d=a.aa;p=e=0;x=a.Za;r=(1<<x)-1;a.Gd&&(x=-x,p=16+x);for(;f<h;){B=Cb(a.u,f);if(a.ha&&B===a.G[g])k+=a.pc;else{a.G[g]=B;(u=p)&&(B=B>>8|(B&255)<<8);k<c&&(c=k);for(X=a.pc;X--;)y=B>>u&r,me(a,a.nc,k++,l,y),u+=x;k>q&&(q=k);l<d&&(d=l);l>=e&&(e=l+1)}f+=2;g++;if(k>=a.J&&(k=0,l++,l>a.aa))break}a.ha=
!0;c<a.J&&(f=q-c,e-=d,a.w&&(h=c,g=f,c=d,f=e,d=a.J-(h+g),e=g),a.pb.putImageData(a.nc,0,0,c,d,f,e),a.I.drawImage(a.L,0,0,a.L.width,a.L.height,0,0,a.Z,a.O))}}
b):(c.onmousedown=a,c.onmouseup=c.onmouseout=b),!0}}return!1};Zd.prototype.Oa=function(a,b,c,d){this.B=a;this.b=c;this.I=d;this.H=ub(a,"ChipSet");Gb(b,this,this.u.Eb);Sb(b,this,this.u.Fb)};Zd.prototype.Da=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};Zd.prototype.Ha=function(a){return a?this.save():!0};V.INIT=[[V.La.INIT,V.Ac.INIT,!1,0,-1]];l=Zd.prototype;l.reset=function(){this.j=[];this.u.INIT&&!this.restore(this.u.INIT)&&this.ja("reset error")};
l.save=function(){var a=new Tc(this);switch(this.u.Aa){case V.Aa:I(a,0,[this.K,this.G,this.D,this.J,-1])}return a.data()};l.restore=function(a){var b;if(a&&(b=a[0])&&b.length)switch(this.u.Aa){case ae.Aa:return!0;case V.Aa:return this.K=b[0],de(this,this.K&V.La.Ub),this.G=b[1],this.D=b[2],this.J=b[3],this.w=b[4],!0}return!1};function de(a,b){for(var c in a.u.mb){var d=a.N["led-"+c];if(d){var e=a.u.mb[c],f=!!(b&e);e&e-1&&(f=!(b&~e));d.style.backgroundColor=f?"#ff0000":"#000000"}}}
function be(a,b,c){var d=!0,e;a:if(e=b.keyCode,e=a.u.Rb[e]||e,!a.u.A[e]){for(var f in a.u.Va)if(a.u.Va[f]===e){e=f;break a}e=null}e&&(d=ce(a,e,c),b.preventDefault());return d}
function ce(a,b,c){var d;a:{for(d=0;d<a.j.length;d++)if(a.j[d].Ob==b)break a;d=-1}if(c)0>d?a.j.push({Ob:b,Lb:Date.now(),Bb:!1}):(a.j[d].Lb=Date.now(),a.j[d].Bb=!1);else if(0<=d){if(!a.j[d].Bb){var e=a.j[d].Lb;if(e&&100>Date.now()-e)return a.j[d].Bb=!0,ee(a),!0}a.j.splice(d,1)}if(a.H){d=0;switch(b){case "1p":d=T.Wa.Sc;break;case "2p":d=T.Wa.Wc;break;case "coin":d=T.Wa.Dc;break;case "left":d=T.Wa.Uc;break;case "right":d=T.Wa.Vc;break;case "fire":d=T.Wa.Tc}d&&(a=a.H,b=d,a.G&=~b,c&&(a.G|=b))}return!0}
function ee(a){for(var b=0,c=-1;b<a.j.length;){if(a.j[b].Bb){var d=a.j[b].Ob,e=100-(Date.now()-a.j[b].Lb);if(0<e){if(0>c||c>e)c=e}else{ce(a,d,!1);b=0;continue}}b++}0<=c&&setTimeout(function(){ee(a)},c)}l.pd=function(a,b){var c=this.G;0<=this.w&&(this.w<this.j.length?(c=this.j[this.w],this.w++,c=V.A[c.Ob],c&128&&(c&=127)):(this.w=-1,c=V.Lc),this.G=c,Gd(this.b,1));E(this,a,null,b,"KBDUART.ADDRESS",c);return c};
l.Dd=function(a,b,c){E(this,a,b,c,"KBDUART.STATUS");this.K=b;this.D=!0;this.J=Ec(this.b);de(this,b&V.La.Ub);b&V.La.ad&&(this.w=0,Gd(this.b,1))};V.Eb={130:Zd.prototype.pd};V.Fb={130:Zd.prototype.Dd};Ma(function(){for(var a=D(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new Zd(d);gb(d,c)}});
function fe(a,b,c,d,e){var f=this;this.nc=Aa("Gecko/");var h=["","moz","ms","webkit"];w.call(this,"Video",a,fe,262144);this.X=a.screenWidth;this.O=a.screenHeight;this.Sa=a.bufferAddr;this.Gd=a.bufferRAM;var g=a.bufferFormat;this.la=g&&ge[g.toUpperCase()]||he;this.ba=a.bufferCols;this.va=a.bufferRows;this.ic=this.qa=a.cellWidth||1;this.ma=a.cellHeight||1;this.ya=null;this.lc=!1;this.Za=a.bufferBits||1;this.Hd=a.bufferLeft||0;if(this.w=a.bufferRotate)this.w=this.w%360,0<this.w&&(this.w-=360),-90!=this.w&&
(this.ja("unsupported buffer rotation: "+this.w),this.w=0);this.$a=a.interruptRate;this.vc=a.refreshRate||60;this.M=b;this.H=c;this.ia=(this.Bc=d)||b||null;this.Ed=this.X;this.Fd=this.O;this.jc=this.X/this.ba|0;this.kc=this.O/this.va|0;1<this.ma&&(this.va++,this.ob=0,this.qb=!1);b=a.smoothing;(c=Va.smoothing)&&(b="true"==c);if(null!=b)for(c=0;c<h.length;c++)if(d=(d=h[c])?d+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.H[d]){this.H[d]=b;break}if(this.D=a.screenRotate)this.D=this.D%
360,0<this.D&&(this.D-=360),-90!=this.D?(this.ja("unsupported screen rotation: "+this.D),this.D=0):(this.H.translate(0,this.O),this.H.rotate(this.D*Math.PI/180),this.H.scale(this.O/this.X,this.X/this.O));if(this.j=e)if(this.j.fb=e.requestFullscreen||e.msRequestFullscreen||e.mozRequestFullScreen||e.webkitRequestFullscreen,this.j.fb){for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenchange","on"+d in document){document.addEventListener(d,function(){ie(f,document.fullscreenElement||document.msFullscreenElement||
document.mozFullScreenElement||document.webkitFullscreenElement?!0:!1)},!1);break}for(c=0;c<h.length;c++)if(d=h[c]+"fullscreenerror","on"+d in document){document.addEventListener(d,function(){ie(f,null)},!1);break}}if(this.da=a.fontROM)"json"!=fa(this.da)&&(this.da=ha()+"/api/v1/dump?file="+this.da+"&format=bytes"),sa(this.da,null,!0,function(a,b,c){je(f,a,b,c)});this.Kb={}}z(fe);var he=0,ge={SI1978:1,VT100:2};
function Qd(a){a.J=a.ba*a.qa;a.aa=a.va*a.ma;var b=a.J,c=a.aa;a.w&&(b=a.aa,c=a.J);a.P=0;if(!a.Gd&&(a.P=(a.J*a.Za>>3)*a.aa,!yb(a.u,a.Sa,a.P,3)))return!1;a.P?(a.oc=a.H.createImageData(b,c),a.qc=16/a.Za|0,ke(a,a.P>>1)):ke(a,(a.ba+1)*a.va);a.L=document.createElement("canvas");a.L.width=b;a.L.height=c;a.pb=a.L.getContext("2d");a.ea={};a.ka=1<<a.Za;a.ga=Array(a.ka+2);a.ga[0]=[0,0,0,255];a.ga[1]=[255,255,255,255];1==a.la&&(a.ga[a.ka+0]=[255,255,0,255],a.ga[a.ka+1]=[0,255,0,255]);2==a.la&&(a.uc=60,a.Jb=!1,
a.Ea=Array(a.ba));return!0}fe.prototype.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.I=d;Qd(this);if(this.K=ub(a,"Keyboard")){for(var e in this.Kb)this.K.oa("led",e,this.Kb[e]);this.M&&this.K.oa(this.Bc?"textarea":"canvas","kbd",this.ia)}var f=this;this.wc=Ic(this.b,function(){Lc(f)});Jc(this.b,this.wc,1E3/Math.max(this.vc,this.$a));this.rc=0;this.da||F(this)};
function je(a,b,c,d){if(d)a.ja("Unable to load font ROM (error "+d+": "+b+")");else{cb(a.Ab,b,c);try{var e=eval("("+c+")"),f=e.bytes||e;if(!f||!f.length){v("Empty font ROM: "+b);return}if(1==f.length){v(f[0]);return}if(2048==f.length)a.ya=f,Rd(a);else{a.ja("Unrecognized font data length ("+f.length+")");return}}catch(h){a.ja("Font ROM data error: "+h.message);return}(a.H||a.I)&&F(a)}}
function Rd(a){a.ya&&(a.lc=2==a.la,a.ea[96]=[le(a,a.qa,a.ma),le(a,a.qa,a.ma,a.Jb)],a.ea[64]=[le(a,2*a.qa,a.ma),le(a,2*a.qa,a.ma,a.Jb)],a.ea[32]=a.ea[0]=[le(a,2*a.qa,2*a.ma),le(a,2*a.qa,2*a.ma,a.Jb)])}
function le(a,b,c,d){var e=8>=a.ic?8:16,f=8<e?15:0,h=a.ya.length/e,g=!1===d,k={qa:b,ma:c};k.canvas=document.createElement("canvas");k.canvas.width=16*b;k.canvas.height=h/16*c;k.context=k.canvas.getContext("2d");for(var m=k.context.createImageData(b,c),p=0;p<h;p++){for(var q=0,x=q;q<a.ma;q++)for(var u=p*e+(f+q&e-1),u=d&&8==q?255:a.ya[u],r=0;r<c/a.ma;r++){for(var B=0,y=0,X=y;y<a.qa;y++){for(var A=u&128>>(7<y?7:y),B=a.lc&&!A&&B?B:A,Q=0;Q<b/a.qa;Q++)g&&(B=!B),me(a,m,X,x,B?1:0),X++;B=A}x++}k.context.putImageData(m,
(p&15)*b,(p>>4)*c)}return k}fe.prototype.Da=function(){return!0};fe.prototype.oa=function(a,b,c){var d=this;if("led"==a||"rled"==a)return this.Kb[b]=c,!0;switch(b){case "fullScreen":return this.N[b]=c,this.j&&this.j.fb?c.onclick=function(){d.fb()}:c.parentNode.removeChild(c),!0}return!1};
fe.prototype.fb=function(){var a=!1;if(this.j){if(this.j.fb){a="100%";if(screen&&screen.width&&screen.height){var b=screen.width/screen.height,c=this.X/this.O;b>c&&(a=Math.round(c/b*100)+"%")}this.nc?(this.M.style.width=a,this.M.style.width=a,this.M.style.display="block",this.M.style.margin="auto"):(this.j.style.width=a,this.j.style.height="auto");this.j.style.backgroundColor="black";this.j.fb();a=!0}this.ia&&this.ia.focus()}return a};
function ie(a,b){!b&&a.j&&(a.nc?a.M.style.width=a.M.style.height="":a.j.style.width=a.j.style.height="");ib(a,"notifyFullScreen("+b+")")}function ke(a,b){a.pc=b;a.ha=!1;if(void 0===a.G||a.G.length!=a.pc)a.G=Array(a.pc)}function me(a,b,c,d,e){d=a.w?(b.height-c-1)*b.width+d:c+d*b.width;e&&1==a.la&&(208<=c&&236>c?e=a.ka+0:28<=c&&72>c&&(e=a.ka+1));a=a.ga[e];d*=a.length;b.data[d]=a[0];b.data[d+1]=a[1];b.data[d+2]=a[2];b.data[d+3]=a[3]}
function Lc(a,b){var c=!0;if(!b){a.$a&&(120==a.$a?a.rc&1?(Gd(a.b,2),c=!1):Gd(a.b,1):Gd(a.b,4));if(c&&a.ha&&a.P){for(var d=a.u,e=a.P,f=!0,h=a.Sa>>>d.ra;0<e&&h<d.Y.length;)d.Y[h].Ma&&(d.Y[h].Ma=f=!1,d.Y[h].ec=!0),e-=d.Ga,h++;f&&(c=!1)}Jc(a.b,a.wc,1E3/Math.max(a.vc,a.$a));a.rc++}if(c)if(1<a.qa)switch(a.la){case 2:for(var c=a.Sa,d=-1,e=0,f=60==a.uc?2:5,g=h=0,k=-1;e<a.va;){var m=0,p=c,q=d,x=a.ba;for(96!=q&&(x>>=1);;){var u=Bb(a.u,p++);if(127==(u&127)){var r=Bb(a.u,p++),d=r&96,c=(r&15)<<8|Bb(a.u,p),c=c+
(r&16?8192:16384);break}if(m<x)a.Ea[m++]=u;else break}if(f)f--;else{for(;m<a.Ea.length;)a.Ea[m++]=0;if(0<=q)for(p=a.ha&&a.G[h]==x,a.G[h++]=x,x=0;x<m;x++){u=a.Ea[x];if(!p||u!==a.G[h]){a.G[k=h]=u;var r=a,B=a.pb,y=u&127;if(u=r.ea[q][u&128?1:0]){var X=(y&15)*u.qa,y=(y>>4)*u.ma,A=void 0,Q=void 0,ba=void 0,Y=void 0,ua=u.qa,Fb=u.ma;B?(A=x*r.qa,Q=e*r.ma,ba=r.qa,Y=r.ma):(A=x*r.jc,Q=e*r.kc,ba=r.jc,Y=r.kc);u.qa>r.qa&&(A*=2,ba*=2);u.ma>r.ma&&(0==q&&(y+=r.ma),Fb=r.ma);B?B.drawImage(u.canvas,X,y,ua,Fb,A,Q,ba,Y):
(A+=0,Q+=0,r.H.drawImage(u.canvas,X,y,ua,Fb,A,Q,ba,Y))}g++}h++}e++}}a.ha=!0;!b&&a.qb&&1==g&&(a.G[k]=-1,g=0);a.qb=!1;(g||b)&&a.pb&&a.H.drawImage(a.L,0,a.ob,a.J,a.aa-a.ma,0,0,a.Ed,a.Fd)}else{f=a.Sa;h=f+a.P;m=k=g=0;c=a.J;q=0;d=a.aa;p=e=0;x=a.Za;r=(1<<x)-1;a.Hd&&(x=-x,p=16+x);for(;f<h;){B=Cb(a.u,f);if(a.ha&&B===a.G[g])k+=a.qc;else{a.G[g]=B;(u=p)&&(B=B>>8|(B&255)<<8);k<c&&(c=k);for(X=a.qc;X--;)y=B>>u&r,me(a,a.oc,k++,m,y),u+=x;k>q&&(q=k);m<d&&(d=m);m>=e&&(e=m+1)}f+=2;g++;if(k>=a.J&&(k=0,m++,m>a.aa))break}a.ha=
!0;c<a.J&&(f=q-c,e-=d,a.w&&(h=c,g=f,c=d,f=e,d=a.J-(h+g),e=g),a.pb.putImageData(a.oc,0,0,c,d,f,e),a.H.drawImage(a.L,0,0,a.L.width,a.L.height,0,0,a.X,a.O))}}
Ma(function(){for(var a=D(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=C(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=ta().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Va.aspect);f&&.3<=f&&3.33>=f&&(La("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");Aa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var h=e.getContext("2d"),d=new fe(d,e,h,f,c);gb(d,c)}});
function ne(a){this.ea=+a.adapter;switch(this.ea){case 0:this.ga=0;this.ia=2;break;default:v("Unrecognized serial adapter #"+this.ea);return}this.j=this.w=null;this.ha=a.tabSize;this.da=a.charBOL;this.D=0;this.aa=!1;w.call(this,"SerialPort",a,ne,8388608);var b=a.binding;if("console"==b)this.w="";else{var c;a=oe;b&&(void 0===c&&(c="Panel"),(c=fb(c,this.id))&&(b=c.N[b])&&this.oa(null,a,b))}this.G="";this.K=this.M=null;this.exports={connect:this.gc,receiveData:this.Mb}}z(ne);
var pe=[50,75,110,134.5,150,200,300,600,1200,1800,2E3,2400,3600,4800,9600,19200],qe=[!1,0,0,133,142,39,238],oe="buffer";m=ne.prototype;
m.oa=function(a,b,c,d){var e=this;switch(b){case oe:return this.N[b]=this.j=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;if(8===b||a.ctrlKey&&65<=b&&90>=b)a.preventDefault&&a.preventDefault(),64<b&&(b-=64),re(e,b);return!0},c.onkeypress=function(a){a=a||window.event;re(e,a.which||a.keyCode);a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0;default:if(d)return this.N[b]=c,d=d.replace(/\\e/g,String.fromCharCode(27)),c.onclick=function(){e.Mb(d);return!0},
!0}return!1};m.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.H=d;var e=this;this.ka=Ic(this.b,function(){e.Mb()});this.la=Ic(this.b,function(){e.Ca|=5});this.I=ub(a,"ChipSet");Gb(b,this,se,this.ga);Sb(b,this,te,this.ga);F(this)};
m.gc=function(){if(!this.K){var a=mc(this.B,"connection");if(a){var b=a.split("->");if(2==b.length){var c=ma(b[0]);if(c!=this.Xa)return;b=ma(b[1]);if(this.K=eb(b)){var d=this.K.exports;if(d){var e=d.connect;e&&e.call(this.K);if(this.M=d.receiveData){this.status(this.Ab+"."+c+" connected to "+b);return}}}}this.status("Unable to establish connection: "+a)}}};m.Da=function(a,b){if(!b)if(this.gc(),!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
m.Ha=function(a){return a?this.save():!0};m.reset=function(){ue(this)};m.save=function(){var a=new Tc(this),b=0,c=[];c[b++]=this.L;c[b++]=this.Z;c[b++]=this.ba;c[b++]=this.Ca;c[b++]=this.J;c[b++]=this.P;c[b]=this.O;I(a,0,c);return a.data()};m.restore=function(a){return ue(this,a[0])};function ue(a,b){var c=0;void 0===b&&(b=qe);a.L=b[c++];a.Z=b[c++];a.ba=b[c++];a.Ca=b[c++];a.J=b[c++];a.P=b[c++];a.O=b[c];return!0}
function ve(a,b){var c=a.O&b;b&15||(c>>=4);var c=pe[c],d=((a.J&12)>>2)+6;a.J&16&&d++;d+=((a.J&192)>>6)+1>>1;return 1E3/Math.round(c/d)}function re(a,b){ib(a,"receiveByte("+da(b)+"), status="+da(a.Ca));return a.aa||a.Ca&2?!1:(a.Z=b,a.Ca|=2,Gd(a.b,a.ia),!0)}m.Mb=function(a){null!=a&&(this.G="number"!=typeof a?a:this.G+String.fromCharCode(a));this.G&&(re(this,this.G.charCodeAt(0))&&(this.G=this.G.substr(1)),this.G&&this.b&&Jc(this.b,this.ka,ve(this,15)));return!0};
m.hd=function(a,b){var c=this.Z;E(this,a,null,b,"DATA",c);this.Ca&=-3;return c};m.gd=function(a,b){var c=this.Ca;E(this,a,null,b,"STATUS",c);return c};
m.sd=function(a,b,c){E(this,a,b,c,"DATA");this.ba=b;this.Ca&=-6;ib(this,"transmitByte("+da(b)+")");if(19==b)this.aa=!0;else if(17==b)this.aa=!1;else if(this.M&&this.M.call(this.K,b),this.j)8==b?(this.j.value=this.j.value.slice(0,-1),0<this.D&&this.D--):(a=(a=na[b])?"<"+a+">":String.fromCharCode(b),c=a.length,9==b?(b=this.ha||8,c=b-this.D%b,this.ha&&(a=la("",c))):13==b&&(this.D=c=0,a="\n"),this.da&&!this.D&&c&&(a=String.fromCharCode(this.da)+a),this.j.value+=a,this.j.scrollTop=this.j.scrollHeight,
this.D+=c);else if(null!=this.w){if(10==b||1024<=this.w.length)this.g(this.w),this.w="";10!=b&&(this.w+=String.fromCharCode(b))}this.b&&Jc(this.b,this.la,ve(this,240))};m.rd=function(a,b,c){E(this,a,b,c,"CONTROL");this.L?(this.P=b,this.P&64&&(this.L=!1)):(this.J=b,this.L=!0)};m.qd=function(a,b,c){E(this,a,b,c,"BAUDRATES");this.O=b};var se={0:ne.prototype.hd,1:ne.prototype.gd},te={0:ne.prototype.sd,1:ne.prototype.rd,2:ne.prototype.qd};
Ma(function(){for(var a=D(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new ne(d);gb(d,c)}});function we(a){w.call(this,"Debugger",a,we);this.Z=this.la=this.J=0;this.I=-1;this.w=[];this.da={}}z(we);var xe={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function ne(a){this.ea=+a.adapter;switch(this.ea){case 0:this.ga=0;this.ia=2;break;default:v("Unrecognized serial adapter #"+this.ea);return}this.j=this.w=null;this.ha=a.tabSize;this.da=a.charBOL;this.D=0;this.aa=!1;w.call(this,"SerialPort",a,ne,8388608);var b=a.binding;if("console"==b)this.w="";else{var c;a=oe;b&&(void 0===c&&(c="Panel"),(c=fb(c,this.id))&&(b=c.N[b])&&this.oa(null,a,b))}this.G="";this.K=this.M=null;this.exports={connect:this.hc,receiveData:this.Nb}}z(ne);
var pe=[50,75,110,134.5,150,200,300,600,1200,1800,2E3,2400,3600,4800,9600,19200],qe=[!1,0,0,133,142,39,238],oe="buffer";l=ne.prototype;
l.oa=function(a,b,c,d){var e=this;switch(b){case oe:return this.N[b]=this.j=c,c.onkeydown=function(a){a=a||window.event;var b=a.keyCode;if(8===b||a.ctrlKey&&65<=b&&90>=b)a.preventDefault&&a.preventDefault(),64<b&&(b-=64),re(e,b);return!0},c.onkeypress=function(a){a=a||window.event;re(e,a.which||a.keyCode);a.preventDefault&&a.preventDefault();return!0},c.removeAttribute("readonly"),!0;default:if(d)return this.N[b]=c,d=d.replace(/\\e/g,String.fromCharCode(27)),c.onclick=function(){e.Nb(d);return!0},
!0}return!1};l.Oa=function(a,b,c,d){this.B=a;this.u=b;this.b=c;this.I=d;var e=this;this.ka=Ic(this.b,function(){e.Nb()});this.la=Ic(this.b,function(){e.Ca|=5});this.H=ub(a,"ChipSet");Gb(b,this,se,this.ga);Sb(b,this,te,this.ga);F(this)};
l.hc=function(){if(!this.K){var a=mc(this.B,"connection");if(a){var b=a.split("->");if(2==b.length){var c=ma(b[0]);if(c!=this.Xa)return;b=ma(b[1]);if(this.K=eb(b)){var d=this.K.exports;if(d){var e=d.connect;e&&e.call(this.K);if(this.M=d.receiveData){this.status(this.Ab+"."+c+" connected to "+b);return}}}}this.status("Unable to establish connection: "+a)}}};l.Da=function(a,b){if(!b)if(this.hc(),!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};
l.Ha=function(a){return a?this.save():!0};l.reset=function(){ue(this)};l.save=function(){var a=new Tc(this),b=0,c=[];c[b++]=this.L;c[b++]=this.X;c[b++]=this.ba;c[b++]=this.Ca;c[b++]=this.J;c[b++]=this.P;c[b]=this.O;I(a,0,c);return a.data()};l.restore=function(a){return ue(this,a[0])};function ue(a,b){var c=0;void 0===b&&(b=qe);a.L=b[c++];a.X=b[c++];a.ba=b[c++];a.Ca=b[c++];a.J=b[c++];a.P=b[c++];a.O=b[c];return!0}
function ve(a,b){var c=a.O&b;b&15||(c>>=4);var c=pe[c],d=((a.J&12)>>2)+6;a.J&16&&d++;d+=((a.J&192)>>6)+1>>1;return 1E3/Math.round(c/d)}function re(a,b){ib(a,"receiveByte("+da(b)+"), status="+da(a.Ca));return a.aa||a.Ca&2?!1:(a.X=b,a.Ca|=2,Gd(a.b,a.ia),!0)}l.Nb=function(a){null!=a&&(this.G="number"!=typeof a?a:this.G+String.fromCharCode(a));this.G&&(re(this,this.G.charCodeAt(0))&&(this.G=this.G.substr(1)),this.G&&this.b&&Jc(this.b,this.ka,ve(this,15)));return!0};
l.jd=function(a,b){var c=this.X;E(this,a,null,b,"DATA",c);this.Ca&=-3;return c};l.hd=function(a,b){var c=this.Ca;E(this,a,null,b,"STATUS",c);return c};
l.td=function(a,b,c){E(this,a,b,c,"DATA");this.ba=b;this.Ca&=-6;ib(this,"transmitByte("+da(b)+")");if(19==b)this.aa=!0;else if(17==b)this.aa=!1;else if(this.M&&this.M.call(this.K,b),this.j)8==b?(this.j.value=this.j.value.slice(0,-1),0<this.D&&this.D--):(a=(a=na[b])?"<"+a+">":String.fromCharCode(b),c=a.length,9==b?(b=this.ha||8,c=b-this.D%b,this.ha&&(a=la("",c))):13==b&&(this.D=c=0,a="\n"),this.da&&!this.D&&c&&(a=String.fromCharCode(this.da)+a),this.j.value+=a,this.j.scrollTop=this.j.scrollHeight,
this.D+=c);else if(null!=this.w){if(10==b||1024<=this.w.length)this.g(this.w),this.w="";10!=b&&(this.w+=String.fromCharCode(b))}this.b&&Jc(this.b,this.la,ve(this,240))};l.sd=function(a,b,c){E(this,a,b,c,"CONTROL");this.L?(this.P=b,this.P&64&&(this.L=!1)):(this.J=b,this.L=!0)};l.rd=function(a,b,c){E(this,a,b,c,"BAUDRATES");this.O=b};var se={0:ne.prototype.jd,1:ne.prototype.hd},te={0:ne.prototype.td,1:ne.prototype.sd,2:ne.prototype.rd};
Ma(function(){for(var a=D(document,"pc8080","serial"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new ne(d);gb(d,c)}});function we(a){w.call(this,"Debugger",a,we);this.aa=this.la=this.J=0;this.P=!1;this.j=-1;this.w=[];this.da={}}z(we);var xe={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function ye(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 ze(a,b,c){var d;if(b){b=Ae(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var p=l[e++],q=p.length,p=ma(p);if(!p){f=!0;break}p=Be(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}g.push(p);if(e==l.length)break;var p=l[e++],x=p.length;k.length&&xe[p]<xe[k[k.length-1]]&&ye(g,k,1);k.push(p);b=b.substr(q+x)}ye(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ce(a,null,
d))}return d}function Ae(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=ze(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=De(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Ra(d,0),d.qe?8:4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.Z-a.la}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
we.prototype.Db=function(a,b,c){if(b)if(a){0>this.j&&this.w.length&&(this.j=0);if(0>this.j||a!=this.w[this.j])this.w.splice(0,0,a),this.j=0;this.j--}else this.P?a="end":a=this.w[this.j+1];b=[];if(a){a=a.toLowerCase().replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var h=a.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)b.push(ma(a.substring(d,f))),d=f+1}}return b};
function ze(a,b,c){var d;if(b){b=Ae(a,b);for(var e=0,f=!1,h=b,g=[],k=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<m.length;){var p=m[e++],q=p.length,p=ma(p);if(!p){f=!0;break}p=Be(a,p,null,!1===c);if(void 0===p){f=!0;c=!1;break}g.push(p);if(e==m.length)break;var p=m[e++],x=p.length;k.length&&xe[p]<xe[k[k.length-1]]&&ye(g,k,1);k.push(p);b=b.substr(q+x)}ye(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Ce(a,null,
d))}return d}function Ae(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=ze(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?n(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=De(a,c[1]),b=b.replace("["+c[1]+"]",d?n(a.Ra(d,0),d.re?8:4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.aa-a.la}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Be(a,b,c,d){var e;void 0!==b?(e=Ee(b),0<=e?e=Fe(a,e):(e=a.da[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 Ce(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,p="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)p="?"+p;else for(;0<l--;)p=(k&1?"1":"0")+p,k>>=1;h=p+"b"+h;d>>=8}d="0x"+n(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ge(a,b){if(b)return Ce(a,b,a.da[b]);var c=0;for(b in a.da)Ce(a,b,a.da[b]),c++;return 0<c}
function He(a){w.call(this,"Debugger",a,He);this.style=Ie;this.M=W();this.Sa=W();this.ba=!1;this.aa=W();this.G=[];this.j=this.O=this.D=[];Je(this);this.ha=0;Ke(this);this.va=[];Le(this,a.messages);this.ya=a.commands;var b=this;window?void 0===window.pc8080&&(window.pc8080=function(a){return pc(b,a)}):void 0===global.pc8080&&(global.pc8080=function(a){return pc(b,a)})}z(He,we);
function Ce(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,m=8,p="";void 0===m?m=32:32<m&&(m=32);if(null==k||isNaN(k))for(;0<m--;)p="?"+p;else for(;0<m--;)p=(k&1?"1":"0")+p,k>>=1;h=p+"b"+h;d>>=8}d="0x"+n(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ge(a,b){if(b)return Ce(a,b,a.da[b]);var c=0;for(b in a.da)Ce(a,b,a.da[b]),c++;return 0<c}
function He(a){w.call(this,"Debugger",a,He);this.style=Ie;this.M=W();this.Sa=W();this.ba=W();this.G=[];this.H=this.O=this.D=[];Je(this);this.ha=0;Ke(this);this.va=[];Le(this,a.messages);this.ya=a.commands;var b=this;window?void 0===window.pc8080&&(window.pc8080=function(a){return pc(b,a)}):void 0===global.pc8080&&(global.pc8080=function(a){return pc(b,a)})}z(He,we);
var Me={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},
Ie=8080,Ne="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(" "),Oe="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(" "),
Pe="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),Qe=[[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,
@ -157,89 +158,89 @@ Pe="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),Qe=[[45],[42,2067,32],[71,
[43,1809,17],[43,1809,273],[43,1809,529],[43,1809,785],[43,1809,1041],[43,1809,1297],[43,1809,1617],[43,1809,1809],[3,18193,17],[3,18193,273],[3,18193,529],[3,18193,785],[3,18193,1041],[3,18193,1297],[3,18193,1617],[3,18193,1809],[2,18193,17],[2,18193,273],[2,18193,529],[2,18193,785],[2,18193,1041],[2,18193,1297],[2,18193,1617],[2,18193,1809],[73,18193,17],[73,18193,273],[73,18193,529],[73,18193,785],[73,18193,1041],[73,18193,1297],[73,18193,1617],[73,18193,1809],[66,18193,17],[66,18193,273],[66,
18193,529],[66,18193,785],[66,18193,1041],[66,18193,1297],[66,18193,1617],[66,18193,1809],[5,18193,17],[5,18193,273],[5,18193,529],[5,18193,785],[5,18193,1041],[5,18193,1297],[5,18193,1617],[5,18193,1809],[76,18193,17],[76,18193,273],[76,18193,529],[76,18193,785],[76,18193,1041],[76,18193,1297],[76,18193,1617],[76,18193,1809],[46,18193,17],[46,18193,273],[46,18193,529],[46,18193,785],[46,18193,1041],[46,18193,1297],[46,18193,1617],[46,18193,1809],[18,18193,17],[18,18193,273],[18,18193,529],[18,18193,
785],[18,18193,1041],[18,18193,1297],[18,18193,1617],[18,18193,1809],[58],[50,2067],[34,51],[30,51],[11,51],[51,2067],[4,18193,33],[65,128],[62],[54],[38,51],[30,32819],[15,51],[7,51],[1,18193,33],[65,128],[57],[50,2323],[33,51],[48,33,18193],[10,51],[51,2323],[74,18193,33],[65,128],[55],[54,32768],[31,51],[27,18193,33],[8,51],[7,32819],[67,18193,33],[65,128],[61],[50,2579],[37,51],[78,19283,18963],[14,51],[51,2579],[6,18193,33],[65,128],[60],[49,2579],[36,51],[75,18963,18707],[13,51],[7,32819],[77,
18193,33],[65,128],[59],[50,3603],[35,51],[24],[12,51],[51,3603],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,18193,33],[65,128]];m=He.prototype;
m.Oa=function(a,b,c,d){this.u=b;this.b=c;this.B=a;(a=mc(a,"messages"))&&Le(this,a);this.Ea=Qe;Od(this,64,function(a){a:{var b=d.u.X,c=a[0],g=a=0,k=b.length;if(c){a=Re(De(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.u.ra;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var p=b[g];p.type==c?l++||d.g("..."):(c=p.type,l=Ab[c],p&&d.g(n(p.id)+" %"+n(g<<d.u.ra)+" %%"+n(p.F)+" "+t(p.wb)+" "+
t(p.size)+" "+l),c!=Zb&&(c=-1),l=0);a+=d.u.Ga;g++}}});F(this)};
m.oa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ga=this.N[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",pc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.I<d.w.length-1&&(b=d.w[++d.I]):40==a.keyCode&&(0<d.I?b=d.w[--d.I]:(b="",d.I=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.N[b]=c,Ca(c,function(){if(d.ga){var a=d.ga.value;d.ga.value=
"";pc(d,a,!0);return!0}return!1}),!0;case "step":return this.N[b]=c,Ca(c,function(a){var b=!1;lb(d,!0)||(kb(d,!0),b=d.jb(a?1:0),kb(d,!1));return b}),!0}return!1};m.vb=function(){this.ga&&this.ga.focus()};function Re(a){a=a&&a.F;null==a&&(a=-1);return a}m.$=function(a,b){var c=255,d=Re(a);-1!==d&&(c=Bb(this.u,d),b&&Se(a,b));return c};m.Ra=function(a,b){var c=65535,d=Re(a);-1!==d&&(c=Cb(this.u,d),b&&Se(a,b));return c};m.ua=function(a,b,c){var d=Re(a);-1!==d&&(Db(this.u,d,b),c&&Se(a,c),Cc(this.b,!0))};
m.Fb=function(a,b,c){var d=Re(a);if(-1!==d){var e=this.u,f=d&e.u,h=(d&e.w)>>>e.ra;f!=e.u?e.X[h].Pb(f,b&65535,d):(e.X[h++].xb(f,b&255,d),e.X[h&e.K].xb(0,b>>8&255,d+1));c&&Se(a,c);Cc(this.b,!0)}};function W(a){return{F:a,Na:!1}}function Te(a){return[a.F,a.Na]}function Ue(a){return{F:a[0],Na:a[1]}}
function De(a,b,c){var d;c=(c?a.M:a.Sa).F;if(void 0!==b){d=b=Ae(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.G.length;c++){var f=a.G[c].Pa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=ze(a,b,void 0)}null!=c&&(d=W(c));return d}function Ve(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.dd=We(a,b.sc=c[2]))}function Se(a,b){null!=a.F&&(a.F+=b||1)}function Z(a){return n(a,4)}
function vf(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.$(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Le(a,b){a.H=a;a.sa=a.ed=536870912;a.ia=null;a.ka=[];var c=We(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in sb)0<=ra(c,d)&&(a.sa|=sb[d],a.g(d+" messages enabled"))}function Od(a,b,c){for(var d in sb)if(b==sb[d]){a.va[d]=c;break}}
function Ee(a,b){var c;a=a.toUpperCase();null==b?c=ra(Pe,a):(c=ra(Pe,a.substr(b,2)),0>c&&(c=ra(Pe,a.substr(b,1))));return c}function wf(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:case 14:c=4}return c?n(d,c):"??"}
function Fe(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.i;break;case 0:c=d.S;break;case 1:c=d.T;break;case 8:c=Uc(d);break;case 2:c=d.U;break;case 3:c=d.V;break;case 9:c=Wc(d);break;case 4:c=d.W;break;case 5:c=d.Y;break;case 10:c=J(d);break;case 6:c=d.$(J(d));break;case 11:c=d.na;break;case 12:c=d.R;break;case 13:c=Sc(d);break;case 14:c=Sc(d)&255|d.i<<8}}return c}
function xf(a,b){b=Ae(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Ee(b,c+1),0<=e&&(b=b.substr(0,c)+wf(a,e)+b.substr(c+1+Pe[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=De(a,e))?(d=e+' "'+vf(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=De(a,e))?(Se(d),d=e+' "'+
vf(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(W(this.b.R).F));if(this.sa&1073741824)this.ka.push(a);else if(!this.ia||a!=this.ia)if(this.ia=a,this.sa&-2147483648&&(this.pa(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;Kc(c);c.P=0;Cc(c)}};
18193,33],[65,128],[59],[50,3603],[35,51],[24],[12,51],[51,3603],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,18193,33],[65,128]];l=He.prototype;
l.Oa=function(a,b,c,d){this.u=b;this.b=c;this.B=a;(a=mc(a,"messages"))&&Le(this,a);this.Ea=Qe;Od(this,64,function(a){a:{var b=d.u.Y,c=a[0],g=a=0,k=b.length;if(c){a=Re(De(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.u.ra;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,m=0;k--;){var p=b[g];p.type==c?m++||d.g("..."):(c=p.type,m=Ab[c],p&&d.g(n(p.id)+" %"+n(g<<d.u.ra)+" %%"+n(p.F)+" "+t(p.wb)+" "+
t(p.size)+" "+m),c!=Zb&&(c=-1),m=0);a+=d.u.Ga;g++}}});F(this)};
l.oa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.ga=this.N[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",pc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.j<d.w.length-1&&(b=d.w[++d.j]):40==a.keyCode&&(0<d.j?b=d.w[--d.j]:(b="",d.j=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.N[b]=c,Ca(c,function(){if(d.ga){var a=d.ga.value;d.ga.value=
"";pc(d,a,!0);return!0}return!1}),!0;case "step":return this.N[b]=c,Ca(c,function(a){var b=!1;lb(d,!0)||(kb(d,!0),b=d.jb(a?1:0),kb(d,!1));return b}),!0}return!1};l.vb=function(){this.ga&&this.ga.focus()};function Re(a){a=a&&a.F;null==a&&(a=-1);return a}l.$=function(a,b){var c=255,d=Re(a);-1!==d&&(c=Bb(this.u,d),b&&Se(a,b));return c};l.Ra=function(a,b){var c=65535,d=Re(a);-1!==d&&(c=Cb(this.u,d),b&&Se(a,b));return c};l.ua=function(a,b,c){var d=Re(a);-1!==d&&(Db(this.u,d,b),c&&Se(a,c),qc(this.b,!0))};
l.Gb=function(a,b,c){var d=Re(a);if(-1!==d){var e=this.u,f=d&e.u,h=(d&e.w)>>>e.ra;f!=e.u?e.Y[h].Qb(f,b&65535,d):(e.Y[h++].xb(f,b&255,d),e.Y[h&e.K].xb(0,b>>8&255,d+1));c&&Se(a,c);qc(this.b,!0)}};function W(a){return{F:a,Na:!1}}function Te(a){return[a.F,a.Na]}function Ue(a){return{F:a[0],Na:a[1]}}
function De(a,b,c){var d;c=(c?a.M:a.Sa).F;if(void 0!==b){d=b=Ae(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.G.length;c++){var f=a.G[c].Pa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=ze(a,b,void 0)}null!=c&&(d=W(c));return d}function Ve(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.ed=a.Db(b.tc=c[2]))}function Se(a,b){null!=a.F&&(a.F+=b||1)}function Z(a){return n(a,4)}
function uf(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.$(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Le(a,b){a.I=a;a.sa=a.fd=536870912;a.ia=null;a.ka=[];var c=a.Db(b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in sb)0<=ra(c,d)&&(a.sa|=sb[d],a.g(d+" messages enabled"))}function Od(a,b,c){for(var d in sb)if(b==sb[d]){a.va[d]=c;break}}
function Ee(a,b){var c;a=a.toUpperCase();null==b?c=ra(Pe,a):(c=ra(Pe,a.substr(b,2)),0>c&&(c=ra(Pe,a.substr(b,1))));return c}function vf(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:case 14:c=4}return c?n(d,c):"??"}
function Fe(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.i;break;case 0:c=d.S;break;case 1:c=d.T;break;case 8:c=Uc(d);break;case 2:c=d.U;break;case 3:c=d.V;break;case 9:c=Wc(d);break;case 4:c=d.W;break;case 5:c=d.Z;break;case 10:c=J(d);break;case 6:c=d.$(J(d));break;case 11:c=d.na;break;case 12:c=d.R;break;case 13:c=Sc(d);break;case 14:c=Sc(d)&255|d.i<<8}}return c}
function wf(a,b){b=Ae(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=Ee(b,c+1),0<=e&&(b=b.substr(0,c)+vf(a,e)+b.substr(c+1+Pe[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=aa(e),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=De(a,e))?(d=e+' "'+uf(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=De(a,e))?(Se(d),d=e+' "'+
uf(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}l.message=function(a,b){b&&(a+=" at "+Z(W(this.b.R).F));if(this.sa&1073741824)this.ka.push(a);else if(!this.ia||a!=this.ia)if(this.ia=a,this.sa&-2147483648&&(this.pa(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;Kc(c);c.P=0;qc(c)}};
function hb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.sa&g)!=g||a.message(b.Xa+"."+(null!=d?"outPort":"inPort")+"("+t(c)+","+(f?f:"unknown")+(null!=d?","+da(d):"")+")"+(null!=h?": "+da(h):"")+(null!=e?" at "+Z(e):""))}
function Ke(a){var b;if(Hd(a)){if(!a.L||!a.L.length){a.L=Array(1E3);for(b=0;b<a.L.length;b++)a.L[b]=W();a.ea=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.L&&a.L.length&&a.g("instruction history buffer freed"),a.ea=0,a.L=[],a.K=[]}m.bb=function(a){if(!yf(this))return!1;this.b.bb(a);return!0};
m.jb=function(a,b,c){if(!yf(this))return!1;this.J=0;a||Hd(this)&&Id(this,this.b.R,0);try{var d=this.b.jb(a);0<d&&(this.J+=d,Gc(this.b,d,!0),Dc(this.b,d),this.Z++)}catch(e){"number"!=typeof e&&(this.J=0,pb(this.b,e.stack||e.message))}!1!==c&&Cc(this.b);this.Ia(b||!1);return 0<this.J};m.pa=function(a){this.b&&this.b.pa(a)};m.Ia=function(a){void 0===a&&(a=!0);this.M=W(this.b.R);a&&1!=this.P?zf(this):Af(this)};
function yf(a){var b;if(b=a.b&&mb(a.b))b=a.b,b.C.wa?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!lb(a.b)?(a=a.b,a.C.error?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.Da=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.Ha=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){Ke(this);this.Z=this.la=0;this.ia=null;this.J=0;this.M=W(this.b.R);this.C.za=!1;Bf(this);a||this.Ia()};
m.save=function(){var a=new Tc(this);I(a,0,Te(this.M));I(a,1,Te(this.aa));I(a,2,[this.w,this.ba,this.sa]);I(a,3,this.G);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.M=Ue(a[b++]),this.aa=Ue(a[b++]),this.w=a[b][0],"string"==typeof this.w&&(this.w=[this.w]),this.ba=a[b][1],this.sa|=a[b][2]);a[3]&&(this.G=a[3]);return!0};m.start=function(a,b){this.P||this.g("running");this.C.za=!0;this.ob=a;this.pb=b};
m.stop=function(a,b){if(this.C.za){this.C.za=!1;this.J=b-this.pb;if(!this.P){var c="stopped";if(this.J){var d=a-this.ob,e=0<d?Math.round(1E3*this.J/d):0,c=c+" (";Hd(this)&&(c+=this.Z+" opcodes, ",this.la-=this.Z,this.Z=0);c+=this.J+" cycles, "+d+" ms, "+e+" hz)"}else jb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Ia(!0);this.vb();Bf(this,this.b.R)}};function Hd(a){return 1<a.j.length||!!a.ha}
function Id(a,b,c){var d=a.b;if(0<c&&(a.ha&&!--a.ha||hc(a,b,1,a.j)))return!0;0<=c&&a.K.length&&(a.Z++,b=Bb(a.u,b),null!=b&&(a.K[b][1]++,b=a.L[a.ea],b.F=d.R,b.Na=!1,++a.ea==a.L.length&&(a.ea=0)));return!1}function Ib(a,b,c){a.g("break on input from port "+t(b)+": "+n(c));a.pa(!0)}function Ub(a,b,c){a.g("break on output to port "+t(b)+": "+n(c));a.pa(!0)}
function Je(a){var b,c;a.j=["bp"];if(void 0!==a.O)for(b=1;b<a.O.length;b++){c=a.O[b];var d=a.u;ic(d.X[Re(c)>>>d.ra],!1)}a.O=["br"];if(void 0!==a.D)for(b=1;b<a.D.length;b++)c=a.D[b],d=a.u,ic(d.X[Re(c)>>>d.ra],!0);a.D=["bw"];a.Za=0}m.Ya=function(a,b,c){var d=!0;c||Cf(this,a,b,!1,!0);if(a!=this.j){var e=Re(b);if(-1===e)this.g("invalid address: "+Z(b.F)),d=!1;else{var f=this.u;f.X[e>>>f.ra].Ya(e&f.u,a==this.D)}}d&&(a.push(b),c?b.Na=!0:(Df(this,a,a.length-1,"set"),Ke(this)));return d};
function Cf(a,b,c,d,e){var f=!1;c=Re(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==Re(g)&&(!d||g.Na)){f=!0;g.Na||e||Df(a,b,h,"cleared");b.splice(h,1);b!=a.j&&(d=a.u,ic(d.X[c>>>d.ra],b==a.D));g.Na||Ke(a);break}}return f}function Ef(a,b){for(var c=1;c<b.length;c++)Df(a,b,c);return b.length-1}function Df(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.F)+(d?" "+d:c.sc?' "'+c.sc+'"':""))}
function Bf(a,b){if(void 0!==b)hc(a,b,1,a.j,!0),a.P=0;else for(var c=1;c<a.j.length;c++){var d=a.j[c];if(d.Na){if(!Cf(a,a.j,d,!0))break;c=0}}}
function hc(a,b,c,d,e){var f=!1;if(!a.Za++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Na)for(var k=Re(g),l=0;l<c;l++)if(b+l==k){var p,f=!0;g.Na&&(Cf(a,d,g,!0),e=!0);if(p=g.dd){for(var f=!1,q=0;q<p.length;q++)if(!Ff(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var x=q+1;x<p.length&&p[x].indexOf("else");x++)q++;if(x==p.length){f=!0;break}}a.b.C.za||(f=!0)}if(f){e||Df(a,d,h,"hit");break}}}a.Za--;return f}
function Gf(a,b,c,d){for(var e=W(b.F),f=a.$(b,1),h=a.Ea[f],g="",k=(8086!=a.style?Ne:Oe)[h[0]],l=h.length-1,p=0,q,x=1;x<=l;x++){var u="";q=h[x];if(void 0!==q&&!(q&16384&&a.style==Ie)){var r=q&240;if(r){var B=q&15;B?p=B:q|=p;q&61440||(q|=1==x?8192:4096);if(r&32)a:{var u=a,r=q,B=b,y=" ";switch(r&15){case 1:y=n(u.$(B,1),2);break;case 2:y=n(u.$(B,1)<<24>>24,4);break;case 3:y=n(u.Ra(B,2),4);break;default:u="imm("+t(r)+")";break a}8086==u.style&&r&64?y="["+y+"]":r&16||(y=(u.style==Ie?"$":"0x")+y);u=y}else r&
function Ke(a){var b;if(Hd(a)){if(!a.L||!a.L.length){a.L=Array(1E3);for(b=0;b<a.L.length;b++)a.L[b]=W();a.ea=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.L&&a.L.length&&a.g("instruction history buffer freed"),a.ea=0,a.L=[],a.K=[]}l.bb=function(a){if(!xf(this))return!1;this.b.bb(a);return!0};
l.jb=function(a,b,c){if(!xf(this))return!1;this.J=0;a||Hd(this)&&Id(this,this.b.R,0);try{var d=this.b.jb(a);0<d&&(this.J+=d,Gc(this.b,d,!0),Dc(this.b,d),this.aa++)}catch(e){"number"!=typeof e&&(this.J=0,pb(this.b,e.stack||e.message))}!1!==c&&qc(this.b);this.Ia(b||!1);return 0<this.J};l.pa=function(a){this.b&&this.b.pa(a)};l.Ia=function(a){void 0===a&&(a=!0);this.M=W(this.b.R);a&&1!=this.X?yf(this):zf(this)};
function xf(a){var b;if(b=a.b&&mb(a.b))b=a.b,b.C.wa?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!lb(a.b)?(a=a.b,a.C.error?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}l.Da=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};l.Ha=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};l.reset=function(a){Ke(this);this.aa=this.la=0;this.ia=null;this.J=0;this.M=W(this.b.R);this.C.za=!1;Af(this);a||this.Ia()};
l.save=function(){var a=new Tc(this);I(a,0,Te(this.M));I(a,1,Te(this.ba));I(a,2,[this.w,this.P,this.sa]);I(a,3,this.G);return a.data()};l.restore=function(a){var b=0;void 0!==a[2]&&(this.M=Ue(a[b++]),this.ba=Ue(a[b++]),this.w=a[b][0],"string"==typeof this.w&&(this.w=[this.w]),this.P=a[b][1],this.sa|=a[b][2]);a[3]&&(this.G=a[3]);return!0};l.start=function(a,b){this.X||this.g("running");this.C.za=!0;this.ob=a;this.pb=b};
l.stop=function(a,b){if(this.C.za){this.C.za=!1;this.J=b-this.pb;if(!this.X){var c="stopped";if(this.J){var d=a-this.ob,e=0<d?Math.round(1E3*this.J/d):0,c=c+" (";Hd(this)&&(c+=this.aa+" opcodes, ",this.la-=this.aa,this.aa=0);c+=this.J+" cycles, "+d+" ms, "+e+" hz)"}else jb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.Ia(!0);this.vb();Af(this,this.b.R)}};function Hd(a){return 1<a.H.length||!!a.ha}
function Id(a,b,c){var d=a.b;if(0<c&&(a.ha&&!--a.ha||hc(a,b,1,a.H)))return!0;0<=c&&a.K.length&&(a.aa++,b=Bb(a.u,b),null!=b&&(a.K[b][1]++,b=a.L[a.ea],b.F=d.R,b.Na=!1,++a.ea==a.L.length&&(a.ea=0)));return!1}function Ib(a,b,c){a.g("break on input from port "+t(b)+": "+n(c));a.pa(!0)}function Ub(a,b,c){a.g("break on output to port "+t(b)+": "+n(c));a.pa(!0)}
function Je(a){var b,c;a.H=["bp"];if(void 0!==a.O)for(b=1;b<a.O.length;b++){c=a.O[b];var d=a.u;ic(d.Y[Re(c)>>>d.ra],!1)}a.O=["br"];if(void 0!==a.D)for(b=1;b<a.D.length;b++)c=a.D[b],d=a.u,ic(d.Y[Re(c)>>>d.ra],!0);a.D=["bw"];a.Za=0}l.Ya=function(a,b,c){var d=!0;c||Bf(this,a,b,!1,!0);if(a!=this.H){var e=Re(b);if(-1===e)this.g("invalid address: "+Z(b.F)),d=!1;else{var f=this.u;f.Y[e>>>f.ra].Ya(e&f.u,a==this.D)}}d&&(a.push(b),c?b.Na=!0:(Cf(this,a,a.length-1,"set"),Ke(this)));return d};
function Bf(a,b,c,d,e){var f=!1;c=Re(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==Re(g)&&(!d||g.Na)){f=!0;g.Na||e||Cf(a,b,h,"cleared");b.splice(h,1);b!=a.H&&(d=a.u,ic(d.Y[c>>>d.ra],b==a.D));g.Na||Ke(a);break}}return f}function Df(a,b){for(var c=1;c<b.length;c++)Cf(a,b,c);return b.length-1}function Cf(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.F)+(d?" "+d:c.tc?' "'+c.tc+'"':""))}
function Af(a,b){if(void 0!==b)hc(a,b,1,a.H,!0),a.X=0;else for(var c=1;c<a.H.length;c++){var d=a.H[c];if(d.Na){if(!Bf(a,a.H,d,!0))break;c=0}}}
function hc(a,b,c,d,e){var f=!1;if(!a.Za++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.Na)for(var k=Re(g),m=0;m<c;m++)if(b+m==k){var p,f=!0;g.Na&&(Bf(a,d,g,!0),e=!0);if(p=g.ed){for(var f=!1,q=0;q<p.length;q++)if(!Ef(a,p[q],!0)){if(p[q].indexOf("if")){f=!0;break}for(var x=q+1;x<p.length&&p[x].indexOf("else");x++)q++;if(x==p.length){f=!0;break}}a.b.C.za||(f=!0)}if(f){e||Cf(a,d,h,"hit");break}}}a.Za--;return f}
function Ff(a,b,c,d){for(var e=W(b.F),f=a.$(b,1),h=a.Ea[f],g="",k=(8086!=a.style?Ne:Oe)[h[0]],m=h.length-1,p=0,q,x=1;x<=m;x++){var u="";q=h[x];if(void 0!==q&&!(q&16384&&a.style==Ie)){var r=q&240;if(r){var B=q&15;B?p=B:q|=p;q&61440||(q|=1==x?8192:4096);if(r&32)a:{var u=a,r=q,B=b,y=" ";switch(r&15){case 1:y=n(u.$(B,1),2);break;case 2:y=n(u.$(B,1)<<24>>24,4);break;case 3:y=n(u.Ra(B,2),4);break;default:u="imm("+t(r)+")";break a}8086==u.style&&r&64?y="["+y+"]":r&16||(y=(u.style==Ie?"$":"0x")+y);u=y}else r&
16?(u=(q&3840)>>8,r=Pe[u],8086==a.style&&q&64&&(6==u&&(r="HL"),r="["+r+"]"),u=r):r&128&&(u=(f>>3&7).toString());if(!u||!u.length){g="INVALID";break}0<g.length&&(g+=",");g+=u||"???"}}}f="";h=Z(e.F)+" ";if(-1!==e.F&&-1!==b.F){do if(f+=n(a.$(e,1),2),null==e.F)break;while(e.F!=b.F)}h+=la(f,10);h=h+(q&32768?"*":" ")+la(k,7);g&&(h+=" "+g);c&&(h=la(h,40)+";"+c,h=a.b.C.eb?h+("cycles="+Ec(a.b).toString()+" cs="+n(a.b.rb)):h+(null!=d?"="+d.toString():""));return h}
function Hf(a,b){var c;switch(b){case "IF":c=a.b.ta&512;break;case "SF":c=dd(a.b);break;case "ZF":c=cd(a.b);break;case "AF":c=bd(a.b);break;case "PF":c=ad(a.b);break;case "CF":c=Zc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function If(a,b){return Pe[b]+"="+wf(a,b)+" "}function Jf(a){return If(a,7)+If(a,8)+If(a,9)+If(a,10)+If(a,11)+Hf(a,"IF")+Hf(a,"SF")+Hf(a,"ZF")+Hf(a,"AF")+Hf(a,"PF")+Hf(a,"CF")}m.ac=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Kf(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b<a.G.length;b++){var f=a.G[b],h=f.F>>>0,g=f.pd;if(e>=h&&e<h+g){e=oa(f.$b,[e-h],a.ac);0<=e?Lf(a,b,e,d):c&&(e=~e,Lf(a,b,e-1,d),Lf(a,b,e,d));break}}return d}function Lf(a,b,c,d){var e={},f=a.G[b].$b,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.G[b].Pa[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Mf(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.K)if("clear"==b){for(c=0;c<a.K.length;c++)a.K[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.K.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?Ne:Oe;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Ea[h][0]]+" ").substr(0,5)+" ("+da(h)+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function Nf(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ge(a)||a.g("no variables"),!0;if(!c[2])return Ge(a,c[1]);if(!c[3])return delete a.da[c[1]],!0;var d=ze(a,c[3]);return void 0!==d?(a.da[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Of(a,b,c){var d=null;if(b=De(a,b,!0)){var e=Kf(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.F-e[1])&&(h=" + "+t(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.F)&&(h=" - "+t(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function Pf(a,b){switch(b[1]){case "8080":a.style=Ie;break;case "8086":a.style=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.gb=c;break;case "start":a.b.sb=c;break;case "stop":a.b.hb=c;break;default:a.g("unknown cs option");return}void 0!==c&&oc(a.b);a.g("checksums "+(a.b.C.eb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Fc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.ab.toFixed(2)+"Mhz")+" ("+
function Gf(a,b){var c;switch(b){case "IF":c=a.b.ta&512;break;case "SF":c=dd(a.b);break;case "ZF":c=cd(a.b);break;case "AF":c=bd(a.b);break;case "PF":c=ad(a.b);break;case "CF":c=Zc(a.b);break;default:c=0}return b.charAt(0)+(c?"1":"0")+" "}function Hf(a,b){return Pe[b]+"="+vf(a,b)+" "}function If(a){return Hf(a,7)+Hf(a,8)+Hf(a,9)+Hf(a,10)+Hf(a,11)+Gf(a,"IF")+Gf(a,"SF")+Gf(a,"ZF")+Gf(a,"AF")+Gf(a,"PF")+Gf(a,"CF")}l.bc=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Jf(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b<a.G.length;b++){var f=a.G[b],h=f.F>>>0,g=f.qd;if(e>=h&&e<h+g){e=oa(f.ac,[e-h],a.bc);0<=e?Kf(a,b,e,d):c&&(e=~e,Kf(a,b,e-1,d),Kf(a,b,e,d));break}}return d}function Kf(a,b,c,d){var e={},f=a.G[b].ac,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.G[b].Pa[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Lf(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.K)if("clear"==b){for(c=0;c<a.K.length;c++)a.K[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.K.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.style?Ne:Oe;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Ea[h][0]]+" ").substr(0,5)+" ("+da(h)+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function Mf(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ge(a)||a.g("no variables"),!0;if(!c[2])return Ge(a,c[1]);if(!c[3])return delete a.da[c[1]],!0;var d=ze(a,c[3]);return void 0!==d?(a.da[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Nf(a,b,c){var d=null;if(b=De(a,b,!0)){var e=Jf(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.F-e[1])&&(h=" + "+t(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.F)&&(h=" - "+t(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function Of(a,b){switch(b[1]){case "8080":a.style=Ie;break;case "8086":a.style=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.gb=c;break;case "start":a.b.sb=c;break;case "stop":a.b.hb=c;break;default:a.g("unknown cs option");return}void 0!==c&&oc(a.b);a.g("checksums "+(a.b.C.eb?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(Fc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.ab.toFixed(2)+"Mhz")+" ("+
a.b.Qa+"x)");return;case "?":a.g("debugger options:");a.g("\t8080\t\tselect 8080-style mnemonics");a.g("\t8086\t\tselect 8086-style mnemonics");a.g("\tcs int #\tset checksum cycle interval to #");a.g("\tcs start #\tset checksum cycle start count to #");a.g("\tcs stop #\tset checksum cycle stop count to #");a.g("\tsp #\t\tset speed multiplier to #");break;default:if(b[1]){a.g("unknown option: "+b[1]);return}}a.g(a.style+"-style mnemonics enabled")}
function zf(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=ze(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.i=g&255;break;case "B":d.S=g&255;break;case "BC":d.S=g>>8&255;case "C":d.T=g&255;break;case "D":d.U=
g&255;break;case "DE":d.U=g>>8&255;case "E":d.V=g&255;break;case "H":d.W=g&255;break;case "HL":d.W=g>>8&255;case "L":d.Y=g&255;break;case "SP":d.na=g&65535;break;case "PC":H(d,g);a.M=W(d.R);break;case "PS":Qc(d,g);break;case "PSW":Qc(d,g&255|d.ta&-256);d.i=g>>8;break;case "CF":d.ca=g?d.ca|256:d.ca&255;break;case "PF":g?ad(d)||(d.fa^=1):ad(d)&&(d.fa^=1);break;case "AF":d.xa=g?~d.fa&16|d.xa&-17:d.fa&16|d.xa&-17;break;case "ZF":d.ca=g?d.ca&-256:d.ca|255;break;case "SF":g?dd(d)||(d.fa^=192):dd(d)&&(d.fa^=
192);break;case "IF":d.ta=g?d.ta|512:d.ta&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}Cc(d);a.g("updated registers:")}a.g(Jf(a));c&&(a.M=W(d.R),Af(a,Z(a.M.F)))}}function Qf(a,b){b=ma(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(xf(a,c[2])):ze(a,b,!0)}function Rf(a,b,c){var d="t"!=b;c=Be(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ba(c,function(){return kb(a,!0)&&a.jb(e,d,!1)},function(){Cc(a.b);kb(a,!1)})}
function Af(a,b,c,d){if(b=De(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=De(a,c,!0);if(!d||d.F<b.F)return;e=d.F-b.F;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=lb(a,!1)||a.P?a.J:null;var h=null!=f?"cycles":null,g=Kf(a,b),k=b.F;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=Gf(a,b,h,f);a.g(f);a.M=b;e-=b.F-k;c++}}}
function We(a,b,c,d){if(c)if(b){0>a.I&&a.w.length&&(a.I=0);if(0>a.I||b!=a.w[a.I])a.w.splice(0,0,b),a.I=0;a.I--}else a.ba?b="end":b=a.w[a.I+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(ma(b.substring(c,f))),c=f+1}}return a}
function Ff(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.ba&&(a.g("ended assemble at "+Z(a.aa.F)),a.M=a.aa,a.ba=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ia=null;if(mb(a)&&0<b.length){a.ba&&(b="a "+Z(a.aa.F)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var p=De(a,f[1],!0);if(p)if(a.aa=
p,void 0===f[2])a.g("begin assemble at "+Z(p.F)),a.ba=!0,Cc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var x=0;x<q.length;x++)a.ua(p,q[x],1);a.g(Gf(a,a.aa))}}break;case "b":a:{var u=f[0],r=f[1],B=b;if("?"==r)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var y=u.charAt(1);if("l"==y){var X=0,X=X+Ef(a,a.j),X=X+Ef(a,a.O);(X+=Ef(a,a.D))||a.g("no breakpoints")}else if("n"==y)a.ha=Be(a,r),a.g("break after "+a.ha+" instruction(s)");else if(void 0===r)a.g("missing breakpoint address");else{var A=W();if("*"!=r&&(A=De(a,r,!0),!A))break a;r=t(A.F);"c"==y?null==A.F?(Je(a),a.g("all breakpoints cleared")):Cf(a,a.j,A)||Cf(a,a.O,A)||
Cf(a,a.D,A)||a.g("breakpoint missing: "+Z(A.F)):"i"==y?a.g("breakpoint "+(Eb(a.u,A.F)?"enabled":"cleared")+": port "+r+" (input)"):"o"==y?a.g("breakpoint "+(Rb(a.u,A.F)?"enabled":"cleared")+": port "+r+" (output)"):null!=A.F&&(Ve(a,A,B),"p"==y?a.Ya(a.j,A):"r"==y?a.Ya(a.O,A):"w"==y?a.Ya(a.D,A):a.g("unknown breakpoint command: "+y))}}}break;case "c":a.Fa&&(a.Fa.value="");break;case "d":a:{var Q,ba=f[0],Y=f[1],ua=f[2],Fb=f[3];if("?"==Y){var Fa="";for(Q in sb)a.va[Q]&&(Fa&&(Fa+=","),Fa+=Q);Fa+=",state,symbols";
a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");Fa.length&&a.g("dump extension commands:\n\t"+Fa)}else if("state"==Y){var Xe=Sf(a.B,!0);"console"==ua?console.log(Xe):(a.Fa&&(a.Fa.value=""),a.g(Xe))}else if("symbols"==Y)for(var md=0;md<a.G.length;md++){var nd=a.G[md],nb;for(nb in nd.Pa)if("."!=nb.charAt(0)){var Ye=nd.Pa[nb].o;
if(void 0!==Ye){var Ze=nd.Pa[nb].l;Ze&&(nb=Ze);a.g(Z(Ye)+" "+nb)}}}else{if("d"==ba){for(Q in sb)if(f[1]==Q){var $e=a.va[Q];$e?(f.shift(),f.shift(),$e(f)):a.g("no dump registered for "+Y);break a}Y||(ba=a.qb||"db")}else a.qb=ba;if("dh"==ba){var af=Y,bf=ua,cf="",df=0,ca=a.ea,Ga=a.L;if(Ga.length){var ia=+af||a.$a,ob=+bf||10;isNaN(ia)?ia=ob:cf="more ";ia>Ga.length&&(a.g("note: only "+Ga.length+" available"),ia=Ga.length);ca-=ia;0>ca&&(null==Ga[Ga.length-1].F?(ia=ca+ia,ca=0):ca+=Ga.length);var od=[];"call"==
bf&&(ob=1E5,od=["CALL"]);for(void 0!==af&&a.g(ia+" instructions earlier:");0<ob&&ca!=a.ea;){var ef=Ga[ca++];if(null==ef.F)break;var Jb=W(ef.F),kg=ia--,ff=Gf(a,Jb,"history",kg);(!od.length||0<=ff.indexOf(od[0]))&&a.g(ff);Jb.Hb&&(ca+=Jb.Hb,ob-=Jb.Hb,ia-=Jb.Hb);ca>=Ga.length&&(ca=0);a.$a=ia;df++;ob--}}df||(a.g("no "+cf+"history available"),a.$a=void 0)}else{var qc=De(a,Y);if(qc){var rc=0;ua&&("l"==ua.charAt(0)&&(ua=ua.substr(1)||Fb),rc=Be(a,ua)>>>0,65536<rc&&(rc=65536));for(var Xa="",sc="dd"==ba?4:"dw"==
ba?2:1,tc=sc*rc||128,lg=tc+15>>4||1;lg--&&0<tc;){var uc=0,pd=0,Kb,Lb="",qd="",Y=Z(qc.F);for(Kb=16;0<Kb&&0<tc;Kb--){var vc=a.$(qc,1),uc=uc|vc<<(pd++<<3);pd==sc&&(Lb+=n(uc,2*sc),Lb+=1==sc?9==Kb?"-":" ":" ",uc=pd=0);qd+=32<=vc&&128>vc?String.fromCharCode(vc):".";tc--}Xa&&(Xa+="\n");Xa+=Y+" "+Lb+(0==Kb?" "+qd:"")}Xa&&a.g(Xa);a.Sa=qc}}}}break;case "e":if("else"==f[0])break;var wc=1,gf=255,hf=a.$,jf=a.ua;"ew"==f[0]&&(wc=2,gf=65535,hf=a.Ra,jf=a.Fb);var kf=wc<<1,lf=f[1];if(null==lf)a.g("edit memory commands:"),
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var xc=De(a,lf);if(xc)for(var yc=2;yc<f.length;yc++){var Mb=ze(a,f[yc]);if(void 0===Mb){a.g("unrecognized value: "+f[yc]);break}Mb&~gf&&a.g("warning: "+n(Mb)+" exceeds "+wc+"-byte value");var mg=hf.call(a,xc);a.g("changing "+Z(xc.F)+" from 0x"+n(mg,kf)+" to 0x"+n(Mb,kf));jf.call(a,xc,Mb,wc)}}break;case "f":Mf(a,f[1]);break;case "g":a:{var mf=f[1],ng=b;if(void 0!==mf){var rd=De(a,mf,!0);if(!rd)break a;
Ve(a,rd,ng);a.Ya(a.j,rd,!0)}a.bb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var sd;if(a.C.za)sd="halting",a.pa();else{if(lb(a,!0))break a;sd="already halted"}c||a.g(sd)}break;case "i":if("if"==f[0]){var td;var Nb=b.substr(2),Nb=ma(Nb);ze(a,Nb)?(c||a.g("true: "+Nb),td=!0):(c||a.g("false: "+Nb),td=!1);td||(d=!1);break}if("int"==f[0]){var zc;var og=f[1];if(a.b.ta&512){var ud=ze(a,og);null==ud?zc=!1:(a.g("requesting interrupt level "+ud),Gd(a.b,ud),zc=!0)}else a.g("interrupts disabled (use rif=1 to enable)"),
zc=!1;zc||(d=!1);break}var vd=f[1];if(vd&&"?"!=vd){var wd=Be(a,vd);if(void 0!==wd){var pg=Hb(a.u,wd);a.g(t(wd)+": "+da(pg))}}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 qg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var xd=0,nf=W(),Ob=W(a.b.na);for(a.g("stack trace for "+Z(Ob.F));10>xd;){for(var Ya=null,rg=256;65536>Ob.F>>>0;){nf.F=
a.Ra(Ob,2);if(null==Ob.F||!rg--)break;for(var sg=a,Ac=nf,of=null,Pb=Ac.F,pf=Pb,yd=1;6>=yd&&Pb;yd++){if(2<yd){Ac.F=Pb;var Bc=Gf(sg,Ac);if(0<=Bc.indexOf("CALL")){var qf=Bc.indexOf(" ");if(Pb+(Bc.indexOf(" ",qf+1)-qf-1)/2==pf){of=Bc;break}}}Pb--}Ac.F=pf;if(Ya=of)break}if(!Ya||null==Ya)break;var rf=null;if("ks"==qg){var sf=Ya.match(/[0-9A-F]+$/);sf&&(rf=Of(a,sf[0]))}Ya=la(Ya,50)+" ;"+(rf||"stack="+Z(Ob.F));a.g(Ya);xd++}xd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Of(a,f[1],!0);
break}break;case "m":a:{var Ha,Ia=null,N=f[1];"?"==N&&(N=void 0);if(void 0!==N){var Ra=0;if("all"==N)Ra=1878917119,N=null;else if("on"==N)Ia=!0,N=null;else if("off"==N)Ia=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ha in sb)if(N==Ha){Ra=sb[Ha];Ia=!!(a.sa&Ra);break}if(!Ra){a.g("unknown message category: "+N);break a}}if(Ra)if("on"==f[2])a.sa|=Ra,Ia=!0;else if("off"==f[2]&&(a.sa&=~Ra,Ia=!1,1073741824==Ra)){for(var zd=0;zd<a.ka.length;zd++)a.g(a.ka[zd]);a.ka=[]}}var tg=0,Sa="";for(Ha in sb)if(!N||
N==Ha){var ug=!!(a.sa&sb[Ha]);if(null===Ia||Ia==ug)Sa&&(Sa+=","),++tg%10||(Sa+="\n\t"),"key"==Ha&&(Ha="keys"),Sa+=Ha}void 0===N&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ia?Ia?"messages on: ":"messages off: ":"message categories:\n\t")+(Sa||"none"));Ke(a)}break;case "o":var Ad=f[1],vg=f[2];if(Ad&&"?"!=Ad){var Bd=Be(a,Ad,"port #"),Cd=Be(a,vg);void 0!==Bd&&void 0!==Cd&&(Tb(a.u,Bd,Cd),a.g(t(Bd)+": "+da(Cd)))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),
a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){Qf(a,b.substr(5));break}var tf="pr"==f[0]?1:0,wg=1+tf;if(a.P)a.g("step in progress");else{var Dd=W(a.b.R);switch(a.$(Dd)){case 205:a.P=wg,Se(Dd,3)}a.P?(a.Ya(a.j,Dd,!0),a.bb()||(a.B&&a.B.vb(),a.P=0)):Rf(a,tf?"tr":"t")}break;case "r":if("reset"==b){a.B&&a.B.reset();break}zf(a,f);break;case "s":Pf(a,f);break;case "t":Rf(a,f[0],f[1]);break;case "u":Af(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Nf(a,b.substr(3))||
(d=!1);break}a.g("PC8080 version 1.30.0 ("+a.b.lc+",RELEASE"+(qb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ta());break;case "?":if(f[1]){Qf(a,b.substr(1));break}var Qb="commands:",Ed;for(Ed in Me)Qb+="\n"+la(Ed,9)+Me[Ed];Hd(a)||(Qb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Qb);break;default:a.g("unknown command: "+b),d=!1}}}catch(uf){a.g("debugger error: "+(uf.stack||uf.message)),d=!1}return d}function pc(a,b,c){b=We(a,b,c);for(var d in b)if(!Ff(a,b[d]))return!1;return!0}
function yf(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=ze(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.i=g&255;break;case "B":d.S=g&255;break;case "BC":d.S=g>>8&255;case "C":d.T=g&255;break;case "D":d.U=
g&255;break;case "DE":d.U=g>>8&255;case "E":d.V=g&255;break;case "H":d.W=g&255;break;case "HL":d.W=g>>8&255;case "L":d.Z=g&255;break;case "SP":d.na=g&65535;break;case "PC":H(d,g);a.M=W(d.R);break;case "PS":Qc(d,g);break;case "PSW":Qc(d,g&255|d.ta&-256);d.i=g>>8;break;case "CF":d.ca=g?d.ca|256:d.ca&255;break;case "PF":g?ad(d)||(d.fa^=1):ad(d)&&(d.fa^=1);break;case "AF":d.xa=g?~d.fa&16|d.xa&-17:d.fa&16|d.xa&-17;break;case "ZF":d.ca=g?d.ca&-256:d.ca|255;break;case "SF":g?dd(d)||(d.fa^=192):dd(d)&&(d.fa^=
192);break;case "IF":d.ta=g?d.ta|512:d.ta&-513;break;default:a.g("unknown register: "+e);return}if(!h){a.g("invalid value: "+f);return}qc(d);a.g("updated registers:")}a.g(If(a));c&&(a.M=W(d.R),zf(a,Z(a.M.F)))}}function Pf(a,b){b=ma(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(wf(a,c[2])):ze(a,b,!0)}function Qf(a,b,c){var d="t"!=b;c=Be(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ba(c,function(){return kb(a,!0)&&a.jb(e,d,!1)},function(){qc(a.b);kb(a,!1)})}
function zf(a,b,c,d){if(b=De(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=De(a,c,!0);if(!d||d.F<b.F)return;e=d.F-b.F;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=lb(a,!1)||a.X?a.J:null;var h=null!=f?"cycles":null,g=Jf(a,b),k=b.F;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var m=g[0]+":";g[2]&&(m+=" "+g[2]);a.g(m)}g[3]&&(h=g[3],f=null);f=Ff(a,b,h,f);a.g(f);a.M=b;e-=b.F-k;c++}}}
l.Db=function(a,b,c){if(b)if(a){0>this.j&&this.w.length&&(this.j=0);if(0>this.j||a!=this.w[this.j])this.w.splice(0,0,a),this.j=0;this.j--}else this.P?a="end":a=this.w[this.j+1];b=[];if(a){a=a.toLowerCase().replace(/""/g,"'");var d=0,e=null;c=c||";";for(var f=0;f<=a.length;f++){var h=a.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)b.push(ma(a.substring(d,f))),d=f+1}}return b};
function Ef(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.P&&(a.g("ended assemble at "+Z(a.ba.F)),a.M=a.ba,a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ia=null;if(mb(a)&&0<b.length){a.P&&(b="a "+Z(a.ba.F)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var m=h.charAt(k);if("?"==g||"r"==g||"a">m||"z"<m){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var p=De(a,f[1],!0);if(p)if(a.ba=
p,void 0===f[2])a.g("begin assemble at "+Z(p.F)),a.P=!0,qc(a.b);else{var q;a.g("not supported yet");q=[];if(q.length){for(var x=0;x<q.length;x++)a.ua(p,q[x],1);a.g(Ff(a,a.ba))}}break;case "b":a:{var u=f[0],r=f[1],B=b;if("?"==r)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),a.g("\tbc [a]\tclear breakpoint at addr [a]"),
a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var y=u.charAt(1);if("l"==y){var X=0,X=X+Df(a,a.H),X=X+Df(a,a.O);(X+=Df(a,a.D))||a.g("no breakpoints")}else if("n"==y)a.ha=Be(a,r),a.g("break after "+a.ha+" instruction(s)");else if(void 0===r)a.g("missing breakpoint address");else{var A=W();if("*"!=r&&(A=De(a,r,!0),!A))break a;r=t(A.F);"c"==y?null==A.F?(Je(a),a.g("all breakpoints cleared")):Bf(a,a.H,A)||Bf(a,a.O,A)||Bf(a,a.D,A)||a.g("breakpoint missing: "+Z(A.F)):
"i"==y?a.g("breakpoint "+(Eb(a.u,A.F)?"enabled":"cleared")+": port "+r+" (input)"):"o"==y?a.g("breakpoint "+(Rb(a.u,A.F)?"enabled":"cleared")+": port "+r+" (output)"):null!=A.F&&(Ve(a,A,B),"p"==y?a.Ya(a.H,A):"r"==y?a.Ya(a.O,A):"w"==y?a.Ya(a.D,A):a.g("unknown breakpoint command: "+y))}}}break;case "c":a.Fa&&(a.Fa.value="");break;case "d":a:{var Q,ba=f[0],Y=f[1],ua=f[2],Fb=f[3];if("?"==Y){var Fa="";for(Q in sb)a.va[Q]&&(Fa&&(Fa+=","),Fa+=Q);Fa+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");
a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");Fa.length&&a.g("dump extension commands:\n\t"+Fa)}else if("state"==Y){var We=Rf(a.B,!0);"console"==ua?console.log(We):(a.Fa&&(a.Fa.value=""),a.g(We))}else if("symbols"==Y)for(var ld=0;ld<a.G.length;ld++){var md=a.G[ld],nb;for(nb in md.Pa)if("."!=nb.charAt(0)){var Xe=md.Pa[nb].o;if(void 0!==Xe){var Ye=md.Pa[nb].l;Ye&&(nb=Ye);a.g(Z(Xe)+" "+nb)}}}else{if("d"==
ba){for(Q in sb)if(f[1]==Q){var Ze=a.va[Q];Ze?(f.shift(),f.shift(),Ze(f)):a.g("no dump registered for "+Y);break a}Y||(ba=a.qb||"db")}else a.qb=ba;if("dh"==ba){var $e=Y,af=ua,bf="",cf=0,ca=a.ea,Ga=a.L;if(Ga.length){var ia=+$e||a.$a,ob=+af||10;isNaN(ia)?ia=ob:bf="more ";ia>Ga.length&&(a.g("note: only "+Ga.length+" available"),ia=Ga.length);ca-=ia;0>ca&&(null==Ga[Ga.length-1].F?(ia=ca+ia,ca=0):ca+=Ga.length);var nd=[];"call"==af&&(ob=1E5,nd=["CALL"]);for(void 0!==$e&&a.g(ia+" instructions earlier:");0<
ob&&ca!=a.ea;){var df=Ga[ca++];if(null==df.F)break;var Jb=W(df.F),jg=ia--,ef=Ff(a,Jb,"history",jg);(!nd.length||0<=ef.indexOf(nd[0]))&&a.g(ef);Jb.Ib&&(ca+=Jb.Ib,ob-=Jb.Ib,ia-=Jb.Ib);ca>=Ga.length&&(ca=0);a.$a=ia;cf++;ob--}}cf||(a.g("no "+bf+"history available"),a.$a=void 0)}else{var rc=De(a,Y);if(rc){var sc=0;ua&&("l"==ua.charAt(0)&&(ua=ua.substr(1)||Fb),sc=Be(a,ua)>>>0,65536<sc&&(sc=65536));for(var Xa="",tc="dd"==ba?4:"dw"==ba?2:1,uc=tc*sc||128,kg=uc+15>>4||1;kg--&&0<uc;){var vc=0,od=0,Kb,Lb="",
pd="",Y=Z(rc.F);for(Kb=16;0<Kb&&0<uc;Kb--){var wc=a.$(rc,1),vc=vc|wc<<(od++<<3);od==tc&&(Lb+=n(vc,2*tc),Lb+=1==tc?9==Kb?"-":" ":" ",vc=od=0);pd+=32<=wc&&128>wc?String.fromCharCode(wc):".";uc--}Xa&&(Xa+="\n");Xa+=Y+" "+Lb+(0==Kb?" "+pd:"")}Xa&&a.g(Xa);a.Sa=rc}}}}break;case "e":if("else"==f[0])break;var xc=1,ff=255,gf=a.$,hf=a.ua;"ew"==f[0]&&(xc=2,ff=65535,gf=a.Ra,hf=a.Gb);var jf=xc<<1,kf=f[1];if(null==kf)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 yc=De(a,kf);if(yc)for(var zc=2;zc<f.length;zc++){var Mb=ze(a,f[zc]);if(void 0===Mb){a.g("unrecognized value: "+f[zc]);break}Mb&~ff&&a.g("warning: "+n(Mb)+" exceeds "+xc+"-byte value");var lg=gf.call(a,yc);a.g("changing "+Z(yc.F)+" from 0x"+n(lg,jf)+" to 0x"+n(Mb,jf));hf.call(a,yc,Mb,xc)}}break;case "f":Lf(a,f[1]);break;case "g":a:{var lf=f[1],mg=b;if(void 0!==lf){var qd=De(a,lf,!0);if(!qd)break a;Ve(a,qd,mg);a.Ya(a.H,qd,!0)}a.bb(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;
case "h":a:{var rd;if(a.C.za)rd="halting",a.pa();else{if(lb(a,!0))break a;rd="already halted"}c||a.g(rd)}break;case "i":if("if"==f[0]){var sd;var Nb=b.substr(2),Nb=ma(Nb);ze(a,Nb)?(c||a.g("true: "+Nb),sd=!0):(c||a.g("false: "+Nb),sd=!1);sd||(d=!1);break}if("int"==f[0]){var Ac;var ng=f[1];if(a.b.ta&512){var td=ze(a,ng);null==td?Ac=!1:(a.g("requesting interrupt level "+td),Gd(a.b,td),Ac=!0)}else a.g("interrupts disabled (use rif=1 to enable)"),Ac=!1;Ac||(d=!1);break}var ud=f[1];if(ud&&"?"!=ud){var vd=
Be(a,ud);if(void 0!==vd){var og=Hb(a.u,vd);a.g(t(vd)+": "+da(og))}}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 pg=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var wd=0,mf=W(),Ob=W(a.b.na);for(a.g("stack trace for "+Z(Ob.F));10>wd;){for(var Ya=null,qg=256;65536>Ob.F>>>0;){mf.F=a.Ra(Ob,2);if(null==Ob.F||!qg--)break;for(var rg=a,Bc=mf,nf=
null,Pb=Bc.F,of=Pb,xd=1;6>=xd&&Pb;xd++){if(2<xd){Bc.F=Pb;var Cc=Ff(rg,Bc);if(0<=Cc.indexOf("CALL")){var pf=Cc.indexOf(" ");if(Pb+(Cc.indexOf(" ",pf+1)-pf-1)/2==of){nf=Cc;break}}}Pb--}Bc.F=of;if(Ya=nf)break}if(!Ya||null==Ya)break;var qf=null;if("ks"==pg){var rf=Ya.match(/[0-9A-F]+$/);rf&&(qf=Nf(a,rf[0]))}Ya=la(Ya,50)+" ;"+(qf||"stack="+Z(Ob.F));a.g(Ya);wd++}wd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Nf(a,f[1],!0);break}break;case "m":a:{var Ha,Ia=null,N=f[1];"?"==N&&(N=void 0);
if(void 0!==N){var Sa=0;if("all"==N)Sa=1878917119,N=null;else if("on"==N)Ia=!0,N=null;else if("off"==N)Ia=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ha in sb)if(N==Ha){Sa=sb[Ha];Ia=!!(a.sa&Sa);break}if(!Sa){a.g("unknown message category: "+N);break a}}if(Sa)if("on"==f[2])a.sa|=Sa,Ia=!0;else if("off"==f[2]&&(a.sa&=~Sa,Ia=!1,1073741824==Sa)){for(var yd=0;yd<a.ka.length;yd++)a.g(a.ka[yd]);a.ka=[]}}var sg=0,Ta="";for(Ha in sb)if(!N||N==Ha){var tg=!!(a.sa&sb[Ha]);if(null===Ia||Ia==
tg)Ta&&(Ta+=","),++sg%10||(Ta+="\n\t"),"key"==Ha&&(Ha="keys"),Ta+=Ha}void 0===N&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==Ia?Ia?"messages on: ":"messages off: ":"message categories:\n\t")+(Ta||"none"));Ke(a)}break;case "o":var zd=f[1],ug=f[2];if(zd&&"?"!=zd){var Ad=Be(a,zd,"port #"),Bd=Be(a,ug);void 0!==Ad&&void 0!==Bd&&(Tb(a.u,Ad,Bd),a.g(t(Ad)+": "+da(Bd)))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");
break;case "p":if("print"==f[0]){Pf(a,b.substr(5));break}var sf="pr"==f[0]?1:0,vg=1+sf;if(a.X)a.g("step in progress");else{var Cd=W(a.b.R);switch(a.$(Cd)){case 205:a.X=vg,Se(Cd,3)}a.X?(a.Ya(a.H,Cd,!0),a.bb()||(a.B&&a.B.vb(),a.X=0)):Qf(a,sf?"tr":"t")}break;case "r":if("reset"==b){a.B&&a.B.reset();break}yf(a,f);break;case "s":Of(a,f);break;case "t":Qf(a,f[0],f[1]);break;case "u":zf(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Mf(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.30.0 ("+a.b.mc+",RELEASE"+
(qb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(ta());break;case "?":if(f[1]){Pf(a,b.substr(1));break}var Qb="commands:",Dd;for(Dd in Me)Qb+="\n"+la(Dd,9)+Me[Dd];Hd(a)||(Qb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Qb);break;default:a.g("unknown command: "+b),d=!1}}}catch(tf){a.g("debugger error: "+(tf.stack||tf.message)),d=!1}return d}function pc(a,b,c){b=a.Db(b,c);for(var d in b)if(!Ef(a,b[d]))return!1;return!0}
Ma(function(){for(var a=D(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=C(c),d=new He(d);gb(d,c)}});
function Tf(a,b,c){w.call(this,"Computer",a,Tf,67108864);this.C.wa=!1;Uf(this,b);this.O=mc(this,"autoPower",a);this.w=0;this.da=a.busWidth||a.buswidth;this.B=Vf;this.L=null;this.K=this.aa=!1;this.ea=mc(this,"url")||"";(Math.random()+.1).toString(36);this.j=Wf(this);if(this.b=fb("CPU",this.id)){this.H=fb("Debugger",this.id);this.G=[];for(b=null;b=ub(this,"Video",b);)this.G.push(b);this.u=new wb({id:this.Ab+".bus",busWidth:this.da},this.b,this.H);var d,e=db(this.id);if((this.I=fb("Panel",this.id))&&
this.I.Fa)for(b=0;b<e.length;b++)d=e[b],d.ja=this.I.ja,d.g=this.I.g,d.Fa=this.I.Fa;this.g("PC8080 v1.30.0\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.Oa&&d.Oa(this,this.u,this.b,this.H);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.J=d:this.B=parseInt(d,10));var f;if(a=mc(this,"state")||(f=!0,a.state))b=this.P=a,f||(this.K=!0,this.B=Vf),this.B&&(this.M=new Tc(this,"1.30.0"),Xf(this.M)?
b=null:delete this.M);!b&&this.B&&(b=Yf(this))&&(this.K=!0);if(b){var h=this;sa(b,null,!0,function(a,b,c){c?(h.J=null,h.K=!1,h.ja("Unable to load machine state from server (error "+c+(b?": "+ma(b):"")+")")):(h.L=b,h.aa=!0);F(h)})}else F(this);this.N.power||(this.O=!0);!c&&this.O&&Zf(this,this.tb)}else v("Unable to find CPU component")}z(Tf);var Vf=0;function Uf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.ba=b}
function mc(a,b,c){var d=b.toLowerCase(),d=Va[b]||Va[d];void 0===d&&a.ba&&(d=a.ba[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Zf(a,b,c){for(var d=db(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!mb(f)){mb(f,function(){Zf(a,b,c)});return}}b.call(a,c)}
function $f(a,b){var c=new Tc(a,"1.30.0","validate");if(Xf(c)&&ag(c)){var d=bg(c,"timestamp"),e=b?bg(b,"timestamp"):"unknown";d!=e&&(a.ja("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=Tf.prototype;
m.tb=function(a){void 0===a&&(a=this.B||(this.L?1:Vf));if(!this.w){this.w++;var b=!1,c=!1;this.Z=!1;var d=this.M||new Tc(this,"1.30.0");if(-1==a)b=!0;else if(a>Vf){if(Xf(d,this.L)){this.D=new Tc(this,"1.30.0","failsafe");Xf(this.D)&&(cg(this,d),a=2,dg(this.D));I(this.D,"timestamp",qa());eg(this.D);var e=this.B&&!this.K;if(1==a||va("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=ag(d)){var f=bg(d,"code"),h=bg(d,"data");f&&("ok"==f?Xf(d,h):("error"==f&&
"no machine state"!=h?(this.ja("Error: "+h),"unable to verify user"==h&&(za("user",""),this.j=null)):this.g(f+": "+h),dg(d),Xf(d)?(c=ag(d),e=!0):c=!1))}e&&$f(this,c?d:null)}else 2==a&&d.clear()}else $f(this);delete this.L;delete this.M}e=db(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=fg(this,h,d,b,c));b=[d,a,c];-1!=a?Zf(this,this.cc,b):this.cc(b)}};
function fg(a,b,c,d,e){if(!b.C.wa){b.C.wa=!0;if(b.Da){var f=null;e&&((f=bg(c,b.id))||(f=bg(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Da(f,d)&&f&&(v("Unable to restore state for "+b.type),a.P&&!a.aa?(c.clear(),a.B=Vf,window&&window.location.reload()):a.Z=!0,b.Da(null),e=!1)}if(!d&&b.fc)for(a=b.fc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.cc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga=!0;this.C.wa=!0;var d=this.N.power;d&&(d.textContent="Shutdown");this.b&&(fg(this,this.b,b,c,a),this.b.nb());this.Z&&(cg(this,b),b.clear());!c&&this.D&&(this.D.clear(),delete this.D);this.w=0};
function cg(a,b){if(va("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.j||"",d=b.toString(),e={app:"PC8080",ver:"1.30.0"};e.url=a.ea;e.user=c;e.type="bug";e.data=d;sa("http://www.pcjs.org/api/v1/report",e,!0)}}
function Sf(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new Tc(a,"1.30.0"),h=new Tc(a,"1.30.0","validate"),g=qa();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.30.0");I(f,"url",window?window.location.href:null);I(f,"browser",ta());a.b&&a.b.Ha&&(c&&a.b.pa(),d=a.b.Ha(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.C.wa=!1,!1===d&&(e=null)));for(var g=db(a.id),k=0;k<g.length;k++){var l=g[k];l.C.wa&&(l.Ha&&(d=l.Ha(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.C.wa=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.j&&gg(a,a.j,f.toString()),eg(h)&&eg(f)||(e=null,d=g=!0)):a.B&&(d=!0,g=3==a.B),d&&f.clear(g)):e=f.toString());c&&(a.C.wa=!1,b=a.N.power)&&(b.textContent="Power");a.w=0;return e}m.reset=function(){this.u&&this.u.reset&&(ib(this,"Resetting "+this.u.type),this.u.reset());for(var a=db(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.u&&c.reset&&(ib(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=db(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=db(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.oa=function(a,b,c){var d=this;switch(b){case "power":return this.N[b]=c,c.onclick=function(){d.w||(d.C.wa?Sf(d,!1,!0):Zf(d,d.tb))},!0;case "reset":return this.N[b]=c,c.onclick=function(){if(d.C.wa&&!d.w)if(d.B&&!d.J){var a=va("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Sf(d,a,!0);!a&&d.P?window&&window.location.reload():d.tb(Vf)}else d.reset(),d.b&&d.b.nb()},!0;case "save":if(ga()){c.parentNode.removeChild(c);break}this.N[b]=
c;c.onclick=function(){var a=Wf(d,!0);if(a){var b=!!(d.B&&!d.J||d.P),c=Sf(d,b);b?gg(d,a,c):d.ja("Resume disabled, machine state not saved")}};return!0}return!1};
function Wf(a,b){var c=a.j;c||(c=ya("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=hg(a,c))||a.ja("The user ID is invalid."))):b&&a.ja("Browser local storage is not available"));return c}
function hg(a,b){a.j=null;var c=sa(ha()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(za("user",c.data),a.j=c.data)}catch(e){v(e.message+" ("+d+")")}return a.j}function Yf(a){var b=null;a.j&&(b=ha()+"/api/v1/user?req=load&user="+a.j+"&state="+ig(a,"1.30.0"));return b}
function gg(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=ig(a,"1.30.0");d.data=c;b=sa(ha()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.ja("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.ja(c),za("user",""),a.j=null)}}
function ub(a,b,c){a=db(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.vb=function(a){if(this.G.length){var b=0,c=0;!a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.G[0];d.ia&&d.ia.focus();!a&&window&&window.scrollTo(b,c)}};m.Ia=function(a){this.b&&this.b.Ia(a);this.I&&this.I.Ia(a)};
Ma(function(){for(var a=D(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=C(c),c=D(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=C(f),h=new Tf(h,d,!0);gb(h,f);h.O&&Zf(h,h.tb)}});Da.show.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=C(a[b]);(c=fb("Computer",c.id))&&c.ga&&!c.C.wa&&c.tb(-1)}});
Da.exit.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=C(a[b]);(c=fb("Computer",c.id))&&c.C.wa&&Sf(c,!(!c.B||c.J),!0)}});function Tc(a,b,c){this.id=a.id;this.key=ig(a,b,c);this.H=a.H;dg(this,a.Hd)}function ig(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}
Tc.prototype={constructor:Tc,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){dg(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 dg(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function eg(a){var b=!0;if(xa()){var c=JSON.stringify(a[a.id]);za(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function ag(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){v(c.message||c),b=!1}return b}function Xf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:xa()&&(b=ya(a.key))?(a[a.id]=b,a.b=!0):!1}function bg(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}var jg=0;
function xg(a,b,c,d,e,f){e("Loading "+a+"...");sa(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):yg(g,a,b,c,d,e,f)})}
function yg(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){cb(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PC8080$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?zg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),
function Sf(a,b,c){w.call(this,"Computer",a,Sf,67108864);this.C.wa=!1;Tf(this,b);this.O=mc(this,"autoPower",a);this.w=0;this.da=a.busWidth||a.buswidth;this.B=Uf;this.L=null;this.K=this.aa=!1;this.ea=mc(this,"url")||"";(Math.random()+.1).toString(36);this.j=Vf(this);if(this.b=fb("CPU",this.id)){this.I=fb("Debugger",this.id);this.G=[];for(b=null;b=ub(this,"Video",b);)this.G.push(b);this.u=new wb({id:this.Ab+".bus",busWidth:this.da},this.b,this.I);var d,e=db(this.id);if((this.H=fb("Panel",this.id))&&
this.H.Fa)for(b=0;b<e.length;b++)d=e[b],d.ja=this.H.ja,d.g=this.H.g,d.Fa=this.H.Fa;this.g("PC8080 v1.30.0\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<e.length;b++)d=e[b],d.Oa&&d.Oa(this,this.u,this.b,this.I);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.J=d:this.B=parseInt(d,10));var f;if(a=mc(this,"state")||(f=!0,a.state))b=this.P=a,f||(this.K=!0,this.B=Uf),this.B&&(this.M=new Tc(this,"1.30.0"),Wf(this.M)?
b=null:delete this.M);!b&&this.B&&(b=Xf(this))&&(this.K=!0);if(b){var h=this;sa(b,null,!0,function(a,b,c){c?(h.J=null,h.K=!1,h.ja("Unable to load machine state from server (error "+c+(b?": "+ma(b):"")+")")):(h.L=b,h.aa=!0);F(h)})}else F(this);this.N.power||(this.O=!0);!c&&this.O&&Yf(this,this.tb)}else v("Unable to find CPU component")}z(Sf);var Uf=0;function Tf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.ba=b}
function mc(a,b,c){var d=b.toLowerCase(),d=Va[b]||Va[d];void 0===d&&a.ba&&(d=a.ba[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Yf(a,b,c){for(var d=db(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!mb(f)){mb(f,function(){Yf(a,b,c)});return}}b.call(a,c)}
function Zf(a,b){var c=new Tc(a,"1.30.0","validate");if(Wf(c)&&$f(c)){var d=ag(c,"timestamp"),e=b?ag(b,"timestamp"):"unknown";d!=e&&(a.ja("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}l=Sf.prototype;
l.tb=function(a){void 0===a&&(a=this.B||(this.L?1:Uf));if(!this.w){this.w++;var b=!1,c=!1;this.X=!1;var d=this.M||new Tc(this,"1.30.0");if(-1==a)b=!0;else if(a>Uf){if(Wf(d,this.L)){this.D=new Tc(this,"1.30.0","failsafe");Wf(this.D)&&(bg(this,d),a=2,cg(this.D));I(this.D,"timestamp",qa());dg(this.D);var e=this.B&&!this.K;if(1==a||va("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=$f(d)){var f=ag(d,"code"),h=ag(d,"data");f&&("ok"==f?Wf(d,h):("error"==f&&
"no machine state"!=h?(this.ja("Error: "+h),"unable to verify user"==h&&(za("user",""),this.j=null)):this.g(f+": "+h),cg(d),Wf(d)?(c=$f(d),e=!0):c=!1))}e&&Zf(this,c?d:null)}else 2==a&&d.clear()}else Zf(this);delete this.L;delete this.M}e=db(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=eg(this,h,d,b,c));b=[d,a,c];-1!=a?Yf(this,this.dc,b):this.dc(b)}};
function eg(a,b,c,d,e){if(!b.C.wa){b.C.wa=!0;if(b.Da){var f=null;e&&((f=ag(c,b.id))||(f=ag(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Da(f,d)&&f&&(v("Unable to restore state for "+b.type),a.P&&!a.aa?(c.clear(),a.B=Uf,window&&window.location.reload()):a.X=!0,b.Da(null),e=!1)}if(!d&&b.gc)for(a=b.gc.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
l.dc=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga=!0;this.C.wa=!0;var d=this.N.power;d&&(d.textContent="Shutdown");this.b&&(eg(this,this.b,b,c,a),this.b.nb());this.X&&(bg(this,b),b.clear());!c&&this.D&&(this.D.clear(),delete this.D);this.w=0};
function bg(a,b){if(va("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.j||"",d=b.toString(),e={app:"PC8080",ver:"1.30.0"};e.url=a.ea;e.user=c;e.type="bug";e.data=d;sa("http://www.pcjs.org/api/v1/report",e,!0)}}
function Rf(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new Tc(a,"1.30.0"),h=new Tc(a,"1.30.0","validate"),g=qa();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.30.0");I(f,"url",window?window.location.href:null);I(f,"browser",ta());a.b&&a.b.Ha&&(c&&a.b.pa(),d=a.b.Ha(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.C.wa=!1,!1===d&&(e=null)));for(var g=db(a.id),k=0;k<g.length;k++){var m=g[k];m.C.wa&&(m.Ha&&(d=m.Ha(b,c),"object"===typeof d&&I(f,m.id,d)),c&&(m.C.wa=!1,!1===d&&(e=null)))}e&&
(c?(g=d=!1,b?(a.j&&fg(a,a.j,f.toString()),dg(h)&&dg(f)||(e=null,d=g=!0)):a.B&&(d=!0,g=3==a.B),d&&f.clear(g)):e=f.toString());c&&(a.C.wa=!1,b=a.N.power)&&(b.textContent="Power");a.w=0;return e}l.reset=function(){this.u&&this.u.reset&&(ib(this,"Resetting "+this.u.type),this.u.reset());for(var a=db(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.u&&c.reset&&(ib(this,"Resetting "+c.type),c.reset())}};
l.start=function(a,b){for(var c=db(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};l.stop=function(a,b){for(var c=db(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
l.oa=function(a,b,c){var d=this;switch(b){case "power":return this.N[b]=c,c.onclick=function(){d.w||(d.C.wa?Rf(d,!1,!0):Yf(d,d.tb))},!0;case "reset":return this.N[b]=c,c.onclick=function(){if(d.C.wa&&!d.w)if(d.B&&!d.J){var a=va("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Rf(d,a,!0);!a&&d.P?window&&window.location.reload():d.tb(Uf)}else d.reset(),d.b&&d.b.nb()},!0;case "save":if(ga()){c.parentNode.removeChild(c);break}this.N[b]=
c;c.onclick=function(){var a=Vf(d,!0);if(a){var b=!!(d.B&&!d.J||d.P),c=Rf(d,b);b?fg(d,a,c):d.ja("Resume disabled, machine state not saved")}};return!0}return!1};
function Vf(a,b){var c=a.j;c||(c=ya("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=gg(a,c))||a.ja("The user ID is invalid."))):b&&a.ja("Browser local storage is not available"));return c}
function gg(a,b){a.j=null;var c=sa(ha()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(za("user",c.data),a.j=c.data)}catch(e){v(e.message+" ("+d+")")}return a.j}function Xf(a){var b=null;a.j&&(b=ha()+"/api/v1/user?req=load&user="+a.j+"&state="+hg(a,"1.30.0"));return b}
function fg(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=hg(a,"1.30.0");d.data=c;b=sa(ha()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.ja("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.ja(c),za("user",""),a.j=null)}}
function ub(a,b,c){a=db(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}l.vb=function(a){if(this.G.length){var b=0,c=0;!a&&window&&(b=window.scrollX,c=window.scrollY);var d=this.G[0];d.ia&&d.ia.focus();!a&&window&&window.scrollTo(b,c)}};l.Ia=function(a){this.b&&this.b.Ia(a);this.H&&this.H.Ia(a)};
Ma(function(){for(var a=D(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=C(c),c=D(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=C(f),h=new Sf(h,d,!0);gb(h,f);h.O&&Yf(h,h.tb)}});Da.show.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=C(a[b]);(c=fb("Computer",c.id))&&c.ga&&!c.C.wa&&c.tb(-1)}});
Da.exit.push(function(){for(var a=D(document,"pc8080","computer"),b=0;b<a.length;b++){var c=C(a[b]);(c=fb("Computer",c.id))&&c.C.wa&&Rf(c,!(!c.B||c.J),!0)}});function Tc(a,b,c){this.id=a.id;this.key=hg(a,b,c);this.I=a.I;cg(this,a.Id)}function hg(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}
Tc.prototype={constructor:Tc,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){cg(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 cg(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function dg(a){var b=!0;if(xa()){var c=JSON.stringify(a[a.id]);za(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function $f(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){v(c.message||c),b=!1}return b}function Wf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:xa()&&(b=ya(a.key))?(a[a.id]=b,a.b=!0):!1}function ag(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}var ig=0;
function wg(a,b,c,d,e,f){e("Loading "+a+"...");sa(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):xg(g,a,b,c,d,e,f)})}
function xg(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){cb(c,b,a);var g=b;g&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+g+'"}';"object"==typeof resources&&(g=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,"$1PC8080$2"),
a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(q){g=null,a=q.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?yg(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),
null)}
function zg(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");sa(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],h);zg(a,b,c)}})}else c(a,null)}
function Ag(a,b,c,d){function e(a){if(void 0===g){var b=h&&D(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ka(a))}function f(a){e("Error: "+a);k&&(--jg||Pa(!0));k=!1}var h,g,k=!0;jg++;bb[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));p.appendChild(q)}c||
(c="/versions/pc8080/1.30.0/components.xsl");l=function(d,g){g?xg(c,null,null,!1,e,function(d,k){if(k)if(cb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--jg||Pa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--jg||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)?xg(b,a,d,!0,e,l):yg(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(x){f(x.message)}return k}window.embedPC8080=function(a,b,c,d){Pa(!1);return Ag(a,b,c,d)};window.enableEvents=Pa;window.sendEvent=Qa;})();
function yg(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");sa(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],h);yg(a,b,c)}})}else c(a,null)}
function zg(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=ka(a))}function f(a){e("Error: "+a);k&&(--ig||Pa(!0));k=!1}var h,g,k=!0;ig++;bb[a]={};try{if(h=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=m:q.appendChild(document.createTextNode(m));p.appendChild(q)}c||
(c="/versions/pc8080/1.30.0/components.xsl");m=function(d,g){g?wg(c,null,null,!1,e,function(d,k){if(k)if(cb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=g.transformNode(k);m?(h.outerHTML=m,--ig||Pa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(k),(m=m.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(m,h),--ig||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)?wg(b,a,d,!0,e,m):xg(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(x){f(x.message)}return k}window.embedPC8080=function(a,b,c,d){Pa(!1);return zg(a,b,c,d)};window.enableEvents=Pa;window.sendEvent=Qa;})();

View file

@ -1,4 +1,4 @@
(function(){var k;function aa(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
(function(){var k;function aa(a){var b=16,c;if(a){b||(b=10);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 m(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){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=ea();return-1!==a.indexOf("pcjs.org",a.length-8)}
var fa={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}function ha(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var ia={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ja=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())}

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
(function(){var l,aa,ba={163840:[40,1,8],184320:[40,1,9],327680:[40,2,8],368640:[40,2,9],737280:[80,2,9],1228800:[80,2,15],1474560:[80,2,18],2949120:[80,2,36],21368320:[615,4,17]};
function ca(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function ca(a,b){var c;if(a){b||(b=10);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 ea(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 fa(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 ga(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function ha(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ia={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function ja(a){return a.replace(/[&<>"']/g,function(a){return ia[a]})}function ka(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
var la={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"},ma=Date.now||function(){return+new Date};

View file

@ -1,4 +1,4 @@
(function(){var m;function da(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(){var m;function da(a){var b=16,c;if(a){b||(b=10);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 ea(a){return"0x"+q(a,4)}function fa(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ja(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ka(){var a=la();return-1!==a.indexOf("pcjs.org",a.length-8)}
var ma={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function na(a){return a.replace(/[&<>"']/g,function(a){return ma[a]})}function oa(a,b){return(a+" ").slice(0,b)}function pa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function ta(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 ua=Date.now||function(){return+new Date};
function va(){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 wa(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}
@ -80,64 +80,63 @@ a&4&&(this.j=0);a&8&&(this.b=32768);break;default:switch(a){case 0:49152&this.I?
function Kc(a){t.call(this,"ROM",a,Kc);this.i=null;this.C=a.addr;this.j=a.size;this.G=a.writable;this.w=a.alias;this.D=a.file;this.J=fa(this.D);if(this.D){a=this.D;var b=ja(this.J);"json"!=b&&"hex"!=b&&(a=la()+"/api/v1/dump?file="+this.D+"&format=bytes&decimal=true");var c=this;xa(a,null,!0,function(a,b,f){Lc(c,a,b,f)})}}v(Kc);Kc.prototype.za=function(a,b,c,d){this.H=b;this.b=c;this.F=d;Mc(this)};
Kc.prototype.sa=function(){if(this.qa){if(this.F){var a=this.F,b=this.id,c=this.C,d=this.j,e=this.qa,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var n=f,k=[k>>>0,h],p=ta(n,k,a.hb);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.G.push({Kb:b,B:c,Eb:d,qa:e,fb:f})}delete this.qa}return!0};Kc.prototype.ra=function(){return!0};
function Lc(a,b,c,d){if(d)a.ea("Unable to load system ROM (error "+d+": "+b+")");else{ab(a.nb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.i=f;else if(h)for(a.i=Array(4*h.length),d=c=0;c<h.length;c++)a.i[d++]=h[c]&255,a.i[d++]=h[c]>>8&255,a.i[d++]=h[c]>>16&255,a.i[d++]=h[c]>>24&255;else a.i=e;a.qa=e.symbols;if(!a.i.length){r("Empty ROM: "+b);return}if(1==a.i.length){r(a.i[0]);return}}catch(g){a.ea("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.i=Array(b.length),e=0;e<b.length;e++)a.i[e]=da(b[e],16);Mc(a)}}
" ").replace(/ +$/,"").split(" "),a.i=Array(b.length),e=0;e<b.length;e++)a.i[e]=da(b[e]);Mc(a)}}
function Mc(a){if(!qb(a))if(!a.D)A(a);else if(a.i&&a.H){a.j||(a.j=a.i.length);if(a.i.length!=a.j)rb(a,"ROM size (0x"+q(a.i.length)+") does not match specified size ("+("0x"+q(a.j))+")");else{var b;b=a.C;if(xb(a.H,b,a.j,a.G?1:Rb)){var c;for(c=0;c<a.i.length;c++){var d=a.H,e=b+c;d.P[(e&d.j)>>>d.aa].Ia(e&d.i,a.i[c]&255,e)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.w?b.push(a.w):null!=a.w&&a.w.length&&(b=a.w);for(c=0;c<b.length;c++){for(var f=a,d=b[c],e=f.H,h=f.j,g=[],k=f.C>>>e.aa;0<h&&k<e.P.length;)g.push(e.P[k++]),
h-=e.la;e=f.H;f=f.j;h=0;for(d>>>=e.aa;0<f&&d<e.P.length;){k=g[h++];if(!k)break;e.P[d++]=k;f-=e.la}}delete a.i}}A(a)}}Qa(function(){for(var a=z(document,"pdp11","rom"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new Kc(d);mb(d,c)}});function Nc(a){t.call(this,"RAM",a,Nc);this.w=a.addr;this.j=a.size;this.i=!1}v(Nc);m=Nc.prototype;m.za=function(a,b,c,d){this.H=b;this.b=c;this.F=d;A(this)};m.sa=function(a,b){b||this.reset();return!0};m.ra=function(a){return a?this.save():!0};
m.reset=function(){!this.i&&this.j&&xb(this.H,this.w,this.j,1)&&(this.i=!0);this.i||r("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Qa(function(){for(var a=z(document,"pdp11","ram"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new Nc(d);mb(d,c)}});function Oc(a){t.call(this,"Keyboard",a,Oc,65536);A(this)}v(Oc);Oc.prototype.ha=function(){return!1};Oc.prototype.za=function(a,b,c,d){this.D=a;this.b=c;this.F=d;this.ja=null};
Qa(function(){for(var a=z(document,"pdp11","keyboard"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new Oc(d);mb(d,c)}});function Pc(a){t.call(this,"Debugger",a,Pc);this.R=this.ga=this.L=0;this.w=-1;this.j=[];this.V={}}v(Pc);var Qc={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
Qa(function(){for(var a=z(document,"pdp11","keyboard"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new Oc(d);mb(d,c)}});function Pc(a){t.call(this,"Debugger",a,Pc);this.R=this.ga=this.L=0;this.T=!1;this.w=-1;this.j=[];this.V={}}v(Pc);var Qc={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function Rc(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 Sc(a,b,c){var d;if(b){b=Tc(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var n=l[e++],p=n.length,n=pa(n);if(!n){f=!0;break}n=Uc(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==l.length)break;var n=l[e++],y=n.length;k.length&&Qc[n]<Qc[k[k.length-1]]&&Rc(g,k,1);k.push(n);b=b.substr(p+y)}Rc(g,k)&&1==g.length||(f=!0);f?c&&a.u("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Vc(a,null,
d))}return d}function Tc(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Sc(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=V(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.Ta(d,0),d.Jb?8:4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.R-a.ga}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Uc(a,b,c,d){var e;void 0!==b?(e=Wc(b),0<=e?e=Xc(a,e):(e=a.V[b],void 0===e&&(e=da(b))),void 0!==e||d||a.u("invalid "+(c?c:"value")+": "+b)):d||a.u("missing "+(c||"value"));return e}
function Vc(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,n="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)n="?"+n;else for(;0<l--;)n=(k&1?"1":"0")+n,k>>=1;h=n+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.u((null!=b?b+": ":"")+d);return e}function Yc(a,b){if(b)return Vc(a,b,a.V[b]);var c=0;for(b in a.V)Vc(a,b,a.V[b]),c++;return 0<c}
function Zc(a){Pc.call(this,a);this.N=W();this.pa=W();this.T=!1;this.S=W();this.G=[];this.i=this.O=this.C=[];$c(this);this.ca=0;ad(this);this.ja=[];bd(this,a.messages);this.ka=a.commands;var b=this;window?void 0===window.pdp11&&(window.pdp11=function(a){return gc(b,a)}):void 0===global.pdp11&&(global.pdp11=function(a){return gc(b,a)})}v(Zc,Pc);
var cd={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages",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"},dd=["NONE"],ed=["PC","PSW"],fd=[];m=Zc.prototype;
m.za=function(a,b,c,d){this.H=b;this.b=c;this.D=a;(a=dc(a,"messages"))&&bd(this,a);this.oa=fd;gd(this,function(a){a:{var b=d.H.P,c=a[0],g=a=0,k=b.length;if(c){a=X(V(d,c));if(-1===a){d.u("invalid address: "+c);break a}g=a>>>d.H.aa;k=1}d.u("blockid physical blockaddr used size type");d.u("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var n=b[g];n.type==c?l++||d.u("..."):(c=n.type,l=zb[c],n&&d.u(q(n.id)+" %"+q(g<<d.H.aa)+" %%"+q(n.B)+" "+ea(n.Sa)+" "+
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 Sc(a,b,c,d){if(c)if(b){0>a.w&&a.j.length&&(a.w=0);if(0>a.w||b!=a.j[a.w])a.j.splice(0,0,b),a.w=0;a.w--}else a.T?b="end":b=a.j[a.w+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(pa(b.substring(c,f))),c=f+1}}return a}
function Tc(a,b,c){var d;if(b){b=Uc(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var n=l[e++],p=n.length,n=pa(n);if(!n){f=!0;break}n=Vc(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==l.length)break;var n=l[e++],y=n.length;k.length&&Qc[n]<Qc[k[k.length-1]]&&Rc(g,k,1);k.push(n);b=b.substr(p+y)}Rc(g,k)&&1==g.length||(f=!0);f?c&&a.u("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Wc(a,null,
d))}return d}function Uc(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Tc(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=V(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.Ta(d,0),d.Jb?8:4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.R-a.ga}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Vc(a,b,c,d){var e;void 0!==b?(e=Xc(b),0<=e?e=Yc(a,e):(e=a.V[b],void 0===e&&(e=da(b))),void 0!==e||d||a.u("invalid "+(c?c:"value")+": "+b)):d||a.u("missing "+(c||"value"));return e}
function Wc(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,n="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)n="?"+n;else for(;0<l--;)n=(k&1?"1":"0")+n,k>>=1;h=n+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.u((null!=b?b+": ":"")+d);return e}function Zc(a,b){if(b)return Wc(a,b,a.V[b]);var c=0;for(b in a.V)Wc(a,b,a.V[b]),c++;return 0<c}
function $c(a){Pc.call(this,a);this.N=W();this.pa=W();this.S=W();this.G=[];this.i=this.O=this.C=[];ad(this);this.ca=0;bd(this);this.ja=[];cd(this,a.messages);this.ka=a.commands;var b=this;window?void 0===window.pdp11&&(window.pdp11=function(a){return gc(b,a)}):void 0===global.pdp11&&(global.pdp11=function(a){return gc(b,a)})}v($c,Pc);
var dd={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages",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"},ed=["NONE"],fd=["PC","PSW"],gd=[];m=$c.prototype;
m.za=function(a,b,c,d){this.H=b;this.b=c;this.D=a;(a=dc(a,"messages"))&&cd(this,a);this.oa=gd;hd(this,function(a){a:{var b=d.H.P,c=a[0],g=a=0,k=b.length;if(c){a=X(V(d,c));if(-1===a){d.u("invalid address: "+c);break a}g=a>>>d.H.aa;k=1}d.u("blockid physical blockaddr used size type");d.u("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var n=b[g];n.type==c?l++||d.u("..."):(c=n.type,l=zb[c],n&&d.u(q(n.id)+" %"+q(g<<d.H.aa)+" %%"+q(n.B)+" "+ea(n.Sa)+" "+
ea(n.size)+" "+l),c!=Qb&&(c=-1),l=0);a+=d.H.la;g++}}});A(this)};
m.ha=function(a,b,c){var d=this;switch(b){case "debugInput":return this.$=this.K[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",gc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.w<d.j.length-1&&(b=d.j[++d.w]):40==a.keyCode&&(0<d.w?b=d.j[--d.w]:(b="",d.w=-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.K[b]=c,Ka(c,function(){if(d.$){var a=d.$.value;d.$.value=
"";gc(d,a,!0);return!0}return!1}),!0;case "step":return this.K[b]=c,Ka(c,function(a){var b=!1;pb(d,!0)||(ob(d,!0),b=d.Ha(a?1:0),ob(d,!1));return b}),!0}return!1};m.Ra=function(){this.$&&this.$.focus()};function X(a){a=a&&a.B;null==a&&(a=-1);return a}m.ua=function(a,b){var c=255,d=X(a);-1!==d&&(c=Ab(this.H,d),b&&hd(a,b));return c};m.Ta=function(a,b){var c=65535,d=X(a);if(-1!==d){var c=this.H,e=d&c.i,f=(d&c.j)>>>c.aa,c=e!=c.i?c.P[f].vb(e,d):c.P[f++].Qa(e,d)|c.P[f&c.G].Qa(0,d+1)<<8;b&&hd(a,b)}return c};
m.eb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.H;e.P[(d&e.j)>>>e.aa].Ia(d&e.i,b&255,d);c&&hd(a,c);F(this.b,!0)}};m.zb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.H,f=d&e.i,h=(d&e.j)>>>e.aa;f!=e.i?e.P[h].yb(f,b&65535,d):(e.P[h++].Ia(f,b&255,d),e.P[h&e.G].Ia(0,b>>8&255,d+1));c&&hd(a,c);F(this.b,!0)}};function W(a){return{B:a,ma:!1}}function id(a){return[a.B,a.ma]}function jd(a){return{B:a[0],ma:a[1]}}
function V(a,b,c){var d;c=(c?a.N:a.pa).B;if(void 0!==b){d=b=Tc(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.G.length;c++){var f=a.G[c].qa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=Sc(a,b,void 0)}null!=c&&(d=W(c));return d}function kd(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Ab=ld(a,b.wb=c[2]))}function hd(a,b){null!=a.B&&(a.B+=b||1)}
function md(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.ua(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function bd(a,b){a.F=a;a.Y=a.Bb=536870912;a.da=null;a.fa=[];var c=ld(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in C)0<=wa(c,d)&&(a.Y|=C[d],a.u(d+" messages enabled"))}function gd(a,b){for(var c in C)if(64==C[c]){a.ja[c]=b;break}}
function Wc(a,b){var c;a=a.toUpperCase();null==b?c=wa(ed,a):(c=wa(ed,a.substr(b,2)),0>c&&(c=wa(ed,a.substr(b,1))));return c}function Xc(a,b){var c;if(0<=b){var d=a.b;switch(b){case 12:c=d.g[7];break;case 14:c=d.I&-14|0|(d.ta&255?0:4)|(d.ta&256?1:0)}}return c}
function nd(a,b){b=Tc(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));){e=Wc(b,c+1);if(0<=e){d=0;var f=Xc(a,e);if(void 0!==f)switch(e){case 12:case 14:d=4}b=b.substr(0,c)+(d?q(f,d):"??")+b.substr(c+1+ed[e].length)}c++}for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=da(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=V(a,e))?(d=e+' "'+md(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=V(a,e))?(hd(d),d=e+' "'+md(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+q(W(this.b.g[7]).B,4));if(this.Y&1073741824)this.fa.push(a);else if(!this.da||a!=this.da)if(this.da=a,this.Y&-2147483648&&(this.ba(),a+=" (cpu halted)"),this.u(a),this.b){var c=this.b;nc(c);c.da=0;F(c)}};
function ad(a){var b;if(Ic(a)){if(!a.M||!a.M.length){a.M=Array(1E3);for(b=0;b<a.M.length;b++)a.M[b]=W();a.W=0;a.u("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.M&&a.M.length&&a.u("instruction history buffer freed"),a.W=0,a.M=[],a.J=[]}m.Ca=function(a){if(!od(this))return!1;this.b.Ca(a);return!0};
"";gc(d,a,!0);return!0}return!1}),!0;case "step":return this.K[b]=c,Ka(c,function(a){var b=!1;pb(d,!0)||(ob(d,!0),b=d.Ha(a?1:0),ob(d,!1));return b}),!0}return!1};m.Ra=function(){this.$&&this.$.focus()};function X(a){a=a&&a.B;null==a&&(a=-1);return a}m.ua=function(a,b){var c=255,d=X(a);-1!==d&&(c=Ab(this.H,d),b&&id(a,b));return c};m.Ta=function(a,b){var c=65535,d=X(a);if(-1!==d){var c=this.H,e=d&c.i,f=(d&c.j)>>>c.aa,c=e!=c.i?c.P[f].vb(e,d):c.P[f++].Qa(e,d)|c.P[f&c.G].Qa(0,d+1)<<8;b&&id(a,b)}return c};
m.eb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.H;e.P[(d&e.j)>>>e.aa].Ia(d&e.i,b&255,d);c&&id(a,c);F(this.b,!0)}};m.zb=function(a,b,c){var d=X(a);if(-1!==d){var e=this.H,f=d&e.i,h=(d&e.j)>>>e.aa;f!=e.i?e.P[h].yb(f,b&65535,d):(e.P[h++].Ia(f,b&255,d),e.P[h&e.G].Ia(0,b>>8&255,d+1));c&&id(a,c);F(this.b,!0)}};function W(a){return{B:a,ma:!1}}function jd(a){return[a.B,a.ma]}function kd(a){return{B:a[0],ma:a[1]}}
function V(a,b,c){var d;c=(c?a.N:a.pa).B;if(void 0!==b){d=b=Uc(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.G.length;c++){var f=a.G[c].qa[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=Tc(a,b,void 0)}null!=c&&(d=W(c));return d}function ld(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Ab=Sc(a,b.wb=c[2]))}function id(a,b){null!=a.B&&(a.B+=b||1)}
function md(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.ua(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function cd(a,b){a.F=a;a.Y=a.Bb=536870912;a.da=null;a.fa=[];var c=Sc(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in C)0<=wa(c,d)&&(a.Y|=C[d],a.u(d+" messages enabled"))}function hd(a,b){for(var c in C)if(64==C[c]){a.ja[c]=b;break}}
function Xc(a,b){var c;a=a.toUpperCase();null==b?c=wa(fd,a):(c=wa(fd,a.substr(b,2)),0>c&&(c=wa(fd,a.substr(b,1))));return c}function Yc(a,b){var c;if(0<=b){var d=a.b;switch(b){case 12:c=d.g[7];break;case 14:c=d.I&-14|0|(d.ta&255?0:4)|(d.ta&256?1:0)}}return c}
function nd(a,b){b=Uc(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));){e=Xc(b,c+1);if(0<=e){d=0;var f=Yc(a,e);if(void 0!==f)switch(e){case 12:case 14:d=4}b=b.substr(0,c)+(d?q(f,d):"??")+b.substr(c+1+fd[e].length)}c++}for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=da(e),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=V(a,e))?(d=e+' "'+md(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=V(a,e))?(id(d),d=e+' "'+md(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+q(W(this.b.g[7]).B,4));if(this.Y&1073741824)this.fa.push(a);else if(!this.da||a!=this.da)if(this.da=a,this.Y&-2147483648&&(this.ba(),a+=" (cpu halted)"),this.u(a),this.b){var c=this.b;nc(c);c.da=0;F(c)}};
function bd(a){var b;if(Ic(a)){if(!a.M||!a.M.length){a.M=Array(1E3);for(b=0;b<a.M.length;b++)a.M[b]=W();a.W=0;a.u("instruction history buffer allocated")}if(!a.J||!a.J.length)for(a.J=Array(256),b=0;b<a.J.length;b++)a.J[b]=[b,0]}else a.M&&a.M.length&&a.u("instruction history buffer freed"),a.W=0,a.M=[],a.J=[]}m.Ca=function(a){if(!od(this))return!1;this.b.Ca(a);return!0};
m.Ha=function(a,b,c){if(!od(this))return!1;this.L=0;a||Ic(this)&&Jc(this,this.b.g[7],0);try{var d=this.b.Ha(a);0<d&&(this.L+=d,lc(this.b,d,!0),hc(this.b,d),this.R++)}catch(e){"number"!=typeof e&&(this.L=0,rb(this.b,e.stack||e.message))}!1!==c&&F(this.b);this.ia(b||!1);return 0<this.L};m.ba=function(a){this.b&&this.b.ba(a)};m.ia=function(a){void 0===a&&(a=!0);this.N=W(this.b.g[7]);a&&1!=this.U?pd(this):qd(this)};
function od(a){var b;if(b=a.b&&qb(a.b))b=a.b,b.A.X?b=!0:(b.u(b.toString()+" not powered"),b=!1);b&&!pb(a.b)?(a=a.b,a.A.error?(a.u(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.sa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.ra=function(a,b){b&&this.u(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){ad(this);this.R=this.ga=0;this.da=null;this.L=0;this.N=W(this.b.g[7]);this.A.Z=!1;rd(this);a||this.ia()};
m.save=function(){var a=new G(this);H(a,0,id(this.N));H(a,1,id(this.S));H(a,2,[this.j,this.T,this.Y]);H(a,3,this.G);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.N=jd(a[b++]),this.S=jd(a[b++]),this.j=a[b][0],"string"==typeof this.j&&(this.j=[this.j]),this.T=a[b][1],this.Y|=a[b][2]);a[3]&&(this.G=a[3]);return!0};m.start=function(a,b){this.U||this.u("running");this.A.Z=!0;this.Ka=a;this.La=b};
function od(a){var b;if(b=a.b&&qb(a.b))b=a.b,b.A.X?b=!0:(b.u(b.toString()+" not powered"),b=!1);b&&!pb(a.b)?(a=a.b,a.A.error?(a.u(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.sa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.ra=function(a,b){b&&this.u(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){bd(this);this.R=this.ga=0;this.da=null;this.L=0;this.N=W(this.b.g[7]);this.A.Z=!1;rd(this);a||this.ia()};
m.save=function(){var a=new G(this);H(a,0,jd(this.N));H(a,1,jd(this.S));H(a,2,[this.j,this.T,this.Y]);H(a,3,this.G);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.N=kd(a[b++]),this.S=kd(a[b++]),this.j=a[b][0],"string"==typeof this.j&&(this.j=[this.j]),this.T=a[b][1],this.Y|=a[b][2]);a[3]&&(this.G=a[3]);return!0};m.start=function(a,b){this.U||this.u("running");this.A.Z=!0;this.Ka=a;this.La=b};
m.stop=function(a,b){if(this.A.Z){this.A.Z=!1;this.L=b-this.La;if(!this.U){var c="stopped";if(this.L){var d=a-this.Ka,e=0<d?Math.round(1E3*this.L/d):0,c=c+" (";Ic(this)&&(c+=this.R+" opcodes, ",this.ga-=this.R,this.R=0);c+=this.L+" cycles, "+d+" ms, "+e+" hz)"}else nb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.u(c)}this.ia(!0);this.Ra();rd(this,this.b.g[7])}};function Ic(a){return 1<a.i.length||!!a.ca}
function Jc(a,b,c){var d=a.b;if(0<c&&(a.ca&&!--a.ca||Zb(a,b,1,a.i)))return!0;0<=c&&a.J.length&&(a.R++,b=Ab(a.H,b),null!=b&&(a.J[b][1]++,b=a.M[a.W],b.B=d.g[7],b.ma=!1,++a.W==a.M.length&&(a.W=0)));return!1}function $c(a){var b,c;a.i=["bp"];if(void 0!==a.O)for(b=1;b<a.O.length;b++){c=a.O[b];var d=a.H;$b(d.P[X(c)>>>d.aa],!1)}a.O=["br"];if(void 0!==a.C)for(b=1;b<a.C.length;b++)c=a.C[b],d=a.H,$b(d.P[X(c)>>>d.aa],!0);a.C=["bw"];a.na=0}
m.xa=function(a,b,c){var d=!0;c||sd(this,a,b,!1,!0);if(a!=this.i){var e=X(b);if(-1===e)this.u("invalid address: "+q(b.B,4)),d=!1;else{var f=this.H;f.P[e>>>f.aa].xa(e&f.i,a==this.C)}}d&&(a.push(b),c?b.ma=!0:(td(this,a,a.length-1,"set"),ad(this)));return d};function sd(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.ma)){f=!0;g.ma||e||td(a,b,h,"cleared");b.splice(h,1);b!=a.i&&(d=a.H,$b(d.P[c>>>d.aa],b==a.C));g.ma||ad(a);break}}return f}
function Jc(a,b,c){var d=a.b;if(0<c&&(a.ca&&!--a.ca||Zb(a,b,1,a.i)))return!0;0<=c&&a.J.length&&(a.R++,b=Ab(a.H,b),null!=b&&(a.J[b][1]++,b=a.M[a.W],b.B=d.g[7],b.ma=!1,++a.W==a.M.length&&(a.W=0)));return!1}function ad(a){var b,c;a.i=["bp"];if(void 0!==a.O)for(b=1;b<a.O.length;b++){c=a.O[b];var d=a.H;$b(d.P[X(c)>>>d.aa],!1)}a.O=["br"];if(void 0!==a.C)for(b=1;b<a.C.length;b++)c=a.C[b],d=a.H,$b(d.P[X(c)>>>d.aa],!0);a.C=["bw"];a.na=0}
m.xa=function(a,b,c){var d=!0;c||sd(this,a,b,!1,!0);if(a!=this.i){var e=X(b);if(-1===e)this.u("invalid address: "+q(b.B,4)),d=!1;else{var f=this.H;f.P[e>>>f.aa].xa(e&f.i,a==this.C)}}d&&(a.push(b),c?b.ma=!0:(td(this,a,a.length-1,"set"),bd(this)));return d};function sd(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.ma)){f=!0;g.ma||e||td(a,b,h,"cleared");b.splice(h,1);b!=a.i&&(d=a.H,$b(d.P[c>>>d.aa],b==a.C));g.ma||bd(a);break}}return f}
function ud(a,b){for(var c=1;c<b.length;c++)td(a,b,c);return b.length-1}function td(a,b,c,d){c=b[c];a.u(b[0]+" "+q(c.B,4)+(d?" "+d:c.wb?' "'+c.wb+'"':""))}function rd(a,b){if(void 0!==b)Zb(a,b,1,a.i,!0),a.U=0;else for(var c=1;c<a.i.length;c++){var d=a.i[c];if(d.ma){if(!sd(a,a.i,d,!0))break;c=0}}}
function Zb(a,b,c,d,e){var f=!1;if(!a.na++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.ma)for(var k=X(g),l=0;l<c;l++)if(b+l==k){var n,f=!0;g.ma&&(sd(a,d,g,!0),e=!0);if(n=g.Ab){for(var f=!1,p=0;p<n.length;p++)if(!vd(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var y=p+1;y<n.length&&n[y].indexOf("else");y++)p++;if(y==n.length){f=!0;break}}a.b.A.Z||(f=!0)}if(f){e||td(a,d,h,"hit");break}}}a.na--;return f}
function Ud(a,b,c,d){for(var e=W(b.B),f=a.ua(b,1),h=a.oa[f]||[0],g="",k=dd[h[0]],l=h.length-1,n=0,p,y=1;y<=l;y++){var J="";p=h[y];if(void 0!==p){var E=p&240;if(E){var ga=p&15;ga?n=ga:p|=n;p&61440||(p|=1==y?8192:4096);if(E&32)a:{var J=a,E=p,ga=b,B=" ";switch(E&15){case 1:B=q(J.ua(ga,1),2);break;case 2:B=q(J.ua(ga,1)<<24>>24,4);break;case 3:B=q(J.Ta(ga,2),4);break;default:J="imm("+ea(E)+")";break a}E&64?B="["+B+"]":E&16||(B="0x"+B);J=B}else E&16?J=ed[(p&3840)>>8]:E&128&&(J=(f>>3&7).toString());if(!J||
function Ud(a,b,c,d){for(var e=W(b.B),f=a.ua(b,1),h=a.oa[f]||[0],g="",k=ed[h[0]],l=h.length-1,n=0,p,y=1;y<=l;y++){var J="";p=h[y];if(void 0!==p){var E=p&240;if(E){var ga=p&15;ga?n=ga:p|=n;p&61440||(p|=1==y?8192:4096);if(E&32)a:{var J=a,E=p,ga=b,B=" ";switch(E&15){case 1:B=q(J.ua(ga,1),2);break;case 2:B=q(J.ua(ga,1)<<24>>24,4);break;case 3:B=q(J.Ta(ga,2),4);break;default:J="imm("+ea(E)+")";break a}E&64?B="["+B+"]":E&16||(B="0x"+B);J=B}else E&16?J=fd[(p&3840)>>8]:E&128&&(J=(f>>3&7).toString());if(!J||
!J.length){g="INVALID";break}0<g.length&&(g+=",");g+=J||"???"}}}f="";h=q(e.B,4)+" ";if(-1!==e.B&&-1!==b.B){do if(f+=q(a.ua(e,1),2),null==e.B)break;while(e.B!=b.B)}h+=oa(f,10);h=h+(p&32768?"*":" ")+oa(k,7);g&&(h+=" "+g);c&&(h=oa(h,40)+";"+c,h=a.b.A.Ea?h+("cycles="+ic(a.b).toString()+" cs="+q(a.b.Na)):h+(null!=d?"="+d.toString():""));return h}m.hb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Vd(a,b,c){var d=[],e=X(b)>>>0;for(b=0;b<a.G.length;b++){var f=a.G[b],h=f.B>>>0,g=f.Eb;if(e>=h&&e<h+g){e=ta(f.fb,[e-h],a.hb);0<=e?Wd(a,b,e,d):c&&(e=~e,Wd(a,b,e-1,d),Wd(a,b,e,d));break}}return d}function Wd(a,b,c,d){var e={},f=a.G[b].fb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.G[b].qa[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Xd(a,b){if("?"==b)a.u("frequency commands:"),a.u("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.u("frequency data cleared");d++}else if(void 0!==b)a.u("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],h=e[c][1];h&&(a.u((dd[a.oa[f][0]]+" ").substr(0,5)+" ("+("0x"+q(f,2))+"): "+h+" times"),d++)}}d||a.u("no frequency data available")}}
function Yd(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Yc(a)||a.u("no variables"),!0;if(!c[2])return Yc(a,c[1]);if(!c[3])return delete a.V[c[1]],!0;var d=Sc(a,c[3]);return void 0!==d?(a.V[c[1]]=d,!0):!1}a.u("invalid assignment:"+b);return!1}
function Xd(a,b){if("?"==b)a.u("frequency commands:"),a.u("\tclear\tclear all frequency counts");else{var c,d=0;if(a.J)if("clear"==b){for(c=0;c<a.J.length;c++)a.J[c]=[c,0];a.u("frequency data cleared");d++}else if(void 0!==b)a.u("unknown frequency command: "+b),d++;else{var e=a.J.slice();e.sort(function(a,b){return b[1]-a[1]});for(c=0;c<e.length;c++){var f=e[c][0],h=e[c][1];h&&(a.u((ed[a.oa[f][0]]+" ").substr(0,5)+" ("+("0x"+q(f,2))+"): "+h+" times"),d++)}}d||a.u("no frequency data available")}}
function Yd(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Zc(a)||a.u("no variables"),!0;if(!c[2])return Zc(a,c[1]);if(!c[3])return delete a.V[c[1]],!0;var d=Tc(a,c[3]);return void 0!==d?(a.V[c[1]]=d,!0):!1}a.u("invalid assignment:"+b);return!1}
function Zd(a,b,c){var d=null;if(b=V(a,b,!0)){var e=Vd(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.B-e[1])&&(h=" + "+ea(f)),f=e[0]+" ("+q(e[1],4)+")"+h,c&&a.u(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.B)&&(h=" - "+ea(f)),f=e[4]+" ("+q(e[5],4)+")"+h,c&&a.u(f),d||(d=f))}else c&&a.u("no symbols")}return d}
function pd(a,b){var c;if(b&&"?"==b[1])a.u("register commands:"),a.u("\tr\tdump registers"),a.u("\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.u("missing value for "+b[1]);return}var h=!1,g=Sc(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "PC":d.g[7]=g;a.N=W(d.g[7]);break;case "CF":d.ta=g?d.ta|256:d.ta&255;break;case "ZF":d.ta=g?d.ta&
-256:d.ta|255;break;case "SF":break;default:a.u("unknown register: "+e);return}if(!h){a.u("invalid value: "+f);return}F(d);a.u("updated registers:")}a.u("no regs");c&&(a.N=W(d.g[7]),qd(a,q(a.N.B,4)))}}function $d(a,b){b=pa(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.u(nd(a,c[2])):Sc(a,b,!0)}function ae(a,b,c){var d="t"!=b;c=Uc(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ja(c,function(){return ob(a,!0)&&a.Ha(e,d,!1)},function(){F(a.b);ob(a,!1)})}
function pd(a,b){var c;if(b&&"?"==b[1])a.u("register commands:"),a.u("\tr\tdump registers"),a.u("\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.u("missing value for "+b[1]);return}var h=!1,g=Tc(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "PC":d.g[7]=g;a.N=W(d.g[7]);break;case "CF":d.ta=g?d.ta|256:d.ta&255;break;case "ZF":d.ta=g?d.ta&
-256:d.ta|255;break;case "SF":break;default:a.u("unknown register: "+e);return}if(!h){a.u("invalid value: "+f);return}F(d);a.u("updated registers:")}a.u("no regs");c&&(a.N=W(d.g[7]),qd(a,q(a.N.B,4)))}}function $d(a,b){b=pa(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.u(nd(a,c[2])):Tc(a,b,!0)}function ae(a,b,c){var d="t"!=b;c=Vc(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Ja(c,function(){return ob(a,!0)&&a.Ha(e,d,!1)},function(){F(a.b);ob(a,!1)})}
function qd(a,b,c,d){if(b=V(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=V(a,c,!0);if(!d||d.B<b.B)return;e=d.B-b.B;if(256<e){a.u("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=pb(a,!1)||a.U?a.L:null;var h=null!=f?"cycles":null,g=Vd(a,b),k=b.B;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.u(l)}g[3]&&(h=g[3],f=null);f=Ud(a,b,h,f);a.u(f);a.N=b;e-=b.B-k;c++}}}
function ld(a,b,c,d){if(c)if(b){0>a.w&&a.j.length&&(a.w=0);if(0>a.w||b!=a.j[a.w])a.j.splice(0,0,b),a.w=0;a.w--}else a.T?b="end":b=a.j[a.w+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(pa(b.substring(c,f))),c=f+1}}return a}
function vd(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.u(">> "+b):(a.T&&(a.u("ended assemble at "+q(a.S.B,4)),a.N=a.S,a.T=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.da=null;if(qb(a)&&0<b.length){a.T&&(b="a "+q(a.S.B,4)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var n=V(a,f[1],!0);if(n)if(a.S=
n,void 0===f[2])a.u("begin assemble at "+q(n.B,4)),a.T=!0,F(a.b);else{var p;a.u("not supported yet");p=[];if(p.length){for(var y=0;y<p.length;y++)a.eb(n,p[y],1);a.u(Ud(a,a.S))}}break;case "b":a:{var J=f[0],E=f[1],ga=b;if("?"==E)a.u("breakpoint commands:"),a.u("\tbp [a]\tset exec breakpoint at addr [a]"),a.u("\tbr [a]\tset read breakpoint at addr [a]"),a.u("\tbw [a]\tset write breakpoint at addr [a]"),a.u("\tbc [a]\tclear breakpoint at addr [a]"),a.u("\tbl\tlist all breakpoints"),a.u("\tbn [n]\tbreak after [n] instruction(s)");
else{var B=J.charAt(1);if("l"==B){var Aa=0,Aa=Aa+ud(a,a.i),Aa=Aa+ud(a,a.O);(Aa+=ud(a,a.C))||a.u("no breakpoints")}else if("n"==B)a.ca=Uc(a,E),a.u("break after "+a.ca+" instruction(s)");else if(void 0===E)a.u("missing breakpoint address");else{var P=W();if("*"!=E&&(P=V(a,E,!0),!P))break a;"c"==B?null==P.B?($c(a),a.u("all breakpoints cleared")):sd(a,a.i,P)||sd(a,a.O,P)||sd(a,a.C,P)||a.u("breakpoint missing: "+q(P.B,4)):null!=P.B&&(kd(a,P,ga),"p"==B?a.xa(a.i,P):"r"==B?a.xa(a.O,P):"w"==B?a.xa(a.C,P):
else{var B=J.charAt(1);if("l"==B){var Aa=0,Aa=Aa+ud(a,a.i),Aa=Aa+ud(a,a.O);(Aa+=ud(a,a.C))||a.u("no breakpoints")}else if("n"==B)a.ca=Vc(a,E),a.u("break after "+a.ca+" instruction(s)");else if(void 0===E)a.u("missing breakpoint address");else{var P=W();if("*"!=E&&(P=V(a,E,!0),!P))break a;"c"==B?null==P.B?(ad(a),a.u("all breakpoints cleared")):sd(a,a.i,P)||sd(a,a.O,P)||sd(a,a.C,P)||a.u("breakpoint missing: "+q(P.B,4)):null!=P.B&&(ld(a,P,ga),"p"==B?a.xa(a.i,P):"r"==B?a.xa(a.O,P):"w"==B?a.xa(a.C,P):
a.u("unknown breakpoint command: "+B))}}}break;case "c":a.ya&&(a.ya.value="");break;case "d":a:{var Ba,Ca=f[0],Y=f[1],qa=f[2],ue=f[3];if("?"==Y){var Z="";for(Ba in C)a.ja[Ba]&&(Z&&(Z+=","),Z+=Ba);Z+=",state,symbols";a.u("dump memory commands:");a.u("\tdb [a] [#] dump # bytes at address a");a.u("\tdw [a] [#] dump # words at address a");a.u("\tdd [a] [#] dump # dwords at address a");a.u("\tdh [#] [#] dump # instructions from history");Z.length&&a.u("dump extension commands:\n\t"+Z)}else if("state"==
Y){var wd=be(a.D,!0);"console"==qa?console.log(wd):(a.ya&&(a.ya.value=""),a.u(wd))}else if("symbols"==Y)for(var oc=0;oc<a.G.length;oc++){var pc=a.G[oc],Da;for(Da in pc.qa)if("."!=Da.charAt(0)){var xd=pc.qa[Da].o;if(void 0!==xd){var yd=pc.qa[Da].l;yd&&(Da=yd);a.u(q(xd,4)+" "+Da)}}}else{if("d"==Ca){for(Ba in C)if(f[1]==Ba){var zd=a.ja[Ba];zd?(f.shift(),f.shift(),zd(f)):a.u("no dump registered for "+Y);break a}Y||(Ca=a.Ma||"db")}else a.Ma=Ca;if("dh"==Ca){var Ad=Y,Bd=qa,Cd="",Dd=0,K=a.W,aa=a.M;if(aa.length){var Q=
+Ad||a.wa,Ea=+Bd||10;isNaN(Q)?Q=Ea:Cd="more ";Q>aa.length&&(a.u("note: only "+aa.length+" available"),Q=aa.length);K-=Q;0>K&&(null==aa[aa.length-1].B?(Q=K+Q,K=0):K+=aa.length);var qc=[];"call"==Bd&&(Ea=1E5,qc=["CALL"]);for(void 0!==Ad&&a.u(Q+" instructions earlier:");0<Ea&&K!=a.W;){var Ed=aa[K++];if(null==Ed.B)break;var cb=W(Ed.B),ve=Q--,Fd=Ud(a,cb,"history",ve);(!qc.length||0<=Fd.indexOf(qc[0]))&&a.u(Fd);cb.Wa&&(K+=cb.Wa,Ea-=cb.Wa,Q-=cb.Wa);K>=aa.length&&(K=0);a.wa=Q;Dd++;Ea--}}Dd||(a.u("no "+Cd+
"history available"),a.wa=void 0)}else{var Cb=V(a,Y);if(Cb){var Db=0;qa&&("l"==qa.charAt(0)&&(qa=qa.substr(1)||ue),Db=Uc(a,qa)>>>0,65536<Db&&(Db=65536));for(var ra="",Eb="dd"==Ca?4:"dw"==Ca?2:1,Fb=Eb*Db||128,we=Fb+15>>4||1;we--&&0<Fb;){var Gb=0,rc=0,db,eb="",sc="",Y=q(Cb.B,4);for(db=16;0<db&&0<Fb;db--){var Hb=a.ua(Cb,1),Gb=Gb|Hb<<(rc++<<3);rc==Eb&&(eb+=q(Gb,2*Eb),eb+=1==Eb?9==db?"-":" ":" ",Gb=rc=0);sc+=32<=Hb&&128>Hb?String.fromCharCode(Hb):".";Fb--}ra&&(ra+="\n");ra+=Y+" "+eb+(0==db?" "+sc:"")}ra&&
a.u(ra);a.pa=Cb}}}}break;case "e":if("else"==f[0])break;var Ib=1,Gd=255,Hd=a.ua,Id=a.eb;"ew"==f[0]&&(Ib=2,Gd=65535,Hd=a.Ta,Id=a.zb);var Jd=Ib<<1,Kd=f[1];if(null==Kd)a.u("edit memory commands:"),a.u("\teb [a] [...] edit bytes at address a"),a.u("\tew [a] [...] edit words at address a");else{var Jb=V(a,Kd);if(Jb)for(var Kb=2;Kb<f.length;Kb++){var fb=Sc(a,f[Kb]);if(void 0===fb){a.u("unrecognized value: "+f[Kb]);break}fb&~Gd&&a.u("warning: "+q(fb)+" exceeds "+Ib+"-byte value");var xe=Hd.call(a,Jb);
a.u("changing "+q(Jb.B,4)+" from 0x"+q(xe,Jd)+" to 0x"+q(fb,Jd));Id.call(a,Jb,fb,Ib)}}break;case "f":Xd(a,f[1]);break;case "g":a:{var Ld=f[1],ye=b;if(void 0!==Ld){var tc=V(a,Ld,!0);if(!tc)break a;kd(a,tc,ye);a.xa(a.i,tc,!0)}a.Ca(!0)||c||a.u("cpu busy or unavailable, run command ignored")}break;case "h":a:{var uc;if(a.A.Z)uc="halting",a.ba();else{if(pb(a,!0))break a;uc="already halted"}c||a.u(uc)}break;case "i":if("if"==f[0]){var vc;var gb=b.substr(2),gb=pa(gb);Sc(a,gb)?(c||a.u("true: "+gb),vc=!0):
"history available"),a.wa=void 0)}else{var Cb=V(a,Y);if(Cb){var Db=0;qa&&("l"==qa.charAt(0)&&(qa=qa.substr(1)||ue),Db=Vc(a,qa)>>>0,65536<Db&&(Db=65536));for(var ra="",Eb="dd"==Ca?4:"dw"==Ca?2:1,Fb=Eb*Db||128,we=Fb+15>>4||1;we--&&0<Fb;){var Gb=0,rc=0,db,eb="",sc="",Y=q(Cb.B,4);for(db=16;0<db&&0<Fb;db--){var Hb=a.ua(Cb,1),Gb=Gb|Hb<<(rc++<<3);rc==Eb&&(eb+=q(Gb,2*Eb),eb+=1==Eb?9==db?"-":" ":" ",Gb=rc=0);sc+=32<=Hb&&128>Hb?String.fromCharCode(Hb):".";Fb--}ra&&(ra+="\n");ra+=Y+" "+eb+(0==db?" "+sc:"")}ra&&
a.u(ra);a.pa=Cb}}}}break;case "e":if("else"==f[0])break;var Ib=1,Gd=255,Hd=a.ua,Id=a.eb;"ew"==f[0]&&(Ib=2,Gd=65535,Hd=a.Ta,Id=a.zb);var Jd=Ib<<1,Kd=f[1];if(null==Kd)a.u("edit memory commands:"),a.u("\teb [a] [...] edit bytes at address a"),a.u("\tew [a] [...] edit words at address a");else{var Jb=V(a,Kd);if(Jb)for(var Kb=2;Kb<f.length;Kb++){var fb=Tc(a,f[Kb]);if(void 0===fb){a.u("unrecognized value: "+f[Kb]);break}fb&~Gd&&a.u("warning: "+q(fb)+" exceeds "+Ib+"-byte value");var xe=Hd.call(a,Jb);
a.u("changing "+q(Jb.B,4)+" from 0x"+q(xe,Jd)+" to 0x"+q(fb,Jd));Id.call(a,Jb,fb,Ib)}}break;case "f":Xd(a,f[1]);break;case "g":a:{var Ld=f[1],ye=b;if(void 0!==Ld){var tc=V(a,Ld,!0);if(!tc)break a;ld(a,tc,ye);a.xa(a.i,tc,!0)}a.Ca(!0)||c||a.u("cpu busy or unavailable, run command ignored")}break;case "h":a:{var uc;if(a.A.Z)uc="halting",a.ba();else{if(pb(a,!0))break a;uc="already halted"}c||a.u(uc)}break;case "i":if("if"==f[0]){var vc;var gb=b.substr(2),gb=pa(gb);Tc(a,gb)?(c||a.u("true: "+gb),vc=!0):
(c||a.u("false: "+gb),vc=!1);vc||(d=!1)}break;case "k":var ze=f[0];if("?"==f[1])a.u("stack trace commands:"),a.u("\tk\tshow frame addresses"),a.u("\tks\tshow symbol information");else{var wc=0,Md=W(),hb=W(a.b.g[6]);for(a.u("stack trace for "+q(hb.B,4));10>wc;){for(var sa=null,Ae=256;65536>hb.B>>>0;){Md.B=a.Ta(hb,2);if(null==hb.B||!Ae--)break;for(var Be=a,Lb=Md,Nd=null,ib=Lb.B,Od=ib,xc=1;6>=xc&&ib;xc++){if(2<xc){Lb.B=ib;var Mb=Ud(Be,Lb);if(0<=Mb.indexOf("CALL")){var Pd=Mb.indexOf(" ");if(ib+(Mb.indexOf(" ",
Pd+1)-Pd-1)/2==Od){Nd=Mb;break}}}ib--}Lb.B=Od;if(sa=Nd)break}if(!sa||null==sa)break;var Qd=null;if("ks"==ze){var Rd=sa.match(/[0-9A-F]+$/);Rd&&(Qd=Zd(a,Rd[0]))}sa=oa(sa,50)+" ;"+(Qd||"stack="+q(hb.B,4));a.u(sa);wc++}wc||a.u("no return addresses found")}break;case "l":if("ln"==f[0]){Zd(a,f[1],!0);break}break;case "m":a:{var ba,ca=null,x=f[1];"?"==x&&(x=void 0);if(void 0!==x){var ha=0;if("all"==x)ha=1878917119,x=null;else if("on"==x)ca=!0,x=null;else if("off"==x)ca=!1,x=null;else{"keys"==x&&(x="key");
"kbd"==x&&(x="keyboard");for(ba in C)if(x==ba){ha=C[ba];ca=!!(a.Y&ha);break}if(!ha){a.u("unknown message category: "+x);break a}}if(ha)if("on"==f[2])a.Y|=ha,ca=!0;else if("off"==f[2]&&(a.Y&=~ha,ca=!1,1073741824==ha)){for(var yc=0;yc<a.fa.length;yc++)a.u(a.fa[yc]);a.fa=[]}}var Ce=0,ia="";for(ba in C)if(!x||x==ba){var De=!!(a.Y&C[ba]);if(null===ca||ca==De)ia&&(ia+=","),++Ce%10||(ia+="\n\t"),"key"==ba&&(ba="keys"),ia+=ba}void 0===x&&a.u("message commands:\n\tm [category] [on|off]\tturn categories on/off");
a.u((null!==ca?ca?"messages on: ":"messages off: ":"message categories:\n\t")+(ia||"none"));ad(a)}break;case "p":if("print"==f[0]){$d(a,b.substr(5));break}var Ee="pr"==f[0]?1:0;if(a.U)a.u("step in progress");else{var Sd=W(a.b.g[7]);a.ua(Sd);a.U?(a.xa(a.i,Sd,!0),a.Ca()||(a.D&&a.D.Ra(),a.U=0)):ae(a,Ee?"tr":"t")}break;case "r":if("reset"==b){a.D&&a.D.reset();break}pd(a,f);break;case "s":a:switch(f[1]){case "cs":var jb;void 0!==f[3]&&(jb=+f[3]);switch(f[2]){case "int":a.b.Fa=jb;break;case "start":a.b.Oa=
a.u((null!==ca?ca?"messages on: ":"messages off: ":"message categories:\n\t")+(ia||"none"));bd(a)}break;case "p":if("print"==f[0]){$d(a,b.substr(5));break}var Ee="pr"==f[0]?1:0;if(a.U)a.u("step in progress");else{var Sd=W(a.b.g[7]);a.ua(Sd);a.U?(a.xa(a.i,Sd,!0),a.Ca()||(a.D&&a.D.Ra(),a.U=0)):ae(a,Ee?"tr":"t")}break;case "r":if("reset"==b){a.D&&a.D.reset();break}pd(a,f);break;case "s":a:switch(f[1]){case "cs":var jb;void 0!==f[3]&&(jb=+f[3]);switch(f[2]){case "int":a.b.Fa=jb;break;case "start":a.b.Oa=
jb;break;case "stop":a.b.Ga=jb;break;default:a.u("unknown cs option");break a}void 0!==jb&&fc(a.b);a.u("checksums "+(a.b.A.Ea?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(kc(a.b,+f[2])||a.u("warning: using 1x multiplier, previous target not reached"));a.u("target speed: "+(a.b.Aa.toFixed(2)+"Mhz")+" ("+a.b.Ba+"x)");break;case "?":a.u("debugger options:");a.u("\tcs int #\tset checksum cycle interval to #");a.u("\tcs start #\tset checksum cycle start count to #");a.u("\tcs stop #\tset checksum cycle stop count to #");
a.u("\tsp #\t\tset speed multiplier to #");break;default:f[1]&&a.u("unknown option: "+f[1])}break;case "t":ae(a,f[0],f[1]);break;case "u":qd(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Yd(a,b.substr(3))||(d=!1);break}a.u("PDP11js version 1.30.0 ("+a.b.pb+",RELEASE"+(sb?",TYPEDARRAYS":",LONGARRAYS")+")");a.u(window?window.navigator.userAgent:"");break;case "?":if(f[1]){$d(a,b.substr(1));break}var kb="commands:",zc;for(zc in cd)kb+="\n"+oa(zc,9)+cd[zc];Ic(a)||(kb+="\nnote: frequency/history disabled if no exec breakpoints");
a.u(kb);break;default:a.u("unknown command: "+b),d=!1}}}catch(Td){a.u("debugger error: "+(Td.stack||Td.message)),d=!1}return d}function gc(a,b,c){b=ld(a,b,c);for(var d in b)if(!vd(a,b[d]))return!1;return!0}Qa(function(){for(var a=z(document,"pdp11","debugger"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new Zc(d);mb(d,c)}});
a.u("\tsp #\t\tset speed multiplier to #");break;default:f[1]&&a.u("unknown option: "+f[1])}break;case "t":ae(a,f[0],f[1]);break;case "u":qd(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Yd(a,b.substr(3))||(d=!1);break}a.u("PDP11js version 1.30.0 ("+a.b.pb+",RELEASE"+(sb?",TYPEDARRAYS":",LONGARRAYS")+")");a.u(window?window.navigator.userAgent:"");break;case "?":if(f[1]){$d(a,b.substr(1));break}var kb="commands:",zc;for(zc in dd)kb+="\n"+oa(zc,9)+dd[zc];Ic(a)||(kb+="\nnote: frequency/history disabled if no exec breakpoints");
a.u(kb);break;default:a.u("unknown command: "+b),d=!1}}}catch(Td){a.u("debugger error: "+(Td.stack||Td.message)),d=!1}return d}function gc(a,b,c){b=Sc(a,b,c);for(var d in b)if(!vd(a,b[d]))return!1;return!0}Qa(function(){for(var a=z(document,"pdp11","debugger"),b=0;b<a.length;b++){var c=a[b],d=w(c),d=new $c(d);mb(d,c)}});
function ce(a,b,c){t.call(this,"Computer",a,ce,67108864);this.A.X=!1;de(this,b);this.N=dc(this,"autoPower",a);this.w=0;this.U=a.busWidth||a.buswidth;this.i=ee;this.L=null;this.G=this.S=!1;this.V=dc(this,"url")||"";(Math.random()+.1).toString(36);this.j=fe(this);if(this.b=lb("CPU",this.id)){this.F=lb("Debugger",this.id);this.H=new vb({id:this.nb+".bus",busWidth:this.U},this.b,this.F);var d,e=bb(this.id);if((this.D=lb("Panel",this.id))&&this.D.ya)for(b=0;b<e.length;b++)d=e[b],d.ea=this.D.ea,d.u=this.D.u,
d.ya=this.D.ya;this.u("PDP11js v1.30.0\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");this.u("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis <paulnank@hotmail.com>");for(b=0;b<e.length;b++)d=e[b],d.za&&d.za(this,this.H,this.b,this.F);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.J=d:this.i=parseInt(d,10));var f;if(a=dc(this,"state")||(f=!0,a.state))b=this.O=a,f||(this.G=!0,this.i=ee),this.i&&(this.M=
new G(this,"1.30.0"),ge(this.M)?b=null:delete this.M);!b&&this.i&&(b=he(this))&&(this.G=!0);if(b){var h=this;xa(b,null,!0,function(a,b,c){c?(h.J=null,h.G=!1,h.ea("Unable to load machine state from server (error "+c+(b?": "+pa(b):"")+")")):(h.L=b,h.S=!0);A(h)})}else A(this);this.K.power||(this.N=!0);!c&&this.N&&ie(this,this.Pa)}else r("Unable to find CPU component")}v(ce);var ee=0;

View file

@ -1,4 +1,4 @@
(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 f,d=a,e=b;(e&&10!=e?16==e?null!==d.match(/^[0-9a-f]+$/i):2==e&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|0)}return c}
(function(){var m;function aa(a){var b=16,c;if(a){b||(b=10);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 f,d=a,e=b;(e&&10!=e?16==e?null!==d.match(/^[0-9a-f]+$/i):2==e&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|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){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=p();return-1!==a.indexOf("pcjs.org",a.length-8)}
var ea={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var q=Date.now||function(){return+new Date};function ga(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
function r(a,b,c,d){var f=0,e=null,h=null;if("object"==typeof resources&&(e=resources[a]))return d&&d(a,e,f),[e,f];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&&(e=g.responseText,200==g.status||!g.status&&e.length&&"file:"==(window?window.location.protocol:"file:")||(f=g.status||-1),d&&d(a,e,f))});if(b&&"object"==