diff --git a/apps/README.md b/apps/README.md index 2e00e9101..dce8a53e3 100644 --- a/apps/README.md +++ b/apps/README.md @@ -13,7 +13,7 @@ PCjs has archived selected software for the following machines: * [IBM PC](pcx86/) * [Challenger 1P](c1p/) -* [PDP-11](pdp11/) +* DEC [PDP-10](pdp10/) and [PDP-11](pdp11/) PCjs also includes a small collection of disk images in the [Disk Libraries](/disks/): diff --git a/apps/pdp10/README.md b/apps/pdp10/README.md new file mode 100644 index 000000000..e8e7bce25 --- /dev/null +++ b/apps/pdp10/README.md @@ -0,0 +1,12 @@ +--- +layout: page +title: PDP-10 Software +permalink: /apps/pdp10/ +--- + +PDP-10 Software +--------------- + +PCjs provides the following PDP-10 tests: + +- [PDP-10 Opcode Tests](tests/) diff --git a/apps/pdp10/tests/README.md b/apps/pdp10/tests/README.md new file mode 100644 index 000000000..77c1ec717 --- /dev/null +++ b/apps/pdp10/tests/README.md @@ -0,0 +1,122 @@ +--- +layout: page +title: DEC PDP-10 Opcode Tests +permalink: /apps/pdp10/tests/ +machines: + - id: testka10 + type: pdp10 + debugger: true + config: /devices/pdp10/machine/ka10/test/debugger/machine.xml +--- + +DEC PDP-10 Opcode Tests +----------------------- + +The PDP-10 machine below loads the following test: + +- [PDP-10 Half-Word Opcode Test](optest-v01.json) + +Details on how to run and modify the test, and perform similar tests in [SIMH](https://github.com/simh/simh), +are provided below. + +{% include machine.html id="testka10" %} + +The [PDP-10 Half-Word Opcode Test](optest-v01.json) file specifies that the following words: + + 0o505040111111, // HRLI 1,111111 + 0o541040444444, // HRRI 1,444444 + 0o544100000001, // HLR 2,1 + 0o504100000001, // HRL 2,1 + +should be loaded at address 0o100, and that the program counter (PC register) should be set to 0o100. The embedded +comments display the instructions that correspond to each word. + +If you want to alter or add new instructions, the PDP-10 Debugger now includes a rudimentary assembler. Using the `a` command, +along with an optional start address, you can enter "assembler mode". For example, here's how the first four instructions from +the [PDP-10 Half-Word Opcode Test](optest-v01.json) could be entered by hand: + + >> a 100 + begin assemble at 000100 + >> hrli 1,111111 + 000100: 505040 111111 HRLI 1,111111 + >> hrri 1,444444 + 000101: 541040 444444 HRRI 1,444444 + >> hlr 2,1 + 000102: 544100 000001 HLR 2,1 + >> hrl 2,1 + 000103: 504100 000001 HRL 2,1 + ended assemble at 000104 + +Entering a blank line exits "assembler mode". To disassemble the four instructions, use `u 100 l4`: + + >> u 100 l4 + 000100: 505040 111111 HRLI 1,111111 + 000101: 541040 444444 HRRI 1,444444 + 000102: 544100 000001 HLR 2,1 + 000103: 504100 000001 HRL 2,1 + +You can also copy-and-paste a series of instructions into the PDPjs Debugger, as long as each command ends +with a semicolon: + + a 100; + hrli 1,111111; + hrri 1,444444; + hlr 2,1; + hrl 2,1; + end + +Individual instructions can also be assembled *without* entering "assembler mode", as long as you precede +each instruction with the `a` command and a specific address: + + a 100 hrli 1,111111; + a 101 hrri 1,444444; + a 102 hlr 2,1; + a 103 hrl 2,1 + +Individual instructions can be executed with the `t` command and memory can be dumped with the `d` command. + +After executing the first four instructions and using the `d 0 l4` command to dump first four words of memory +(also known as AC registers 0-3), you should see the following output: + + >> r + 000100: 505040 111111 HRLI 1,111111 + >> t + 000101: 541040 444444 HRRI 1,444444 + >> t + 000102: 544100 000001 HLR 2,1 + >> t + 000103: 504100 000001 HRL 2,1 + >> t + 000104: 000000 000000 UUO 0,0 + >> d 0 l4 + 000000: 000000 000000 111111 444444 444444 111111 000000 000000 + +To assemble and test the same instructions in [SIMH](https://github.com/simh/simh), using the `pdp10` binary: + + sim> dep 100 505040111111 + sim> dep 101 541040444444 + sim> dep 102 544100000001 + sim> dep 103 504100000001 + sim> ex -m 100-103 + 100: HRLI 1,111111 + 101: HRRI 1,444444 + 102: HLR 2,1 + 103: HRL 2,1 + sim> dep pc 100 + sim> step + + Step expired, PC: 000101 (HRRI 1,444444) + sim> step + + Step expired, PC: 000102 (HLR 2,1) + sim> step + + Step expired, PC: 000103 (HRL 2,1) + sim> step + + Step expired, PC: 000104 (000000000000) + sim> ex 0-3 + 0: 000000000000 + 1: 111111444444 + 2: 444444111111 + 3: 000000000000 diff --git a/apps/pdp10/tests/optest-v01.json b/apps/pdp10/tests/optest-v01.json new file mode 100644 index 000000000..fa347e3a4 --- /dev/null +++ b/apps/pdp10/tests/optest-v01.json @@ -0,0 +1,10 @@ +{ + "load": 0o100, + "exec": 0o100, + "data": [ + 0o505040111111, // HRLI 1,111111 + 0o541040444444, // HRRI 1,444444 + 0o544100000001, // HLR 2,1 + 0o504100000001, // HRL 2,1 + ] +} diff --git a/apps/pdp10/tests/optest.json b/apps/pdp10/tests/optest.json deleted file mode 100644 index e4cdc9c42..000000000 --- a/apps/pdp10/tests/optest.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "load": 0o100, - "exec": 0o100, - "data": [ - 0o505040111111, // HRLI 1,111111 - 0o541040222222, // HRRI 1,222222 - 0o544100000001, // HLR 2,1 - 0o504100000001, // HRL 2,1 - // - // >> dw 0 l4 - // 000000: 000000 000000 111111 222222 222222 111111 000000 000000 - // - // Compare to SIMH: - // - // sim> dep 100 505040111111 - // sim> dep 101 541040222222 - // sim> dep 102 544100000001 - // sim> dep 103 504100000001 - // sim> ex -m 100-103 - // 100: HRLI 1,111111 - // 101: HRRI 1,222222 - // 102: HLR 2,1 - // 103: HRL 2,1 - // sim> dep pc 100 - // sim> step - // - // Step expired, PC: 000101 (HRRI 1,222222) - // sim> step - // - // Step expired, PC: 000102 (HLR 2,1) - // sim> step - // - // Step expired, PC: 000103 (HRL 2,1) - // sim> step - // - // Step expired, PC: 000104 (000000000000) - // sim> ex 0-3 - // 0: 000000000000 - // 1: 111111222222 - // 2: 222222111111 - // 3: 000000000000 - ] -} diff --git a/devices/pdp10/machine/ka10/test/README.md b/devices/pdp10/machine/ka10/test/README.md index bccf4f095..70ad9e6e5 100644 --- a/devices/pdp10/machine/ka10/test/README.md +++ b/devices/pdp10/machine/ka10/test/README.md @@ -3,7 +3,7 @@ layout: page title: PDP-10 (Model KA10) Test Machine permalink: /devices/pdp10/machine/ka10/test/ machines: - - id: ka10test + - id: testka10 type: pdp10 --- @@ -14,4 +14,4 @@ A PDP-10 (Model KA10) is simulated below. **WARNING**: PDP-10 emulation is still in development, so functionality will be limited until further notice. -{% include machine.html id="ka10test" %} +{% include machine.html id="testka10" %} diff --git a/devices/pdp10/machine/ka10/test/debugger/README.md b/devices/pdp10/machine/ka10/test/debugger/README.md index ad8b6c6ea..4af850265 100644 --- a/devices/pdp10/machine/ka10/test/debugger/README.md +++ b/devices/pdp10/machine/ka10/test/debugger/README.md @@ -3,7 +3,7 @@ layout: page title: PDP-10 (Model KA10) Test Machine with Debugger permalink: /devices/pdp10/machine/ka10/test/debugger/ machines: - - id: ka10test + - id: testka10 type: pdp10 debugger: true --- @@ -15,4 +15,4 @@ A PDP-10 (Model KA10) is simulated below. **WARNING**: PDP-10 emulation is still in development, so functionality will be limited until further notice. -{% include machine.html id="ka10test" %} +{% include machine.html id="testka10" %} diff --git a/devices/pdp10/machine/ka10/test/debugger/machine.xml b/devices/pdp10/machine/ka10/test/debugger/machine.xml index 64045e743..31fdcacc5 100644 --- a/devices/pdp10/machine/ka10/test/debugger/machine.xml +++ b/devices/pdp10/machine/ka10/test/debugger/machine.xml @@ -1,10 +1,10 @@ - + PDP-10 Test Machine with Debugger - + diff --git a/devices/pdp10/machine/ka10/test/machine.xml b/devices/pdp10/machine/ka10/test/machine.xml index e8a6fe7a0..86bae80b6 100644 --- a/devices/pdp10/machine/ka10/test/machine.xml +++ b/devices/pdp10/machine/ka10/test/machine.xml @@ -1,10 +1,10 @@ - + PDP-10 Test Machine - + diff --git a/modules/pdp10/lib/cpustate.js b/modules/pdp10/lib/cpustate.js index f94addad5..05449adfe 100644 --- a/modules/pdp10/lib/cpustate.js +++ b/modules/pdp10/lib/cpustate.js @@ -337,10 +337,14 @@ class CPUStatePDP10 extends CPUPDP10 { */ getOpcode() { + /* + * Technically, we don't REALLY need to mask regRA with R_MASK, because all regRA accesses + * ignore any higher opcode bits, but let's keep things tidy. + */ if ((this.regRA & PDP10.OPCODE.I_BIT)) { - this.regRA = this.readWord(this.regEA); + this.regRA = this.readWord(this.regEA) & PDP10.OPCODE.R_MASK; } else { - this.regRA = this.regOP = this.readWord(this.lastPC = this.regPC); + this.regRA = (this.regOP = this.readWord(this.lastPC = this.regPC)) & PDP10.OPCODE.R_MASK; } /* diff --git a/modules/pdp10/lib/debugger.js b/modules/pdp10/lib/debugger.js index 244624463..12eccc19d 100644 --- a/modules/pdp10/lib/debugger.js +++ b/modules/pdp10/lib/debugger.js @@ -227,6 +227,24 @@ class DebuggerPDP10 extends Debugger { return {addr: addr, fPhysical: fPhysical, fTemporary: false, nBase: nBase}; } + /** + * copyAddr(dbgAddr, dbgCopy) + * + * Updates an EXISTING DbgAddrPDP10 object, initialized with specified values and/or defaults. + * + * @this {DebuggerPDP10} + * @param {DbgAddrPDP10} dbgAddr + * @param {DbgAddrPDP10} dbgCopy + * @return {DbgAddrPDP10} + */ + copyAddr(dbgAddr, dbgCopy) + { + dbgAddr.addr = dbgCopy.addr; + dbgAddr.fTemporary = dbgCopy.fTemporary; + dbgAddr.nBase = dbgCopy.nBase; + return dbgAddr; + } + /** * setAddr(dbgAddr, addr) * @@ -1083,7 +1101,7 @@ class DebuggerPDP10 extends Debugger { this.println(DebuggerPDP10.PROMPT + sCmd); } - this.dbgAddrNextCode = this.newAddr(this.cpu.getPC()); + this.setAddr(this.dbgAddrNextCode, this.cpu.getPC()); /* * this.nStep used to be a simple boolean, but now it's 0 (or undefined) @@ -1170,7 +1188,7 @@ class DebuggerPDP10 extends Debugger { this.cInstructions = this.cInstructionsStart = 0; this.sMessagePrev = null; this.nCycles = 0; - this.dbgAddrNextCode = this.newAddr(this.cpu.getPC()); + this.setAddr(this.dbgAddrNextCode, this.cpu.getPC()); /* * fRunning is set by start() and cleared by stop(). In addition, we clear * it here, so that if the CPU is reset while running, we can prevent stop() @@ -1480,21 +1498,129 @@ class DebuggerPDP10 extends Debugger { } /** - * parseInstruction(sOp, sOperand, addr) - * - * TODO: Unimplemented. See parseInstruction() in modules/c1pjs/lib/debugger.js for a sample implementation. + * parseInstruction(sOpCode, sOperands, addr) * * @this {DebuggerPDP10} - * @param {string} sOp - * @param {string|undefined} sOperand + * @param {string} sOpCode + * @param {string|undefined} sOperands * @param {DbgAddrPDP10} dbgAddr of memory where this instruction is being assembled - * @return {Array.} of opcode bytes; if the instruction can't be parsed, the array will be empty + * @return {number} (opcode, or -1 if unrecognized instruction) */ - parseInstruction(sOp, sOperand, dbgAddr) + parseInstruction(sOpCode, sOperands, dbgAddr) { - var aOpBytes = []; - this.println("not supported yet"); - return aOpBytes; + var opCode = -1, opMask; + var sMnemonic = sOpCode.toUpperCase(); + + for (var mask in DebuggerPDP10.OPTABLE) { + + var aModes; + opMask = +mask; + var opMasks = DebuggerPDP10.OPTABLE[mask]; + + switch(opMask) { + case PDP10.OPCODE.OPMODE: + aModes = DebuggerPDP10.OPMODES; + break; + case PDP10.OPCODE.OPCOMP: + aModes = DebuggerPDP10.OPCOMPS; + break; + case PDP10.OPCODE.OPTEST: + aModes = DebuggerPDP10.OPTESTS; + break; + default: + aModes = [""]; + break; + } + + var opMode = 0; + for (var op in opMasks) { + + var opNum = opMasks[op]; + for (var iMode = 0; iMode < aModes.length; iMode++) { + + var sMode = aModes[iMode]; + if (sMode == "S" && opNum > DebuggerPDP10.OPS.MOVM) sMode = "B"; + var sCandidate = DebuggerPDP10.OPNAMES[opNum] + sMode; + + if (sMnemonic == sCandidate) { + if (opMask != PDP10.OPCODE.OPTEST) { + opMode = iMode; + } else { + opMode = ((iMode & 0o3) << 1) | ((iMode & 0o14) << 2); + } + opCode = (op | (opMode << 6)) * PDP10.OPCODE.OPSHIFT; + break; + } + } + if (opCode >= 0) break; + } + if (opCode >= 0) break; + } + + if (opCode >= 0) { + if (!sOperands) { + this.println("missing operand(s)"); + opCode = -1; + } + else { + var aOperands = sOperands.split(','); + for (var i = 0; i < aOperands.length; i++) { + var sOperand = aOperands[i].trim(); + if (!sOperand) continue; + if (i > 1) { + this.println("too many operands: " + sOperand); + opCode = -1; + break; + } + var match = sOperand.match(/(@?)([^(]*)\(?([^)]*)\)?/); + if (!match) { + this.println("unknown operand: " + sOperand); + opCode = -1; + break; + } + var operand = this.parseExpression(match[2]); + if (operand == undefined) { + opCode = -1; + break; + } + if (!i && aOperands.length > 1) { + if (operand < 0 || operand > PDP10.OPCODE.A_MASK) { + this.println("accumulator index out of range: " + match[2]); + opCode = -1; + break; + } + opCode += (operand << PDP10.OPCODE.A_SHIFT); + continue; + } + if (operand < 0 || operand > PDP10.OPCODE.Y_MASK) { + this.println("address out of range: " + match[2]); + opCode = -1; + break; + } + opCode += operand; + if (match[3]) { + operand = this.parseExpression(match[3]); + if (operand == undefined) { + opCode = -1; + break; + } + if (operand < 0 || operand > PDP10.OPCODE.X_MASK) { + this.println("index out of range: " + match[3]); + opCode = -1; + break; + } + opCode += operand << PDP10.OPCODE.X_SHIFT; + } + if (match[1]) { + opCode += PDP10.OPCODE.I_BIT; + } + } + } + } + else { + this.println("unknown instruction: " + sOpCode); + } + return opCode; } /** @@ -1903,7 +2029,8 @@ class DebuggerPDP10 extends Debugger { { var sReg = this.getRegName(iReg); if (sReg) { - sReg += '=' + this.toStrBase(this.getRegValue(iReg)) + ' '; + var nBits = (iReg == DebuggerPDP10.REGS.RA? 23 : 18); + sReg += '=' + this.toStrBase(this.getRegValue(iReg), nBits) + ' '; } return sReg; } @@ -2230,19 +2357,24 @@ class DebuggerPDP10 extends Debugger { var dbgAddr = this.parseAddr(asArgs[1], true); if (!dbgAddr) return; + var sOpCode = asArgs[2]; this.dbgAddrAssemble = dbgAddr; - if (asArgs[2] === undefined) { + + if (sOpCode == undefined) { this.println("begin assemble at " + this.toStrAddr(dbgAddr)); this.fAssemble = true; this.cmp.updateDisplays(); return; } - var aOps = this.parseInstruction(asArgs[2], asArgs[3], dbgAddr); - if (aOps.length) { - for (var i = 0; i < aOps.length; i++) { - this.setWord(dbgAddr, aOps[i], 1); - } + asArgs.shift(); + asArgs.shift(); + asArgs.shift(); + var sOperands = asArgs.join(""); + var opCode = this.parseInstruction(sOpCode, sOperands, dbgAddr); + + if (opCode >= 0) { + this.setWord(dbgAddr, opCode); /* * Since getInstruction() also updates the specified address, dbgAddrAssemble is automatically advanced. */ @@ -2500,8 +2632,7 @@ class DebuggerPDP10 extends Debugger { } if (sDump) this.println(sDump); - - this.dbgAddrNextData = dbgAddr; + this.copyAddr(this.dbgAddrNextData, dbgAddr); this.nBase = nBase; } @@ -2532,7 +2663,7 @@ class DebuggerPDP10 extends Debugger { for (var i = 2; i < asArgs.length; i++) { var vNew = this.parseExpression(asArgs[i]); if (vNew === undefined) { - this.println("unrecognized value: " + asArgs[i]); + this.println("unknown value: " + asArgs[i]); break; } this.println("changing " + this.toStrAddr(dbgAddr) + " from " + this.toStrWord(fnGet.call(this, dbgAddr)) + " to " + this.toStrWord(vNew)); @@ -2897,7 +3028,7 @@ class DebuggerPDP10 extends Debugger { switch (sRegMatch) { case "PC": cpu.setPC(w); - this.dbgAddrNextCode = this.newAddr(cpu.getPC()); + this.setAddr(this.dbgAddrNextCode, cpu.getPC()); break; default: this.println("unknown register: " + sReg); @@ -2911,7 +3042,7 @@ class DebuggerPDP10 extends Debugger { this.println(this.getRegDump(fMisc)); if (fInstruction) { - this.dbgAddrNextCode = this.newAddr(cpu.getPC()); + this.setAddr(this.dbgAddrNextCode, cpu.getPC()); this.doUnassemble(this.toStrAddr(this.dbgAddrNextCode)); } } @@ -3243,7 +3374,7 @@ class DebuggerPDP10 extends Debugger { sInstruction = this.getInstruction(dbgAddr, sComment, nSequence); this.println(sInstruction); - this.dbgAddrNextCode = dbgAddr; + this.copyAddr(this.dbgAddrNextCode, dbgAddr); nBytes -= dbgAddr.addr - addr; nPrinted++; } @@ -3295,7 +3426,7 @@ class DebuggerPDP10 extends Debugger { if (!sCmd.length || sCmd == "end") { if (this.fAssemble) { this.println("ended assemble at " + this.toStrAddr(this.dbgAddrAssemble)); - this.dbgAddrNextCode = this.dbgAddrAssemble; + this.copyAddr(this.dbgAddrNextCode, this.dbgAddrAssemble); this.fAssemble = false; } sCmd = ""; diff --git a/modules/pdp10/lib/defines.js b/modules/pdp10/lib/defines.js index 7dab8fc3f..849100ef2 100644 --- a/modules/pdp10/lib/defines.js +++ b/modules/pdp10/lib/defines.js @@ -147,13 +147,14 @@ var PDP10 = { OPSHIFT: Math.pow(2, 21), // operation shift IOSHIFT: Math.pow(2, 26), // input-output device code shift IOMASK: 0o177, // input-output device code mask (after shift) - ACSHIFT: Math.pow(2, 23), // used to isolate the high 13 bits, with A starting at bit 0 + ACSHIFT: Math.pow(2, 23), // used to shift down the high 13 bits, with A starting at bit 0 A_SHIFT: 23, // A shift A_MASK: 0o17, // A mask (after shift) I_BIT: 0o20000000, // indirect bit X_SHIFT: 18, // X shift X_MASK: 0o17, // X mask (after shift) Y_MASK: 0o777777, // Y mask + R_MASK: 0o37777777, // used to isolate the low 23 bits (I,X,Y) HALT: 0o5304 // operation code for HALT }, diff --git a/versions/pdpjs/1.34.0/pdp10-dbg.js b/versions/pdpjs/1.34.0/pdp10-dbg.js index 6251aeeba..ad014f0af 100644 --- a/versions/pdpjs/1.34.0/pdp10-dbg.js +++ b/versions/pdpjs/1.34.0/pdp10-dbg.js @@ -28,199 +28,201 @@ http://pcjs.org/modules/shared/lib/debugger.js (C) Jeff Parsons 2012-2017 http://pcjs.org/modules/pdp10/lib/debugger.js (C) Jeff Parsons 2012-2017 */ -var l,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},ba="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this;function ca(){ca=function(){};ba.Symbol||(ba.Symbol=fa)}var ga=0;function fa(a){return"jscomp_symbol_"+(a||"")+ga++} -function ha(){ca();var a=ba.Symbol.iterator;a||(a=ba.Symbol.iterator=ba.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ia(this)}});ha=function(){}}function ia(a){var b=0;return ja(function(){return ba?-b:b}});ka("Math.log2",function(a){return a?a:function(a){return Math.log(a)/Math.LN2}}); -var la=Math.pow(2,36),sa=-Math.pow(2,35),q={Xb:0,ob:1,Zb:2,$b:3,ac:4,bc:5,cc:6,dc:7,Za:8,ec:9,pb:10,fc:11,gc:12,qb:13,hc:14,ic:15,jc:16,kc:17,lc:18,mc:19,nc:20,oc:21,pc:22,qc:23,rc:24,sc:25,tc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Ya:65,Wb:66,Yb:67,uc:68,E:69,vc:70,wc:71,xc:72,yc:73,zc:74,Ac:75,Bc:76,Cc:77,Dc:78,Ec:79,Fc:80,Q:81, +var l,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},ba="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this;function ca(){ca=function(){};ba.Symbol||(ba.Symbol=da)}var ea=0;function da(a){return"jscomp_symbol_"+(a||"")+ea++} +function fa(){ca();var a=ba.Symbol.iterator;a||(a=ba.Symbol.iterator=ba.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ja(this)}});fa=function(){}}function ja(a){var b=0;return ka(function(){return ba?-b:b}});la("Math.log2",function(a){return a?a:function(a){return Math.log(a)/Math.LN2}}); +var ma=Math.pow(2,36),na=-Math.pow(2,35),q={Xb:0,ob:1,Zb:2,$b:3,ac:4,bc:5,cc:6,dc:7,Za:8,ec:9,pb:10,fc:11,gc:12,qb:13,hc:14,ic:15,jc:16,kc:17,lc:18,mc:19,nc:20,oc:21,pc:22,qc:23,rc:24,sc:25,tc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Ya:65,Wb:66,Yb:67,uc:68,E:69,vc:70,wc:71,xc:72,yc:73,zc:74,Ac:75,Bc:76,Cc:77,Dc:78,Ec:79,Fc:80,Q:81, Gc:82,Hc:83,Ic:84,Jc:85,Kc:86,Lc:87,Mc:88,Nc:89,ub:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Oc:97,Pc:98,Qc:99,d:100,e:101,Rc:102,Sc:103,Tc:104,Uc:105,Vc:106,k:107,Wc:108,Xc:109,n:110,Yc:111,p:112,q:113,r:114,Zc:115,t:116,ad:117,bd:118,cd:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,rb:127}; -function t(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.cb=b.comment;this.tb=b;this.exports={};this.G=this.bindings={};a=this.id.indexOf(".");0>a?this.Ja=this.id:(this.Ka=this.id.substr(0,a),this.Ja=this.id.substr(a+1));this.j={ready:!1,Ea:!1,Ta:!1,V:!1,error:!1};this.La=null;this.j.error=!1;this.X=c||0;this.A=this.g=this.D=this.C=this.la=null;u.push(this)}function ta(a,b,c){ua[a]&&b&&(ua[a][b]=c)}function va(){return Date.now()||+new Date} -function v(a){window&&window.alert(a)}function wa(a){var b=!1;window&&(b=window.confirm(a));return b}function w(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;ba?this.Ja=this.id:(this.Ka=this.id.substr(0,a),this.Ja=this.id.substr(a+1));this.j={ready:!1,Ea:!1,Ta:!1,V:!1,error:!1};this.La=null;this.j.error=!1;this.X=c||0;this.A=this.g=this.D=this.C=this.ma=null;u.push(this)}function oa(a,b,c){va[a]&&b&&(va[a][b]=c)}function wa(){return Date.now()||+new Date} +function v(a){window&&window.alert(a)}function xa(a){var b=!1;window&&(b=window.confirm(a));return b}function w(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;ba&&-1>=3;return(c?"0o":"")+d} -function F(a,b,c){var d="";b?8a&&-1=e?48:55),d=String.fromCharCode(e)+d;a>>=4}return(c?"0x":"")+d}function Ra(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0"']/g,function(a){return Wa[a]})}function Xa(a,b){return(a+" ").slice(0,b)}function Ya(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Wa={"&":"&","<":"<",">":">",'"':""","'":"'"};function Za(a,b,c){var d=0,e=a.length,g=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[f]);0a?"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 H(a,b,c,d){c=void 0===c?!1:c;var e=0,g=null,f=null;if("object"==typeof resources&&(g=resources[a]))return d&&d(a,g,e),[g,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),f;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(g=h.responseText,200==h.status||!h.status&&g.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a, +function Ua(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1>=3;return(c?"0o":"")+d} +function E(a,b,c){var d="";b?8a&&-1=e?48:55),d=String.fromCharCode(e)+d;a>>=4}return(c?"0x":"")+d}function Wa(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0"']/g,function(a){return ab[a]})}function bb(a,b){return(a+" ").slice(0,b)}function cb(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var ab={"&":"&","<":"<",">":">",'"':""","'":"'"};function db(a,b,c){var d=0,e=a.length,g=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[f]);0a?"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 ob(a,b,c,d){c=void 0===c?!1:c;var e=0,g=null,f=null;if("object"==typeof resources&&(g=resources[a]))return d&&d(a,g,e),[g,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),f;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(g=h.responseText,200==h.status||!h.status&&g.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a, g,e))});if(b&&"object"==typeof b){var k="",m;for(m in b)b.hasOwnProperty(m)&&(k&&(k+="&"),k+=m+"="+encodeURIComponent(b[m]));k=k.replace(/%20/g,"+");h.open("POST",a,c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(k)}else h.open("GET",a,c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(g=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,g,e),f=[g,e]);return f} -function ib(a,b){var c,d={Y:null,U:null,ka:null,ja:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,g,f;if("<"==b.substr(0,1))throw Error(b);f=0>b.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.ka=f.load;d.ja=f.exec;if(e=f.bytes)d.Y=e;else if(e=f.words)for(d.Y=Array(2*e.length),g=c=0;c>8&255;else if(e=f.longs)for(d.Y=Array(4*e.length),g=c=0;cb.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.la=f.load;d.ka=f.exec;if(e=f.bytes)d.Y=e;else if(e=f.words)for(d.Y=Array(2*e.length),g=c=0;c>8&255;else if(e=f.longs)for(d.Y=Array(4*e.length),g=c=0;c>8&255,d.Y[g++]=e[c]>>16&255,d.Y[g++]=e[c]>>24&255;else(e=f.data)?d.za=e:d.Y=f;d.Y&&(d.Y.length?1==d.Y.length&&(v(d.Y[0]),d=null):(v("Empty resource: "+a),d=null));d.U=f.symbols}catch(h){v("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;ca;a++)this.b["S"+a]=[0,0,!1,!1,this.Gb,a];this.A=this.g=this.D=this.C=null;this.exports={hold:this.yb,toggle:this.Rb,reset:this.Nb, -set:this.Qb};E(this)}p(Ob,t);l=Ob.prototype;l.reset=function(a){this.stop();a&&Qb(this,this.v=0)}; -l.fa=function(a,b,c,d){if(this.C&&this.C.fa(a,b,c,d)||this.g&&this.g.fa(a,b,c,d)||this.A&&this.A.fa(a,b,c,d))return!0;switch(b){case "PC":return this.G[b]=c,this.L++,!0;default:return"led"==a||"rled"==a?(this.G[b]=c,this.B[b]=d?1:0,this.L++,!0):"switch"==a?(void 0===this.b[b]&&(this.b[b]=[d?1:0,d?1:0]),this.G[b]=c,a=c.parentElement||c,a=a.parentElement||a,a.onmousedown=function(a,b){return function(){Rb(a,b)}}(this,b),a.onmouseup=a.onmouseout=function(a,b){return function(){Sb(a,b)}}(this,b),a.ontouchstart= -function(a,b){return function(c){Rb(a,b);c.preventDefault()}}(this,b),a.ontouchend=function(a,b){return function(){Sb(a,b)}}(this,b),!0):t.prototype.fa.call(this,a,b,c,d)}};l.va=function(a,b,c,d){this.C=a;this.D=b;this.g=c;this.A=d;Tb(this);Ub(this)};l.na=function(a,b){if(!b)if(this.T&&Vb(),!a)this.reset(!0);else if(!this.restore(a))return!1;return!0};l.ea=function(a){return a?this.save():!0};l.save=function(){var a=new L(this);a.set(0,[this.i,this.v,this.u]);return a.data()}; -l.restore=function(a){if(a=a[0])Wb(this,this.i=a[0]),Qb(this,this.v=a[1]),Xb(this,a[2]);return!0};l.Nb=function(){for(var a in this.b){var b=this.b[a];b[1]=b[0]}Ub(this);return!0};function Yb(a,b,c){if(a=a.G[b])a.style.backgroundColor=c?"#ff0000":"#000000"}function Tb(a,b){for(var c in a.B)Yb(a,c,null!=b?b:a.B[c])}function Zb(a,b,c){if(a=a.G[b])a.style.marginTop=c?"0px":"20px",a.style.backgroundColor=c?"#00ff00":"#228B22"}function Ub(a){for(var b in a.b)Zb(a,b,a.b[b][1])} -l.yb=function(a,b,c){if(Rb(this,b)){if(c){var d=this;setTimeout(function(){Sb(d,b);a&&a()},+c);return!1}Sb(this,b)}return!0};l.Qb=function(a,b){if("SR"==a)return Xb(this,Pa(b,8));var c=this.b[a];return c?(c[1]=+b?1:0,Zb(this,a,c[1]),!0):!1};l.Rb=function(a){return Rb(this,a)?(Sb(this,a),!0):!1};function Rb(a,b){var c=a.b[b];return c?(Zb(a,b,c[1]=1-c[1]),c[3]=!0,c[4]&&c[4].call(a,c[1],c[5]),b!=$b&&(a.O=b==ac,a.R=b==bc),!0):!1} -function Sb(a,b){var c=a.b[b];c&&(c[2]&&c[3]&&(Zb(a,b,c[1]=c[0]),c[4]&&c[4].call(a,c[1],c[5])),c[3]=!1)}l.Hb=function(a){a||this.g.j.K||(this.g.u=this.i%Cb,this.b[cc]&&this.b[cc][1]&&dc(this.g))};l.Ib=function(){};l.Cb=function(a){a||this.g.W()}; -l.Ab=function(a){if(!a&&!this.g.j.K)if(this.b[cc]&&this.b[cc][1])dc(this.g);else{if((a=this.A)&&!La(a,!0))Ma(a,!0),ec(a,0,null),Ma(a,!1);else try{var b=this.g.Ia(1);0c;c++){var d=a,e="A"+c,g=b&1<c;c++){var d=a,e="D"+c,g=b&1<b;b++)a.b["S"+b][1]=a.u&1<d.length){for(var e=0,g=Array(4096),f=0;f>>a.i;0g&&(m=g);if(h&&h.size){if(h.type==d){if(e+g<=h.w)return h.Ga+=h.w-e,h.w=e,!0;if(e>=h.w+h.Ga){m=h.size-(e-k);m>g&&(m=g);h.Ga=e-h.w+m;e=k+16384;g-=m;f++;continue}}return qc(rc,e,g)}e=new mc(a,e,m,16384,d);nc(e,a.A,h);a.b[f++]=e;e=k+16384;g-=m}return 0>=g?(a.status("Added "+(c>>10)+"Kb "+sc[d]+" at "+Qa(b)),!0):qc(tc,b,c)} -function kc(a,b){var c=a.b[(b&a.u)>>>a.i];a.v++;b=c.G(b&16383,b);a.v--;return b}function jc(a,b,c){var d=a.b[(b&a.u)>>>a.i];a.v++;d.D(c,b&16383,b);a.v--}function oc(a){for(var b=0,c=[],d=0;d=a.ga&&(a.ga+=a.ca,c=!0);0<=a.ha&&a.ha<=dd(a)&&(a.ca=a.ha=-1,$c(a),a.W(),c=!0);c&&a.f(dd(a)+" cycles: checksum="+F(a.sa))}} -l.fa=function(a,b,c){var d=this;switch(b){case "power":case "reset":return this.G[b]=c,!0;case "run":return this.G[b]=c,c.onclick=function(){var a;if(a=d.C)if(a=d.C,a.j.V)a=!0;else{var b=null,c,h=w(a.id);for(c=0;ca.R/a.S?b=1:d=!0;a.T=b;b=a.Pa*a.T;if(a.S!=b){a.S=b;b=a.S.toFixed(2)+"Mhz";var e=a.G.setSpeed;e&&(e.textContent=b);a.f("target speed: "+b)}c&&a.C&&hd(a.C)}gc(a,a.F);a.F=0;a.B=va();a.J=0;fd(a);return d}function id(a,b){for(var c=a.I.length-1;0<=c;c--){var d=a.I[c];0>d[0]||b>d[0]&&(b=d[0])}return b}function jd(a){for(var b=[],c=0;cd[0]||(d[0]-=b,0>=d[0]&&(d[0]=-1,d[1]()))}}function kd(a,b){var c=a.L-=a.M;a.M=0;b&&(a.L=0);return c} -l.Ob=function(){if(this.j.K){this.xa>=this.Ra&&fd(this,!0);this.ia=0;this.ra=va();if(this.J){var a=this.ra-this.J;a>this.Qa&&(this.B+=a,this.B>this.ra&&(this.B=this.ra))}try{do{var b=id(this,this.j.Da?1:this.ua);try{this.Ia(b)}catch(e){if("number"!=typeof e)throw e;}b=kd(this,!0);this.ia+=b;this.F+=b;hc(this,b);fc(this,b);this.aa-=b;if(0>=this.aa){this.aa+=this.ua;++this.Sa>=ld&&(this.C&&M(this.C,void 0),this.Sa=0);break}}while(this.j.K)}catch(e){this.W();this.C&&this.C.stop(va(),dd(this));Ia(this, -e.stack||e.message);return}if(this.j.K){a=setTimeout;b=this.fb;this.J=va();var c=this.Qa;this.ia&&(c=Math.round(c*this.ia/this.ua));var c=c-(this.J-this.ra),d=this.J-this.B;d&&(this.R=Math.round(this.F/(10*d))/100,864E5<=d&&(this.N=0,ed(this)));if(0>c||this.Rc&&(this.B-=c),c=0;this.xa+=this.ia;this.J+=c;a(b,c)}}}; -function dc(a,b){if(!Ja(a))if(a.j.K)a.f(a.toString()+" busy");else{ed(a);a.j.K=!0;a.j.Oa=!0;var c=a.G.run;c&&(c.textContent="Halt");a.C&&(b&&hd(a.C,!0),a.C.start(a.B,dd(a)));a.A||a.status("Started");setTimeout(a.fb,0)}}l.Ia=function(){return 0};l.W=function(a){var b=!1;if(this.j.K){kd(this);gc(this,this.F);this.F=0;this.j.K=!1;if(b=this.G.run)b.textContent="Run";this.C&&this.C.stop(va(),dd(this));b=!0;this.A||this.status("Stopped")}this.j.complete=a;return b};var gd=30,ld=15,Xc=["power","reset"]; -function md(a){var b=+a.model||1001;Wc.call(this,a,1E6);this.eb=b;this.bb=+a.addrReset||0;this.sb=nd.bind(this);this.b=P.bind(this);this.oa=null;this.ab=[];this.j.complete=!1}p(md,Wc);l=md.prototype;l.reset=function(){this.status("Model "+this.eb);this.j.K&&this.W();this.i=this.O=this.ya=0;this.pa=this.u=this.qa=this.bb;this.v=0;this.H=this.Kb;this.P=this.Vb;this.oa=null;Zc(this);this.j.error=!1;Wc.prototype.reset.call(this)};l.lb=function(){return 0}; -l.save=function(){var a=new L(this);a.set(0,[this.i,this.O,this.ya,this.u,this.qa,this.pa,this.v]);a.set(1,[]);a.set(2,[this.N,this.T,this.j.Z]);a.set(3,od(this));a.set(4,jd(this));return a.data()}; -l.restore=function(a){var b;b=a[0];ha();ca();ha();var c=b[Symbol.iterator];b=c?c.call(b):ia(b);this.i=b.next().value;this.O=b.next().value;this.ya=b.next().value;this.u=b.next().value;this.qa=b.next().value;this.pa=b.next().value;this.v=b.next().value;b=a[2];this.N=b[0];ed(this,b[1]);this.j.Z=b[2];b=a[3];for(c=b.length-1;0<=c;c--){var d;a:{for(d=0;d>>b.i].H(a&16383,a)};l.Vb=function(a,b){var c=this.D;a=this.pa=a;c.b[(a&c.u)>>>c.i].P(b,a&16383,a)}; -l.Ia=function(a){this.j.complete=!0;var b=this.A?qd(this.A)?1:this.j.Oa?-1:0:0,c=a?this.j.Oa?0:1:-1;this.j.Oa=!1;this.L=this.M=a;this.v=this.v&-5|(b?4:0);do{if(this.v){if(this.v&4){if(rd(this.A,this.u,c)){this.W();break}++b||(this.v&=-5);c||c++}if(a=this.v&11)this.v&2?this.oa||(this.v&=-3):this.v&1&&this.v++,a=!1;if(a){if(this.v&4&&rd(this.A,this.u,c)){this.W();break}if(0>c)break}}this.v&=15;this.O=this.O&4194304?this.H(this.i):this.ya=this.H(this.qa=this.u);this.i=this.O&262143;if(a=this.O>>18&15)this.i= -this.i+this.H(a)&Db;this.O&4194304?a=-1:(this.u=(this.u+1)%Cb,a=this.ya/Nb|0);0<=a&&this.sb(a)}while(0>4].call(this,a)}function Q(a){this.b(a)}function td(a){this.b(a)}function ud(a){this.b(a)}function vd(a){var b=a&15,c=this.H(this.i),d=this.H(b),d=wd(a,d,c)+(c-(c&262143));this.P(b,d)} -function xd(a){var b=a&15,c=this.H(b),c=wd(a,c,0);this.P(b,c)}function yd(a){var b=this.H(a&15),c=this.H(this.i),c=wd(a,c,b)+(b-(b&262143));this.P(this.i,c)}function zd(a){var b=this.H(this.i);this.P(this.i,wd(a,b,b));var c=a&15;c&&(b=this.H(c),this.P(c,wd(a,b,b)))}function Ad(a){a&=15;var b=this.H(this.i)&262143,c=this.H(a);this.P(a,c-(c&262143)+b)}function W(a){this.b(a)}function P(a){this.f("undefined opcode: "+Qa(a));pd(this,-1);this.W()} -function wd(a,b,c){switch(a&384){case 0:b&=262143;break;case 128:b=0;break;case 256:b=262143;break;case 384:b=c>Fb?262143:0}return b} -var sd=[Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, +function Za(){return"http://"+(window?window.location.host:"www.pcjs.org")}function qb(){if(null==rb){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}rb=a}return rb}function sb(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b} +function tb(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ub(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1} +function vb(a){if(!wb){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,g=/([^&=]+)=?([^&]*)/g;d=g.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}wb=c}return wb[a]}function xb(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0a;a++)this.b["S"+a]=[0,0,!1,!1,this.Gb,a];this.A=this.g=this.D=this.C=null;this.exports={hold:this.yb,toggle:this.Rb,reset:this.Nb, +set:this.Qb};D(this)}p(Wb,t);l=Wb.prototype;l.reset=function(a){this.stop();a&&Yb(this,this.v=0)}; +l.ga=function(a,b,c,d){if(this.C&&this.C.ga(a,b,c,d)||this.g&&this.g.ga(a,b,c,d)||this.A&&this.A.ga(a,b,c,d))return!0;switch(b){case "PC":return this.G[b]=c,this.L++,!0;default:return"led"==a||"rled"==a?(this.G[b]=c,this.B[b]=d?1:0,this.L++,!0):"switch"==a?(void 0===this.b[b]&&(this.b[b]=[d?1:0,d?1:0]),this.G[b]=c,a=c.parentElement||c,a=a.parentElement||a,a.onmousedown=function(a,b){return function(){Zb(a,b)}}(this,b),a.onmouseup=a.onmouseout=function(a,b){return function(){$b(a,b)}}(this,b),a.ontouchstart= +function(a,b){return function(c){Zb(a,b);c.preventDefault()}}(this,b),a.ontouchend=function(a,b){return function(){$b(a,b)}}(this,b),!0):t.prototype.ga.call(this,a,b,c,d)}};l.va=function(a,b,c,d){this.C=a;this.D=b;this.g=c;this.A=d;ac(this);bc(this)};l.na=function(a,b){if(!b)if(this.T&&cc(),!a)this.reset(!0);else if(!this.restore(a))return!1;return!0};l.fa=function(a){return a?this.save():!0};l.save=function(){var a=new J(this);a.set(0,[this.i,this.v,this.u]);return a.data()}; +l.restore=function(a){if(a=a[0])dc(this,this.i=a[0]),Yb(this,this.v=a[1]),ec(this,a[2]);return!0};l.Nb=function(){for(var a in this.b){var b=this.b[a];b[1]=b[0]}bc(this);return!0};function fc(a,b,c){if(a=a.G[b])a.style.backgroundColor=c?"#ff0000":"#000000"}function ac(a,b){for(var c in a.B)fc(a,c,null!=b?b:a.B[c])}function gc(a,b,c){if(a=a.G[b])a.style.marginTop=c?"0px":"20px",a.style.backgroundColor=c?"#00ff00":"#228B22"}function bc(a){for(var b in a.b)gc(a,b,a.b[b][1])} +l.yb=function(a,b,c){if(Zb(this,b)){if(c){var d=this;setTimeout(function(){$b(d,b);a&&a()},+c);return!1}$b(this,b)}return!0};l.Qb=function(a,b){if("SR"==a)return ec(this,Ua(b,8));var c=this.b[a];return c?(c[1]=+b?1:0,gc(this,a,c[1]),!0):!1};l.Rb=function(a){return Zb(this,a)?($b(this,a),!0):!1};function Zb(a,b){var c=a.b[b];return c?(gc(a,b,c[1]=1-c[1]),c[3]=!0,c[4]&&c[4].call(a,c[1],c[5]),b!=hc&&(a.O=b==ic,a.R=b==jc),!0):!1} +function $b(a,b){var c=a.b[b];c&&(c[2]&&c[3]&&(gc(a,b,c[1]=c[0]),c[4]&&c[4].call(a,c[1],c[5])),c[3]=!1)}l.Hb=function(a){a||this.g.j.K||(this.g.u=this.i%Jb,this.b[kc]&&this.b[kc][1]&&lc(this.g))};l.Ib=function(){};l.Cb=function(a){a||this.g.W()}; +l.Ab=function(a){if(!a&&!this.g.j.K)if(this.b[kc]&&this.b[kc][1])lc(this.g);else{if((a=this.A)&&!Qa(a,!0))Ra(a,!0),mc(a,0,null),Ra(a,!1);else try{var b=this.g.Ia(1);0c;c++){var d=a,e="A"+c,g=b&1<c;c++){var d=a,e="D"+c,g=b&1<b;b++)a.b["S"+b][1]=a.u&1<d.length){for(var e=0,g=Array(4096),f=0;f>>a.i;0g&&(m=g);if(h&&h.size){if(h.type==d){if(e+g<=h.w)return h.Ga+=h.w-e,h.w=e,!0;if(e>=h.w+h.Ga){m=h.size-(e-k);m>g&&(m=g);h.Ga=e-h.w+m;e=k+16384;g-=m;f++;continue}}return yc(zc,e,g)}e=new uc(a,e,m,16384,d);vc(e,a.A,h);a.b[f++]=e;e=k+16384;g-=m}return 0>=g?(a.status("Added "+(c>>10)+"Kb "+Ac[d]+" at "+Va(b)),!0):yc(Bc,b,c)} +function sc(a,b){var c=a.b[(b&a.u)>>>a.i];a.v++;b=c.G(b&16383,b);a.v--;return b}function rc(a,b,c){var d=a.b[(b&a.u)>>>a.i];a.v++;d.D(c,b&16383,b);a.v--}function wc(a){for(var b=0,c=[],d=0;d=a.ha&&(a.ha+=a.da,c=!0);0<=a.ia&&a.ia<=qd(a)&&(a.da=a.ia=-1,md(a),a.W(),c=!0);c&&a.f(qd(a)+" cycles: checksum="+E(a.sa))}} +l.ga=function(a,b,c){var d=this;switch(b){case "power":case "reset":return this.G[b]=c,!0;case "run":return this.G[b]=c,c.onclick=function(){var a;if(a=d.C)if(a=d.C,a.j.V)a=!0;else{var b=null,c,h=w(a.id);for(c=0;ca.R/a.S?b=1:d=!0;a.T=b;b=a.Pa*a.T;if(a.S!=b){a.S=b;b=a.S.toFixed(2)+"Mhz";var e=a.G.setSpeed;e&&(e.textContent=b);a.f("target speed: "+b)}c&&a.C&&ud(a.C)}oc(a,a.F);a.F=0;a.B=wa();a.J=0;sd(a);return d}function vd(a,b){for(var c=a.I.length-1;0<=c;c--){var d=a.I[c];0>d[0]||b>d[0]&&(b=d[0])}return b}function wd(a){for(var b=[],c=0;cd[0]||(d[0]-=b,0>=d[0]&&(d[0]=-1,d[1]()))}}function xd(a,b){var c=a.L-=a.M;a.M=0;b&&(a.L=0);return c} +l.Ob=function(){if(this.j.K){this.xa>=this.Ra&&sd(this,!0);this.ja=0;this.ra=wa();if(this.J){var a=this.ra-this.J;a>this.Qa&&(this.B+=a,this.B>this.ra&&(this.B=this.ra))}try{do{var b=vd(this,this.j.Da?1:this.ua);try{this.Ia(b)}catch(e){if("number"!=typeof e)throw e;}b=xd(this,!0);this.ja+=b;this.F+=b;pc(this,b);nc(this,b);this.aa-=b;if(0>=this.aa){this.aa+=this.ua;++this.Sa>=yd&&(this.C&&K(this.C,void 0),this.Sa=0);break}}while(this.j.K)}catch(e){this.W();this.C&&this.C.stop(wa(),qd(this));Na(this, +e.stack||e.message);return}if(this.j.K){a=setTimeout;b=this.fb;this.J=wa();var c=this.Qa;this.ja&&(c=Math.round(c*this.ja/this.ua));var c=c-(this.J-this.ra),d=this.J-this.B;d&&(this.R=Math.round(this.F/(10*d))/100,864E5<=d&&(this.N=0,rd(this)));if(0>c||this.Rc&&(this.B-=c),c=0;this.xa+=this.ja;this.J+=c;a(b,c)}}}; +function lc(a,b){if(!Oa(a))if(a.j.K)a.f(a.toString()+" busy");else{rd(a);a.j.K=!0;a.j.Oa=!0;var c=a.G.run;c&&(c.textContent="Halt");a.C&&(b&&ud(a.C,!0),a.C.start(a.B,qd(a)));a.A||a.status("Started");setTimeout(a.fb,0)}}l.Ia=function(){return 0};l.W=function(a){var b=!1;if(this.j.K){xd(this);oc(this,this.F);this.F=0;this.j.K=!1;if(b=this.G.run)b.textContent="Run";this.C&&this.C.stop(wa(),qd(this));b=!0;this.A||this.status("Stopped")}this.j.complete=a;return b};var td=30,yd=15,jd=["power","reset"]; +function zd(a){var b=+a.model||1001;id.call(this,a,1E6);this.eb=b;this.bb=+a.addrReset||0;this.sb=Ad.bind(this);this.b=N.bind(this);this.oa=null;this.ab=[];this.j.complete=!1}p(zd,id);l=zd.prototype;l.reset=function(){this.status("Model "+this.eb);this.j.K&&this.W();this.i=this.O=this.ya=0;this.pa=this.u=this.qa=this.bb;this.v=0;this.H=this.Kb;this.P=this.Vb;this.oa=null;ld(this);this.j.error=!1;id.prototype.reset.call(this)};l.lb=function(){return 0}; +l.save=function(){var a=new J(this);a.set(0,[this.i,this.O,this.ya,this.u,this.qa,this.pa,this.v]);a.set(1,[]);a.set(2,[this.N,this.T,this.j.Z]);a.set(3,Bd(this));a.set(4,wd(this));return a.data()}; +l.restore=function(a){var b;b=a[0];fa();ca();fa();var c=b[Symbol.iterator];b=c?c.call(b):ja(b);this.i=b.next().value;this.O=b.next().value;this.ya=b.next().value;this.u=b.next().value;this.qa=b.next().value;this.pa=b.next().value;this.v=b.next().value;b=a[2];this.N=b[0];rd(this,b[1]);this.j.Z=b[2];b=a[3];for(c=b.length-1;0<=c;c--){var d;a:{for(d=0;d>>b.i].H(a&16383,a)};l.Vb=function(a,b){var c=this.D;a=this.pa=a;c.b[(a&c.u)>>>c.i].P(b,a&16383,a)}; +l.Ia=function(a){this.j.complete=!0;var b=this.A?Dd(this.A)?1:this.j.Oa?-1:0:0,c=a?this.j.Oa?0:1:-1;this.j.Oa=!1;this.L=this.M=a;this.v=this.v&-5|(b?4:0);do{if(this.v){if(this.v&4){if(Ed(this.A,this.u,c)){this.W();break}++b||(this.v&=-5);c||c++}if(a=this.v&11)this.v&2?this.oa||(this.v&=-3):this.v&1&&this.v++,a=!1;if(a){if(this.v&4&&Ed(this.A,this.u,c)){this.W();break}if(0>c)break}}this.v&=15;this.O=this.O&4194304?this.H(this.i)&8388607:(this.ya=this.H(this.qa=this.u))&8388607;this.i=this.O&262143; +if(a=this.O>>18&15)this.i=this.i+this.H(a)&Kb;this.O&4194304?a=-1:(this.u=(this.u+1)%Jb,a=this.ya/Pb|0);0<=a&&this.sb(a)}while(0>4].call(this,a)}function O(a){this.b(a)}function Gd(a){this.b(a)}function Hd(a){this.b(a)} +function Id(a){var b=a&15,c=this.H(this.i),d=this.H(b),d=Jd(a,d,c)+(c-(c&262143));this.P(b,d)}function Kd(a){var b=a&15,c=this.H(b),c=Jd(a,c,0);this.P(b,c)}function Ld(a){var b=this.H(a&15),c=this.H(this.i),c=Jd(a,c,b)+(b-(b&262143));this.P(this.i,c)}function Md(a){var b=this.H(this.i);this.P(this.i,Jd(a,b,b));var c=a&15;c&&(b=this.H(c),this.P(c,Jd(a,b,b)))}function Nd(a){a&=15;var b=this.H(this.i)&262143,c=this.H(a);this.P(a,c-(c&262143)+b)}function P(a){this.b(a)} +function N(a){this.f("undefined opcode: "+Va(a));Cd(this,-1);this.W()}function Jd(a,b,c){switch(a&384){case 0:b&=262143;break;case 128:b=0;break;case 256:b=262143;break;case 384:b=c>Mb?262143:0}return b} +var Fd=[O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},td,ud,ud,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},td,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},P,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -function(a){this.b(a)},function(a){this.b(a)},P,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, +function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Gd,Hd,Hd,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Gd,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, +function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},N,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, +function(a){this.b(a)},function(a){this.b(a)},N,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},vd,xd,yd,zd,function(a){a&=15;var b=this.H(this.i)&262143,c=this.H(a),c=(c&262143)+b*I;this.P(a,c)},function(a){a&=15;var b=this.H(a),b=(b&262143)+this.i*I;this.P(a,b)},function(a){a= -this.H(a&15)&262143;var b=this.H(this.i),b=(b&262143)+a*I;this.P(this.i,b)},function(a){var b=this.H(this.i)&262143;this.P(this.i,b+b*I);if(a&=15)b=this.H(a)&262143,this.P(a,b+b*I)},vd,xd,yd,zd,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},vd,xd,yd,zd,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},vd,xd,yd,zd,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Ad,function(a){a&= -15;var b=this.H(a),b=b-(b&262143)+this.i;this.P(a,b)},function(a){a=this.H(a&15)&262143;var b=this.H(this.i);this.P(this.i,b-(b&262143)+a)},function(a){a&15&&Ad.call(this,a)},function(a){a&=15;var b=this.H(this.i)/I|0,c=this.H(a);this.P(a,c-(c&262143)+b)},function(a){a&=15;var b=this.H(a);this.P(a,b-(b&262143))},function(a){a=this.H(a&15)/I|0;var b=this.H(this.i);this.P(this.i,b-(b&262143)+a)},function(a){var b=this.H(this.i);this.P(this.i,(b&262143)+(b/I|0));if(a&=15)b=this.H(a),this.P(a,(b&262143)+ -(b/I|0))},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, +function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Id,Kd,Ld,Md,function(a){a&=15;var b=this.H(this.i)&262143,c=this.H(a),c=(c&262143)+b*F;this.P(a,c)},function(a){a&=15;var b=this.H(a),b=(b&262143)+this.i*F;this.P(a,b)},function(a){a= +this.H(a&15)&262143;var b=this.H(this.i),b=(b&262143)+a*F;this.P(this.i,b)},function(a){var b=this.H(this.i)&262143;this.P(this.i,b+b*F);if(a&=15)b=this.H(a)&262143,this.P(a,b+b*F)},Id,Kd,Ld,Md,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Id,Kd,Ld,Md,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Id,Kd,Ld,Md,function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Nd,function(a){a&= +15;var b=this.H(a),b=b-(b&262143)+this.i;this.P(a,b)},function(a){a=this.H(a&15)&262143;var b=this.H(this.i);this.P(this.i,b-(b&262143)+a)},function(a){a&15&&Nd.call(this,a)},function(a){a&=15;var b=this.H(this.i)/F|0,c=this.H(a);this.P(a,c-(c&262143)+b)},function(a){a&=15;var b=this.H(a);this.P(a,b-(b&262143))},function(a){a=this.H(a&15)/F|0;var b=this.H(this.i);this.P(this.i,b-(b&262143)+a)},function(a){var b=this.H(this.i);this.P(this.i,(b&262143)+(b/F|0));if(a&=15)b=this.H(a),this.P(a,(b&262143)+ +(b/F|0))},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W]; -function Bd(a){t.call(this,"ROM",a,128);this.U=this.b=null;this.B=+a.addr;this.u=+a.size;this.i=a.alias;"string"==typeof this.i&&(this.i=eval(this.i));this.v=a.file;this.F=Ra(this.v);if(this.v){a=this.v;var b=Sa(this.F);"json"!=b&&"hex"!=b&&(a=Ua()+"/api/v1/dump?file="+this.v+"&format=bytes&decimal=true");var c=this;H(a,null,!0,function(a,b,g){g?(c.ba("Unable to load ROM resource (error "+g+": "+a+")"),c.v=null):(ta(c.Ka,a,b),(a=ib(a,b))?(c.b=a.Y,c.U=a.U):c.v=null);Cd(c)})}}p(Bd,t); -Bd.prototype.va=function(a,b,c,d){this.D=b;this.g=c;this.A=d;Cd(this)};Bd.prototype.na=function(){this.U&&(this.A&&Dd(this.A,this.id,this.B,this.u,this.U),delete this.U);return!0};Bd.prototype.ea=function(){return!0}; -function Cd(a){if(!Ka(a)){if(a.v){if(!a.b||!a.D)return;a.u||(a.u=a.b.length);if(a.b.length!=a.u)Ia(a,"ROM size ("+F(a.b.length,8,!0)+") does not match specified size ("+F(a.u,8,!0)+")");else{var b;b=a.B;if(pc(a.D,b,a.u,Nc)){var c;for(c=0;c>>g.i;0>>= -g.i;0>>a.i;0f&&f>=sa&&(f+=la);f=Math.trunc(Math.abs(f))%la;void 0===g&&(g=e.size);for(h=d;g--&&h=q.Ya&&c<=q.ub&&(b=c-(q.Ya-q.ob));b&&(a.preventDefault&&a.preventDefault(),d.Ma(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==q.qb&&(b=q.pb);d.Ma(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation(); -a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ma(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.va=function(a,b,c,d){this.C=a;this.D=b;this.g=c;this.A=d;E(this)}; -l.nb=function(a){if(!this.b){var b=Yc(this.C,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Ya(c[0]);if(d!=this.Ja)return;c=Ya(c[1]);if(this.b=xa(c)){var e=this.b.exports;if(e){var g=e.connect;g&&g.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Ka+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.na=function(a,b){if(!b)if(this.nb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0}; -l.ea=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new L(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ma=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;da.v&&a.u.length&&(a.v=0);if(0>a.v||b!=a.u[a.v])a.u.splice(0,0,b),a.v=0;a.v--}else a.R?b="end":b=a.u[a.v+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var g=0;g<=b.length;g++){var f=b.charAt(g);if('"'==f||"'"==f)e?f==e&&(e=null):e=f;else if(f==d&&!e||!f)a.push(Ya(b.substring(c,g))),c=g+1}}return a} -function Ld(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),g=a.pop();switch(d){case "*":d=g*e;break;case "/":if(!e)return!1;d=g/e;break;case "%":if(!e)return!1;d=g%e;break;case "+":d=g+e;break;case "-":d=g-e;break;case "<<":d=g<>":d=g>>e;break;case ">>>":d=g>>>e;break;case "<":d=g":d=g>e?1:0;break;case ">=":d=g>=e?1:0;break;case "==":d=g==e?1:0;break;case "!=":d=g!=e?1:0;break;case "&":d=g&e;break; +P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P,P]; +function Od(a){t.call(this,"ROM",a,128);this.U=this.b=null;this.B=+a.addr;this.u=+a.size;this.i=a.alias;"string"==typeof this.i&&(this.i=eval(this.i));this.v=a.file;this.F=Wa(this.v);if(this.v){a=this.v;var b=Xa(this.F);"json"!=b&&"hex"!=b&&(a=Za()+"/api/v1/dump?file="+this.v+"&format=bytes&decimal=true");var c=this;ob(a,null,!0,function(a,b,g){g?(c.ca("Unable to load ROM resource (error "+g+": "+a+")"),c.v=null):(oa(c.Ka,a,b),(a=pb(a,b))?(c.b=a.Y,c.U=a.U):c.v=null);Pd(c)})}}p(Od,t); +Od.prototype.va=function(a,b,c,d){this.D=b;this.g=c;this.A=d;Pd(this)};Od.prototype.na=function(){this.U&&(this.A&&Qd(this.A,this.id,this.B,this.u,this.U),delete this.U);return!0};Od.prototype.fa=function(){return!0}; +function Pd(a){if(!Pa(a)){if(a.v){if(!a.b||!a.D)return;a.u||(a.u=a.b.length);if(a.b.length!=a.u)Na(a,"ROM size ("+E(a.b.length,8,!0)+") does not match specified size ("+E(a.u,8,!0)+")");else{var b;b=a.B;if(xc(a.D,b,a.u,Fc)){var c;for(c=0;c>>g.i;0>>= +g.i;0>>a.i;0f&&f>=na&&(f+=ma);f=Math.trunc(Math.abs(f))%ma;void 0===g&&(g=e.size);for(h=d;g--&&h=q.Ya&&c<=q.ub&&(b=c-(q.Ya-q.ob));b&&(a.preventDefault&&a.preventDefault(),d.Ma(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==q.qb&&(b=q.pb);d.Ma(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation(); +a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ma(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.va=function(a,b,c,d){this.C=a;this.D=b;this.g=c;this.A=d;D(this)}; +l.nb=function(a){if(!this.b){var b=kd(this.C,"connection");if(b){var c=b.split("->");if(2==c.length){var d=cb(c[0]);if(d!=this.Ja)return;c=cb(c[1]);if(this.b=ya(c)){var e=this.b.exports;if(e){var g=e.connect;g&&g.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Ka+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.na=function(a,b){if(!b)if(this.nb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0}; +l.fa=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new J(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ma=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;da.v&&a.u.length&&(a.v=0);if(0>a.v||b!=a.u[a.v])a.u.splice(0,0,b),a.v=0;a.v--}else a.R?b="end":b=a.u[a.v+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var g=0;g<=b.length;g++){var f=b.charAt(g);if('"'==f||"'"==f)e?f==e&&(e=null):e=f;else if(f==d&&!e||!f)a.push(cb(b.substring(c,g))),c=g+1}}return a} +function Yd(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),g=a.pop();switch(d){case "*":d=g*e;break;case "/":if(!e)return!1;d=g/e;break;case "%":if(!e)return!1;d=g%e;break;case "+":d=g+e;break;case "-":d=g-e;break;case "<<":d=g<>":d=g>>e;break;case ">>>":d=g>>>e;break;case "<":d=g":d=g>e?1:0;break;case ">=":d=g>=e?1:0;break;case "==":d=g==e?1:0;break;case "!=":d=g!=e?1:0;break;case "&":d=g&e;break; case "^":d=g^e;break;case "|":d=g|e;break;case "&&":d=g&&e?1:0;break;case "||":d=g||e?1:0;break;default:return!1}a.push(d|0)}return!0} -function Md(a,b,c){var d;if(b){b=Nd(a,b);for(var e=0,g=!1,f=b,h=[],k=[],m=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1,R--;f=r+f;d>>=8}d=F(c,0,!0)+" "+c+". "+Qa(c,0,!0)+" "+("0b"+f);32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'")}a.f((null!=b?b+": ":"")+d);return e} -function Rd(a,b){if(b)return Qd(a,b,a.aa[b]);var c=0;for(b in a.aa)Qd(a,b,a.aa[b]),c++;return 0a&&-1>2:0)}0>c?c=a.replace(/^0+([0-9A-F]+)$/i,"$1"):c=a;return c} -var Pd={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; -function Sd(a){Jd.call(this,a);this.wa=!1;this.oa=!0;this.J=X();this.ua=X();this.O=X();this.F=[];this.b=this.L=this.I=[];Td(this);this.S=this.ia=0;this.i=[];this.ra=void 0;Ud(this);this.A=this;this.pa={};this.X=this.ib=0;this.T=null;this.N=[];Vd(this,a.messages);this.ta=a.commands;this.M=0;this.Ca=this.sa=null;this.B=this.ya=this.xa=this.ha=this.qa=0;this.ga=this.ca=null;var b=this;window?void 0===window[C]&&(window[C]=function(a){return cd(b,a)}):void 0===global[C]&&(global[C]=function(a){return cd(b, -a)})}p(Sd,Jd);function Y(a){a=a&&a.w;null==a&&(a=-1);return a}function X(a,b,c){return{w:void 0===a?null:a,wb:void 0===b?!1:b,ma:!1,da:c}}function Wd(a){return[a.w,a.wb,a.da,a.ma,a.Na]}function Xd(a,b){var c=X(b[0],b[1],b[2]);c.ma=b[3];b[4]&&(c.gb=Kd(a,c.Na=b[4]));return c}l=Sd.prototype; -l.va=function(a,b,c,d){this.D=b;this.C=a;this.g=c;this.ga=a.u;(a=Yc(a,"messages"))&&Vd(this,a);Yd(this,function(a){a:{var b=d.D.b,c=a[0],e=a=0,k=b.length;if(c){a=Y(Z(d,c));if(-1===a){d.f("invalid address: "+c);break a}e=a>>>d.D.i;k=1}d.f("blockid physical blockaddr used size type");d.f("-------- --------- --------- ------ ------ ----");for(var c=-1,m=0;k--;){var n=b[e];n.type==c?m++||d.f("..."):(c=n.type,m=sc[c],n&&d.f(F(n.id,8)+" %"+F(e<d&&(d+=b.length);0>d&&(d=0);for(var e=b.length;d>23&&a.g.qa==b&&(b=pd(a.g,1)));if(0d&&(d=a.g.H(b)),0<=d&&(c=a.i[a.S],c.w=b,c.ma=!1,c.da=void 0,++a.S==a.i.length&&(a.S=0)));return!1} -function Ne(a,b,c,d){var e=X(b.w),g=a.Ba(b,1),f,h,k,m=0,n=g/Gb|0,r;for(r in Oe)if(f=Oe[r][n&r]){h=+r;n>>=6;switch(h){case 32512:k=Pe;m=n&3;break;case 32256:k=Qe;m=n&7;break;case 29248:k=Re,m=(n&48)>>2|(n&6)>>1}break}k=k&&k[m]||"";"S"==k&&f>Se&&(k="B");k=Te[f||0]+k;k=Xa(k,8);f?(k=28700==h?k+N(a,g/Hb&127,-1):k+N(a,g>>23&15,-1),k+=",",g&4194304&&(k+="@"),k+=N(a,g&262143,-1),(g=g>>18&15)&&(k+="("+N(a,g,-1)+")")):k+=$d(g);g=k;f="";h=N(a,e.w)+":";if(-1!==e.w&&-1!==b.w){do if(k=a.Ba(e,1),f+=" "+$d(k),null== -e.w)break;while(e.w!=b.w)}h+=Xa(f,16)+g;c&&(h=Xa(h,60)+";"+(c||""),h=a.g.j.Da?h+("cycles="+dd(a.g).toString()+" cs="+F(a.g.sa)):h+(null!=d?"="+d.toString():""));return h}function Td(a){var b,c;a.b=["bp"];if(a.L)for(b=1;b>>d.i],!1)}a.L=["br"];if(a.I)for(b=1;b>>d.i],!0);a.I=["bw"];a.qa=0;a.ia=0} -l.Aa=function(a,b,c){var d=!0;c||Ue(this,a,b,!1,!0);if(a!=this.b){var e=Y(b);if(-1===e)this.f("invalid address: "+N(this,b.w)),d=!1;else{var g=this.D;g.b[e>>>g.i].Aa(e&16383,a==this.I)}}d&&(a.push(b),c?b.ma=!0:(Ve(this,a,a.length-1,"set"),Ud(this)));return d};function Ue(a,b,c,d,e){var g=!1;c=Y(c);for(var f=1;f>>d.i],b==a.I));h.ma||Ud(a);break}}return g} -function We(a,b){for(var c=1;cb[0]?1:a[0]>>0,f],r=Za(n,k,a.jb);0>r&&n.splice(-(r+1),0,k)}m&&(h.a=m.replace(/''/g,'"'))}a.F.push({$c:b,w:c,zb:d,U:e,hb:g})} -function Ze(a,b,c){var d=[],e=Y(b)>>>0;for(b=0;b>>0,h=g.zb;if(e>=f&&eh[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.f(m)}h[3]&&(f=h[3],g=null);g=Ne(a,b,f,g);a.f(g);a.J=b;e-=b.w-k;c++}}} -function Xe(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.f(Je+b):(a.R&&(a.f("ended assemble at "+N(a,a.O.w)),a.J=a.O,a.R=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.T=null;if(Ka(a)&&0n||"z"T.length&&(a.f("note: only "+T.length+" available"),K=T.length);O-=K;0>O&&(null==T[T.length-1].w?(K=O+K,O=0):O+=T.length);var Ac=[];"call"==ke&&($a=1E5,Ac=["CALL"]);for(void 0!==je&&a.f(K+" instructions earlier:");0<$a&&O!=a.S;){var ne=T[O++];if(null==ne.w)break;var ab=X(ne.w),Jf=K--,oe=Ne(a,ab,"history",Jf);(!Ac.length||0<=oe.indexOf(Ac[0]))&&a.f(oe);ab.Ua&&(O+=ab.Ua,$a-=ab.Ua,K-=ab.Ua);O>=T.length&&(O=0);a.ra=K;me++;$a--}}me||(a.f("no "+le+"history available"), -a.ra=void 0)}else{var na=Z(a,S);if(na){var oa=0,pe="ds"==Fa;if(da){if("l"==da.charAt(0))da=da.substr(1)||If,oa=Od(a,da);else{var qe=Z(a,da);qe&&(oa=qe.w-na.w)}0>oa&&(oa=0);65536ue;ue++)se+=String.fromCharCode((Ib%64|0)+32), -Ib/=64}pa&&(pa+="\n");pa=pe?pa+(qa+","):pa+(S+": "+qa+(0>te?" "+se:""))}pa&&a.f(pa);a.ua=na;a.da=Kf}}}}break;case "e":if("else"==f[0])break;var ve,we,xe=f[0],Dc=f[1];"e"==xe||"ew"==xe?(ve=a.Ba,we=a.$a):Dc=null;if(null==Dc)a.f("edit memory commands:"),a.f("\tew [a] [...] edit words at address a");else{var Jb=Z(a,Dc);if(Jb)for(var Kb=2;KbHc;){for(var ra=null,Of=256;65536>cb.w>>>0;){Ic.w=a.Ba(cb,2);if(null==cb.w||!Of--)break;if(!(Ic.w&1)){for(var Pf=a,Lb=Ic,ze=null,db=Lb.w,Ae=db,Jc=1;6>=Jc&&db;Jc++){if(2> ";tb(function(){for(var a=D(document,C,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;blf){if(mf(d,this.L)){this.B=new L(this,"1.34.0",vf);mf(this.B)&&(wf(this,d),a=xf,yf(this.B));this.B.set(sf,hb());zf(this.B);var e=this.b&&!this.J;if(a==tf||wa("Click OK to restore the previous "+Bb+" machine state, or CANCEL to reset the machine.")){if(c=rf(d)){var g=d.get("code"),f=d.get("data");g&&("ok"==g?mf(d,f):("error"==g&&"no machine state"!= -f?(this.ba("Error: "+f),"unable to verify user"==f&&(mb(Af,""),this.i=null)):this.f(g+": "+f),yf(d),mf(d)?(c=rf(d),e=!0):c=!1))}e&&pf(this,c?d:null)}else a==xf&&d.clear()}else pf(this);delete this.L;delete this.I}e=w(this.id);for(g=0;ga[1];a=a[2];this.S=!0;this.j.V=!0;var d=this.G.power;d&&(d.textContent="Shutdown");this.g&&(Bf(this,this.g,b,c,a),M(this,-2),this.g.Z());this.O&&(wf(this,b),b.clear());!c&&this.B&&(this.B.clear(),delete this.B);this.v=0}; -function wf(a,b){if(wa("There may be a problem with your "+Bb+" machine.\n\nTo help us diagnose it, click OK to send this "+Bb+" machine state to http://www.pcjs.org.")){var c=a.ca;a=a.i||"";b=b.toString();var d={};d.app=Bb;d.ver="1.34.0";d.url=c;d.user=a;d.type="bug";d.data=b;H("http://www.pcjs.org/api/v1/report",d,!0)}} -function ef(a,b,c){var d,e="none";if(a.v)return null;a.v--;var g=new L(a,"1.34.0"),f=new L(a,"1.34.0",qf),h=hb();f.set(sf,h);g.set(sf,h);g.set(Cf,"1.34.0");g.set(Df,window?window.location.href:null);g.set(Ef,window?window.navigator.userAgent:"");a.g&&a.g.ea&&(c&&(b&&(a.g.j.Z=a.g.j.K),a.g.W()),d=a.g.ea(b,c),"object"===typeof d&&g.set(a.g.id,d),c&&(a.g.j.V=!1,!1===d&&(e=null)));for(var h=w(a.id),k=0;k=d||30<=(c.Ca+=d))&&(e.textContent=c.j.K?c.R.toFixed(2)+"Mhz":"Stopped",c.Ca=0)}if(a.u&&(a=a.u,b=b||0,a.L)){c=a.g.j.K;d=!!(a.g.v&8);if(0>=b||60<=(a.J+=b)){e=a.g.u;if(a.G.PC){var g=a.A&&a.A.da||8,e=e||0,e=8==g?Qa(e,void 0):F(e,void 0);a.G.PC.textContent!=e&&(a.G.PC.textContent=e)}a.J=0}-1>b?a.i=a.g.u:0f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(f?' url="'+f+'"':"")));g||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$2"));f=null;if("<"==a.charAt(0))try{g||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){f=null,a=r.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");H(e,null,!0,function(g,f,h){if(h||!f)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=f.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=k&&(f=f.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}f=f.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(d[0],f);$f(a,b,c)}})}else c(a,null)} -function ag(a,b,c,d,e){function g(a){if(void 0===k){var b=h&&D(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Va(a))}function f(a){g("Error: "+a);m&&(--Xf||xb(!0));m=!1}var h,k,m=!0;Xf++;ua[b]={};try{if(h=document.getElementById(b)){var n;if("object"==typeof resources&&(n=resources.css)){var r=document.head||document.getElementsByTagName("head")[0],x=document.createElement("style");x.type="text/css";x.styleSheet?x.styleSheet.cssText=n:x.appendChild(document.createTextNode(n));r.appendChild(x)}d|| -(n=a,"pdp"==a.substr(0,3)&&(n="pdpjs"),d="/versions/"+n+"/1.34.0/components.xsl");n=function(e,k){k?Yf(d,null,a,null,!1,g,function(a,e){e?(ta(b,d,a),g("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--Xf||xb(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--Xf|| -xb(!0)):f("invalid machine element: "+b):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(a)}):f(e)};"<"!=c.charAt(0)?Yf(c,b,a,e,!0,g,n):Zf(c,null,b,a,e,!1,g,n)}else f("missing machine element: "+b)}catch(R){f(R.message)}return m}window.embedPDP10=function(a,b,c,d){xb(!1);return ag("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){xb(!1);return ag("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return y(b,a+".machine")}; -window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!za[a]){for(var c=!0,d=za,e=a,g=b.length,f=[],h=[],k="",m=null,n=0;n=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1,U--;f=r+f;d>>=8}d=E(c,0,!0)+" "+c+". "+Va(c,0,!0)+" "+("0b"+f);32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'")}a.f((null!=b?b+": ":"")+d);return e} +function ce(a,b){if(b)return be(a,b,a.aa[b]);var c=0;for(b in a.aa)be(a,b,a.aa[b]),c++;return 0a&&-1>2:0)}0>c?c=a.replace(/^0+([0-9A-F]+)$/i,"$1"):c=a;return c} +var ae={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; +function de(a){Wd.call(this,a);this.wa=!1;this.oa=!0;this.J=S();this.ua=S();this.O=S();this.F=[];this.b=this.L=this.I=[];ee(this);this.S=this.ja=0;this.i=[];this.ra=void 0;fe(this);this.A=this;this.pa={};this.X=this.ib=0;this.T=null;this.N=[];ge(this,a.messages);this.ta=a.commands;this.M=0;this.Ca=this.sa=null;this.B=this.ya=this.xa=this.ia=this.qa=0;this.ha=this.da=null;var b=this;window?void 0===window[B]&&(window[B]=function(a){return pd(b,a)}):void 0===global[B]&&(global[B]=function(a){return pd(b, +a)})}p(de,Wd);function T(a){a=a&&a.w;null==a&&(a=-1);return a}function S(a,b,c){return{w:void 0===a?null:a,wb:void 0===b?!1:b,ea:!1,ba:c}}function he(a,b){a.w=b.w;a.ea=b.ea;a.ba=b.ba}function ie(a,b){a.w=b;a.ea=!1;a.ba=void 0}function je(a){return[a.w,a.wb,a.ba,a.ea,a.Na]}function ke(a,b){var c=S(b[0],b[1],b[2]);c.ea=b[3];b[4]&&(c.gb=Xd(a,c.Na=b[4]));return c}l=de.prototype; +l.va=function(a,b,c,d){this.D=b;this.C=a;this.g=c;this.ha=a.u;(a=kd(a,"messages"))&&ge(this,a);le(this,function(a){a:{var b=d.D.b,c=a[0],e=a=0,k=b.length;if(c){a=T(Z(d,c));if(-1===a){d.f("invalid address: "+c);break a}e=a>>>d.D.i;k=1}d.f("blockid physical blockaddr used size type");d.f("-------- --------- --------- ------ ------ ----");for(var c=-1,m=0;k--;){var n=b[e];n.type==c?m++||d.f("..."):(c=n.type,m=Ac[c],n&&d.f(E(n.id,8)+" %"+E(e<d&&(d+=b.length);0>d&&(d=0);for(var e=b.length;d>23&&a.g.qa==b&&(b=Cd(a.g,1)));if(0d&&(d=a.g.H(b)),0<=d&&(ie(a.i[a.S],b),++a.S==a.i.length&&(a.S=0)));return!1} +function ef(a,b,c,d){var e=S(b.w),g=a.Ba(b,1),f,h,k,m=0,n=g/Nb|0,r;for(r in ff)if(f=ff[r][n&r]){h=+r;n>>=6;switch(h){case 32512:k=gf;m=n&3;break;case 32256:k=hf;m=n&7;break;case 29248:k=jf,m=(n&48)>>2|(n&6)>>1}break}k=k&&k[m]||"";"S"==k&&f>kf&&(k="B");k=lf[f||0]+k;k=bb(k,8);f?(k=28700==h?k+L(a,g/Ob&127,-1):k+L(a,g>>23&15,-1),k+=",",g&4194304&&(k+="@"),k+=L(a,g&262143,-1),(g=g>>18&15)&&(k+="("+L(a,g,-1)+")")):k+=ne(g);g=k;f="";h=L(a,e.w)+":";if(-1!==e.w&&-1!==b.w){do if(k=a.Ba(e,1),f+=" "+ne(k),null== +e.w)break;while(e.w!=b.w)}h+=bb(f,16)+g;c&&(h=bb(h,60)+";"+(c||""),h=a.g.j.Da?h+("cycles="+qd(a.g).toString()+" cs="+E(a.g.sa)):h+(null!=d?"="+d.toString():""));return h}function ee(a){var b,c;a.b=["bp"];if(a.L)for(b=1;b>>d.i],!1)}a.L=["br"];if(a.I)for(b=1;b>>d.i],!0);a.I=["bw"];a.qa=0;a.ja=0} +l.Aa=function(a,b,c){var d=!0;c||mf(this,a,b,!1,!0);if(a!=this.b){var e=T(b);if(-1===e)this.f("invalid address: "+L(this,b.w)),d=!1;else{var g=this.D;g.b[e>>>g.i].Aa(e&16383,a==this.I)}}d&&(a.push(b),c?b.ea=!0:(nf(this,a,a.length-1,"set"),fe(this)));return d};function mf(a,b,c,d,e){var g=!1;c=T(c);for(var f=1;f>>d.i],b==a.I));h.ea||fe(a);break}}return g} +function of(a,b){for(var c=1;cb[0]?1:a[0]>>0,f],r=db(n,k,a.jb);0>r&&n.splice(-(r+1),0,k)}m&&(h.a=m.replace(/''/g,'"'))}a.F.push({$c:b,w:c,zb:d,U:e,hb:g})} +function rf(a,b,c){var d=[],e=T(b)>>>0;for(b=0;b>>0,h=g.zb;if(e>=f&&eh[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.f(m)}h[3]&&(f=h[3],g=null);g=ef(a,b,f,g);a.f(g);he(a.J,b);e-=b.w-k;c++}}} +function pf(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.f(ve+b):(a.R&&(a.f("ended assemble at "+L(a,a.O.w)),he(a.J,a.O),a.R=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.T=null;if(Pa(a)&&0n||"z"kf&&(Lc="B");if(Yf==lf[Be]+Lc){Ae=29248!=Ic?Ha:(Ha&3)<<1|(Ha&12)<<2;A=(Kc|Ae<<6)*Nb;break}}if(0<= +A)break}if(0<=A)break}if(0<=A)if(ye)for(var Mc=ye.split(","),eb=0;ebH||15H||262143H||15W.length&&(a.f("note: only "+W.length+" available"),M=W.length);Q-=M;0>Q&&(null==W[W.length-1].w?(M=Q+M,Q=0):Q+=W.length);var Rc=[];"call"==He&&(gb=1E5,Rc=["CALL"]);for(void 0!==Ge&&a.f(M+" instructions earlier:");0=W.length&&(Q=0);a.ra=M;Je++;gb--}}Je||(a.f("no "+Ie+"history available"), +a.ra=void 0)}else{var qa=Z(a,V);if(qa){var ra=0,Me="ds"==Ka;if(ha){if("l"==ha.charAt(0))ha=ha.substr(1)||ag,ra=$d(a,ha);else{var Ne=Z(a,ha);Ne&&(ra=Ne.w-qa.w)}0>ra&&(ra=0);65536Re;Re++)Pe+=String.fromCharCode((Rb%64|0)+32), +Rb/=64}sa&&(sa+="\n");sa=Me?sa+(ta+","):sa+(V+": "+ta+(0>Qe?" "+Pe:""))}sa&&a.f(sa);he(a.ua,qa);a.ba=cg}}}}break;case "e":if("else"==f[0])break;var Se,Te,Ue=f[0],Uc=f[1];"e"==Ue||"ew"==Ue?(Se=a.Ba,Te=a.$a):Uc=null;if(null==Uc)a.f("edit memory commands:"),a.f("\tew [a] [...] edit words at address a");else{var Sb=Z(a,Uc);if(Sb)for(var Tb=2;TbYc;){for(var ua=null,gg=256;65536>jb.w>>>0;){Zc.w=a.Ba(jb,2);if(null==jb.w||!gg--)break;if(!(Zc.w&1)){for(var hg=a,Ub=Zc,We=null,kb=Ub.w,Xe=kb,$c=1;6>=$c&&kb;$c++){if(2<$c){Ub.w=kb;var Vb=ef(hg,Ub);if(0<=Vb.indexOf("JSR")){var Ye=Vb.indexOf(" ");if(kb+(Vb.indexOf(" ",Ye+1)-Ye-1)/2==Xe){We=Vb;break}}}kb-=2}Ub.w=Xe;if(ua=We)break}}if(!ua||null==ua)break;var Ze=null;if("ks"==fg){var $e=ua.match(/[0-9A-F]+$/);$e&&(Ze=uf(a,$e[0]))}ua= +bb(ua,50)+" ;"+(Ze||"stack="+L(a,jb.w));a.f(ua);Yc++}Yc||a.f("no return addresses found")}break;case "l":if("ln"==f[0]){uf(a,f[1],!0);break}g=!0;break;case "m":a:{var X,Y=null,y=f[1];"?"==y&&(y=void 0);if(void 0!==y){var ia=0;if("all"==y)ia=1879046143,y=null;else if("on"==y)Y=!0,y=null;else if("off"==y)Y=!1,y=null;else{"keys"==y&&(y="key");"kbd"==y&&(y="keyboard");for(X in G)if(y==X){ia=G[X];Y=!!(a.X&ia);break}if(!ia){a.f("unknown message category: "+y);break a}}if(ia)if("on"==f[2])a.X|=ia,Y=!0; +else if("off"==f[2]&&(a.X&=~ia,Y=!1,1073741824==ia)){for(var af=1E3<=a.N.length?a.N.length-1E3:0;af> ";Ab(function(){for(var a=C(document,B,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;bDf){if(Ef(d,this.L)){this.B=new J(this,"1.34.0",Nf);Ef(this.B)&&(Of(this,d),a=Pf,Qf(this.B));this.B.set(Kf,fb());Rf(this.B);var e=this.b&&!this.J;if(a==Lf||xa("Click OK to restore the previous "+Ib+" machine state, or CANCEL to reset the machine.")){if(c=Jf(d)){var g=d.get("code"),f=d.get("data");g&&("ok"==g?Ef(d,f):("error"==g&&"no machine state"!= +f?(this.ca("Error: "+f),"unable to verify user"==f&&(tb(Sf,""),this.i=null)):this.f(g+": "+f),Qf(d),Ef(d)?(c=Jf(d),e=!0):c=!1))}e&&Hf(this,c?d:null)}else a==Pf&&d.clear()}else Hf(this);delete this.L;delete this.I}e=w(this.id);for(g=0;ga[1];a=a[2];this.S=!0;this.j.V=!0;var d=this.G.power;d&&(d.textContent="Shutdown");this.g&&(Tf(this,this.g,b,c,a),K(this,-2),this.g.Z());this.O&&(Of(this,b),b.clear());!c&&this.B&&(this.B.clear(),delete this.B);this.v=0}; +function Of(a,b){if(xa("There may be a problem with your "+Ib+" machine.\n\nTo help us diagnose it, click OK to send this "+Ib+" machine state to http://www.pcjs.org.")){var c=a.da;a=a.i||"";b=b.toString();var d={};d.app=Ib;d.ver="1.34.0";d.url=c;d.user=a;d.type="bug";d.data=b;ob("http://www.pcjs.org/api/v1/report",d,!0)}} +function xf(a,b,c){var d,e="none";if(a.v)return null;a.v--;var g=new J(a,"1.34.0"),f=new J(a,"1.34.0",If),h=fb();f.set(Kf,h);g.set(Kf,h);g.set(Uf,"1.34.0");g.set(Vf,window?window.location.href:null);g.set(Wf,window?window.navigator.userAgent:"");a.g&&a.g.fa&&(c&&(b&&(a.g.j.Z=a.g.j.K),a.g.W()),d=a.g.fa(b,c),"object"===typeof d&&g.set(a.g.id,d),c&&(a.g.j.V=!1,!1===d&&(e=null)));for(var h=w(a.id),k=0;k=d||30<=(c.Ca+=d))&&(e.textContent=c.j.K?c.R.toFixed(2)+"Mhz":"Stopped",c.Ca=0)}if(a.u&&(a=a.u,b=b||0,a.L)){c=a.g.j.K;d=!!(a.g.v&8);if(0>=b||60<=(a.J+=b)){e=a.g.u;if(a.G.PC){var g=a.A&&a.A.ba||8,e=e||0,e=8==g?Va(e,void 0):E(e,void 0);a.G.PC.textContent!=e&&(a.G.PC.textContent=e)}a.J=0}-1>b?a.i=a.g.u:0f.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(f=window.location.pathname+f),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(f?' url="'+f+'"':"")));g||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$2"));f=null;if("<"==a.charAt(0))try{g||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(f=new window.ActiveXObject("Microsoft.XMLDOM"),f.async=!1,f.loadXML(a)):f=(new window.DOMParser).parseFromString(a,"text/xml")}catch(r){f=null,a=r.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");ob(e,null,!0,function(g,f,h){if(h||!f)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=f.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=k&&(f=f.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}f=f.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(d[0],f);sg(a,b,c)}})}else c(a,null)} +function tg(a,b,c,d,e){function g(a){if(void 0===k){var b=h&&C(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=$a(a))}function f(a){g("Error: "+a);m&&(--pg||Eb(!0));m=!1}var h,k,m=!0;pg++;va[b]={};try{if(h=document.getElementById(b)){var n;if("object"==typeof resources&&(n=resources.css)){var r=document.head||document.getElementsByTagName("head")[0],x=document.createElement("style");x.type="text/css";x.styleSheet?x.styleSheet.cssText=n:x.appendChild(document.createTextNode(n));r.appendChild(x)}d|| +(n=a,"pdp"==a.substr(0,3)&&(n="pdpjs"),d="/versions/"+n+"/1.34.0/components.xsl");n=function(e,k){k?qg(d,null,a,null,!1,g,function(a,e){e?(oa(b,d,a),g("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--pg||Eb(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--pg|| +Eb(!0)):f("invalid machine element: "+b):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(a)}):f(e)};"<"!=c.charAt(0)?qg(c,b,a,e,!0,g,n):rg(c,null,b,a,e,!1,g,n)}else f("missing machine element: "+b)}catch(U){f(U.message)}return m}window.embedPDP10=function(a,b,c,d){Eb(!1);return tg("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){Eb(!1);return tg("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return za(b,a+".machine")}; +window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!Ca[a]){for(var c=!0,d=Ca,e=a,g=b.length,f=[],h=[],k="",m=null,n=0;n>>b.c].m(a&16383,a)};k.wb=function(a,b){var c=this.l;a=this.ia=a;c.a[(a&c.g)>>>c.c].v(b,a&16383,a)}; -k.wa=function(a){this.b.complete=!0;var b=a?this.b.Ga?0:1:-1;this.b.Ga=!1;this.D=this.G=a;this.g=this.g&-5|0;do{if(a=this.g)if(a=this.g&11)this.g&2?this.ha||(this.g&=-3):this.g&1&&this.g++,a=!1;if(a){if(this.g&4&&this.u.h(this.h,b)){R(this);break}if(0>b)break}this.g&=15;this.M=this.M&4194304?this.m(this.c):this.qa=this.m(this.ya=this.h);this.c=this.M&262143;if(a=this.M>>18&15)this.c=this.c+this.m(a)&Ta;this.M&4194304?a=-1:(this.h=(this.h+1)%Sa,a=this.qa/Wa|0);0<=a&&this.Wa(a)}while(0>4].call(this,a)}function W(a){this.a(a)}function Wb(a){this.a(a)}function Xb(a){this.a(a)}function Yb(a){var b=a&15,c=this.m(this.c),d=this.m(b),d=Zb(a,d,c)+(c-(c&262143));this.v(b,d)}function $b(a){var b=a&15,c=this.m(b),c=Zb(a,c,0);this.v(b,c)} +k.wa=function(a){this.b.complete=!0;var b=a?this.b.Ga?0:1:-1;this.b.Ga=!1;this.D=this.G=a;this.g=this.g&-5|0;do{if(a=this.g)if(a=this.g&11)this.g&2?this.ha||(this.g&=-3):this.g&1&&this.g++,a=!1;if(a){if(this.g&4&&this.u.h(this.h,b)){R(this);break}if(0>b)break}this.g&=15;this.M=this.M&4194304?this.m(this.c)&8388607:(this.qa=this.m(this.ya=this.h))&8388607;this.c=this.M&262143;if(a=this.M>>18&15)this.c=this.c+this.m(a)&Ta;this.M&4194304?a=-1:(this.h=(this.h+1)%Sa,a=this.qa/Wa|0);0<=a&&this.Wa(a)}while(0< +this.G);return this.b.complete?this.D-this.G:!1===this.b.complete?-1:0};I(function(){for(var a=D(document,C,"cpu"),b=0;b>4].call(this,a)}function W(a){this.a(a)}function Wb(a){this.a(a)}function Xb(a){this.a(a)}function Yb(a){var b=a&15,c=this.m(this.c),d=this.m(b),d=Zb(a,d,c)+(c-(c&262143));this.v(b,d)}function $b(a){var b=a&15,c=this.m(b),c=Zb(a,c,0);this.v(b,c)} function ac(a){var b=this.m(a&15),c=this.m(this.c),c=Zb(a,c,b)+(b-(b&262143));this.v(this.c,c)}function bc(a){var b=this.m(this.c);this.v(this.c,Zb(a,b,b));var c=a&15;c&&(b=this.m(c),this.v(c,Zb(a,b,b)))}function cc(a){a&=15;var b=this.m(this.c)&262143,c=this.m(a);this.v(a,c-(c&262143)+b)}function X(a){this.a(a)}function V(a){this.K("undefined opcode: "+wa(a));this.h=(this.h+-1)%Sa;R(this)} function Zb(a,b,c){switch(a&384){case 0:b&=262143;break;case 128:b=0;break;case 256:b=262143;break;case 384:b=c>Va?262143:0}return b} var Vb=[W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,V,function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},