From 7f0b6a091de1af99cc6ac1444eea7107ac95401d Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 22 Sep 2016 18:47:32 -0700 Subject: [PATCH] Started work on new decoding functions --- modules/pdp11/lib/cpu.js | 8 +- modules/pdp11/lib/cpuops.js | 179 +++++++------ modules/pdp11/lib/cpustate.js | 337 ++++++++++++++++--------- modules/pdp11/lib/debugger.js | 241 +++++++++--------- modules/pdp11/lib/defines.js | 137 ++++++---- modules/pdp11/lib/device.js | 35 +-- versions/pdp11/1.30.0/pdp11-dbg.js | 388 ++++++++++++++--------------- versions/pdp11/1.30.0/pdp11.js | 261 ++++++++++--------- 8 files changed, 853 insertions(+), 733 deletions(-) diff --git a/modules/pdp11/lib/cpu.js b/modules/pdp11/lib/cpu.js index df1f658b2..419ebe1ae 100644 --- a/modules/pdp11/lib/cpu.js +++ b/modules/pdp11/lib/cpu.js @@ -1083,7 +1083,13 @@ CPUPDP11.prototype.runCPU = function(fUpdateFocus) /* * Execute the burst. */ - this.stepCPU(nCyclesPerBurst); + try { + this.stepCPU(nCyclesPerBurst); + } + catch(exception) { + if (typeof exception != "number") throw exception; + if (DEBUG) this.println("CPU exception " + str.toHexWord(exception)); + } /* * nCycles is how many cycles stepCPU() actually ran (nBurstCycles less any remaining nStepCycles). diff --git a/modules/pdp11/lib/cpuops.js b/modules/pdp11/lib/cpuops.js index 760229c87..2a5749e92 100644 --- a/modules/pdp11/lib/cpuops.js +++ b/modules/pdp11/lib/cpuops.js @@ -40,85 +40,116 @@ if (NODE) { } /** - * op=0x00 (NOP) + * fnBIC(dst, src) * - * @this {CPUStatePDP11} + * @param {number} src + * @param {number} dst + * @return {number} (~src & dst) */ -PDP11.opNOP = function() +PDP11.fnBIC = function(src, dst) { - this.nStepCycles -= 4; + return ~src & dst; }; -/* - * This 256-entry array of opcode functions is at the heart of the CPU engine: stepCPU(n). +/** + * op1170(opCode) * - * It might be worth trying a switch() statement instead, to see how the performance compares, - * but I suspect that would vary quite a bit across JavaScript engines; for now, I'm putting my - * money on array lookup. + * @this {CPUStatePDP11} + * @param {number} opCode */ -PDP11.aOpsPDP1170 = [ - /* 0x00-0x03 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x04-0x07 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x08-0x0B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x0C-0x0F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x10-0x13 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x14-0x17 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x18-0x1B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x1C-0x1F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x20-0x23 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x24-0x27 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x28-0x2B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x2C-0x2F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x30-0x33 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x34-0x37 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x38-0x3B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x3C-0x3F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x40-0x43 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x44-0x47 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x48-0x4B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x4C-0x4F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x50-0x53 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x54-0x57 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x58-0x5B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x5C-0x5F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x60-0x63 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x64-0x67 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x68-0x6B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x6C-0x6F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x70-0x73 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x74-0x77 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x78-0x7B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x7C-0x7F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x80-0x83 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x84-0x87 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x88-0x8B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x8C-0x8F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x90-0x93 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x94-0x97 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x98-0x9B */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0x9C-0x9F */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xA0-0xA3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xA4-0xA7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xA8-0xAB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xAC-0xAF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xB0-0xB3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xB4-0xB7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xB8-0xBB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xBC-0xBF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xC0-0xC3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xC4-0xC7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xC8-0xCB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xCC-0xCF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xD0-0xD3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xD4-0xD7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xD8-0xDB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xDC-0xDF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xE0-0xE3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xE4-0xE7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xE8-0xEB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xEC-0xEF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xF0-0xF3 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xF4-0xF7 */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xF8-0xFB */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, - /* 0xFC-0xFF */ PDP11.opNOP, PDP11.opNOP, PDP11.opNOP, PDP11.opNOP +PDP11.op1170 = function(opCode) +{ + PDP11.aOpsF000_1170[opCode >> 12].call(this, opCode); +}; + +/** + * op0XXX_1170(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.op0XXX_1170 = function(opCode) +{ + // PDP11.aOpsF000_1170[opCode >> 12].call(this, opCode); +}; + +/** + * opMOV(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.opMOV = function(opCode) +{ + this.updateNZFlags(this.writeWordByMode(opCode, this.readWordByMode(opCode >> PDP11.SRCMODE.SHIFT))); + this.nStepCycles -= 1; +}; + +/** + * opCMP(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.opCMP = function(opCode) +{ + var src = this.readWordByMode(opCode >> PDP11.SRCMODE.SHIFT); + var dst = this.readWordByMode(opCode); + var result = src - dst; + this.updateAllFlags(result, src, dst); + this.nStepCycles -= 1; +}; + +/** + * opBIT(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.opBIT = function(opCode) +{ + this.updateNZFlags(this.readWordByMode(opCode >> PDP11.SRCMODE.SHIFT) & this.readWordByMode(opCode)); + this.nStepCycles -= 1; +}; + +/** + * opBIC(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.opBIC = function(opCode) +{ + this.updateNZFlags(this.updateWordByMode(opCode, this.readWordByMode(opCode >> PDP11.SRCMODE.SHIFT), PDP11.fnBIC)); + this.nStepCycles -= 1; +}; + +/** + * opNOP(opCode) + * + * @this {CPUStatePDP11} + * @param {number} opCode + */ +PDP11.opNOP = function(opCode) +{ + this.nStepCycles -= 1; +}; + +PDP11.aOpsF000_1170 = [ + PDP11.op0XXX_1170, + PDP11.opMOV, // MOV 01SSDD + PDP11.opCMP, // CMP 02SSDD + PDP11.opBIT, // BIT 03SSDD + PDP11.opBIC, // BIC 04SSDD + PDP11.opNOP, // 0x5XXX + PDP11.opNOP, // 0x6XXX + PDP11.opNOP, // 0x7XXX + PDP11.opNOP, // 0x8XXX + PDP11.opNOP, // 0x9XXX + PDP11.opNOP, // 0xAXXX + PDP11.opNOP, // 0xBXXX + PDP11.opNOP, // 0xCXXX + PDP11.opNOP, // 0xDXXX + PDP11.opNOP, // 0xEXXX + PDP11.opNOP // 0xFXXX ]; diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index d33ef8002..44ab9bedd 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -92,17 +92,11 @@ Component.subclass(CPUStatePDP11, CPUPDP11); /** * initProcessor() * - * Interestingly, if I dynamically generate aOps as an array of functions bound to "this", using the bind() - * method, overall performance is worse. You would think that eliminating the need to use the call() method - * on every opcode function invocation would be helpful, but it's not. I'm not sure exactly why yet; perhaps - * a Closure Compiler optimization is defeated when generating the function array at run-time instead of at - * compile-time. - * * @this {CPUStatePDP11} */ CPUStatePDP11.prototype.initProcessor = function() { - this.aOps = PDP11.aOpsPDP1170; + this.decode = PDP11.op1170.bind(this); this.initRegs(); this.flags.complete = this.flags.debugCheck = false; }; @@ -133,10 +127,10 @@ CPUStatePDP11.prototype.initRegs = function() */ this.flagC = 0x10000; // PSW C bit this.flagV = 0x8000; // PSW V bit - this.flagZ = 0xffff; // ~ PSW Z bit (TODO: Why is Z clear instead of set like all other flags?) + this.flagZ = 0xffff; // ~ PSW Z bit (TODO: Why is Z clear instead of set like all other flags?) this.flagN = 0x8000; // PSW N bit - - this.PSW = 0xf; // PSW other bits + this.regPSW = 0xf; // PSW other bits (TODO: What's the point of setting the flag bits here, too?) + this.regOp = -1; // current opcode this.regsGen = [ // General R0 - R7 0, 0, 0, 0, 0, 0, 0, this.resetAddr ]; @@ -153,7 +147,7 @@ CPUStatePDP11.prototype.initRegs = function() this.loopRate = 9999; // instructions we can execute in 12ms this.priorityReview = 2; // flag to mark if we need to check priority change this.stackLimit = 0xff; - this.trapMask = 0; + this.opFlags = 0; this.trapPSW = -1; this.CPU_Error = 0; this.cpuType = 70; @@ -637,6 +631,36 @@ CPUStatePDP11.prototype.setPSW = function(newPSW) this.PSW = newPSW; }; +/** + * updateNZFlags(result) + * + * @this {CPUStatePDP11} + * @param {number} result + */ +CPUStatePDP11.prototype.updateNZFlags = function(result) +{ + if (!this.opFlags & PDP11.OPFLAG.SKIP_FLAGS) { + this.flagN = this.flagZ = result; + this.flagV = 0; + } +}; + +/** + * updateAllFlags(result, src, dst) + * + * @this {CPUStatePDP11} + * @param {number} result + * @param {number} src + * @param {number} dst + */ +CPUStatePDP11.prototype.updateAllFlags = function(result, src, dst) +{ + if (!this.opFlags & PDP11.OPFLAG.SKIP_FLAGS) { + this.flagN = this.flagZ = this.flagC = result; + this.flagV = (src ^ dst) & (src ^ result); + } +}; + /** * panic(reason) * @@ -655,13 +679,11 @@ CPUStatePDP11.prototype.panic = function(reason) * * trap() handles all the trap/abort functions. It reads the trap vector from kernel * D space, changes mode to reflect the new PSW and PC, and then pushes the old PSW and - * PC onto the new mode stack. trap() returns a -1 which is passed up through function - * calls to indicate that a trap/abort has occurred (suspend instruction processing). + * PC onto the new mode stack. * * @this {CPUStatePDP11} * @param {number} vector * @param {number} reason - * @return {number} */ CPUStatePDP11.prototype.trap = function(vector, reason) { @@ -692,9 +714,9 @@ CPUStatePDP11.prototype.trap = function(vector, reason) } } } - this.trapMask = 0; // lose interest in traps after an abort - this.trapPSW = -1; // reset flag that we have a trap within a trap - return -1; // signal that a trap has occurred + this.opFlags &= ~PDP11.OPFLAG.TRAP_MASK; // lose interest in traps after an abort + this.trapPSW = -1; // reset flag that we have a trap within a trap + throw vector | (reason << 8); }; /** @@ -778,7 +800,7 @@ CPUStatePDP11.prototype.mapVirtualToPhysical = function(virtualAddress, accessMa } else { // no max_memory check in 16 bit mode if ((physicalAddress & 1) && !(accessMask & PDP11.BYTE_MODE)) { this.CPU_Error |= 0x40; - return this.trap(4, 22); + this.trap(PDP11.TRAP.BUS_ERROR, 22); } } return physicalAddress; @@ -787,22 +809,22 @@ CPUStatePDP11.prototype.mapVirtualToPhysical = function(virtualAddress, accessMa page = (virtualAddress >> 13) & this.mmuMask[this.mmuMode]; pdr = this.mmuMap[this.mmuMode][page]; physicalAddress = ((this.mmuMap[this.mmuMode][page + 16] << 6) + (virtualAddress & 0x1fff)) & 0x3fffff; - if (this.MMR3 & 0x10) { // if 22 bit MM mode + if (this.MMR3 & 0x10) { // if 22 bit MM mode if (physicalAddress >= BusPDP11.IOPAGE_UNIBUS && physicalAddress < BusPDP11.IOPAGE_22BIT) { physicalAddress = this.mapUnibus(physicalAddress & 0x3ffff); // 18bit unibus space } } else { - physicalAddress &= 0x3ffff; // truncate if only 18 bit mapping + physicalAddress &= 0x3ffff; // truncate if only 18 bit mapping if (physicalAddress >= BusPDP11.IOPAGE_18BIT) physicalAddress |= BusPDP11.IOPAGE_22BIT; } if (physicalAddress < BusPDP11.IOPAGE_UNIBUS) { if (physicalAddress >= BusPDP11.MAX_MEMORY) { this.CPU_Error |= 0x20; - return this.trap(4, 24); // KB11-EM does this after ABORT handling - KB11-CM before + this.trap(PDP11.TRAP.BUS_ERROR, 24); // KB11-EM does this after ABORT handling - KB11-CM before } if ((physicalAddress & 1) && !(accessMask & PDP11.BYTE_MODE)) { this.CPU_Error |= 0x40; - return this.trap(4, 26); + this.trap(PDP11.TRAP.BUS_ERROR, 26); } } switch (pdr & 0x7) { @@ -856,14 +878,14 @@ CPUStatePDP11.prototype.mapVirtualToPhysical = function(virtualAddress, accessMa if (!(this.MMR0 & 0xe000)) { this.MMR0 |= errorMask | (this.mmuLastMode << 5) | (this.mmuLastPage << 1); } - return this.trap(0xa8, 28); // 0250 + this.trap(PDP11.TRAP.MMU_FAULT, 28); } if (!(this.MMR0 & 0xf000)) { //if (physicalAddress < 017772200 || physicalAddress > 017777677) { if (physicalAddress < 0x3ff480 || physicalAddress > 0x3fffbf) { this.MMR0 |= 0x1000; // MMU trap flag if (this.MMR0 & 0x0200) { - this.trapMask |= 2; // MMU trap + this.opFlags |= PDP11.OPFLAG.TRAP_MMU; } } } @@ -1015,10 +1037,11 @@ CPUStatePDP11.prototype.pushWord = function(data) if (virtualAddress <= this.stackLimit - 32) { this.CPU_Error |= 4; // Red stack this.regsGen[6] = 4; - return this.trap(4, 32); + this.trap(PDP11.TRAP.BUS_ERROR, 32); + } else { + this.CPU_Error |= 8; // Yellow + this.opFlags |= 4; } - this.CPU_Error |= 8; // Yellow - this.trapMask |= 4; } if ((physicalAddress = this.mapVirtualToPhysical(virtualAddress | 0x10000, PDP11.WRITE_MODE)) >= 0) { return this.writeWordByAddr(physicalAddress, data); @@ -1059,22 +1082,27 @@ CPUStatePDP11.prototype.pushWord = function(data) CPUStatePDP11.prototype.getVirtualByMode = function(addressMode, accessMode) { var virtualAddress, stepSize, reg = addressMode & 7; + switch ((addressMode >> 3) & 7) { - case 0: // Mode 0: Registers don't have a virtual address so trap! - return this.trap(4, 34); // trap for invalid virtual address - case 1: // Mode 1: (R) + case 0: // Mode 0: Registers don't have a virtual address so trap! + this.trap(PDP11.TRAP.BUS_ERROR, 34); // trap for invalid virtual address + break; + + case 1: // Mode 1: (R) if (reg === 6 && (!this.mmuMode) && (accessMode & PDP11.WRITE_MODE) && (this.regsGen[6] <= this.stackLimit || this.regsGen[6] >= 0xfffe)) { if (this.regsGen[6] <= this.stackLimit - 32 || this.regsGen[6] >= 0xfffe) { this.CPU_Error |= 4; // Red stack this.regsGen[6] = 4; - return this.trap(4, 36); + this.trap(PDP11.TRAP.BUS_ERROR, 36); + } else { + this.CPU_Error |= 8; // Yellow + this.opFlags |= PDP11.OPFLAG.TRAP_SP; } - this.CPU_Error |= 8; // Yellow - this.trapMask |= 4; } return (reg === 7 ? this.regsGen[reg] : (this.regsGen[reg] | 0x10000)); - case 2: // Mode 2: (R)+ + + case 2: // Mode 2: (R)+ stepSize = 2; virtualAddress = this.regsGen[reg]; if (reg !== 7) { @@ -1150,10 +1178,11 @@ CPUStatePDP11.prototype.getVirtualByMode = function(addressMode, accessMode) if (this.regsGen[6] <= this.stackLimit - 32) { this.CPU_Error |= 4; // Red stack this.regsGen[6] = 4; - return this.trap(4, 38); + this.trap(PDP11.TRAP.BUS_ERROR, 38); + } else { + this.CPU_Error |= 8; // Yellow + this.opFlags |= PDP11.OPFLAG.TRAP_SP; } - this.CPU_Error |= 8; // Yellow - this.trapMask |= 4; } return virtualAddress; }; @@ -1189,15 +1218,11 @@ CPUStatePDP11.prototype.getAddrByMode = function(addressMode, accessMode) CPUStatePDP11.prototype.readWordByMode = function(addressMode) { var result; - if (!(addressMode & 0x38)) { - result = this.regsGen[addressMode & 7]; - //LOG_SOURCE(result); + if (!(addressMode & PDP11.OPMODE.MASK)) { + result = this.regsGen[addressMode & PDP11.OPREG.MASK]; } else { - if ((result = this.getAddrByMode(addressMode, PDP11.READ_MODE)) >= 0) { - if ((result = this.readWordByAddr(result)) >= 0) { - //LOG_SOURCE(result); - } - } + var addr = this.getAddrByMode(addressMode, PDP11.READ_MODE); + result = this.readWordByAddr(addr); } return result; }; @@ -1225,6 +1250,46 @@ CPUStatePDP11.prototype.readByteByMode = function(addressMode) return result; }; +/** + * writeWordByMode(addressMode, data) + * + * @this {CPUStatePDP11} + * @param {number} addressMode + * @param {number} data + * @return {number} + */ +CPUStatePDP11.prototype.writeWordByMode = function(addressMode, data) +{ + if (!(addressMode & PDP11.OPMODE.MASK)) { + this.regsGen[addressMode & PDP11.OPREG.MASK] = data; + } else { + this.writeWordByAddr(this.getAddrByMode(addressMode, PDP11.WRITE_MODE), data); + } + return data; +}; + +/** + * updateWordByMode(addressMode, src, fnOp) + * + * @this {CPUStatePDP11} + * @param {number} addressMode + * @param {number} src + * @param {function(number,number)} fnOp + * @return {number} + */ +CPUStatePDP11.prototype.updateWordByMode = function(addressMode, src, fnOp) +{ + var data; + if (!(addressMode & PDP11.OPMODE.MASK)) { + var reg = addressMode & PDP11.OPREG.MASK; + this.regsGen[reg] = data = fnOp(src, this.regsGen[reg]); + } else { + var addr = this.getAddrByMode(addressMode, PDP11.WRITE_MODE); + this.writeWordByAddr(addr, data = fnOp(src, this.readWordByAddr(addr))); + } + return data; +}; + /** * branch(PC, instruction) * @@ -1315,6 +1380,28 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) result, virtualAddress, savePSW, reg, i, j; + /* + * Check for any pending traps. + * + * I've moved this TRAP_MASK check BEFORE we decode the next instruction instead + * of immediately AFTER, because the last instruction may have thrown an exception, + * kicking us out before we reach the bottom of this loop. + */ + if (this.opFlags & PDP11.OPFLAG.TRAP_MASK) { + if (this.opFlags & PDP11.OPFLAG.TRAP_MMU) { + this.trap(PDP11.TRAP.MMU_FAULT, 52); // MMU trap has priority + } else { + if (this.opFlags & PDP11.OPFLAG.TRAP_SP) { + this.trap(PDP11.TRAP.BUS_ERROR, 54); // then SP trap + } else { + if (this.opFlags & PDP11.OPFLAG.TRAP_TF) { + this.trap(PDP11.TRAP.BREAKPOINT, 56); // and finally a TF trap + } + } + } + this.opFlags &= ~PDP11.OPFLAG.TRAP_MASK; + } + if (this.priorityReview) { // if nothing has changed don't check priority if (this.priorityReview === 1) { this.priorityReview = 2; // SPL delay @@ -1347,7 +1434,7 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) } if (savePSW > (this.PSW & 0xe0)) { if (j < 0) { - this.trap(0xA0, /*0240*/ 42); + this.trap(PDP11.TRAP.PIRQ, 42); } else { this.trap(this.interruptQueue[j].vector, 44); this.interruptQueue.splice(j, 1); @@ -1355,69 +1442,81 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) } } } + if (!(this.MMR0 & 0xe000)) { this.MMR1 = 0; this.MMR2 = this.regsGen[7]; } - // If needed T-bit trap at the end of this instruction - this.trapMask = this.PSW & 0x10; - if ((instruction = this.readWordByVirtual(this.regsGen[7])) >= 0) { + + /* + * Snapshot the TF bit in opFlags, while simultaneously clearing all other opFlags; + * we'll check the TRAP_TF bit in opFlags when we come back around for another opcode. + */ + this.opFlags = this.PSW & PDP11.PSW.TF; + + this.regOp = this.readWordByVirtual(this.regsGen[7]); + this.regsGen[7] = (this.regsGen[7] + 2) & 0xffff; + this.decode(this.regOp); + + if (this.regOp >= 0) { + instruction = this.regOp; this.regsGen[7] = (this.regsGen[7] + 2) & 0xffff; + switch (instruction & 0xF000) /*0170000*/ { // Double operand instructions xxSSDD - case 0x1000: /*0010000*/ // MOV 01SSDD - //LOG_INSTRUCTION(instruction, 2, "MOV"); - if ((src = this.readWordByMode(instruction >> 6)) >= 0) { - if (!(instruction & 0x38)) { - this.regsGen[instruction & 7] = src; - this.flagN = this.flagZ = src; - this.flagV = 0; - } else { - if ((dstAddr = this.getAddrByMode(instruction, PDP11.WRITE_MODE)) >= 0) { - if (this.writeWordByAddr(dstAddr, src) >= 0) { - this.flagN = this.flagZ = src; - this.flagV = 0; - } - } - } - } - break; - case 0x2000: /*0020000*/ // CMP 02SSDD - //LOG_INSTRUCTION(instruction, 2, "CMP"); - if ((src = this.readWordByMode(instruction >> 6)) >= 0) { - if ((dst = this.readWordByMode(instruction)) >= 0) { - result = src - dst; - this.flagN = this.flagZ = this.flagC = result; - this.flagV = (src ^ dst) & (src ^ result); - } - } - break; - case 0x3000: /*0030000*/ // BIT 03SSDD - //LOG_INSTRUCTION(instruction, 2, "BIT"); - if ((src = this.readWordByMode(instruction >> 6)) >= 0) { - if ((dst = this.readWordByMode(instruction)) >= 0) { - this.flagN = this.flagZ = src & dst; - this.flagV = 0; - } - } - break; - case 0x4000: /*0040000*/ // BIC 04SSDD - //LOG_INSTRUCTION(instruction, 2, "BIC"); - if ((src = this.readWordByMode(instruction >> 6)) >= 0) { - if (!(instruction & 0x38)) { - result = this.regsGen[instruction & 7] &= ~src; - this.flagN = this.flagZ = result; - this.flagV = 0; - } else { - if ((dst = this.readWordByAddr(dstAddr = this.getAddrByMode(instruction, PDP11.MODIFY_WORD))) >= 0) { - result = dst & ~src; - if (this.writeWordByAddr(dstAddr, result) >= 0) { - this.flagN = this.flagZ = result; - this.flagV = 0; - } - } - } - } - break; + // case 0x1000: /*0010000*/ // MOV 01SSDD + // //LOG_INSTRUCTION(instruction, 2, "MOV"); + // if ((src = this.readWordByMode(instruction >> 6)) >= 0) { + // if (!(instruction & 0x38)) { + // this.regsGen[instruction & 7] = src; + // this.flagN = this.flagZ = src; + // this.flagV = 0; + // } else { + // if ((dstAddr = this.getAddrByMode(instruction, PDP11.WRITE_MODE)) >= 0) { + // if (this.writeWordByAddr(dstAddr, src) >= 0) { + // this.flagN = this.flagZ = src; + // this.flagV = 0; + // } + // } + // } + // } + // break; + // case 0x2000: /*0020000*/ // CMP 02SSDD + // //LOG_INSTRUCTION(instruction, 2, "CMP"); + // if ((src = this.readWordByMode(instruction >> 6)) >= 0) { + // if ((dst = this.readWordByMode(instruction)) >= 0) { + // result = src - dst; + // this.flagN = this.flagZ = this.flagC = result; + // this.flagV = (src ^ dst) & (src ^ result); + // } + // } + // break; + // case 0x3000: /*0030000*/ // BIT 03SSDD + // //LOG_INSTRUCTION(instruction, 2, "BIT"); + // if ((src = this.readWordByMode(instruction >> 6)) >= 0) { + // if ((dst = this.readWordByMode(instruction)) >= 0) { + // this.flagN = this.flagZ = src & dst; + // this.flagV = 0; + // } + // } + // break; + // case 0x4000: /*0040000*/ // BIC 04SSDD + // //LOG_INSTRUCTION(instruction, 2, "BIC"); + // if ((src = this.readWordByMode(instruction >> 6)) >= 0) { + // if (!(instruction & 0x38)) { + // result = this.regsGen[instruction & 7] &= ~src; + // this.flagN = this.flagZ = result; + // this.flagV = 0; + // } else { + // if ((dst = this.readWordByAddr(dstAddr = this.getAddrByMode(instruction, PDP11.MODIFY_WORD))) >= 0) { + // result = dst & ~src; + // if (this.writeWordByAddr(dstAddr, result) >= 0) { + // this.flagN = this.flagZ = result; + // this.flagV = 0; + // } + // } + // } + // } + // break; case 0x5000: /*0050000*/ // BIS 05SSDD //LOG_INSTRUCTION(instruction, 2, "BIS"); if ((src = this.readWordByMode(instruction >> 6)) >= 0) { @@ -1753,11 +1852,11 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) break; case 0x8800: /*0104000*/ // EMT 104000 -> 104377 //LOG_INSTRUCTION(instruction, 7, "EMT"); - this.trap(0x18, /*030*/ 2); + this.trap(PDP11.TRAP.EMULATOR, /*030*/ 2); break; case 0x8900: /*0104400*/ // TRAP 104400 -> 104777 //LOG_INSTRUCTION(instruction, 7, "TRAP"); - this.trap(0x1C, /*034*/ 4); + this.trap(PDP11.TRAP.TRAP, /*034*/ 4); break; default: switch (instruction & 0xFFC0) /*0177700*/ { // Single operand instructions xxxxDD @@ -2296,7 +2395,7 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) //LOG_INSTRUCTION(instruction, 0, "HALT"); if (0xc000 & this.PSW) { this.CPU_Error |= 0x80; /*0200*/ - this.trap(4, 46); + this.trap(PDP11.TRAP.BUS_ERROR, 46); } else { this.runState = 3; // halt this.endBurst(); @@ -2320,11 +2419,11 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) break; case 0x3: /*0000003*/ // BPT 000003 //LOG_INSTRUCTION(instruction, 0, "BPT"); - this.trap(0xC, /*014*/ 6); + this.trap(PDP11.TRAP.BREAKPOINT, /*014*/ 6); break; case 0x4: /*0000004*/ // IOT 000004 //LOG_INSTRUCTION(instruction, 0, "IOT"); - this.trap(0x10, /*020*/ 8); + this.trap(PDP11.TRAP.IOT, /*020*/ 8); break; case 0x5: /*0000005*/ // RESET 000005 //LOG_INSTRUCTION(instruction, 0, "RESET"); @@ -2343,14 +2442,16 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) if ((savePSW = this.readWordByVirtual(dstAddr | 0x10000)) >= 0) { this.regsGen[6] = (dstAddr + 2) & 0xffff; savePSW &= 0xf8ff; - if (this.PSW & 0xc000) { // user / super restrictions + if (this.PSW & 0xc000) { // user / super restrictions // keep SPL and allow lower only for modes and register set savePSW = (savePSW & 0xf81f) | (this.PSW & 0xf8e0); } this.regsGen[7] = virtualAddress; this.setPSW(savePSW); - this.trapMask &= ~0x10; // turn off Trace trap - if (instruction === 2) this.trapMask |= this.PSW & 0x10; // RTI enables immediate trace + this.opFlags &= ~PDP11.OPFLAG.TRAP_TF; + if (instruction === 2) { // RTI enables immediate trace + this.opFlags |= (this.PSW & PDP11.PSW.TF); + } } } break; @@ -2360,7 +2461,7 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) // break; // Exists on pdp 11/44 & KB11-EM default: // We don't know this instruction //LOG_INSTRUCTION(instruction, 11, "-unknown-"); - this.trap(0x8, /*010*/ 48); // Illegal instruction + this.trap(PDP11.TRAP.RESERVED, /*010*/ 48); // reserved instruction break; } } @@ -2369,18 +2470,6 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) } } } - if (this.trapMask) { // check for any traps pending - if (this.trapMask & 2) { - this.trap(0xA8, /*0250*/ 52); // MMU trap has priority - } else { - if (this.trapMask & 4) { - this.trap(4, 54); // then SP trap - } else { - if (this.trapMask & 0x10) this.trap(0xC, /*014*/ 56); // and finally a T-bit trap - } - } - this.trapMask = 0; - } } while (this.nStepCycles > 0); } diff --git a/modules/pdp11/lib/debugger.js b/modules/pdp11/lib/debugger.js index 7fff928e0..2aee86e97 100644 --- a/modules/pdp11/lib/debugger.js +++ b/modules/pdp11/lib/debugger.js @@ -214,7 +214,7 @@ if (DEBUGGER) { }; /* - * CPU opcode ordinals + * CPU opcode IDs */ DebuggerPDP11.OPS = { NONE: 0, ADC: 1, ADCB: 2, ADD: 3, ASL: 4, ASLB: 5, ASR: 6, ASRB: 7, @@ -261,120 +261,119 @@ if (DEBUGGER) { DebuggerPDP11.REG_PSW = 20; /* - * Operand descriptor masks; anything that's not covered by TYPE_SRC or TYPE_DST must be a TYPE_OTHER value. + * Operand type masks; anything that's not covered by OP_SRC or OP_DST must be a OP_OTHER value. */ - DebuggerPDP11.TYPE_DSTREG = 0x0007; - DebuggerPDP11.TYPE_DSTMODE = 0x0038; - DebuggerPDP11.TYPE_DSTMODE_SHIFT = 3; - DebuggerPDP11.TYPE_DST = (DebuggerPDP11.TYPE_DSTMODE | DebuggerPDP11.TYPE_DSTREG); - DebuggerPDP11.TYPE_SRCREG = 0x01C0; - DebuggerPDP11.TYPE_SRCMODE = 0x0E00; - DebuggerPDP11.TYPE_SRC = (DebuggerPDP11.TYPE_SRCMODE | DebuggerPDP11.TYPE_SRCREG); - DebuggerPDP11.TYPE_BRANCH = 0x1000; - DebuggerPDP11.TYPE_DSTOFF = 0x2000; - DebuggerPDP11.TYPE_DSTNUM3 = 0x3000; // DST 3-bit number (ie, just the DSTREG field) - DebuggerPDP11.TYPE_DSTNUM6 = 0x6000; // DST 6-bit number (ie, both the DSTREG and DSTMODE fields) - DebuggerPDP11.TYPE_OTHER = 0xF000; + DebuggerPDP11.OP_DSTREG = PDP11.OPREG.MASK; + DebuggerPDP11.OP_DSTMODE = PDP11.OPMODE.MASK; + DebuggerPDP11.OP_DST = (DebuggerPDP11.OP_DSTMODE | DebuggerPDP11.OP_DSTREG); + DebuggerPDP11.OP_SRCREG = PDP11.OPREG.MASK << 6; + DebuggerPDP11.OP_SRCMODE = PDP11.OPMODE.MASK << 6; + DebuggerPDP11.OP_SRC = (DebuggerPDP11.OP_SRCMODE | DebuggerPDP11.OP_SRCREG); + DebuggerPDP11.OP_BRANCH = 0x1000; + DebuggerPDP11.OP_DSTOFF = 0x2000; + DebuggerPDP11.OP_DSTNUM3 = 0x3000; // DST 3-bit number (ie, just the DSTREG field) + DebuggerPDP11.OP_DSTNUM6 = 0x6000; // DST 6-bit number (ie, both the DSTREG and DSTMODE fields) + DebuggerPDP11.OP_OTHER = 0xF000; /* - * The opMasks table contains opcode masks, and each mask refers to table of possible values, and each + * The opTable contains opcode masks, and each mask refers to table of possible values, and each * value refers to an array that contains: * * [0]: {number} of the opcode name (see OP.*) - * [1]: {number} containing the first operand descriptor bit(s), if any - * [2]: {number} containing the second operand descriptor bit(s), if any + * [1]: {number} containing the first operand type bit(s), if any + * [2]: {number} containing the second operand type bit(s), if any * * Note that, by convention, opcodes that require two operands list the SRC operand first and DST operand * second (ie, the OPPOSITE of the Intel convention). * * Also note that, for some of the newer PDP-11 opcodes (eg, MUL, DIV, ASH, ASHC), the location of the * opcode's SRC and DST bits are reversed. This is why, for example, you'll see the MUL instruction defined - * below as having TYPE_DST for the first operand and TYPE_SRCREG for the second operand. This does NOT mean + * below as having OP_DST for the first operand and OP_SRCREG for the second operand. This does NOT mean * that the opcode's destination operand is being listed first, but rather that the bits describing the source - * operand are in the opcode's TYPE_DST field. + * operand are in the opcode's OP_DST field. */ - DebuggerPDP11.opMasks = { + DebuggerPDP11.opTable = { 0xF000: { - 0x1000: [DebuggerPDP11.OPS.MOV, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 01SSDD - 0x2000: [DebuggerPDP11.OPS.CMP, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 02SSDD - 0x3000: [DebuggerPDP11.OPS.BIT, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 03SSDD - 0x4000: [DebuggerPDP11.OPS.BIC, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 04SSDD - 0x5000: [DebuggerPDP11.OPS.BIS, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 05SSDD - 0x6000: [DebuggerPDP11.OPS.ADD, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 06SSDD - 0x9000: [DebuggerPDP11.OPS.MOVB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 11SSDD - 0xA000: [DebuggerPDP11.OPS.CMPB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 12SSDD - 0xB000: [DebuggerPDP11.OPS.BITB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 13SSDD - 0xC000: [DebuggerPDP11.OPS.BICB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 14SSDD - 0xD000: [DebuggerPDP11.OPS.BISB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST], // 15SSDD - 0xE000: [DebuggerPDP11.OPS.SUB, DebuggerPDP11.TYPE_SRC, DebuggerPDP11.TYPE_DST] // 16SSDD + 0x1000: [DebuggerPDP11.OPS.MOV, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 01SSDD + 0x2000: [DebuggerPDP11.OPS.CMP, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 02SSDD + 0x3000: [DebuggerPDP11.OPS.BIT, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 03SSDD + 0x4000: [DebuggerPDP11.OPS.BIC, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 04SSDD + 0x5000: [DebuggerPDP11.OPS.BIS, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 05SSDD + 0x6000: [DebuggerPDP11.OPS.ADD, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 06SSDD + 0x9000: [DebuggerPDP11.OPS.MOVB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 11SSDD + 0xA000: [DebuggerPDP11.OPS.CMPB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 12SSDD + 0xB000: [DebuggerPDP11.OPS.BITB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 13SSDD + 0xC000: [DebuggerPDP11.OPS.BICB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 14SSDD + 0xD000: [DebuggerPDP11.OPS.BISB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST], // 15SSDD + 0xE000: [DebuggerPDP11.OPS.SUB, DebuggerPDP11.OP_SRC, DebuggerPDP11.OP_DST] // 16SSDD }, 0xFE00: { - 0x0800: [DebuggerPDP11.OPS.JSR, DebuggerPDP11.TYPE_SRCREG, DebuggerPDP11.TYPE_DST], // 004RDD - 0x7000: [DebuggerPDP11.OPS.MUL, DebuggerPDP11.TYPE_DST, DebuggerPDP11.TYPE_SRCREG], // 070RSS - 0x7200: [DebuggerPDP11.OPS.DIV, DebuggerPDP11.TYPE_DST, DebuggerPDP11.TYPE_SRCREG], // 071RSS - 0x7400: [DebuggerPDP11.OPS.ASH, DebuggerPDP11.TYPE_DST, DebuggerPDP11.TYPE_SRCREG], // 072RSS - 0x7600: [DebuggerPDP11.OPS.ASHC, DebuggerPDP11.TYPE_DST, DebuggerPDP11.TYPE_SRCREG], // 073RSS - 0x7800: [DebuggerPDP11.OPS.XOR, DebuggerPDP11.TYPE_SRCREG, DebuggerPDP11.TYPE_DST], // 074RSS - 0x7E00: [DebuggerPDP11.OPS.SOB, DebuggerPDP11.TYPE_SRCREG, DebuggerPDP11.TYPE_DSTOFF] // 077Rnn + 0x0800: [DebuggerPDP11.OPS.JSR, DebuggerPDP11.OP_SRCREG, DebuggerPDP11.OP_DST], // 004RDD + 0x7000: [DebuggerPDP11.OPS.MUL, DebuggerPDP11.OP_DST, DebuggerPDP11.OP_SRCREG], // 070RSS + 0x7200: [DebuggerPDP11.OPS.DIV, DebuggerPDP11.OP_DST, DebuggerPDP11.OP_SRCREG], // 071RSS + 0x7400: [DebuggerPDP11.OPS.ASH, DebuggerPDP11.OP_DST, DebuggerPDP11.OP_SRCREG], // 072RSS + 0x7600: [DebuggerPDP11.OPS.ASHC, DebuggerPDP11.OP_DST, DebuggerPDP11.OP_SRCREG], // 073RSS + 0x7800: [DebuggerPDP11.OPS.XOR, DebuggerPDP11.OP_SRCREG, DebuggerPDP11.OP_DST], // 074RSS + 0x7E00: [DebuggerPDP11.OPS.SOB, DebuggerPDP11.OP_SRCREG, DebuggerPDP11.OP_DSTOFF] // 077Rnn }, 0xFF00: { - 0x0100: [DebuggerPDP11.OPS.BR, DebuggerPDP11.TYPE_BRANCH], - 0x0200: [DebuggerPDP11.OPS.BNE, DebuggerPDP11.TYPE_BRANCH], - 0x0300: [DebuggerPDP11.OPS.BEQ, DebuggerPDP11.TYPE_BRANCH], - 0x0400: [DebuggerPDP11.OPS.BGE, DebuggerPDP11.TYPE_BRANCH], - 0x0500: [DebuggerPDP11.OPS.BLT, DebuggerPDP11.TYPE_BRANCH], - 0x0600: [DebuggerPDP11.OPS.BGT, DebuggerPDP11.TYPE_BRANCH], - 0x0700: [DebuggerPDP11.OPS.BLE, DebuggerPDP11.TYPE_BRANCH], - 0x8000: [DebuggerPDP11.OPS.BPL, DebuggerPDP11.TYPE_BRANCH], - 0x8100: [DebuggerPDP11.OPS.BMI, DebuggerPDP11.TYPE_BRANCH], - 0x8200: [DebuggerPDP11.OPS.BHI, DebuggerPDP11.TYPE_BRANCH], - 0x8300: [DebuggerPDP11.OPS.BLOS, DebuggerPDP11.TYPE_BRANCH], - 0x8400: [DebuggerPDP11.OPS.BVC, DebuggerPDP11.TYPE_BRANCH], - 0x8500: [DebuggerPDP11.OPS.BVS, DebuggerPDP11.TYPE_BRANCH], - 0x8600: [DebuggerPDP11.OPS.BCC, DebuggerPDP11.TYPE_BRANCH], - 0x8700: [DebuggerPDP11.OPS.BCS, DebuggerPDP11.TYPE_BRANCH], + 0x0100: [DebuggerPDP11.OPS.BR, DebuggerPDP11.OP_BRANCH], + 0x0200: [DebuggerPDP11.OPS.BNE, DebuggerPDP11.OP_BRANCH], + 0x0300: [DebuggerPDP11.OPS.BEQ, DebuggerPDP11.OP_BRANCH], + 0x0400: [DebuggerPDP11.OPS.BGE, DebuggerPDP11.OP_BRANCH], + 0x0500: [DebuggerPDP11.OPS.BLT, DebuggerPDP11.OP_BRANCH], + 0x0600: [DebuggerPDP11.OPS.BGT, DebuggerPDP11.OP_BRANCH], + 0x0700: [DebuggerPDP11.OPS.BLE, DebuggerPDP11.OP_BRANCH], + 0x8000: [DebuggerPDP11.OPS.BPL, DebuggerPDP11.OP_BRANCH], + 0x8100: [DebuggerPDP11.OPS.BMI, DebuggerPDP11.OP_BRANCH], + 0x8200: [DebuggerPDP11.OPS.BHI, DebuggerPDP11.OP_BRANCH], + 0x8300: [DebuggerPDP11.OPS.BLOS, DebuggerPDP11.OP_BRANCH], + 0x8400: [DebuggerPDP11.OPS.BVC, DebuggerPDP11.OP_BRANCH], + 0x8500: [DebuggerPDP11.OPS.BVS, DebuggerPDP11.OP_BRANCH], + 0x8600: [DebuggerPDP11.OPS.BCC, DebuggerPDP11.OP_BRANCH], + 0x8700: [DebuggerPDP11.OPS.BCS, DebuggerPDP11.OP_BRANCH], 0x8800: [DebuggerPDP11.OPS.EMT], // 104000..104377 0x8900: [DebuggerPDP11.OPS.TRAP] // 104400..104777 }, 0xFFC0: { - 0x0040: [DebuggerPDP11.OPS.JMP, DebuggerPDP11.TYPE_DST], // 0001DD - 0x00C0: [DebuggerPDP11.OPS.SWAB, DebuggerPDP11.TYPE_DST], // 0003DD - 0x0A00: [DebuggerPDP11.OPS.CLR, DebuggerPDP11.TYPE_DST], // 0050DD - 0x0A40: [DebuggerPDP11.OPS.COM, DebuggerPDP11.TYPE_DST], // 0051DD - 0x0A80: [DebuggerPDP11.OPS.INC, DebuggerPDP11.TYPE_DST], // 0052DD - 0x0AC0: [DebuggerPDP11.OPS.DEC, DebuggerPDP11.TYPE_DST], // 0053DD - 0x0B00: [DebuggerPDP11.OPS.NEG, DebuggerPDP11.TYPE_DST], // 0054DD - 0x0B40: [DebuggerPDP11.OPS.ADC, DebuggerPDP11.TYPE_DST], // 0055DD - 0x0B80: [DebuggerPDP11.OPS.SBC, DebuggerPDP11.TYPE_DST], // 0056DD - 0x0BC0: [DebuggerPDP11.OPS.TST, DebuggerPDP11.TYPE_DST], // 0057DD - 0x0C00: [DebuggerPDP11.OPS.ROR, DebuggerPDP11.TYPE_DST], // 0060DD - 0x0C40: [DebuggerPDP11.OPS.ROL, DebuggerPDP11.TYPE_DST], // 0061DD - 0x0C80: [DebuggerPDP11.OPS.ASR, DebuggerPDP11.TYPE_DST], // 0062DD - 0x0CC0: [DebuggerPDP11.OPS.ASL, DebuggerPDP11.TYPE_DST], // 0063DD - 0x0D00: [DebuggerPDP11.OPS.MARK, DebuggerPDP11.TYPE_DSTNUM6], // 0064nn - 0x0D40: [DebuggerPDP11.OPS.MFPI, DebuggerPDP11.TYPE_DST], // 0065SS - 0x0D80: [DebuggerPDP11.OPS.MTPI, DebuggerPDP11.TYPE_DST], // 0066DD - 0x0DC0: [DebuggerPDP11.OPS.SXT, DebuggerPDP11.TYPE_DST], // 0067DD - 0x8A00: [DebuggerPDP11.OPS.CLRB, DebuggerPDP11.TYPE_DST], // 1050DD - 0x8A40: [DebuggerPDP11.OPS.COMB, DebuggerPDP11.TYPE_DST], // 1051DD - 0x8A80: [DebuggerPDP11.OPS.INCB, DebuggerPDP11.TYPE_DST], // 1052DD - 0x8AC0: [DebuggerPDP11.OPS.DECB, DebuggerPDP11.TYPE_DST], // 1053DD - 0x8B00: [DebuggerPDP11.OPS.NEGB, DebuggerPDP11.TYPE_DST], // 1054DD - 0x8B40: [DebuggerPDP11.OPS.ADCB, DebuggerPDP11.TYPE_DST], // 1055DD - 0x8B80: [DebuggerPDP11.OPS.SBCB, DebuggerPDP11.TYPE_DST], // 1056DD - 0x8BC0: [DebuggerPDP11.OPS.TSTB, DebuggerPDP11.TYPE_DST], // 1057DD - 0x8C00: [DebuggerPDP11.OPS.RORB, DebuggerPDP11.TYPE_DST], // 1060DD - 0x8C40: [DebuggerPDP11.OPS.ROLB, DebuggerPDP11.TYPE_DST], // 1061DD - 0x8C80: [DebuggerPDP11.OPS.ASRB, DebuggerPDP11.TYPE_DST], // 1062DD - 0x8CC0: [DebuggerPDP11.OPS.ASLB, DebuggerPDP11.TYPE_DST], // 1063DD - 0x8D00: [DebuggerPDP11.OPS.MTPS, DebuggerPDP11.TYPE_DST], // 1064SS (only on LSI-11) - 0x8D40: [DebuggerPDP11.OPS.MFPD, DebuggerPDP11.TYPE_DST], // 1065DD (same as MFPI if no separate instruction/data spaces) - 0x8D80: [DebuggerPDP11.OPS.MTPD, DebuggerPDP11.TYPE_DST], // 1066DD (same as MTPI if no separate instruction/data spaces) - 0x8DC0: [DebuggerPDP11.OPS.MFPS, DebuggerPDP11.TYPE_DST] // 1067SS (only on LSI-11) + 0x0040: [DebuggerPDP11.OPS.JMP, DebuggerPDP11.OP_DST], // 0001DD + 0x00C0: [DebuggerPDP11.OPS.SWAB, DebuggerPDP11.OP_DST], // 0003DD + 0x0A00: [DebuggerPDP11.OPS.CLR, DebuggerPDP11.OP_DST], // 0050DD + 0x0A40: [DebuggerPDP11.OPS.COM, DebuggerPDP11.OP_DST], // 0051DD + 0x0A80: [DebuggerPDP11.OPS.INC, DebuggerPDP11.OP_DST], // 0052DD + 0x0AC0: [DebuggerPDP11.OPS.DEC, DebuggerPDP11.OP_DST], // 0053DD + 0x0B00: [DebuggerPDP11.OPS.NEG, DebuggerPDP11.OP_DST], // 0054DD + 0x0B40: [DebuggerPDP11.OPS.ADC, DebuggerPDP11.OP_DST], // 0055DD + 0x0B80: [DebuggerPDP11.OPS.SBC, DebuggerPDP11.OP_DST], // 0056DD + 0x0BC0: [DebuggerPDP11.OPS.TST, DebuggerPDP11.OP_DST], // 0057DD + 0x0C00: [DebuggerPDP11.OPS.ROR, DebuggerPDP11.OP_DST], // 0060DD + 0x0C40: [DebuggerPDP11.OPS.ROL, DebuggerPDP11.OP_DST], // 0061DD + 0x0C80: [DebuggerPDP11.OPS.ASR, DebuggerPDP11.OP_DST], // 0062DD + 0x0CC0: [DebuggerPDP11.OPS.ASL, DebuggerPDP11.OP_DST], // 0063DD + 0x0D00: [DebuggerPDP11.OPS.MARK, DebuggerPDP11.OP_DSTNUM6], // 0064nn + 0x0D40: [DebuggerPDP11.OPS.MFPI, DebuggerPDP11.OP_DST], // 0065SS + 0x0D80: [DebuggerPDP11.OPS.MTPI, DebuggerPDP11.OP_DST], // 0066DD + 0x0DC0: [DebuggerPDP11.OPS.SXT, DebuggerPDP11.OP_DST], // 0067DD + 0x8A00: [DebuggerPDP11.OPS.CLRB, DebuggerPDP11.OP_DST], // 1050DD + 0x8A40: [DebuggerPDP11.OPS.COMB, DebuggerPDP11.OP_DST], // 1051DD + 0x8A80: [DebuggerPDP11.OPS.INCB, DebuggerPDP11.OP_DST], // 1052DD + 0x8AC0: [DebuggerPDP11.OPS.DECB, DebuggerPDP11.OP_DST], // 1053DD + 0x8B00: [DebuggerPDP11.OPS.NEGB, DebuggerPDP11.OP_DST], // 1054DD + 0x8B40: [DebuggerPDP11.OPS.ADCB, DebuggerPDP11.OP_DST], // 1055DD + 0x8B80: [DebuggerPDP11.OPS.SBCB, DebuggerPDP11.OP_DST], // 1056DD + 0x8BC0: [DebuggerPDP11.OPS.TSTB, DebuggerPDP11.OP_DST], // 1057DD + 0x8C00: [DebuggerPDP11.OPS.RORB, DebuggerPDP11.OP_DST], // 1060DD + 0x8C40: [DebuggerPDP11.OPS.ROLB, DebuggerPDP11.OP_DST], // 1061DD + 0x8C80: [DebuggerPDP11.OPS.ASRB, DebuggerPDP11.OP_DST], // 1062DD + 0x8CC0: [DebuggerPDP11.OPS.ASLB, DebuggerPDP11.OP_DST], // 1063DD + 0x8D00: [DebuggerPDP11.OPS.MTPS, DebuggerPDP11.OP_DST], // 1064SS (only on LSI-11) + 0x8D40: [DebuggerPDP11.OPS.MFPD, DebuggerPDP11.OP_DST], // 1065DD (same as MFPI if no separate instruction/data spaces) + 0x8D80: [DebuggerPDP11.OPS.MTPD, DebuggerPDP11.OP_DST], // 1066DD (same as MTPI if no separate instruction/data spaces) + 0x8DC0: [DebuggerPDP11.OPS.MFPS, DebuggerPDP11.OP_DST] // 1067SS (only on LSI-11) }, 0xFFF8: { - 0x0080: [DebuggerPDP11.OPS.RTS, DebuggerPDP11.TYPE_DSTREG], // 00020R - 0x0098: [DebuggerPDP11.OPS.SPL, DebuggerPDP11.TYPE_DSTNUM3] // 00023N + 0x0080: [DebuggerPDP11.OPS.RTS, DebuggerPDP11.OP_DSTREG], // 00020R + 0x0098: [DebuggerPDP11.OPS.SPL, DebuggerPDP11.OP_DSTNUM3] // 00023N }, 0xFFFF: { 0x0000: [DebuggerPDP11.OPS.HALT], // 000000 @@ -443,7 +442,7 @@ if (DEBUGGER) { var sMessages = cmp.getMachineParm('messages'); if (sMessages) this.messageInit(sMessages); - this.opMasks = DebuggerPDP11.opMasks; + this.opTable = DebuggerPDP11.opTable; this.messageDump(MessagesPDP11.BUS, function onDumpBus(asArgs) { dbg.dumpBus(asArgs); }); @@ -1594,9 +1593,8 @@ if (DEBUGGER) { } this.aBreakWrite = ["bw"]; /* - * nSuppressBreaks ensures we can't get into an infinite loop where a breakpoint lookup requires - * reading a segment descriptor via getSegment(), and that triggers more memory reads, which triggers - * more breakpoint checks. + * nSuppressBreaks ensures we can't get into an infinite loop where a breakpoint lookup + * requires reading memory that triggers more memory reads, which triggers more breakpoint checks. */ this.nSuppressBreaks = 0; }; @@ -1892,10 +1890,9 @@ if (DEBUGGER) { var opCode = this.getWord(dbgAddr, true); var opDesc; - for (var mask in this.opMasks) { - var opMask = this.opMasks[mask]; - var bits = opCode & mask; - opDesc = opMask[bits]; + for (var mask in this.opTable) { + var opMasks = this.opTable[mask]; + opDesc = opMasks[opCode & mask]; if (opDesc) break; } @@ -1907,10 +1904,10 @@ if (DEBUGGER) { for (var iOperand = 1; iOperand <= cOperands; iOperand++) { - var type = opDesc[iOperand]; - if (type === undefined) continue; + var opType = opDesc[iOperand]; + if (opType === undefined) continue; - var sOperand = this.getOperand(opCode, type, dbgAddr); + var sOperand = this.getOperand(opCode, opType, dbgAddr); if (!sOperand || !sOperand.length) { sOperands = "INVALID"; @@ -1956,63 +1953,63 @@ if (DEBUGGER) { }; /** - * getOperand(opCode, type, dbgAddr) + * getOperand(opCode, opType, dbgAddr) * * If getOperand() returns an Array rather than a string, then the first element is the original * operand, and the second element is a comment containing an alternate representation of the operand. * * @this {DebuggerPDP11} * @param {number} opCode - * @param {number} type + * @param {number} opType * @param {DbgAddrPDP11} dbgAddr * @return {string|Array.} */ - DebuggerPDP11.prototype.getOperand = function(opCode, type, dbgAddr) + DebuggerPDP11.prototype.getOperand = function(opCode, opType, dbgAddr) { var sOperand = "", disp, addr; /* - * Take care of TYPE_OTHER opcodes first; then all we'll have to worry about - * next are TYPE_SRC or TYPE_DST opcodes. + * Take care of OP_OTHER opcodes first; then all we'll have to worry about + * next are OP_SRC or OP_DST opcodes. */ - var typeOther = type & DebuggerPDP11.TYPE_OTHER; - if (typeOther == DebuggerPDP11.TYPE_BRANCH) { + var opTypeOther = opType & DebuggerPDP11.OP_OTHER; + if (opTypeOther == DebuggerPDP11.OP_BRANCH) { disp = ((opCode & 0xff) << 24) >> 23; addr = (dbgAddr.addr + disp) & 0xffff; sOperand = this.toStrBase(addr); } - else if (typeOther == DebuggerPDP11.TYPE_DSTOFF) { + else if (opTypeOther == DebuggerPDP11.OP_DSTOFF) { disp = (opCode & 0x3f) << 1; addr = (dbgAddr.addr - disp) & 0xffff; sOperand = this.toStrBase(addr); } - else if (typeOther == DebuggerPDP11.TYPE_DSTNUM3) { + else if (opTypeOther == DebuggerPDP11.OP_DSTNUM3) { disp = (opCode & 0x7); sOperand = this.toStrBase(disp, 2); } - else if (typeOther == DebuggerPDP11.TYPE_DSTNUM6) { + else if (opTypeOther == DebuggerPDP11.OP_DSTNUM6) { disp = (opCode & 0x3f); sOperand = this.toStrBase(disp); } else { /* - * Isolate all TYPE_SRC or TYPE_DST bits from opcode in the mode variable. + * Isolate all OP_SRC or OP_DST bits from opcode in the opMode variable. */ - var mode = opCode & type; + var opMode = opCode & opType; /* - * Convert TYPE_SRC bits into TYPE_DST bits, since they use the same format. + * Convert OP_SRC bits into OP_DST bits, since they use the same format. */ - if (type & DebuggerPDP11.TYPE_SRC) { - mode >>= 6; - type >>= 6; + if (opType & DebuggerPDP11.OP_SRC) { + opMode >>= 6; + opType >>= 6; } - if (type & DebuggerPDP11.TYPE_DST) { + if (opType & DebuggerPDP11.OP_DST) { var wIndex; - var reg = mode & DebuggerPDP11.TYPE_DSTREG; + var reg = opMode & DebuggerPDP11.OP_DSTREG; /* - * Note that opcodes that specify only REG bits in the type mask (ie, no MOD bits) - * will automatically default to MODE_REG below. + * Note that opcodes that specify only REG bits in the opType mask (ie, no MOD bits) + * will automatically default to OPMODE_REG below. */ - switch((mode & DebuggerPDP11.TYPE_DSTMODE) >> DebuggerPDP11.TYPE_DSTMODE_SHIFT) { + switch((opMode & DebuggerPDP11.OP_DSTMODE)) { case PDP11.OPMODE.REG: // 0x0: REGISTER sOperand = this.getRegName(reg); break; diff --git a/modules/pdp11/lib/defines.js b/modules/pdp11/lib/defines.js index 61465510c..6397de87f 100644 --- a/modules/pdp11/lib/defines.js +++ b/modules/pdp11/lib/defines.js @@ -84,19 +84,19 @@ var TYPEDARRAYS = (typeof ArrayBuffer !== 'undefined'); * which all machine components should start using; eg: "if (PDP11.DEBUG) ..." instead of "if (DEBUG) ...". */ var PDP11 = { - APPCLASS: APPCLASS, - APPNAME: APPNAME, - APPVERSION: APPVERSION, // shared - BYTEARRAYS: BYTEARRAYS, - COMPILED: COMPILED, // shared - CSSCLASS: CSSCLASS, // shared - DEBUG: DEBUG, // shared - DEBUGGER: DEBUGGER, - MAXDEBUG: MAXDEBUG, // shared - PRIVATE: PRIVATE, // shared - TYPEDARRAYS: TYPEDARRAYS, - SITEHOST: SITEHOST, // shared - XMLVERSION: XMLVERSION, // shared + APPCLASS: APPCLASS, + APPNAME: APPNAME, + APPVERSION: APPVERSION, // shared + BYTEARRAYS: BYTEARRAYS, + COMPILED: COMPILED, // shared + CSSCLASS: CSSCLASS, // shared + DEBUG: DEBUG, // shared + DEBUGGER: DEBUGGER, + MAXDEBUG: MAXDEBUG, // shared + PRIVATE: PRIVATE, // shared + TYPEDARRAYS:TYPEDARRAYS, + SITEHOST: SITEHOST, // shared + XMLVERSION: XMLVERSION, // shared /* * CPU model numbers (supported) @@ -121,68 +121,95 @@ var PDP11 = { * certain that this file is included BEFORE the first reference to any of these properties, that * automatic inlining will no longer occur. */ - ADDR_INVALID: -1, + ADDR_INVALID: -1, /* * Processor modes */ MODE: { - KERNEL: 0x0, - SUPER: 0x1, - UNUSED: 0x2, - USER: 0x3, - MASK: 0x3 + KERNEL: 0x0, + SUPER: 0x1, + UNUSED: 0x2, + USER: 0x3, + MASK: 0x3 }, /* * Processor Status flag definitions (stored in regPSW) */ PSW: { - CF: 0x0001, // bit 0: Carry Flag - CF_SHIFT: 0, - VF: 0x0002, // bit 1: Overflow Flag (aka OF on Intel processors) - VF_SHIFT: 1, - ZF: 0x0004, // bit 2: Zero Flag - ZF_SHIFT: 2, - NF: 0x0008, // bit 3: Negative Flag (aka SF -- Sign Flag -- on Intel processors) - NF_SHIFT: 3, - TF: 0x0010, // bit 4: Trap Flag - TF_SHIFT: 4, - PRI: 0x00E0, // bits 5-7: Priority - PRI_SHIFT: 5, - UNUSED: 0x0700, // bits 8-10: unused - REGSET: 0x0800, // bit 11: Register Set - PMODE: 0x3000, // bits 12-13: Prev Mode (see PDP11.MODE) - PMODE_SHIFT:12, - CMODE: 0xC000, // bits 14-15: Curr Mode (see PDP11.MODE) - CMODE_SHIFT:14 + CF: 0x0001, // bit 0: Carry Flag + CF_SHIFT: 0, + VF: 0x0002, // bit 1: Overflow Flag (aka OF on Intel processors) + VF_SHIFT: 1, + ZF: 0x0004, // bit 2: Zero Flag + ZF_SHIFT: 2, + NF: 0x0008, // bit 3: Negative Flag (aka SF -- Sign Flag -- on Intel processors) + NF_SHIFT: 3, + TF: 0x0010, // bit 4: Trap Flag + TF_SHIFT: 4, + PRI: 0x00E0, // bits 5-7: Priority + PRI_SHIFT: 5, + UNUSED: 0x0700, // bits 8-10: unused + REGSET: 0x0800, // bit 11: Register Set + PMODE: 0x3000, // bits 12-13: Prev Mode (see PDP11.MODE) + PMODE_SHIFT: 12, + CMODE: 0xC000, // bits 14-15: Curr Mode (see PDP11.MODE) + CMODE_SHIFT: 14 }, /* * Interrupt-related flags (stored in intFlags) */ INTFLAG: { - NONE: 0x0000, - INTR: 0x00ff, // mask for 8 bits, representing interrupt levels 0-7 - HALT: 0x0100 // halt requested; see opHLT() + NONE: 0x0000, + INTR: 0x00ff, // mask for 8 bits, representing interrupt levels 0-7 + HALT: 0x0100 // halt requested; see opHLT() + }, + OPFLAG: { + TRAP_TF: 0x10, // aka PDP11.PSW.TF + TRAP_MMU: 0x20, + TRAP_SP: 0x40, + TRAP_MASK: 0x70, + SKIP_FLAGS: 0x80 }, /* - * Opcode modes + * Opcode reg (opcode bits 2-0) + */ + OPREG: { + MASK: 0x07 + }, + /* + * Opcode modes (opcode bits 5-3) */ OPMODE: { - REG: 0x0, // REGISTER (register is operand) - REGD: 0x1, // REGISTER DEFERRED (register is address of operand) - POSTINC: 0x2, // POST-INCREMENT (register is address of operand, register incremented) - POSTINCD: 0x3, // POST-INCREMENT DEFERRED (register is address of address of operand, register incremented) - PREDEC: 0x4, // PRE-DECREMENT (register decremented, register is address of operand) - PREDECD: 0x5, // PRE-DECREMENT DEFERRED (register decremented, register is address of address of operand) - INDEX: 0x6, // INDEX (register + next word is address of operand) - INDEXD: 0x7 // INDEX DEFERRED (register + next word is address of address of operand) + REG: 0x00, // REGISTER (register is operand) + REGD: 0x08, // REGISTER DEFERRED (register is address of operand) + POSTINC: 0x10, // POST-INCREMENT (register is address of operand, register incremented) + POSTINCD: 0x18, // POST-INCREMENT DEFERRED (register is address of address of operand, register incremented) + PREDEC: 0x20, // PRE-DECREMENT (register decremented, register is address of operand) + PREDECD: 0x28, // PRE-DECREMENT DEFERRED (register decremented, register is address of address of operand) + INDEX: 0x30, // INDEX (register + next word is address of operand) + INDEXD: 0x38, // INDEX DEFERRED (register + next word is address of address of operand) + MASK: 0x38 }, - /* - * Opcode definitions - */ - OPCODE: { - // TODO + DSTMODE: { + MASK: 0x003F, + SHIFT: 0 + }, + SRCMODE: { + MASK: 0x0FC0, + SHIFT: 6 + }, + TRAP: { + UNDEFINED: 0x00, // 000 (reserved) + BUS_ERROR: 0x04, // 004 illegal instructions, bus errors, stack limit, illegal internal address, microbreak + RESERVED: 0x08, // 010 reserved instructions + BREAKPOINT: 0x0C, // 014 BPT, breakpoint trap (trace) + IOT: 0x10, // 020 IOT, input/output trap + POWER_FAIL: 0x14, // 024 power fail + EMULATOR: 0x18, // 030 EMT, emulator trap + TRAP: 0x1C, // 034 TRAP instruction + PIRQ: 0xA0, // 240 PIRQ, program interrupt request + MMU_FAULT: 0xA8 // 250 MMU aborts and traps }, - BYTE_MODE: 1, READ_MODE: 2, WRITE_MODE: 4, diff --git a/modules/pdp11/lib/device.js b/modules/pdp11/lib/device.js index 3942b1fb5..62a36adbc 100644 --- a/modules/pdp11/lib/device.js +++ b/modules/pdp11/lib/device.js @@ -222,17 +222,9 @@ DevicePDP11.prototype.readPSW = function(addr) */ DevicePDP11.prototype.writePSW = function(data, addr) { - /* - * TODO: Determine whether we need to replicate the code in access_iopage() that returns a bogus - * error when writing to ADDR_PSW, as a way of preventing instructions like CLR from updating the flags - * and potentially modifying some of the PSW bits that were just set (eg, the Z flag). - * - * If so, then we'll need to centralize the flag update logic, so that it can be skipped whenever a - * special one-time opcode flag is set. Because there are a number of arithmetic instructions besides - * CLR that could be used to modify ADDR_PSW. - */ var maskDisallowed = PDP11.PSW.UNUSED | PDP11.PSW.TF; this.cpu.setPSW((data & ~maskDisallowed) | (this.cpu.getPSW() & maskDisallowed)); + this.cpu.opFlags |= PDP11.OPFLAG.SKIP_FLAGS; }; /** @@ -623,27 +615,6 @@ DevicePDP11.prototype.kw11_interrupt = function() } }; -/** - * mapUnibus(unibusAddress) - * - * @this {DevicePDP11} - * @param {number} unibusAddress - * @return {number} - */ -DevicePDP11.prototype.mapUnibus = function(unibusAddress) -{ - var idx = (unibusAddress >> 13) & 0x1f; - if (idx < 31) { - if (this.cpu.MMR3 & 0x20) { - unibusAddress = (this.cpu.unibusMap[idx] + (unibusAddress & 0x1ffe)) & 0x3ffffe; - if (unibusAddress >= BusPDP11.IOPAGE_UNIBUS && unibusAddress < BusPDP11.IOPAGE_22BIT) this.cpu.panic(898); - } - } else { - unibusAddress |= BusPDP11.IOPAGE_22BIT; - } - return unibusAddress; -}; - /** * getData(xhr, callback, meta, block, address, count) * @@ -764,7 +735,7 @@ DevicePDP11.prototype.readData = function(meta, block, address, count) return; } for (word = 0; word < meta.blocksize && count > 0; word++) { - if (this.cpu.writeWordByAddr((meta.mapped? this.mapUnibus(address) : address), meta.cache[block][word]) < 0) { + if (this.cpu.writeWordByAddr((meta.mapped? this.cpu.mapUnibus(address) : address), meta.cache[block][word]) < 0) { meta.postProcess(2, meta, block, address, count); // NXM return; } @@ -798,7 +769,7 @@ DevicePDP11.prototype.writeData = function(meta, block, address, count) } } for (word = 0; word < meta.blocksize && count > 0; word++) { - data = this.cpu.readWordByAddr((meta.mapped? this.mapUnibus(address) : address)); + data = this.cpu.readWordByAddr((meta.mapped? this.cpu.mapUnibus(address) : address)); if (data < 0) { meta.postProcess(2, meta, block, address, count); // NXM return; diff --git a/versions/pdp11/1.30.0/pdp11-dbg.js b/versions/pdp11/1.30.0/pdp11-dbg.js index c09ce8d20..93b77f578 100644 --- a/versions/pdp11/1.30.0/pdp11-dbg.js +++ b/versions/pdp11/1.30.0/pdp11-dbg.js @@ -1,212 +1,212 @@ (function(){var m; function aa(a,b){var d;if(a){b||(b=10);var c=a.charAt(0),f=0>=3;return(d?"0o":"")+c}function r(a,b,d){var c="";b?8=f?48:55),c=String.fromCharCode(f)+c;a>>=4}return(d?"0x":"")+c} -function ca(a){var b=a,d=a.lastIndexOf("/");0<=d&&(b=a.substr(d+1));d=b.indexOf("&");0":">",'"':""","'":"'"};function ma(a){return a.replace(/[&<>"']/g,function(a){return la[a]})}function pa(a,b){return(a+" ").slice(0,b)} -function qa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function ra(a,b,d){var c=0,f=a.length,e=0;for(void 0===d&&(d=function(a,b){return a>b?1:a>1,g;g=d(b,a[h]);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 ca(a){var b=a,d=a.lastIndexOf("/");0<=d&&(b=a.substr(d+1));d=b.indexOf("&");0":">",'"':""","'":"'"};function ma(a){return a.replace(/[&<>"']/g,function(a){return la[a]})}function na(a,b){return(a+" ").slice(0,b)} +function qa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function ra(a,b,d){var c=0,f=a.length,e=0;for(void 0===d&&(d=function(a,b){return a>b?1:a>1,g;g=d(b,a[h]);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 xa(a,b,d,c){var f=0,e=null,h=null;if("object"==typeof resources&&(e=resources[a]))return c&&c(a,e,f),[e,f];if(d&&"function"==typeof resources)return resources(a,function(b,d){c&&c(a,b,d)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");d&&(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),c&&c(a,e,f))});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,!!d);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!d),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();d||(e=g.responseText,200!=g.status&&(f=g.status||-1),c&&c(a,e,f),h=[e,f]);return h}function ka(){return"http://"+(window?window.location.host:"www.pcjs.org")} function t(a){window&&window.alert(a)}function ya(a){var b=!1;window&&(b=window.confirm(a));return b}var za=null;function Aa(){if(null==za){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}za=a}return za}function Ba(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(d){}return b} function Ca(a,b){try{return window.localStorage.setItem(a,b),!0}catch(d){}return!1}function Da(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Ea(a,b,d){function c(){--a;0<=a&&(b()||(a=0));0b?this.Bb=this.id:(this.nc=this.id.substr(0,b),this.Bb=this.id.substr(b+1));this[a]=d;this.A={ready:!1,mb:!1,cc:!1,ea:!1,error:!1};this.Vb=null;this.A.error=!1;this.O={};this.H=null;this.ha=c||0;v.push(this)}var Ua=void 0,Va={}; +function u(a,b,d,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.mc=b.comment;this.Nc=b;b=this.id.indexOf(".");0>b?this.Bb=this.id:(this.oc=this.id.substr(0,b),this.Bb=this.id.substr(b+1));this[a]=d;this.w={ready:!1,nb:!1,dc:!1,fa:!1,error:!1};this.Wb=null;this.w.error=!1;this.O={};this.H=null;this.ha=c||0;v.push(this)}var Ua=void 0,Va={}; if(window){Ua||(Ua=window.location.search.substr(1));for(var Wa,Xa=/\+/g,Ya=/([^&=]+)=?([^&]*)/g;Wa=Ya.exec(Ua);)Va[decodeURIComponent(Wa[1].replace(Xa," "))]=decodeURIComponent(Wa[2].replace(Xa," "))}function Za(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var d=typeof a;if("object"!==d&&"function"!==d)throw new TypeError;}b.prototype=a;return new b} function w(a,b){b||(b=u);a.prototype=Za(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var $a=window.PCjs.Machines||(window.PCjs.Machines={}),v=window.PCjs.Components||(window.PCjs.Components=[])}else $a={},v=[];function ab(a,b,d){$a[a]&&b&&($a[a][b]=d)}function bb(a){var b,d=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b>1)+2;10>this.X&&(this.X=10);15>2;this.G=this.za-1;this.F=this.I/this.za|0;this.B=this.F-1;this.Sa=[];this.J=null;this.Gb=this.Cc;a=new G;xb(a,this.H);this.R=Array(this.F);for(b=0;b>8:d[2](b)&255}else if(b&1&&(d=this.controller.Sa[a&-2],d[2]))return d[2](b&-2)>>8;return this.controller.Gb(b,-1,1)} -function zb(a,b,d){var c=this.controller.Sa[a];if(c){if(c[1]){c[1](b,d);return}if(c[3]){a=c[2]?c[2](d):0;if(d&1)c[3](a&255|b<<8,d&-2);else c[3](a&-256|b,d);return}}else if(d&1&&(c=this.controller.Sa[a&-2],c[3])){d&=-2;a=c[2]?c[2](d):0;c[3](a&255|b<<8,d);return}this.controller.Gb(d,b,1)}function Ab(a,b){var d=this.controller.Sa[a];if(d){if(d[2])return d[2](b);if(d[0])return d[0](b)|d[0](b+1)<<8}return this.controller.Gb(b,-1,0)} -function Bb(a,b,d){if(a=this.controller.Sa[a]){if(a[3]){a[3](b,d);return}if(a[1]){a[1](b&255,d);a[1](b>>8,d+1);return}}this.controller.Gb(d,b,0)}m=wb.prototype;m.reset=function(){this.J&&this.J()};m.Cc=function(){return 0};m.Na=function(a,b){b||this.reset();return!0}; -function Cb(a,b,d,c,f){for(var e=b,h=d,g=e>>>a.X;0h&&(n=h);if(k&&k.size){if(k.type==c&&k.controller==f){if(e+h<=k.C)return k.Tb+=k.C-e,k.C=e,!0;if(e>=k.C+k.Tb){n=k.size-(e-l);n>h&&(n=h);k.Tb=e-k.C+n;e=l+a.za;h-=n;g++;continue}}return Eb(1,e,h)}e=new G(e,n,a.za,c,f);xb(e,a.H,k);a.R[g++]=e;e=l+a.za;h-=n}return 0>=h?(a.status(Math.floor(d/1024)+"Kb "+Fb[c]+" at "+r(b,8,!0)),!0):Eb(2,b,d)} -m.Hb=function(a){return this.R[(a&this.i)>>>this.X].rb(a&this.G,a)};m.Ga=function(a){var b=a&this.G,d=(a&this.i)>>>this.X;return b!=this.G?this.R[d].vc(b,a):this.R[d++].rb(b,a)|this.R[d&this.B].rb(0,a+1)<<8};function Gb(a,b){var d=b&a.G,c=(b&a.i)>>>a.X;return d!=a.G?a.R[c].gc(d,b):a.R[c++].Ob(d,b)|a.R[c&a.B].Ob(0,b+1)<<8}m.ac=function(a,b){this.R[(a&this.i)>>>this.X].xb(a&this.G,b&255,a)}; -m.ic=function(a,b){var d=a&this.G,c=(a&this.i)>>>this.X;d!=this.G?this.R[c].Bc(d,b&65535,a):(this.R[c++].xb(d,b&255,a),this.R[c&this.B].xb(0,b>>8&255,a+1))};function Eb(a,b,d){t("Memory block error ("+a+": "+r(b)+","+r(d)+")");return!1} -function Hb(a){u.call(this,"Device",a,Hb);this.P=a.name;this.N={fc:[],Ha:0,pa:128,H:127,Ic:0};this.i={data:0,fd:0,ob:20,cd:0};this.B={Ib:0,K:0};this.F={Qb:2496,ka:0,S:128,Rb:0,Pb:0,sa:0,wc:0,ma:[],bb:[406,406,406,406],Y:[12,12,12,12]};this.I={K:129,Fb:0,ca:0,Xa:0,Ta:0,$a:0,ma:[],Y:[40,40,40,40],bb:[1024,1024,512,512],Ec:[157,157,29,29]};this.J={f:[8210,8208,8210,8226],Y:[22,22,22,50],ab:[19,19,19,32],bc:[815,411,815,630],ma:[],U:2176,ub:0,sb:0,Ba:[0,0,0,0,0,0,0,0],Aa:0,oa:[4544,4544,4544,4544,4544, -4544,4544,4544],tb:[0,0,0,0,0,0,0,0],jb:0,ad:[0,0,0,0,0,0,0,0],xc:0,yc:[0,0,0,0,0,0,0,0],G:[0,0,0,0,0,0,0,0],bd:[1,2,3,4,5,6,7,8],zc:[0,0,0,0,0,0,0,0],Pa:[0,0,0,0,0,0,0,0],$b:[0,0,0,0,0,0,0,0],Zc:[0,0,0,0,0,0,0,0],$c:[0,0,0,0,0,0,0,0],Xc:[0,0,0,0,0,0,0,0],Yc:[0,0,0,0,0,0,0,0],Za:0,hc:0}}w(Hb); +u.prototype={constructor:u,parent:null,toString:function(){return this.name?this.name:this.id||this.type},ua:function(a,b,d){switch(b){case "clear":return this.O[b]||(this.O[b]=d,d.onclick=function(a){return function(){a.O.print&&(a.O.print.value="")}}(this)),!0;case "print":return this.O[b]||(this.fb=this.O[b]=d,d.value="",this.g=function(a){return function(b,d){8192>1)+2;10>this.X&&(this.X=10);15>2;this.F=this.Aa-1;this.G=this.I/this.Aa|0;this.A=this.G-1;this.Ta=[];this.J=null;this.Gb=this.Dc;a=new G;xb(a,this.H);this.R=Array(this.G);for(b=0;b>8:d[2](b)&255}else if(b&1&&(d=this.controller.Ta[a&-2],d[2]))return d[2](b&-2)>>8;return this.controller.Gb(b,-1,1)} +function zb(a,b,d){var c=this.controller.Ta[a];if(c){if(c[1]){c[1](b,d);return}if(c[3]){a=c[2]?c[2](d):0;if(d&1)c[3](a&255|b<<8,d&-2);else c[3](a&-256|b,d);return}}else if(d&1&&(c=this.controller.Ta[a&-2],c[3])){d&=-2;a=c[2]?c[2](d):0;c[3](a&255|b<<8,d);return}this.controller.Gb(d,b,1)}function Ab(a,b){var d=this.controller.Ta[a];if(d){if(d[2])return d[2](b);if(d[0])return d[0](b)|d[0](b+1)<<8}return this.controller.Gb(b,-1,0)} +function Bb(a,b,d){if(a=this.controller.Ta[a]){if(a[3]){a[3](b,d);return}if(a[1]){a[1](b&255,d);a[1](b>>8,d+1);return}}this.controller.Gb(d,b,0)}m=wb.prototype;m.reset=function(){this.J&&this.J()};m.Dc=function(){return 0};m.Na=function(a,b){b||this.reset();return!0}; +function Cb(a,b,d,c,f){for(var e=b,h=d,g=e>>>a.X;0h&&(n=h);if(k&&k.size){if(k.type==c&&k.controller==f){if(e+h<=k.C)return k.Ub+=k.C-e,k.C=e,!0;if(e>=k.C+k.Ub){n=k.size-(e-l);n>h&&(n=h);k.Ub=e-k.C+n;e=l+a.Aa;h-=n;g++;continue}}return Eb(1,e,h)}e=new G(e,n,a.Aa,c,f);xb(e,a.H,k);a.R[g++]=e;e=l+a.Aa;h-=n}return 0>=h?(a.status(Math.floor(d/1024)+"Kb "+Fb[c]+" at "+r(b,8,!0)),!0):Eb(2,b,d)} +m.Hb=function(a){return this.R[(a&this.i)>>>this.X].sb(a&this.F,a)};m.Ha=function(a){var b=a&this.F,d=(a&this.i)>>>this.X;return b!=this.F?this.R[d].wc(b,a):this.R[d++].sb(b,a)|this.R[d&this.A].sb(0,a+1)<<8};function Gb(a,b){var d=b&a.F,c=(b&a.i)>>>a.X;return d!=a.F?a.R[c].hc(d,b):a.R[c++].Ob(d,b)|a.R[c&a.A].Ob(0,b+1)<<8}m.bc=function(a,b){this.R[(a&this.i)>>>this.X].xb(a&this.F,b&255,a)}; +m.jc=function(a,b){var d=a&this.F,c=(a&this.i)>>>this.X;d!=this.F?this.R[c].Cc(d,b&65535,a):(this.R[c++].xb(d,b&255,a),this.R[c&this.A].xb(0,b>>8&255,a+1))};function Eb(a,b,d){t("Memory block error ("+a+": "+r(b)+","+r(d)+")");return!1} +function Hb(a){u.call(this,"Device",a,Hb);this.P=a.name;this.N={gc:[],Ia:0,qa:128,H:127,Jc:0};this.i={data:0,gd:0,pb:20,dd:0};this.A={Ib:0,K:0};this.G={Qb:2496,la:0,S:128,Rb:0,Pb:0,ta:0,xc:0,na:[],cb:[406,406,406,406],Z:[12,12,12,12]};this.I={K:129,Fb:0,ca:0,Ya:0,Ua:0,ab:0,na:[],Z:[40,40,40,40],cb:[1024,1024,512,512],Fc:[157,157,29,29]};this.J={f:[8210,8208,8210,8226],Z:[22,22,22,50],bb:[19,19,19,32],cc:[815,411,815,630],na:[],U:2176,vb:0,tb:0,Ca:[0,0,0,0,0,0,0,0],Ba:0,pa:[4544,4544,4544,4544,4544, +4544,4544,4544],ub:[0,0,0,0,0,0,0,0],kb:0,bd:[0,0,0,0,0,0,0,0],yc:0,zc:[0,0,0,0,0,0,0,0],F:[0,0,0,0,0,0,0,0],cd:[1,2,3,4,5,6,7,8],Ac:[0,0,0,0,0,0,0,0],Pa:[0,0,0,0,0,0,0,0],ac:[0,0,0,0,0,0,0,0],$c:[0,0,0,0,0,0,0,0],ad:[0,0,0,0,0,0,0,0],Yc:[0,0,0,0,0,0,0,0],Zc:[0,0,0,0,0,0,0,0],$a:0,ic:0}}w(Hb); var Ib=[4127,448,4191,450,4383,452,2591,454,21983,32768,65534,13791,16384,65534,770,2719,454,2591,65534,257,0,2566,33028,34051,33282,1281,33537,0,2758,32771,770,1025,1793,0,3078,33794,34305,513,0,5574,43690,4480,4097,4162,4227,4292,4357,57665,1281,769,0,3138,34305,1281,0,24707,2691,2627,24769,34561,1793,0,3076,20739,24899,2691,34562,2753,1281,0,2624,33537,0,16385,24641,1537,1793,0,193,8279,21589,516,12549,1538,2629,513,0,38336,65281,32769,0,32258,2561,2689,32258,3008,514,3009,769,0,5574,510,2551, 2,0,9678,208,769,0,5582,226,135,0,2598,5606,236,2,0,95,242,128,5573,57344,2591,6,5599,256,4,5574,510,3045,5599,460,76,2591,78,5571,65510,5579,12,5570,512,4224,4104,3024,8197,33788,4224,4609,8193,769,0,2640,8197,33785,6145,2625,8193,769,0,8194,761,2574,5572,43690,5579,24,5568,2048,5570,512,2628,4360,2632,2632,8708,769,0,3103,65514,34562,0,305,35406,754,258,119,65160,3024,32403,5579,36,5568,3072,35446,1,740,5570,512,4224,4104,3024,8197,33788,5569,3,2574,3039,454,528,5582,24,4224,2632,2632,8200,769, 0,3024,3103,65514,34562,0,264,8197,33779,5003,2574,32337,260,0,258,5579,12,6080,448,6081,450,6084,452,116,2,6084,65400,17860,65024,21956,62976,38848,65401,3200,161,76,0,16944,10797];m=Hb.prototype; -m.Wa=function(a,b,d,c){this.G=b;this.f=d;this.H=c;switch(this.P){default:a=Ub;for(var f in a){var e=a[f];d=b;c=+f;for(var h=e[0]?e[0].bind(this):null,g=e[1]?e[1].bind(this):null,k=e[2]?e[2].bind(this):null,e=e[3]?e[3].bind(this):null,l=+f;l<=c;l+=2){var n=l&8191;void 0!==d.Sa[n]?t("I/O address already registered: "+r(d.P+n,8,!0)):d.Sa[n]=[h,g,k,e,!1]}}f=this.Dc.bind(this);b.J=this.reset.bind(this);b.Gb=f}C(this)};m.Tc=function(){return Vb(this.f)};m.ed=function(a){Wb(this.f,a&-1809|Vb(this.f)&1808)}; -function Xb(a){var b=a.F,d,c,f,e=b.sa>>13&7;"undefined"===typeof b.ma[e]&&(b.ma[e]={cache:[],postProcess:a.Uc,drive:e,blocksize:256,mapped:0,maxblock:b.bb[e]*b.Y[e],url:"rk"+e+".dsk"});b.S&=-129;switch(b.S>>1&7){case 0:b.Qb=2496;b.ka=0;b.S=128;b.sa=0;break;case 1:if((b.sa>>4&511)>=b.bb[e]){b.ka|=32832;b.S|=49152;break}if((b.sa&15)>=b.Y[e]){b.ka|=32800;b.S|=49152;break}d=(b.sa>>4&511)*b.Y[e]+(b.sa&15);c=(b.S&48)<<12|b.Pb;f=65536-b.Rb&65535;Yb(a,b.ma[e],d,c,f);return;case 2:if((b.sa>>4&511)>=b.bb[e]){b.ka|= -32832;b.S|=49152;break}if((b.sa&15)>=b.Y[e]){b.ka|=32800;b.S|=49152;break}d=(b.sa>>4&511)*b.Y[e]+(b.sa&15);c=(b.S&48)<<12|b.Pb;f=65536-b.Rb&65535;a.Zb(b.ma[e],d,c,f);return}b.Qb=e<<13|b.Qb&8176|b.sa%9&15;H(a.f,20,160,144,function(){b.S=b.S&65534|128;return!!(b.S&64)})}m.Uc=function(a,b,d,c,f){var e=this.F;e.Pb=c&65535;e.S=e.S&-49|c>>12&48;e.Rb=65536-f&65535;switch(a){case 1:e.ka|=33024;e.S|=49152;break;case 2:e.ka|=33792,e.S|=49152}H(this.f,20,160,144,function(){e.S=e.S&65534|128;return!!(e.S&64)})}; -function Zb(a){var b=a.I,d,c,f,e=b.K>>8&3;b.K&=-2;"undefined"===typeof b.ma[e]&&(b.ma[e]={cache:[],postProcess:a.Vc,drive:e,blocksize:128,mapped:1,maxblock:b.bb[e]*b.Y[e],url:"rl"+e+".dsk"});switch(b.K>>1&7){case 2:b.Xa&8&&(b.K&=63);b.Xa=b.Ec[e]|b.$a&64;break;case 3:1==(b.ca&3)&&(b.$a=b.ca&4?b.$a+(b.ca&65408)&65408|b.ca<<2&64:b.$a-(b.ca&65408)&65408|b.ca<<2&64,b.ca=b.$a);break;case 4:b.Xa=b.$a;break;case 5:if(b.ca>>6>=b.bb[e]){b.K|=37888;break}if((b.ca&63)>=b.Y[e]){b.K|=37888;break}d=(b.ca>>6)*b.Y[e]+ -(b.ca&63);c=(b.Ta&63)<<16|b.Fb;f=65536-b.Xa&65535;Yb(a,b.ma[e],d,c,f);return;case 6:if(b.ca>>6>=b.bb[e]){b.K|=37888;break}if((b.ca&63)>=b.Y[e]){b.K|=37888;break}d=(b.ca>>6)*b.Y[e]+(b.ca&63);c=(b.Ta&63)<<16|b.Fb;f=65536-b.Xa&65535;a.Zb(b.ma[e],d,c,f);return}H(a.f,20,160,112,function(){b.K|=129;return!!(b.K&64)})} -m.Vc=function(a,b,d,c,f){var e=this.I;e.Fb=c&65535;e.K=e.K&-49|c>>12&48;e.Ta=c>>16&63;e.ca=~~(d/e.Y[b.La])<<6|d%e.Y[b.La];e.$a=e.ca;e.Xa=65536-f&65535;switch(a){case 1:e.K|=33792;break;case 2:e.K|=40960}H(this.f,20,160,112,function(){e.K|=129;return!!(e.K&64)})};function $b(a){a=a.J;a.U=2176;a.Aa=0;a.oa=[4544,4544,4544,4544,4544,4544,4544,4544];a.tb=[0,0,0,0,0,0,0,0];a.jb=a.ub=a.sb=a.Za=a.hc=0} -function ac(a,b){var d=a.J,c,f,e;d.U&=-16513;d.Aa&=-2049;d.oa[b]&=-1153;H(a.f,-1,0,172);"undefined"===typeof d.ma[b]&&(d.ma[b]={cache:[],postProcess:a.Wc,drive:b,blocksize:256,mapped:0,maxblock:d.bc[0]*d.ab[0]*d.Y[0],url:"rp"+b+".dsk"});switch(d.U&63){case 5:d.$b[b]=d.Pa[b];d.U|=32896;d.oa[b]|=32896;d.jb|=1<=d.bc[0]||d.Ba[b]>>8>=d.ab[0]||(d.Ba[b]&255)>=d.Y[0]){d.tb[b]|=1024;d.U|=49152;break}c=(d.Pa[b]*d.ab[0]+(d.Ba[b]>>8))*d.Y[0]+ -(d.Ba[b]&255);f=(d.Za&63)<<16|d.sb;e=65536-d.ub&65535;Yb(a,d.ma[b],c,f,e);return;case 57:if(d.Pa[b]>=d.bc[0]||d.Ba[b]>>8>=d.ab[0]||(d.Ba[b]&255)>=d.Y[0]){d.tb[b]|=1024;d.U|=49152;break}c=(d.Pa[b]*d.ab[0]+(d.Ba[b]>>8))*d.Y[0]+(d.Ba[b]&255);f=(d.Za&63)<<16|d.sb;e=65536-d.ub&65535;a.Zb(d.ma[b],c,f,e);return}H(a.f,3,160,172,function(){d.U=d.U&65534|128;d.oa[b]|=128;return!!(d.U&64)})} -m.Wc=function(a,b,d,c,f){var e=this.J;e.ub=65536-f&65535;e.sb=c&65535;e.U=e.U&-769|c>>8&768;e.Za=c>>16&63;f=~~(d/e.Y[0]);c=~~(f/e.ab[0]);e.Ba[b.La]=f%e.ab[0]<<8|d%e.Y[0];e.$b[b.La]=e.Pa[b.La]=c;e.jb|=1<=b.Rc-1&&(e.oa[b.La]|=1024);switch(a){case 1:e.Aa|=512;e.U|=49152;break;case 2:e.Aa|=2048,e.U|=49152}H(this.f,20,160,172,function(){e.oa[b.La]|=128;e.U=e.U&65534|128;return!!(e.U&64)})};m.Oc=function(){this.B.K|=128;this.B.K&64&&H(this.f,0,192,64)}; -function bc(a,b){var d=b>>13&31;31>d?a.f.Ia&32&&(b=a.f.wb[d]+(b&8190)&4194302,3932160<=b&&4186112>b&&cc(898)):b|=4186112;return b} -function dc(a,b,d,c,f,e){var h=~~((e+d.Ua-1)/d.Ua),g=new XMLHttpRequest;2048>h&&c+2048K(this.f,a.Qc?bc(this,d):d,a.cache[b][f])){a.Yb(2,a,b,d,c);return}d+=2;--c}b++}a.Yb(0,a,b,d,c)}; -function Yb(a,b,d,c,f){for(var e,h;0h){b.Yb(2,b,d,c,f);return}b.cache[d][e]=h;c+=2;--f}d++}b.Yb(0,b,d,c,f)}m.reset=function(){this.i.ob=this.i.ob&-120|20;this.N.Ha=0;this.N.pa=128;this.B.K=0;this.F.S=128;this.I.K=128;$b(this)}; -m.Dc=function(a,b,d){var c,f,e=this.f;switch(a&-64){case 4194240:switch(a&-2){case 4194300:0>b?c=e.Qa&65280:(a&1&&(b<<=8),e.Qa=b|255,c=0);break;case 4194298:if(0>b)c=e.Xb;else{a&1&&(b<<=8);if(c=b&65024){f=c>>9;do c+=34;while(f>>=1)}e.Xb=c;e.Oa=2}break;case 4194294:if(70!==e.fb)return J(e,4);0>b?c=e.L:c=e.L=0;break;case 4194292:if(70!==e.fb)return J(e,4);c=1;break;case 4194290:if(70!==e.fb)return J(e,4);c=0;break;case 4194288:if(70!==e.fb)return J(e,4);c=61183;break;case 4194296:0<=b&&!(a&1)&&(b&= -255);case 4194286:case 4194284:case 4194282:case 4194280:case 4194278:case 4194276:case 4194274:case 4194272:if(70!==e.fb)return J(e,4);f=a-4194272>>1;0>b?c=e.ec[f]:(c=I(this,e.ec[f],a,b,d),0<=c&&(e.ec[f]=c));break;case 4194254:return a&1?e.M>>14&1?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.ra[3]=b),c=e.ra[3]):e.M>>14&0?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.ra[1]=b),c=e.ra[1]),c;case 4194252:case 4194250:case 4194248:return f=a&7,e.M&2048?(0<=b&&(e.b[f]=b),c=e.b[f]):(0<=b&&(e.Ya[f]=b),c=e.Ya[f]),c;case 4194246:return a& -1?(0<=b&&(e.b[7]=b),c=e.b[7]):e.M>>14&0?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.ra[0]=b),c=e.ra[0]),c;case 4194244:case 4194242:case 4194240:return f=a&7,e.M&2048?(0<=b&&(e.Ya[f]=b),c=e.Ya[f]):(0<=b&&(e.b[f]=b),c=e.b[f]),c;default:return e.L|=16,J(e,4)}break;case 4194176:f=a>>1&31;c=I(this,e.ja[3][f],a,b,d);0<=c&&(e.ja[3][f]=c,e.ja[3][f&15]&=65295);break;case 4194112:var h=this.N;f=this.B;switch(a&-2){case 4194174:c=I(this,e.Ab,a,b,d);0<=c&&(e.Ab=c);break;case 4194172:c=e.Ca;c&65280&&(c=(c<<8|c>>8)& -65535);break;case 4194170:e.ba=e.ba&62337|e.Kb<<5|e.Wb<<1;0>b?c=e.ba:(c=I(this,e.ba,a,b,d),0<=c&&(e.ba=c&=62337,e.Kb=c>>5&3,e.Wb=c>>1&15,c&257?(f=2,e.Ia&16&&(f=1),e.Jb=c&1?6:4):(e.Jb=0,f=4),this.i.ob=this.i.ob&-8|f));break;case 4194168:0>b?c=this.i.cd&65535:(c=I(this,this.i.data,a,b,d),0<=c&&(this.i.data=c));break;case 4194166:0<=b&&(b&127&&(h.Ic=0),h.pa&=-129,H(e,100,128,52,function(){h.pa|=128;return!!(h.pa&64)}));c=0;break;case 4194164:0>b?c=h.pa:(c=I(this,h.pa,a,b,d),0<=c&&(128==(h.pa&192)&&c& -64&&H(e,8,128,52,function(){h.pa|=128;return!!(h.pa&64)}),h.pa=h.pa&128|c&-129));break;case 4194162:c=0;0>b&&(h.Ha&=-129,0b?c=h.Ha:(c=I(this,h.Ha,a,b,d),0<=c&&(h.Ha=h.Ha&128|c&-129));break;case 4194150:0>b?(c=f.K,f.K&=-129):(c=I(this,f.K,a,b,d),0<=c&&(c&64&&!f.Ib&&(setInterval(this.Oc.bind(this),25),f.Ib=1),f.K=c&-129));break;default:return e.L|=16,J(e,4)}break;case 4194048:f= -this.F;switch(a&-2){case 4194048:c=I(this,f.Qb,a,b,d);0<=c&&(f.Qb=c);break;case 4194050:c=I(this,f.ka,a,b,d);0<=c&&(f.ka=c);break;case 4194052:c=I(this,f.S,a,b,d);0<=b&&0<=c&&(f.S=c&-36993|f.S&36992,f.S&1&&Xb(this));break;case 4194054:c=I(this,f.Rb,a,b,d);0<=c&&(f.Rb=c);break;case 4194056:c=I(this,f.Pb,a,b,d);0<=c&&(f.Pb=c);break;case 4194058:c=I(this,f.sa,a,b,d);0<=c&&(f.sa=c);break;case 4194060:break;case 4194062:c=I(this,f.wc,a,b,d);0<=c&&(f.wc=c);break;default:return e.L|=16,J(e,4)}break;case 4193728:var g= -this.J;f=g.Aa&7;switch(a&-2){case 4193728:c=I(this,g.U,a,b,d);0<=b&&0<=c&&(g.Za=g.Za&60|c>>8&3,g.U=c&17279|g.U&34944|2048,c&1&&g.U&128?ac(this,f):192==(c&192)&&H(e,0,160,172));break;case 4193730:c=I(this,g.ub,a,b,d);0<=c&&(g.ub=c);break;case 4193732:c=I(this,g.sb,a,b,d);0<=c&&(g.sb=c&65534);break;case 4193734:c=I(this,g.Ba[f],a,b,d);0<=c&&(g.Ba[f]=c&7967);break;case 4193736:c=I(this,g.Aa,a,b,d);0<=c&&(g.Aa=c&63|g.Aa&65472,c&128&&$b(this));break;case 4193738:c=g.oa[f];break;case 4193740:c=g.tb[f]; -break;case 4193742:c=I(this,g.jb,a,b,d);0<=c&&(g.jb=c&255);break;case 4193744:c=g.ad[f];break;case 4193746:c=I(this,g.xc,a,b,d);0<=c&&(g.xc=c);break;case 4193748:c=I(this,g.yc[f],a,b,d);0<=c&&(g.yc[f]=c&1023);break;case 4193750:c=8210;break;case 4193752:c=g.bd[f];break;case 4193754:c=I(this,g.zc[f],a,b,d);0<=c&&(g.zc[f]=c);break;case 4193756:c=I(this,g.Pa[f],a,b,d);0<=c&&(g.Pa[f]=c&511);break;case 4193758:g.$b[f]=g.Pa[f];c=g.$b[f];break;case 4193760:c=g.Zc[f];break;case 4193762:c=g.$c[f];break;case 4193764:c= -g.Xc[f];break;case 4193766:c=g.Yc[f];break;case 4193768:c=I(this,g.Za,a,b,d);0<=c&&(g.Za=c&63,g.U=g.U&-769|(c&3)<<8);break;case 4193770:c=I(this,g.hc,a,b,d);0<=c&&(g.hc=c);break;default:return e.L|=16,J(e,4)}break;case 4192512:f=this.I;switch(a&-2){case 4192512:c=I(this,f.K,a,b,d);0<=b&&0<=c&&(f.Ta=f.Ta&60|c>>4&3,f.K=f.K&-1023|c&1022,f.K&128||Zb(this));break;case 4192514:c=I(this,f.Fb,a,b,d);0<=c&&(f.Fb=c&65534);break;case 4192516:c=I(this,f.ca,a,b,d);0<=c&&(f.ca=c);break;case 4192518:c=I(this,f.Xa, -a,b,d);0<=c&&(f.Xa=c);break;case 4192520:c=I(this,f.Ta,a,b,d);0<=c&&(f.Ta=c&63,f.K=f.K&-49|(f.Ta&3)<<4);break;default:return e.L|=16,J(e,4)}break;case 4191552:switch(a&-2){case 4191566:0>b?c=e.Ia:(c=I(this,e.Ia,a,b,d),0<=c&&(70!==e.fb&&(c&=-49),e.Ia=c,e.hb[0]=c&4?15:7,e.hb[1]=c&2?15:7,e.hb[3]=c&1?15:7,e.Jb&&(f=2,e.Ia&16&&(f=1),this.i.ob=this.i.ob&-8|f)));break;default:return e.L|=16,J(e,4)}break;case 4191424:f=a>>1&31;c=I(this,e.ja[0][f],a,b,d);0<=c&&(e.ja[0][f]=c,e.ja[0][f&15]&=65295);break;case 4191360:f= -a>>1&31;c=I(this,e.ja[1][f],a,b,d);0<=c&&(e.ja[1][f]=c,e.ja[1][f&15]&=65295);break;case 4190400:case 4190336:if(70!==e.fb)return J(e,4);f=a>>2&31;c=e.wb[f];a&2&&(c=c>>16);c&=65535;0<=b&&(c=I(this,c,a,b,d),0<=c&&(e.wb[f]=a&2?c<<16|e.wb[f]&65535:e.wb[f]&4294901760|c&65534));break;case 4188672:case 4188736:case 4188800:case 4188864:case 4188928:case 4188992:case 4189056:case 4189120:if(0>b)c=Ib[a>>1&255];else return e.L|=16,J(e,4);break;default:return e.L|=16,J(e,4)}d&&0<=c&&(a&1?c=c>>8:c&=255);"undefined"=== -typeof c&&cc(76);return c};var Ub={};Ub[4194302]=[null,null,Hb.prototype.Tc,Hb.prototype.ed];Qa(function(){for(var a=A(document,"pdp11","device"),b=0;b>1),this.f=new Int32Array(this.I,0,d>>2),kc(this,gc?lc:mc);else{this.f=Array(d>>2);for(a=0;a>2),b=0;b>8,d)},aa:function(a){return this.f[a>>2]>>>((a&3)<<3)&255},qa:function(a){var b=a>>2;a=(a&3)<<3;var d=this.f[b]>>a;return 24>a?d&65535:d&255|(this.f[b+1]&255)<<8},ya:function(a, -b){var d=a>>2,c=(a&3)<<3;this.f[d]=this.f[d]&~(255<>2,c=(a&3)<<3;24>c?this.f[d]=this.f[d]&~(65535<>8);this.Va=!0},Z:function(a,b){if(this.H&&null!=this.C){var d=this.H;rc(d,this.C+a,1,d.W)&&d.la(!0)}return this.Ob(a,b)},fa:function(a,b){if(this.H&&null!=this.C){var d=this.H;rc(d,this.C+a,2,d.W)&&d.la(!0)}return this.gc(a,b)},va:function(a,b,d){if(this.H&&null!=this.C){var c=this.H; -rc(c,this.C+a,1,c.J)&&c.la(!0)}this.O?this.F(a,b,d):this.yb(a,b,d)},Ja:function(a,b,d){if(this.H&&null!=this.C){var c=this.H;rc(c,this.C+a,2,c.J)&&c.la(!0)}this.O?this.F(a,b,d):this.kc(a,b,d)},W:function(a){return this.G[a]},$:function(a){return this.G[a]},da:function(a){return this.J.getUint16(a,!0)},ga:function(a){return a&1?this.G[a]|this.G[a+1]<<8:this.P[a>>1]},ua:function(a,b){this.G[a]=b;this.Va=!0},xa:function(a,b){this.G[a]=b;this.Va=!0},Da:function(a,b){this.J.setUint16(a,b,!0);this.Va=!0}, -Ra:function(a,b){a&1?(this.G[a]=b,this.G[a+1]=b>>8):this.P[a>>1]=b;this.Va=!0}};function xb(a,b,d){a.H=b;a.i=a.B=0;d&&((a.i=d.i)&&qc(a,pc,!1),(a.B=d.B)&&oc(a,pc,!1))}function sc(a,b){b?0===--a.B&&(a.xb=a.O?a.F:a.yb,a.Bc=a.O?a.N:a.kc):0===--a.i&&(a.rb=a.Ob,a.vc=a.gc)}function oc(a,b,d){d&&a.B||(a.xb=!a.O&&b[1]||a.F,a.Bc=!a.O&&b[3]||a.N);if(d||void 0===d)a.yb=b[1]||a.F,a.kc=b[3]||a.N}function qc(a,b,d){d&&a.i||(a.rb=b[0]||a.T,a.vc=b[2]||a.V);if(d||void 0===d)a.Ob=b[0]||a.T,a.gc=b[2]||a.V} -function kc(a,b){b||(b=tc);qc(a,b,void 0);oc(a,b,void 0)}var tc=[],nc=[G.prototype.aa,G.prototype.ya,G.prototype.qa,G.prototype.Bb],pc=[G.prototype.Z,G.prototype.va,G.prototype.fa,G.prototype.Ja];if(tb)var mc=[G.prototype.W,G.prototype.ua,G.prototype.da,G.prototype.Da],lc=[G.prototype.$,G.prototype.xa,G.prototype.ga,G.prototype.Ra]; -function uc(a,b){u.call(this,"CPU",a,uc,1);var d=a.multiplier||1;this.ya=a.cycles||b;this.ib=d;this.xa=Math.round(this.ya/1E4)/100;this.gb=this.xa*this.ib;this.A.ia=!1;this.A.jc=!1;this.A.Db=a.autoStart;this.A.rc=!1;this.A.nb=!1;this.Lb=this.Z=0;this.Mb=a.csStart;this.pb=a.csInterval;this.qb=a.csStop;this.qa=[];this.Eb=this.kb.bind(this);C(this)}w(uc);var vc=["power","reset"];m=uc.prototype; -m.Wa=function(a,b,d,c){this.i=a;this.G=b;this.H=c;for(b=0;b=a.Z&&(a.Z+=a.pb,d=!0);0<=a.qb&&a.qb<=Mc(a)&&(a.pb=a.qb=-1,Kc(a),a.la(),d=!0);d&&a.g(Mc(a)+" cycles: checksum="+r(a.Lb))}} -function Nc(a,b,d,c){if(a.O[b]){void 0===d&&(sb(a,"Value for "+b+" is invalid"),a.la());var f=a.H&&a.H.va||8;d=!a.A.ia||a.A.rc?8==f?ba(d,c):r(d,c):"--------".substr(0,c||4);a.O[b].textContent!=d&&(a.O[b].textContent=d)}} -m.ta=function(a,b,d){var c=this;a=!1;switch(b){case "power":case "reset":this.O[b]=d;a=!0;break;case "run":this.O[b]=d;d.onclick=function(){var a;if(a=c.i)if(a=c.i,a.A.ea)a=!0;else{var b=null,d,g=bb(a.id);for(d=0;da.P/a.gb?b=1:c=!0;a.ib=b;b=a.xa*a.ib;if(a.gb!=b){a.gb=b;b=a.gb.toFixed(2)+"Mhz";var f=a.O.setSpeed;f&&(f.textContent=b);a.g("target speed: "+b)}d&&a.i&&a.i.Sb()}Pc(a,a.J);a.J=0;a.I=sa();a.T=0;Qc(a);return c}function Rc(a){a.V-=a.N;a.N=0} -m.kb=function(a){if(fb(this,!0)){if(!this.A.ia){Oc(this);this.i&&this.i.start(this.I,Mc(this));this.A.ia=!0;this.A.jc=!0;this.da&&this.da.start();var b=this.O.run;b&&(b.textContent="Halt");this.i&&(this.i.wa(!0),a&&this.i.Sb(!0))}this.Da>=this.ya&&Qc(this,!0);this.fa=0;this.ua=sa();this.T&&(a=this.ua-this.T,a>this.lb&&(this.I+=a,this.I>this.ua&&(this.I=this.ua)));try{do{for(var d=this.A.nb?1:this.va,c=this.qa.length-1;0<=c;c--){var f=this.qa[c];0>f[0]||d>f[0]&&(d=f[0])}this.vb(d);var e=this.V-this.N; -a=e;for(var h=this.qa.length-1;0<=h;h--){var g=this.qa[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.fa+=e;this.J+=e;Pc(this,0,!0);Lc(this,e);this.$-=e;if(0>=this.$){this.$+=this.va;15<=++this.zb&&(this.i&&this.i.wa(),this.zb=0);break}}while(this.A.ia)}catch(k){this.la();M(this);this.i&&this.i.stop(sa(),Mc(this));fb(this,!1);sb(this,k.stack||k.message);return}d=setTimeout;c=this.Eb;this.T=sa();f=this.lb;this.fa&&(f=Math.round(f*this.fa/this.va));f=f-(this.T-this.ua);if(e=this.T-this.I)this.P= -Math.round(this.J/(10*e))/100,864E5<=e&&(this.W=0,Oc(this));if(0>f||this.Pf&&(this.I-=f),f=0;this.Da+=this.fa;this.T+=f;d(c,f)}else M(this),this.i&&this.i.stop(sa(),Mc(this))};m.vb=function(){return 0};m.la=function(a){qb(this,!0);Rc(this);Pc(this,this.J);this.J=0;if(this.A.ia){this.A.ia=!1;this.da&&this.da.stop();var b=this.O.run;b&&(b.textContent="Run")}this.A.complete=a};function M(a,b){a.i&&a.i.wa(b)} -function Sc(a){this.uc=+a.model||1170;this.Ub=a.resetAddr||0;uc.call(this,a,1E6);this.Ja=0;this.D=65536;this.u=32768;this.w=65535;this.j=32768;this.M=15;this.b=[0,0,0,0,0,0,0,this.Ub];this.Ya=[0,0,0,0,0,0];this.ra=[0,0,0,0];this.memory=[];this.f=[];this.ga=this.Xb=0;this.Oa=2;this.Qa=255;this.F=0;this.aa=-1;this.L=0;this.fb=70;this.Wb=this.Kb=this.Jb=this.B=this.Ia=this.Ab=this.Ca=this.ba=0;this.hb=[7,7,7,7];this.ja=[[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,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,0,0,0,0,0,0,0]];this.wb=[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.ec=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.A.complete=this.A.Hc=!1}w(Sc,uc);m=Sc.prototype; -m.reset=function(){this.A.ia&&this.la();Tc(this);xc(this);this.A.error=!1;this.parent.reset.call(this)};function Tc(a){a.Qa=255;a.L=0;a.f=[];a.Xb=0;a.ba=a.Ca=a.Ab=a.Ia=a.Jb=0;a.hb[0]=a.hb[1]=a.hb[3]=7;a.Kb=0}m.tc=function(){return 0}; -m.save=function(){var a=new Uc(this);N(a,0,[]);N(a,1,[this.Ra,this.W,this.ib]);for(var b=this.G,d=0,c=[],f=0;fb){a.f[e].Ea-=b;break}b-=a.f[e].Ea}a.f.splice(e+1,0,{delay:b,priority:d&224,vector:c,callback:f})}a.Oa=2}function Vb(a){return a.M=a.M&63728|(a.j&32768?8:0)|(a.w&65535?0:4)|(a.u&32768?2:0)|(a.D&65536?1:0)} -function Wb(a,b){a.j=b<<12;a.w=~b&4;a.u=b<<14;a.D=b<<16;if((b^a.M)&2048)for(var d=a.Ya.length;0<=--d;){var c=a.b[d];a.b[d]=a.Ya[d];a.Ya[d]=c}a.B=b>>14&3;d=a.M>>14&3;a.B!=d&&(a.ra[d]=a.b[6],a.b[6]=a.ra[a.B]);a.Oa=2;a.M=b}function cc(a){console.log("panic("+a+")")} -function J(a,b){var d,c,f=0;0>a.aa?a.aa=Vb(a):a.B||(b=4,f=1);a.ba&57344||(a.Ca=63222,a.Ab=b);a.B=0;0<=(d=P(a,b|65536))&&0<=(c=P(a,b+2&65535|65536))&&(Wb(a,c&53247|a.aa>>2&12288),f&&(a.L|=4,a.b[6]=4),0<=Vc(a,a.aa)&&0<=Vc(a,a.b[7])&&(a.b[7]=d));a.F=0;return a.aa=-1} -function Wc(a,b,d){var c,f,e,h=0;if(d&a.Jb){c=b>>13&a.hb[a.B];f=a.ja[a.B][c];e=(a.ja[a.B][c+16]<<6)+(b&8191)&4194303;if(a.Ia&16){if(3932160<=e&&4186112>e){e=e&262143;var g=e>>13&31;31>g?a.Ia&32&&(e=a.wb[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&cc(898)):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e){if(3915776<=e)return a.L|=32,J(a,4);if(e&1&&!(d&1))return a.L|=64,J(a,4)}switch(f&7){case 1:h=4096;case 2:f|=128;d&4&&(h=8192);break;case 4:h=4096;case 5:d&4&&(h=4096);case 6:f|=d&4? -192:128;break;default:h=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(h|=16384):(b&8128)>(f>>2&8128)&&(h|=16384));a.ja[a.B][c]=f;if(4194170!==e||a.B)a.Kb=a.B,a.Wb=c;if(h){if(h&57344)return 0<=a.aa&&(h|=128),a.ba&57344||(a.ba=a.ba|h|a.Kb<<5|a.Wb<<1),J(a,168);a.ba&61440||!(4191360>e||4194239>3&7){case 0:return J(a,4);case 1:if(6===e&&!a.B&&d&4&&(a.b[6]<=a.Qa||65534<=a.b[6])){if(a.b[6]<=a.Qa-32||65534<=a.b[6])return a.L|=4,a.b[6]=4,J(a,4);a.L|=8;a.F|=4}return 7===e?a.b[e]:a.b[e]|65536;case 2:f=2;c=a.b[e];7!==e&&(c|=65536,6>e&&d&1&&(f=1));break;case 3:f=2;c=a.b[e];7!==e&&(c|=65536);if(0>(c=P(a,c)))return c;c|=65536;break;case 4:f=-2;6>e&&d&1&&(f=-1);c=a.b[e]+f&65535;7!==e&&(c|=65536);break;case 5:f=-2;c=a.b[e]-2&65535;7!==e&&(c|=65536);if(0>(c= -P(a,c)))return c;c|=65536;break;case 6:if(0>(c=P(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[e]&65535;return c|65536;case 7:if(0>(c=P(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[e]&65535;return 0>(c=P(a,c|65536))?c:c|65536}a.b[e]=a.b[e]+f&65535;a.ba&57344||(a.Ca=a.Ca<<8|f<<3&248|e);if(6===e&&!a.B&&d&4&&0>=f&&(a.b[6]<=a.Qa||65534<=a.b[6])){if(a.b[6]<=a.Qa-32)return a.L|=4,a.b[6]=4,J(a,4);a.L|=8;a.F|=4}return c} -function S(a,b,d){var c;return b&56?(0<=(c=Yc(a,b,d))&&(c=Wc(a,c,d)),c):4194304+(b&7)}function T(a,b){var d;b&56?0<=(d=S(a,b,2))&&(d=L(a,d)):d=a.b[b&7];return d}function Zc(a,b){var d;b&56?0<=(d=S(a,b,3))&&(d=Q(a,d)):d=a.b[b&7]&255;return d}function U(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.vb=function(a){this.A.complete=!0;var b=this.A.Hc=this.H&&$c(this.H),d=a?this.A.jc?0:1:-1;this.A.jc=!1;this.V=this.N=a;this.Ra&256?(Rc(this),a=!1):a=!0;if(a){do{if(b){if(ad(this.H,this.b[7],d)){this.la();break}d=1}var c,f,e,h,g;if(this.Oa)if(1===this.Oa)this.Oa=2;else{this.Oa=0;g=-1;c=this.Xb&224;if(0<(a=this.f.length))for(;0c&&(c=this.f[a].Sc, -g=a)}c>(this.M&224)&&(0>g?J(this,160):(J(this,this.f[g].dd),this.f.splice(g,1)))}this.ba&57344||(this.Ca=0,this.Ab=this.b[7]);this.F=this.M&16;if(0<=(a=P(this,this.b[7])))switch(this.b[7]=this.b[7]+2&65535,a&61440){case 4096:0<=(c=T(this,a>>6))&&(a&56?0<=(e=S(this,a,4))&&0<=K(this,e,c)&&(this.j=this.w=c,this.u=0):(this.j=this.w=this.b[a&7]=c,this.u=0));break;case 8192:0<=(c=T(this,a>>6))&&0<=(f=T(this,a))&&(this.j=this.w=this.D=a=c-f,this.u=(c^f)&(c^a));break;case 12288:0<=(c=T(this,a>>6))&&0<=(f= -T(this,a))&&(this.j=this.w=c&f,this.u=0);break;case 16384:0<=(c=T(this,a>>6))&&(a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f&~c,0<=K(this,e,a)&&(this.j=this.w=a,this.u=0)):(this.j=this.w=a=this.b[a&7]&=~c,this.u=0));break;case 20480:0<=(c=T(this,a>>6))&&(a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f|c,0<=K(this,e,a)&&(this.j=this.w=a,this.u=0)):(this.j=this.w=a=this.b[a&7]|=c,this.u=0));break;case 24576:0<=(c=T(this,a>>6))&&(a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=c+f,0<=K(this,e,a)&&(this.j=this.w=this.D=a,this.u= -(c^a)&(f^a))):(g=a&7,f=this.b[g],this.b[g]=(a=c+f)&65535,this.j=this.w=this.D=a,this.u=(c^a)&(f^a)));break;case 36864:0<=(c=Zc(this,a>>6))&&(a&56?0<=(e=S(this,a,5))&&0<=R(this,e,c)&&(this.j=this.w=c<<8,this.u=0):(c&128&&(c|=65280),this.j=this.w=this.b[a&7]=c,this.u=0));break;case 40960:0<=(c=Zc(this,a>>6))&&0<=(f=Zc(this,a))&&(a=c-f,this.j=this.w=this.D=a<<8,this.u=((c^f)&(c^a))<<8);break;case 45056:0<=(c=Zc(this,a>>6))&&0<=(f=Zc(this,a))&&(this.j=this.w=(c&f)<<8,this.u=0);break;case 49152:0<=(c= -Zc(this,a>>6))&&0<=(f=Q(this,e=S(this,a,7)))&&(a=f&~c,0<=R(this,e,a)&&(this.j=this.w=a<<8,this.u=0));break;case 53248:0<=(c=Zc(this,a>>6))&&0<=(f=Q(this,e=S(this,a,7)))&&(a=f|c,0<=R(this,e,a)&&(this.j=this.w=a<<8,this.u=0));break;case 57344:0<=(c=T(this,a>>6))&&(a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f-c,0<=K(this,e,a)&&(this.j=this.w=this.D=a,this.u=(c^f)&(f^a))):(g=a&7,f=this.b[g],this.b[g]=(a=f-c)&65535,this.j=this.w=this.D=a,this.u=(c^f)&(f^a)));break;default:switch(a&65024){case 2048:0<=(h=Yc(this, -a,0))&&(g=a>>6&7,0<=Vc(this,this.b[g])&&(this.b[g]=this.b[7],this.b[7]=h&65535));break;case 28672:0<=(c=T(this,a))&&(g=a>>6&7,c&32768&&(c|=-65536),f=this.b[g],f&32768&&(f|=-65536),a=~~(c*f),this.b[g]=a>>16&65535,this.b[g|1]=a&65535,this.j=a>>16,this.w=this.j|a,this.D=this.u=0,-32768>a||32767>6&7,f=this.b[g]<<16|this.b[g|1],this.D=this.u=0,c&32768&&(c|=-65536),a=~~(f/c),-32768<=a&&32767>=a?(this.b[g]=a&65535,this.b[g|1]=f-a*c&65535,this.w= -a>>16|a,this.j=a>>16):(this.u=32768,this.w=a>>15|a,this.j=f>>16,-1===c&&65534===this.b[g]&&(this.b[g]=this.b[g|1]=1))):(this.w=this.j=0,this.u=32768,this.D=65536));break;case 29696:0<=(c=T(this,a))&&(g=a>>6&7,a=this.b[g],a&32768&&(a|=4294901760),this.D=this.u=0,c&=63,c&32?(c=64-c,16>c):c&&(16>15&65535)&&65535!==f&&(this.u=32768))),this.b[g]=a&65535,this.j=this.w=a);break;case 30208:if(0<=(c=T(this,a))){g=a>>6&7;f=this.b[g]<<16|this.b[g| -1];this.D=this.u=0;c&=63;if(c&32)c=64-c,32>c-1,this.D=a<<16,a>>=1,f&2147483648&&(a|=4294967295<<32-c);else if(c){if(a=f<>15,a<<=1,32>=32-c)f|=4294967295<>16&65535;this.b[g|1]=a&65535;this.j=a>>16;this.w=a>>16|a}break;case 30720:a&56?0<=(f=L(this,e=S(this,a,6)))&&(f^=this.b[a>>6&7],0<=K(this,e,f)&&(this.j=this.w=f,this.u=0)):(this.j=this.w=f=this.b[a&7]^=this.b[a>>6&7],this.u=0);break;case 32256:g= -a>>6&7;if(this.b[g]=this.b[g]-1&65535)this.b[7]=this.b[7]-((a&63)<<1)&65535;break;default:switch(a&65280){case 256:this.b[7]=U(this.b[7],a);break;case 512:this.w&65535&&(this.b[7]=U(this.b[7],a));break;case 768:this.w&65535||(this.b[7]=U(this.b[7],a));break;case 1024:(this.j&32768)===(this.u&32768)&&(this.b[7]=U(this.b[7],a));break;case 1280:(this.j&32768)!==(this.u&32768)&&(this.b[7]=U(this.b[7],a));break;case 1536:this.w&65535&&(this.j&32768)===(this.u&32768)&&(this.b[7]=U(this.b[7],a));break;case 1792:this.w& -65535&&(this.j&32768)===(this.u&32768)||(this.b[7]=U(this.b[7],a));break;case 32768:this.j&32768||(this.b[7]=U(this.b[7],a));break;case 33280:!(this.D&65536)&&this.w&65535&&(this.b[7]=U(this.b[7],a));break;case 33024:this.j&32768&&(this.b[7]=U(this.b[7],a));break;case 33536:if(this.D&65536||!(this.w&65535))this.b[7]=U(this.b[7],a);break;case 33792:this.u&32768||(this.b[7]=U(this.b[7],a));break;case 34048:this.u&32768&&(this.b[7]=U(this.b[7],a));break;case 34304:this.D&65536||(this.b[7]=U(this.b[7], -a));break;case 34560:this.D&65536&&(this.b[7]=U(this.b[7],a));break;case 34816:J(this,24);break;case 35072:J(this,28);break;default:switch(a&65472){case 64:0<=(h=Yc(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f<<8|f>>8,0<=K(this,e,a)&&(this.j=this.w=f&65280,this.u=this.D=0)):(g=a&7,f=this.b[g],this.b[g]=(f<<8|f>>8)&65535,this.j=this.w=f&65280,this.u=this.D=0);break;case 2560:a&56?0<=(e=S(this,a,4))&&0<=K(this,e,0)&&(this.j=this.D=this.u=this.w=0):this.j=this.D= -this.u=this.w=this.b[a&7]=0;break;case 2624:0<=(f=L(this,e=S(this,a,6)))&&(a=~f,0<=K(this,e,a)&&(this.j=this.w=a,this.D=65536,this.u=0));break;case 2688:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f+1,0<=K(this,e,a)&&(this.j=this.w=a,this.u=a&(a^f))):(g=a&7,f=this.b[g],a=f+1,this.b[g]=a&65535,this.j=this.w=a,this.u=a&(a^f));break;case 2752:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f-1,0<=K(this,e,a)&&(this.j=this.w=a,this.u=(a^f)&f)):(g=a&7,f=this.b[g],a=f-1,this.b[g]=a&65535,this.j=this.w=a,this.u=(a^f)&f); -break;case 2816:0<=(f=L(this,e=S(this,a,6)))&&(a=-f,0<=K(this,e,a)&&(this.D=this.j=this.w=a,this.u=a&f));break;case 2880:0<=(f=L(this,e=S(this,a,6)))&&(a=f+(this.D>>16&1),0<=K(this,e,a)&&(this.D=this.j=this.w=a,this.u=a&(a^f)));break;case 2944:0<=(f=L(this,e=S(this,a,6)))&&(a=f-(this.D>>16&1),0<=K(this,e,a)&&(this.D=this.j=this.w=a,this.u=(a^f)&f));break;case 3008:0<=(f=T(this,a))&&(this.j=this.w=f,this.D=this.u=0);break;case 3072:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=(this.D&65536|f)>>1,0<=K(this, -e,a)&&(this.D=f<<16,this.j=this.w=a,this.u=a^this.D>>1)):(g=a&7,f=this.b[g],a=(this.D&65536|f)>>1,this.b[g]=a&65535,this.D=f<<16,this.j=this.w=a,this.u=a^this.D>>1);break;case 3136:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f<<1|this.D>>16&1,0<=K(this,e,a)&&(this.D=this.j=this.w=a,this.u=a^f)):(g=a&7,f=this.b[g],a=f<<1|this.D>>16&1,this.b[g]=a&65535,this.D=this.j=this.w=a,this.u=a^f);break;case 3200:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f&32768|f>>1,0<=K(this,e,a)&&(this.D=f<<16,this.j=this.w=a,this.u= -this.j^this.D>>1)):(g=a&7,f=this.b[g],a=f&32768|f>>1,this.b[g]=a&65535,this.D=f<<16,this.j=this.w=a,this.u=this.j^this.D>>1);break;case 3264:a&56?0<=(f=L(this,e=S(this,a,6)))&&(a=f<<1,0<=K(this,e,a)&&(this.D=this.j=this.w=a,this.u=a^f)):(g=a&7,f=this.b[g],a=f<<1,this.b[g]=a&65535,this.D=this.j=this.w=a,this.u=a^f);break;case 3328:h=this.b[7]+((a&63)<<1)&65535;0<=(c=P(this,h|65536))&&(this.b[7]=this.b[5],this.b[5]=c,this.b[6]=h+2&65535);break;case 3392:a&56?0<=(h=Yc(this,a,0))&&(61440!==(this.M&61440)&& -(h&=65535),this.B=this.M>>12&3,0<=(c=P(this,h))&&(this.B=this.M>>14&3,0<=Vc(this,c)&&(this.j=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]:this.ra[this.M>>12&3],0<=Vc(this,c)&&(this.j=this.w=c,this.u=0));break;case 3456:0<=(f=Xc(this))&&((this.ba&57344||(this.Ca=22),a&56)?0<=(h=Yc(this,a,0))&&(h&=65535,this.B=this.M>>12&3,0<=(e=Wc(this,h,4))&&(this.B=this.M>>14&3,0<=K(this,e,f)&&(this.j=this.w=f,this.u=0))):(g=a&7,6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]= -f:this.ra[this.M>>12&3]=f,this.j=this.w=f,this.u=0));break;case 3520:0<=(e=S(this,a,4))&&(a=-(this.j>>15&1),0<=K(this,e,a)&&(this.w=a,this.u=0));break;case 35328:a&56?0<=(e=S(this,a,5))&&0<=R(this,e,0)&&(this.j=this.D=this.u=this.w=0):(this.b[a&7]&=65280,this.j=this.D=this.u=this.w=0);break;case 35392:0<=(f=Q(this,e=S(this,a,7)))&&(a=~f,0<=R(this,e,a)&&(this.j=this.w=a<<8,this.D=65536,this.u=0));break;case 35456:0<=(f=Q(this,e=S(this,a,7)))&&(a=f+1,0<=R(this,e,a)&&(this.j=this.w=a<<8,this.u=(a&(a^ -f))<<8));break;case 35520:0<=(f=Q(this,e=S(this,a,7)))&&(a=f-1,0<=R(this,e,a)&&(this.j=this.w=a<<8,this.u=((a^f)&f)<<8));break;case 35584:0<=(f=Q(this,e=S(this,a,7)))&&(a=-f,0<=R(this,e,a)&&(this.D=this.j=this.w=a<<8,this.u=(a&f)<<8));break;case 35648:0<=(f=Q(this,e=S(this,a,7)))&&(a=f+(this.D>>16&1),0<=R(this,e,a)&&(this.j=this.w=this.D=a<<8,this.u=(a&(a^f))<<8));break;case 35712:0<=(f=Q(this,e=S(this,a,7)))&&(a=f-(this.D>>16&1),0<=R(this,e,a)&&(this.j=this.w=this.D=a<<8,this.u=((a^f)&f)<<8));break; -case 35776:0<=(f=Zc(this,a))&&(this.j=this.w=f<<8,this.D=this.u=0);break;case 35840:0<=(f=Q(this,e=S(this,a,7)))&&(a=((this.D&65536)>>8|f)>>1,0<=R(this,e,a)&&(this.D=f<<16,this.j=this.w=a<<8,this.u=this.j^this.D>>1));break;case 35904:0<=(f=Q(this,e=S(this,a,7)))&&(a=f<<1|this.D>>16&1,0<=R(this,e,a)&&(this.D=this.j=this.w=a<<8,this.u=(a^f)<<8));break;case 35968:0<=(f=Q(this,e=S(this,a,7)))&&(a=f&128|f>>1,0<=R(this,e,a)&&(this.D=f<<16,this.j=this.w=a<<8,this.u=this.j^this.D>>1));break;case 36032:0<= -(f=Q(this,e=S(this,a,7)))&&(a=f<<1,0<=R(this,e,a)&&(this.D=this.j=this.w=a<<8,this.u=(a^f)<<8));break;case 36160:a&56?0<=(h=Yc(this,a,0))&&(this.B=this.M>>12&3,0<=(c=P(this,h|65536))&&(this.B=this.M>>14&3,0<=Vc(this,c)&&(this.j=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]:this.ra[this.M>>12&3],0<=Vc(this,c)&&(this.j=this.w=c,this.u=0));break;case 36224:0<=(f=Xc(this))&&((this.ba&57344||(this.Ca=22),a&56)?0<=(h=Yc(this,a,0))&&(this.B=this.M>>12&3,0<=(e=Wc(this, -h|65536,4))&&(this.B=this.M>>14&3,0<=K(this,e,f)&&(this.j=this.w=f,this.u=0))):(g=a&7,6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]=f:this.ra[this.M>>12&3]=f,this.j=this.w=f,this.u=0));break;default:switch(a&65528){case 128:0<=(c=Xc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.M&49152||(this.M=this.M&63519|(a&7)<<5,this.Oa=1);break;case 160:case 168:a&1&&(this.D=0);a&2&&(this.u=0);a&4&&(this.w=1);a&8&&(this.j=0);break;case 176:case 184:a&1&&(this.D=65536);a&2&&(this.u= -32768);a&4&&(this.w=0);a&8&&(this.j=32768);break;default:switch(a){case 0:49152&this.M?(this.L|=128,J(this,4)):(this.ga=3,Rc(this),console.log("HALT at "+this.b[7].toString(8)));break;case 1:g=0;if(0<(a=this.f.length))for(;0>>0,h],p=ra(n,k,a.pc);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.N.push({gd:b,C:d,Pc:c,Ka:f,mc:e})}delete this.Ka}return!0};bd.prototype.Ma=function(){return!0}; -function cd(a,b,d,c){if(c)a.na("Unable to load system ROM (error "+c+": "+b+")");else{ab(a.nc,b,d);var f;if("["==d.charAt(0)||"{"==d.charAt(0))try{var e,h,g=eval("("+d+")");if(e=g.bytes)a.i=e;else if(e=g.words)for(a.i=Array(2*e.length),h=f=0;f>8&255;else if(e=g.data)for(a.i=Array(4*e.length),h=f=0;f>8&255,a.i[h++]=e[f]>>16&255,a.i[h++]=e[f]>>24&255;else a.i=g;a.Ka=g.symbols;if(!a.i.length){t("Empty ROM: "+ -b);return}if(1==a.i.length){t(a.i[0]);return}}catch(k){a.na("ROM data error: "+k.message);return}else for(b=d.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.i=Array(b.length),f=0;f>>c.X].yb(f&c.G,a.i[d]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(d=0;d>>f.X;0>>=f.X;0=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; -function id(a,b,d,c){if(d)if(b){0>a.I&&a.F.length&&(a.I=0);if(0>a.I||b!=a.F[a.I])a.F.splice(0,0,b),a.I=0;a.I--}else a.aa?b="end":b=a.F[a.I+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");d=0;var f=null;c=c||";";for(var e=0;e<=b.length;e++){var h=b.charAt(e);if('"'==h||"'"==h)f?h==f&&(f=null):f=h;else if(h==c&&!f||!h)a.push(qa(b.substring(d,e))),d=e+1}}return a} -function jd(a,b,d){for(d=d||-1;d--&&b.length;){var c=b.pop();if(2>a.length)return!1;var f=a.pop(),e=a.pop();switch(c){case "*":c=e*f;break;case "/":if(!f)return!1;c=e/f;break;case "%":if(!f)return!1;c=e%f;break;case "+":c=e+f;break;case "-":c=e-f;break;case "<<":c=e<>":c=e>>f;break;case ">>>":c=e>>>f;break;case "<":c=e":c=e>f?1:0;break;case ">=":c=e>=f?1:0;break;case "==":c=e==f?1:0;break;case "!=":c=e!=f?1:0;break;case "&":c=e&f;break; +m.Xa=function(a,b,d,c){this.F=b;this.f=d;this.H=c;switch(this.P){default:a=Jb;for(var f in a){var e=a[f];d=b;c=+f;for(var h=e[0]?e[0].bind(this):null,g=e[1]?e[1].bind(this):null,k=e[2]?e[2].bind(this):null,e=e[3]?e[3].bind(this):null,l=+f;l<=c;l+=2){var n=l&8191;void 0!==d.Ta[n]?t("I/O address already registered: "+r(d.P+n,8,!0)):d.Ta[n]=[h,g,k,e,!1]}}f=this.Ec.bind(this);b.J=this.reset.bind(this);b.Gb=f}C(this)};m.Uc=function(){return Vb(this.f)}; +m.fd=function(a){Wb(this.f,a&-1809|Vb(this.f)&1808);this.f.W|=128}; +function Xb(a){var b=a.G,d,c,f,e=b.ta>>13&7;"undefined"===typeof b.na[e]&&(b.na[e]={cache:[],postProcess:a.Vc,drive:e,blocksize:256,mapped:0,maxblock:b.cb[e]*b.Z[e],url:"rk"+e+".dsk"});b.S&=-129;switch(b.S>>1&7){case 0:b.Qb=2496;b.la=0;b.S=128;b.ta=0;break;case 1:if((b.ta>>4&511)>=b.cb[e]){b.la|=32832;b.S|=49152;break}if((b.ta&15)>=b.Z[e]){b.la|=32800;b.S|=49152;break}d=(b.ta>>4&511)*b.Z[e]+(b.ta&15);c=(b.S&48)<<12|b.Pb;f=65536-b.Rb&65535;Yb(a,b.na[e],d,c,f);return;case 2:if((b.ta>>4&511)>=b.cb[e]){b.la|= +32832;b.S|=49152;break}if((b.ta&15)>=b.Z[e]){b.la|=32800;b.S|=49152;break}d=(b.ta>>4&511)*b.Z[e]+(b.ta&15);c=(b.S&48)<<12|b.Pb;f=65536-b.Rb&65535;a.$b(b.na[e],d,c,f);return}b.Qb=e<<13|b.Qb&8176|b.ta%9&15;H(a.f,20,160,144,function(){b.S=b.S&65534|128;return!!(b.S&64)})}m.Vc=function(a,b,d,c,f){var e=this.G;e.Pb=c&65535;e.S=e.S&-49|c>>12&48;e.Rb=65536-f&65535;switch(a){case 1:e.la|=33024;e.S|=49152;break;case 2:e.la|=33792,e.S|=49152}H(this.f,20,160,144,function(){e.S=e.S&65534|128;return!!(e.S&64)})}; +function Zb(a){var b=a.I,d,c,f,e=b.K>>8&3;b.K&=-2;"undefined"===typeof b.na[e]&&(b.na[e]={cache:[],postProcess:a.Wc,drive:e,blocksize:128,mapped:1,maxblock:b.cb[e]*b.Z[e],url:"rl"+e+".dsk"});switch(b.K>>1&7){case 2:b.Ya&8&&(b.K&=63);b.Ya=b.Fc[e]|b.ab&64;break;case 3:1==(b.ca&3)&&(b.ab=b.ca&4?b.ab+(b.ca&65408)&65408|b.ca<<2&64:b.ab-(b.ca&65408)&65408|b.ca<<2&64,b.ca=b.ab);break;case 4:b.Ya=b.ab;break;case 5:if(b.ca>>6>=b.cb[e]){b.K|=37888;break}if((b.ca&63)>=b.Z[e]){b.K|=37888;break}d=(b.ca>>6)*b.Z[e]+ +(b.ca&63);c=(b.Ua&63)<<16|b.Fb;f=65536-b.Ya&65535;Yb(a,b.na[e],d,c,f);return;case 6:if(b.ca>>6>=b.cb[e]){b.K|=37888;break}if((b.ca&63)>=b.Z[e]){b.K|=37888;break}d=(b.ca>>6)*b.Z[e]+(b.ca&63);c=(b.Ua&63)<<16|b.Fb;f=65536-b.Ya&65535;a.$b(b.na[e],d,c,f);return}H(a.f,20,160,112,function(){b.K|=129;return!!(b.K&64)})} +m.Wc=function(a,b,d,c,f){var e=this.I;e.Fb=c&65535;e.K=e.K&-49|c>>12&48;e.Ua=c>>16&63;e.ca=~~(d/e.Z[b.La])<<6|d%e.Z[b.La];e.ab=e.ca;e.Ya=65536-f&65535;switch(a){case 1:e.K|=33792;break;case 2:e.K|=40960}H(this.f,20,160,112,function(){e.K|=129;return!!(e.K&64)})};function $b(a){a=a.J;a.U=2176;a.Ba=0;a.pa=[4544,4544,4544,4544,4544,4544,4544,4544];a.ub=[0,0,0,0,0,0,0,0];a.kb=a.vb=a.tb=a.$a=a.ic=0} +function ac(a,b){var d=a.J,c,f,e;d.U&=-16513;d.Ba&=-2049;d.pa[b]&=-1153;H(a.f,-1,0,172);"undefined"===typeof d.na[b]&&(d.na[b]={cache:[],postProcess:a.Xc,drive:b,blocksize:256,mapped:0,maxblock:d.cc[0]*d.bb[0]*d.Z[0],url:"rp"+b+".dsk"});switch(d.U&63){case 5:d.ac[b]=d.Pa[b];d.U|=32896;d.pa[b]|=32896;d.kb|=1<=d.cc[0]||d.Ca[b]>>8>=d.bb[0]||(d.Ca[b]&255)>=d.Z[0]){d.ub[b]|=1024;d.U|=49152;break}c=(d.Pa[b]*d.bb[0]+(d.Ca[b]>>8))*d.Z[0]+ +(d.Ca[b]&255);f=(d.$a&63)<<16|d.tb;e=65536-d.vb&65535;Yb(a,d.na[b],c,f,e);return;case 57:if(d.Pa[b]>=d.cc[0]||d.Ca[b]>>8>=d.bb[0]||(d.Ca[b]&255)>=d.Z[0]){d.ub[b]|=1024;d.U|=49152;break}c=(d.Pa[b]*d.bb[0]+(d.Ca[b]>>8))*d.Z[0]+(d.Ca[b]&255);f=(d.$a&63)<<16|d.tb;e=65536-d.vb&65535;a.$b(d.na[b],c,f,e);return}H(a.f,3,160,172,function(){d.U=d.U&65534|128;d.pa[b]|=128;return!!(d.U&64)})} +m.Xc=function(a,b,d,c,f){var e=this.J;e.vb=65536-f&65535;e.tb=c&65535;e.U=e.U&-769|c>>8&768;e.$a=c>>16&63;f=~~(d/e.Z[0]);c=~~(f/e.bb[0]);e.Ca[b.La]=f%e.bb[0]<<8|d%e.Z[0];e.ac[b.La]=e.Pa[b.La]=c;e.kb|=1<=b.Sc-1&&(e.pa[b.La]|=1024);switch(a){case 1:e.Ba|=512;e.U|=49152;break;case 2:e.Ba|=2048,e.U|=49152}H(this.f,20,160,172,function(){e.pa[b.La]|=128;e.U=e.U&65534|128;return!!(e.U&64)})};m.Pc=function(){this.A.K|=128;this.A.K&64&&H(this.f,0,192,64)}; +function bc(a,b,d,c,f,e){var h=~~((e+d.Va-1)/d.Va),g=new XMLHttpRequest;2048>h&&c+2048K(this.f,a.Rc?cc(this.f,d):d,a.cache[b][f])){a.Zb(2,a,b,d,c);return}d+=2;--c}b++}a.Zb(0,a,b,d,c)}; +function Yb(a,b,d,c,f){for(var e,h;0h){b.Zb(2,b,d,c,f);return}b.cache[d][e]=h;c+=2;--f}d++}b.Zb(0,b,d,c,f)}m.reset=function(){this.i.pb=this.i.pb&-120|20;this.N.Ia=0;this.N.qa=128;this.A.K=0;this.G.S=128;this.I.K=128;$b(this)}; +m.Ec=function(a,b,d){var c,f,e=this.f;switch(a&-64){case 4194240:switch(a&-2){case 4194300:0>b?c=e.Qa&65280:(a&1&&(b<<=8),e.Qa=b|255,c=0);break;case 4194298:if(0>b)c=e.Yb;else{a&1&&(b<<=8);if(c=b&65024){f=c>>9;do c+=34;while(f>>=1)}e.Yb=c;e.Oa=2}break;case 4194294:if(70!==e.gb)return J(e,4,222);0>b?c=e.L:c=e.L=0;break;case 4194292:if(70!==e.gb)return J(e,4,224);c=1;break;case 4194290:if(70!==e.gb)return J(e,4,226);c=0;break;case 4194288:if(70!==e.gb)return J(e,4,228);c=61183;break;case 4194296:0<= +b&&!(a&1)&&(b&=255);case 4194286:case 4194284:case 4194282:case 4194280:case 4194278:case 4194276:case 4194274:case 4194272:if(70!==e.gb)return J(e,4,232);f=a-4194272>>1;0>b?c=e.fc[f]:(c=I(this,e.fc[f],a,b,d),0<=c&&(e.fc[f]=c));break;case 4194254:return a&1?e.M>>14&1?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.sa[3]=b),c=e.sa[3]):e.M>>14&0?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.sa[1]=b),c=e.sa[1]),c;case 4194252:case 4194250:case 4194248:return f=a&7,e.M&2048?(0<=b&&(e.b[f]=b),c=e.b[f]):(0<=b&&(e.Za[f]= +b),c=e.Za[f]),c;case 4194246:return a&1?(0<=b&&(e.b[7]=b),c=e.b[7]):e.M>>14&0?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.sa[0]=b),c=e.sa[0]),c;case 4194244:case 4194242:case 4194240:return f=a&7,e.M&2048?(0<=b&&(e.Za[f]=b),c=e.Za[f]):(0<=b&&(e.b[f]=b),c=e.b[f]),c;default:return e.L|=16,J(e,4,124)}break;case 4194176:f=a>>1&31;c=I(this,e.ka[3][f],a,b,d);0<=c&&(e.ka[3][f]=c,e.ka[3][f&15]&=65295);break;case 4194112:var h=this.N;f=this.A;switch(a&-2){case 4194174:c=I(this,e.Ab,a,b,d);0<=c&&(e.Ab=c);break;case 4194172:c= +e.Da;c&65280&&(c=(c<<8|c>>8)&65535);break;case 4194170:e.ba=e.ba&62337|e.Kb<<5|e.Xb<<1;0>b?c=e.ba:(c=I(this,e.ba,a,b,d),0<=c&&(e.ba=c&=62337,e.Kb=c>>5&3,e.Xb=c>>1&15,c&257?(f=2,e.Ra&16&&(f=1),e.Jb=c&1?6:4):(e.Jb=0,f=4),this.i.pb=this.i.pb&-8|f));break;case 4194168:0>b?c=this.i.dd&65535:(c=I(this,this.i.data,a,b,d),0<=c&&(this.i.data=c));break;case 4194166:0<=b&&(b&127&&(h.Jc=0),h.qa&=-129,H(e,100,128,52,function(){h.qa|=128;return!!(h.qa&64)}));c=0;break;case 4194164:0>b?c=h.qa:(c=I(this,h.qa,a,b, +d),0<=c&&(128==(h.qa&192)&&c&64&&H(e,8,128,52,function(){h.qa|=128;return!!(h.qa&64)}),h.qa=h.qa&128|c&-129));break;case 4194162:c=0;0>b&&(h.Ia&=-129,0b?c=h.Ia:(c=I(this,h.Ia,a,b,d),0<=c&&(h.Ia=h.Ia&128|c&-129));break;case 4194150:0>b?(c=f.K,f.K&=-129):(c=I(this,f.K,a,b,d),0<=c&&(c&64&&!f.Ib&&(setInterval(this.Pc.bind(this),25),f.Ib=1),f.K=c&-129));break;default:return e.L|= +16,J(e,4,126)}break;case 4194048:f=this.G;switch(a&-2){case 4194048:c=I(this,f.Qb,a,b,d);0<=c&&(f.Qb=c);break;case 4194050:c=I(this,f.la,a,b,d);0<=c&&(f.la=c);break;case 4194052:c=I(this,f.S,a,b,d);0<=b&&0<=c&&(f.S=c&-36993|f.S&36992,f.S&1&&Xb(this));break;case 4194054:c=I(this,f.Rb,a,b,d);0<=c&&(f.Rb=c);break;case 4194056:c=I(this,f.Pb,a,b,d);0<=c&&(f.Pb=c);break;case 4194058:c=I(this,f.ta,a,b,d);0<=c&&(f.ta=c);break;case 4194060:break;case 4194062:c=I(this,f.xc,a,b,d);0<=c&&(f.xc=c);break;default:return e.L|= +16,J(e,4,128)}break;case 4193728:var g=this.J;f=g.Ba&7;switch(a&-2){case 4193728:c=I(this,g.U,a,b,d);0<=b&&0<=c&&(g.$a=g.$a&60|c>>8&3,g.U=c&17279|g.U&34944|2048,c&1&&g.U&128?ac(this,f):192==(c&192)&&H(e,0,160,172));break;case 4193730:c=I(this,g.vb,a,b,d);0<=c&&(g.vb=c);break;case 4193732:c=I(this,g.tb,a,b,d);0<=c&&(g.tb=c&65534);break;case 4193734:c=I(this,g.Ca[f],a,b,d);0<=c&&(g.Ca[f]=c&7967);break;case 4193736:c=I(this,g.Ba,a,b,d);0<=c&&(g.Ba=c&63|g.Ba&65472,c&128&&$b(this));break;case 4193738:c= +g.pa[f];break;case 4193740:c=g.ub[f];break;case 4193742:c=I(this,g.kb,a,b,d);0<=c&&(g.kb=c&255);break;case 4193744:c=g.bd[f];break;case 4193746:c=I(this,g.yc,a,b,d);0<=c&&(g.yc=c);break;case 4193748:c=I(this,g.zc[f],a,b,d);0<=c&&(g.zc[f]=c&1023);break;case 4193750:c=8210;break;case 4193752:c=g.cd[f];break;case 4193754:c=I(this,g.Ac[f],a,b,d);0<=c&&(g.Ac[f]=c);break;case 4193756:c=I(this,g.Pa[f],a,b,d);0<=c&&(g.Pa[f]=c&511);break;case 4193758:g.ac[f]=g.Pa[f];c=g.ac[f];break;case 4193760:c=g.$c[f]; +break;case 4193762:c=g.ad[f];break;case 4193764:c=g.Yc[f];break;case 4193766:c=g.Zc[f];break;case 4193768:c=I(this,g.$a,a,b,d);0<=c&&(g.$a=c&63,g.U=g.U&-769|(c&3)<<8);break;case 4193770:c=I(this,g.ic,a,b,d);0<=c&&(g.ic=c);break;default:return e.L|=16,J(e,4,132)}break;case 4192512:f=this.I;switch(a&-2){case 4192512:c=I(this,f.K,a,b,d);0<=b&&0<=c&&(f.Ua=f.Ua&60|c>>4&3,f.K=f.K&-1023|c&1022,f.K&128||Zb(this));break;case 4192514:c=I(this,f.Fb,a,b,d);0<=c&&(f.Fb=c&65534);break;case 4192516:c=I(this,f.ca, +a,b,d);0<=c&&(f.ca=c);break;case 4192518:c=I(this,f.Ya,a,b,d);0<=c&&(f.Ya=c);break;case 4192520:c=I(this,f.Ua,a,b,d);0<=c&&(f.Ua=c&63,f.K=f.K&-49|(f.Ua&3)<<4);break;default:return e.L|=16,J(e,4,134)}break;case 4191552:switch(a&-2){case 4191566:0>b?c=e.Ra:(c=I(this,e.Ra,a,b,d),0<=c&&(70!==e.gb&&(c&=-49),e.Ra=c,e.ib[0]=c&4?15:7,e.ib[1]=c&2?15:7,e.ib[3]=c&1?15:7,e.Jb&&(f=2,e.Ra&16&&(f=1),this.i.pb=this.i.pb&-8|f)));break;default:return e.L|=16,J(e,4,136)}break;case 4191424:f=a>>1&31;c=I(this,e.ka[0][f], +a,b,d);0<=c&&(e.ka[0][f]=c,e.ka[0][f&15]&=65295);break;case 4191360:f=a>>1&31;c=I(this,e.ka[1][f],a,b,d);0<=c&&(e.ka[1][f]=c,e.ka[1][f&15]&=65295);break;case 4190400:case 4190336:if(70!==e.gb)return J(e,4,234);f=a>>2&31;c=e.Sb[f];a&2&&(c=c>>16);c&=65535;0<=b&&(c=I(this,c,a,b,d),0<=c&&(e.Sb[f]=a&2?c<<16|e.Sb[f]&65535:e.Sb[f]&4294901760|c&65534));break;case 4188672:case 4188736:case 4188800:case 4188864:case 4188928:case 4188992:case 4189056:case 4189120:if(0>b)c=Ib[a>>1&255];else return e.L|=16,J(e, +4,138);break;default:return e.L|=16,J(e,4,142)}d&&0<=c&&(a&1?c=c>>8:c&=255);"undefined"===typeof c&&console.log("panic(76)");return c};var Jb={};Jb[4194302]=[null,null,Hb.prototype.Uc,Hb.prototype.fd];Qa(function(){for(var a=A(document,"pdp11","device"),b=0;b>1),this.f=new Int32Array(this.I,0,d>>2),jc(this,fc?kc:lc);else{this.f=Array(d>>2);for(a=0;a>2),b=0;b>8,d)},da:function(a){return this.f[a>>2]>>>((a&3)<<3)&255},ra:function(a){var b=a>>2;a=(a&3)<<3;var d=this.f[b]>>a;return 24>a?d&65535:d&255|(this.f[b+1]&255)<<8},za:function(a, +b){var d=a>>2,c=(a&3)<<3;this.f[d]=this.f[d]&~(255<>2,c=(a&3)<<3;24>c?this.f[d]=this.f[d]&~(65535<>8);this.Wa=!0},$:function(a,b){if(this.H&&null!=this.C){var d=this.H;qc(d,this.C+a,1,d.Y)&&d.ma(!0)}return this.Ob(a,b)},ga:function(a,b){if(this.H&&null!=this.C){var d=this.H;qc(d,this.C+a,2,d.Y)&&d.ma(!0)}return this.hc(a,b)},wa:function(a,b,d){if(this.H&&null!=this.C){var c=this.H; +qc(c,this.C+a,1,c.J)&&c.ma(!0)}this.O?this.G(a,b,d):this.yb(a,b,d)},Ja:function(a,b,d){if(this.H&&null!=this.C){var c=this.H;qc(c,this.C+a,2,c.J)&&c.ma(!0)}this.O?this.G(a,b,d):this.lc(a,b,d)},Y:function(a){return this.F[a]},aa:function(a){return this.F[a]},ea:function(a){return this.J.getUint16(a,!0)},ja:function(a){return a&1?this.F[a]|this.F[a+1]<<8:this.P[a>>1]},va:function(a,b){this.F[a]=b;this.Wa=!0},ya:function(a,b){this.F[a]=b;this.Wa=!0},Ea:function(a,b){this.J.setUint16(a,b,!0);this.Wa= +!0},Sa:function(a,b){a&1?(this.F[a]=b,this.F[a+1]=b>>8):this.P[a>>1]=b;this.Wa=!0}};function xb(a,b,d){a.H=b;a.i=a.A=0;d&&((a.i=d.i)&&pc(a,oc,!1),(a.A=d.A)&&nc(a,oc,!1))}function rc(a,b){b?0===--a.A&&(a.xb=a.O?a.G:a.yb,a.Cc=a.O?a.N:a.lc):0===--a.i&&(a.sb=a.Ob,a.wc=a.hc)}function nc(a,b,d){d&&a.A||(a.xb=!a.O&&b[1]||a.G,a.Cc=!a.O&&b[3]||a.N);if(d||void 0===d)a.yb=b[1]||a.G,a.lc=b[3]||a.N}function pc(a,b,d){d&&a.i||(a.sb=b[0]||a.T,a.wc=b[2]||a.V);if(d||void 0===d)a.Ob=b[0]||a.T,a.hc=b[2]||a.V} +function jc(a,b){b||(b=sc);pc(a,b,void 0);nc(a,b,void 0)}var sc=[],mc=[G.prototype.da,G.prototype.za,G.prototype.ra,G.prototype.Bb],oc=[G.prototype.$,G.prototype.wa,G.prototype.ga,G.prototype.Ja];if(tb)var lc=[G.prototype.Y,G.prototype.va,G.prototype.ea,G.prototype.Ea],kc=[G.prototype.aa,G.prototype.ya,G.prototype.ja,G.prototype.Sa]; +function tc(a,b){u.call(this,"CPU",a,tc,1);var d=a.multiplier||1;this.za=a.cycles||b;this.jb=d;this.ya=Math.round(this.za/1E4)/100;this.hb=this.ya*this.jb;this.w.ia=!1;this.w.kc=!1;this.w.Db=a.autoStart;this.w.sc=!1;this.w.ob=!1;this.Lb=this.Y=0;this.Mb=a.csStart;this.qb=a.csInterval;this.rb=a.csStop;this.ja=[];this.Eb=this.lb.bind(this);C(this)}w(tc);var uc=["power","reset"];m=tc.prototype; +m.Xa=function(a,b,d,c){this.i=a;this.F=b;this.H=c;for(b=0;b=a.Y&&(a.Y+=a.qb,d=!0);0<=a.rb&&a.rb<=Mc(a)&&(a.qb=a.rb=-1,xc(a),a.ma(),d=!0);d&&a.g(Mc(a)+" cycles: checksum="+r(a.Lb))}} +function Nc(a,b,d,c){if(a.O[b]){void 0===d&&(sb(a,"Value for "+b+" is invalid"),a.ma());var f=a.H&&a.H.wa||8;d=!a.w.ia||a.w.sc?8==f?ba(d,c):r(d,c):"--------".substr(0,c||4);a.O[b].textContent!=d&&(a.O[b].textContent=d)}} +m.ua=function(a,b,d){var c=this;a=!1;switch(b){case "power":case "reset":this.O[b]=d;a=!0;break;case "run":this.O[b]=d;d.onclick=function(){var a;if(a=c.i)if(a=c.i,a.w.fa)a=!0;else{var b=null,d,g=bb(a.id);for(d=0;da.N/a.hb?b=1:c=!0;a.jb=b;b=a.ya*a.jb;if(a.hb!=b){a.hb=b;b=a.hb.toFixed(2)+"Mhz";var f=a.O.setSpeed;f&&(f.textContent=b);a.g("target speed: "+b)}d&&a.i&&a.i.Tb()}Pc(a,a.J);a.J=0;a.I=sa();a.P=0;Qc(a);return c}function Rc(a){a.T-=a.G;a.G=0} +m.lb=function(a){if(fb(this,!0)){if(!this.w.ia){Oc(this);this.i&&this.i.start(this.I,Mc(this));this.w.ia=!0;this.w.kc=!0;this.da&&this.da.start();var b=this.O.run;b&&(b.textContent="Halt");this.i&&(this.i.xa(!0),a&&this.i.Tb(!0))}this.Ea>=this.za&&Qc(this,!0);this.ea=0;this.ra=sa();this.P&&(a=this.ra-this.P,a>this.mb&&(this.I+=a,this.I>this.ra&&(this.I=this.ra)));try{do{for(var d,c=this.w.ob?1:this.va,f=this.ja.length-1;0<=f;f--){var e=this.ja[f];0>e[0]||c>e[0]&&(c=e[0])}d=c;try{this.wb(d)}catch(l){if("number"!= +typeof l)throw l;}var h=this.T-this.G;a=h;for(var g=this.ja.length-1;0<=g;g--){var k=this.ja[g];0>k[0]||(k[0]-=a,0>=k[0]&&(k[0]=-1,k[1]()))}this.ea+=h;this.J+=h;Pc(this,0,!0);zc(this,h);this.$-=h;if(0>=this.$){this.$+=this.va;15<=++this.zb&&(this.i&&this.i.xa(),this.zb=0);break}}while(this.w.ia)}catch(l){this.ma();yc(this);this.i&&this.i.stop(sa(),Mc(this));fb(this,!1);sb(this,l.stack||l.message);return}d=setTimeout;c=this.Eb;this.P=sa();f=this.mb;this.ea&&(f=Math.round(f*this.ea/this.va));f=f-(this.P- +this.ra);if(e=this.P-this.I)this.N=Math.round(this.J/(10*e))/100,864E5<=e&&(this.V=0,Oc(this));if(0>f||this.Nf&&(this.I-=f),f=0;this.Ea+=this.ea;this.P+=f;d(c,f)}else yc(this),this.i&&this.i.stop(sa(),Mc(this))};m.wb=function(){return 0};m.ma=function(a){gb(this,!0);Rc(this);Pc(this,this.J);this.J=0;if(this.w.ia){this.w.ia=!1;this.da&&this.da.stop();var b=this.O.run;b&&(b.textContent="Run")}this.w.complete=a};function yc(a,b){a.i&&a.i.xa(b)} +function Sc(a){this.vc=+a.model||1170;this.Vb=a.resetAddr||0;tc.call(this,a,1E6);this.Ja=0;this.decode=Tc.bind(this);this.D=65536;this.u=32768;this.B=65535;this.j=32768;this.wa=-1;this.b=[0,0,0,0,0,0,0,this.Vb];this.Za=[0,0,0,0,0,0];this.sa=[0,0,0,0];this.memory=[];this.f=[];this.ga=this.Yb=0;this.Oa=2;this.Qa=255;this.W=0;this.aa=-1;this.L=0;this.gb=70;this.Xb=this.Kb=this.Jb=this.A=this.Ra=this.Ab=this.Da=this.ba=0;this.ib=[7,7,7,7];this.ka=[[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,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,0,0,0,0,0,0,0]];this.Sb=[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.fc=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.w.complete=this.w.Ic=!1}w(Sc,tc);m=Sc.prototype; +m.reset=function(){this.w.ia&&this.ma();Uc(this);wc(this);this.w.error=!1;this.parent.reset.call(this)};function Uc(a){a.Qa=255;a.L=0;a.f=[];a.Yb=0;a.ba=a.Da=a.Ab=a.Ra=a.Jb=0;a.ib[0]=a.ib[1]=a.ib[3]=7;a.Kb=0}m.uc=function(){return 0}; +m.save=function(){var a=new Vc(this);M(a,0,[]);M(a,1,[this.Sa,this.V,this.jb]);for(var b=this.F,d=0,c=[],f=0;fb){a.f[e].Fa-=b;break}b-=a.f[e].Fa}a.f.splice(e+1,0,{delay:b,priority:d&224,vector:c,callback:f})}a.Oa=2}function Vb(a){return a.M=a.M&63728|(a.j&32768?8:0)|(a.B&65535?0:4)|(a.u&32768?2:0)|(a.D&65536?1:0)} +function Wb(a,b){a.j=b<<12;a.B=~b&4;a.u=b<<14;a.D=b<<16;if((b^a.M)&2048)for(var d=a.Za.length;0<=--d;){var c=a.b[d];a.b[d]=a.Za[d];a.Za[d]=c}a.A=b>>14&3;d=a.M>>14&3;a.A!=d&&(a.sa[d]=a.b[6],a.b[6]=a.sa[a.A]);a.Oa=2;a.M=b}function Wc(a,b){!a.W&128&&(a.j=a.B=b,a.u=0)} +function J(a,b,d){var c,f,e=0;0>a.aa?a.aa=Vb(a):a.A||(b=4,e=1);a.ba&57344||(a.Da=63222,a.Ab=b);a.A=0;0<=(c=N(a,b|65536))&&0<=(f=N(a,b+2&65535|65536))&&(Wb(a,f&53247|a.aa>>2&12288),e&&(a.L|=4,a.b[6]=4),0<=Xc(a,a.aa)&&0<=Xc(a,a.b[7])&&(a.b[7]=c));a.W&=-113;a.aa=-1;throw b|d<<8;}function cc(a,b){var d=b>>13&31;31>d?a.Ra&32&&(b=a.Sb[d]+(b&8190)&4194302,3932160<=b&&4186112>b&&console.log("panic(898)")):b|=4186112;return b} +function Yc(a,b,d){var c,f,e,h=0;if(d&a.Jb){c=b>>13&a.ib[a.A];f=a.ka[a.A][c];e=(a.ka[a.A][c+16]<<6)+(b&8191)&4194303;a.Ra&16?3932160<=e&&4186112>e&&(e=cc(a,e&262143)):(e&=262143,253952<=e&&(e|=4186112));3932160>e&&(3915776<=e&&(a.L|=32,J(a,4,24)),e&1&&!(d&1)&&(a.L|=64,J(a,4,26)));switch(f&7){case 1:h=4096;case 2:f|=128;d&4&&(h=8192);break;case 4:h=4096;case 5:d&4&&(h=4096);case 6:f|=d&4?192:128;break;default:h=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(h|=16384):(b&8128)>(f>>2& +8128)&&(h|=16384));a.ka[a.A][c]=f;if(4194170!==e||a.A)a.Kb=a.A,a.Xb=c;h&&(h&57344&&(0<=a.aa&&(h|=128),a.ba&57344||(a.ba=a.ba|h|a.Kb<<5|a.Xb<<1),J(a,168,28)),a.ba&61440||!(4191360>e||4194239>3&7){case 0:J(a,4,34);break;case 1:return 6===e&&!a.A&&d&4&&(a.b[6]<=a.Qa||65534<=a.b[6])&&(a.b[6]<=a.Qa-32||65534<=a.b[6]?(a.L|=4,a.b[6]=4,J(a,4,36)):(a.L|=8,a.W|=64)),7===e?a.b[e]:a.b[e]|65536;case 2:f=2;c=a.b[e];7!==e&&(c|=65536,6>e&&d&1&&(f=1));break;case 3:f=2;c=a.b[e];7!==e&&(c|=65536);if(0>(c=N(a,c)))return c;c|=65536;break;case 4:f=-2;6>e&&d&1&&(f=-1);c=a.b[e]+f&65535;7!==e&&(c|=65536);break;case 5:f=-2;c=a.b[e]-2&65535;7!==e&&(c|=65536);if(0>(c= +N(a,c)))return c;c|=65536;break;case 6:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[e]&65535;return c|65536;case 7:if(0>(c=N(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[e]&65535;return 0>(c=N(a,c|65536))?c:c|65536}a.b[e]=a.b[e]+f&65535;a.ba&57344||(a.Da=a.Da<<8|f<<3&248|e);6===e&&!a.A&&d&4&&0>=f&&(a.b[6]<=a.Qa||65534<=a.b[6])&&(a.b[6]<=a.Qa-32?(a.L|=4,a.b[6]=4,J(a,4,38)):(a.L|=8,a.W|=64));return c} +function R(a,b,d){var c;return b&56?(0<=(c=$c(a,b,d))&&(c=Yc(a,c,d)),c):4194304+(b&7)}function S(a,b){var d;b&56?(d=R(a,b,2),d=L(a,d)):d=a.b[b&7];return d}function ad(a,b){var d;b&56?0<=(d=R(a,b,3))&&(d=P(a,d)):d=a.b[b&7]&255;return d}function T(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} +m.wb=function(a){this.w.complete=!0;var b=this.w.Ic=this.H&&bd(this.H),d=a?this.w.kc?0:1:-1;this.w.kc=!1;this.T=this.G=a;this.Sa&256?(Rc(this),a=!1):a=!0;if(a){do{if(b){if(cd(this.H,this.b[7],d)){this.ma();break}d=1}var c,f,e,h,g;this.W&112&&(this.W&32?J(this,168,52):this.W&64?J(this,4,54):this.W&16&&J(this,12,56),this.W&=-113);if(this.Oa)if(1===this.Oa)this.Oa=2;else{this.Oa=0;g=-1;c=this.Yb&224;if(0<(a=this.f.length))for(;0c&&(c=this.f[a].Tc,g=a)}c>(this.M&224)&&(0>g?J(this,160,42):(J(this,this.f[g].ed,44),this.f.splice(g,1)))}this.ba&57344||(this.Da=0,this.Ab=this.b[7]);this.W=this.M&16;this.wa=N(this,this.b[7]);this.b[7]=this.b[7]+2&65535;this.decode(this.wa);if(0<=this.wa)switch(a=this.wa,this.b[7]=this.b[7]+2&65535,a&61440){case 20480:0<=(c=S(this,a>>6))&&(a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f|c,0<=K(this,e,a)&&(this.j=this.B=a,this.u=0)):(this.j=this.B=a=this.b[a& +7]|=c,this.u=0));break;case 24576:0<=(c=S(this,a>>6))&&(a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=c+f,0<=K(this,e,a)&&(this.j=this.B=this.D=a,this.u=(c^a)&(f^a))):(g=a&7,f=this.b[g],this.b[g]=(a=c+f)&65535,this.j=this.B=this.D=a,this.u=(c^a)&(f^a)));break;case 36864:0<=(c=ad(this,a>>6))&&(a&56?0<=(e=R(this,a,5))&&0<=Q(this,e,c)&&(this.j=this.B=c<<8,this.u=0):(c&128&&(c|=65280),this.j=this.B=this.b[a&7]=c,this.u=0));break;case 40960:0<=(c=ad(this,a>>6))&&0<=(f=ad(this,a))&&(a=c-f,this.j=this.B=this.D= +a<<8,this.u=((c^f)&(c^a))<<8);break;case 45056:0<=(c=ad(this,a>>6))&&0<=(f=ad(this,a))&&(this.j=this.B=(c&f)<<8,this.u=0);break;case 49152:0<=(c=ad(this,a>>6))&&0<=(f=P(this,e=R(this,a,7)))&&(a=f&~c,0<=Q(this,e,a)&&(this.j=this.B=a<<8,this.u=0));break;case 53248:0<=(c=ad(this,a>>6))&&0<=(f=P(this,e=R(this,a,7)))&&(a=f|c,0<=Q(this,e,a)&&(this.j=this.B=a<<8,this.u=0));break;case 57344:0<=(c=S(this,a>>6))&&(a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f-c,0<=K(this,e,a)&&(this.j=this.B=this.D=a,this.u=(c^f)& +(f^a))):(g=a&7,f=this.b[g],this.b[g]=(a=f-c)&65535,this.j=this.B=this.D=a,this.u=(c^f)&(f^a)));break;default:switch(a&65024){case 2048:0<=(h=$c(this,a,0))&&(g=a>>6&7,0<=Xc(this,this.b[g])&&(this.b[g]=this.b[7],this.b[7]=h&65535));break;case 28672:0<=(c=S(this,a))&&(g=a>>6&7,c&32768&&(c|=-65536),f=this.b[g],f&32768&&(f|=-65536),a=~~(c*f),this.b[g]=a>>16&65535,this.b[g|1]=a&65535,this.j=a>>16,this.B=this.j|a,this.D=this.u=0,-32768>a||32767>6&7,f=this.b[g]<<16|this.b[g|1],this.D=this.u=0,c&32768&&(c|=-65536),a=~~(f/c),-32768<=a&&32767>=a?(this.b[g]=a&65535,this.b[g|1]=f-a*c&65535,this.B=a>>16|a,this.j=a>>16):(this.u=32768,this.B=a>>15|a,this.j=f>>16,-1===c&&65534===this.b[g]&&(this.b[g]=this.b[g|1]=1))):(this.B=this.j=0,this.u=32768,this.D=65536));break;case 29696:0<=(c=S(this,a))&&(g=a>>6&7,a=this.b[g],a&32768&&(a|=4294901760),this.D=this.u=0,c&=63,c&32?(c=64-c,16>c):c&&(16>15&65535)&&65535!==f&&(this.u=32768))),this.b[g]=a&65535,this.j=this.B=a);break;case 30208:if(0<=(c=S(this,a))){g=a>>6&7;f=this.b[g]<<16|this.b[g|1];this.D=this.u=0;c&=63;if(c&32)c=64-c,32>c-1,this.D=a<<16,a>>=1,f&2147483648&&(a|=4294967295<<32-c);else if(c){if(a=f<>15,a<<=1,32>=32-c)f|=4294967295<>16&65535;this.b[g|1]=a&65535;this.j=a>>16;this.B=a>>16|a}break;case 30720:a&56?0<= +(f=L(this,e=R(this,a,6)))&&(f^=this.b[a>>6&7],0<=K(this,e,f)&&(this.j=this.B=f,this.u=0)):(this.j=this.B=f=this.b[a&7]^=this.b[a>>6&7],this.u=0);break;case 32256:g=a>>6&7;if(this.b[g]=this.b[g]-1&65535)this.b[7]=this.b[7]-((a&63)<<1)&65535;break;default:switch(a&65280){case 256:this.b[7]=T(this.b[7],a);break;case 512:this.B&65535&&(this.b[7]=T(this.b[7],a));break;case 768:this.B&65535||(this.b[7]=T(this.b[7],a));break;case 1024:(this.j&32768)===(this.u&32768)&&(this.b[7]=T(this.b[7],a));break;case 1280:(this.j& +32768)!==(this.u&32768)&&(this.b[7]=T(this.b[7],a));break;case 1536:this.B&65535&&(this.j&32768)===(this.u&32768)&&(this.b[7]=T(this.b[7],a));break;case 1792:this.B&65535&&(this.j&32768)===(this.u&32768)||(this.b[7]=T(this.b[7],a));break;case 32768:this.j&32768||(this.b[7]=T(this.b[7],a));break;case 33280:!(this.D&65536)&&this.B&65535&&(this.b[7]=T(this.b[7],a));break;case 33024:this.j&32768&&(this.b[7]=T(this.b[7],a));break;case 33536:if(this.D&65536||!(this.B&65535))this.b[7]=T(this.b[7],a);break; +case 33792:this.u&32768||(this.b[7]=T(this.b[7],a));break;case 34048:this.u&32768&&(this.b[7]=T(this.b[7],a));break;case 34304:this.D&65536||(this.b[7]=T(this.b[7],a));break;case 34560:this.D&65536&&(this.b[7]=T(this.b[7],a));break;case 34816:J(this,24,2);break;case 35072:J(this,28,4);break;default:switch(a&65472){case 64:0<=(h=$c(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f<<8|f>>8,0<=K(this,e,a)&&(this.j=this.B=f&65280,this.u=this.D=0)):(g=a&7,f=this.b[g], +this.b[g]=(f<<8|f>>8)&65535,this.j=this.B=f&65280,this.u=this.D=0);break;case 2560:a&56?0<=(e=R(this,a,4))&&0<=K(this,e,0)&&(this.j=this.D=this.u=this.B=0):this.j=this.D=this.u=this.B=this.b[a&7]=0;break;case 2624:0<=(f=L(this,e=R(this,a,6)))&&(a=~f,0<=K(this,e,a)&&(this.j=this.B=a,this.D=65536,this.u=0));break;case 2688:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f+1,0<=K(this,e,a)&&(this.j=this.B=a,this.u=a&(a^f))):(g=a&7,f=this.b[g],a=f+1,this.b[g]=a&65535,this.j=this.B=a,this.u=a&(a^f));break;case 2752:a& +56?0<=(f=L(this,e=R(this,a,6)))&&(a=f-1,0<=K(this,e,a)&&(this.j=this.B=a,this.u=(a^f)&f)):(g=a&7,f=this.b[g],a=f-1,this.b[g]=a&65535,this.j=this.B=a,this.u=(a^f)&f);break;case 2816:0<=(f=L(this,e=R(this,a,6)))&&(a=-f,0<=K(this,e,a)&&(this.D=this.j=this.B=a,this.u=a&f));break;case 2880:0<=(f=L(this,e=R(this,a,6)))&&(a=f+(this.D>>16&1),0<=K(this,e,a)&&(this.D=this.j=this.B=a,this.u=a&(a^f)));break;case 2944:0<=(f=L(this,e=R(this,a,6)))&&(a=f-(this.D>>16&1),0<=K(this,e,a)&&(this.D=this.j=this.B=a,this.u= +(a^f)&f));break;case 3008:0<=(f=S(this,a))&&(this.j=this.B=f,this.D=this.u=0);break;case 3072:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=(this.D&65536|f)>>1,0<=K(this,e,a)&&(this.D=f<<16,this.j=this.B=a,this.u=a^this.D>>1)):(g=a&7,f=this.b[g],a=(this.D&65536|f)>>1,this.b[g]=a&65535,this.D=f<<16,this.j=this.B=a,this.u=a^this.D>>1);break;case 3136:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f<<1|this.D>>16&1,0<=K(this,e,a)&&(this.D=this.j=this.B=a,this.u=a^f)):(g=a&7,f=this.b[g],a=f<<1|this.D>>16&1,this.b[g]= +a&65535,this.D=this.j=this.B=a,this.u=a^f);break;case 3200:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f&32768|f>>1,0<=K(this,e,a)&&(this.D=f<<16,this.j=this.B=a,this.u=this.j^this.D>>1)):(g=a&7,f=this.b[g],a=f&32768|f>>1,this.b[g]=a&65535,this.D=f<<16,this.j=this.B=a,this.u=this.j^this.D>>1);break;case 3264:a&56?0<=(f=L(this,e=R(this,a,6)))&&(a=f<<1,0<=K(this,e,a)&&(this.D=this.j=this.B=a,this.u=a^f)):(g=a&7,f=this.b[g],a=f<<1,this.b[g]=a&65535,this.D=this.j=this.B=a,this.u=a^f);break;case 3328:h=this.b[7]+ +((a&63)<<1)&65535;0<=(c=N(this,h|65536))&&(this.b[7]=this.b[5],this.b[5]=c,this.b[6]=h+2&65535);break;case 3392:a&56?0<=(h=$c(this,a,0))&&(61440!==(this.M&61440)&&(h&=65535),this.A=this.M>>12&3,0<=(c=N(this,h))&&(this.A=this.M>>14&3,0<=Xc(this,c)&&(this.j=this.B=c,this.u=0))):(g=a&7,c=6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]:this.sa[this.M>>12&3],0<=Xc(this,c)&&(this.j=this.B=c,this.u=0));break;case 3456:0<=(f=Zc(this))&&((this.ba&57344||(this.Da=22),a&56)?0<=(h=$c(this,a,0))&&(h&=65535, +this.A=this.M>>12&3,0<=(e=Yc(this,h,4))&&(this.A=this.M>>14&3,0<=K(this,e,f)&&(this.j=this.B=f,this.u=0))):(g=a&7,6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]=f:this.sa[this.M>>12&3]=f,this.j=this.B=f,this.u=0));break;case 3520:0<=(e=R(this,a,4))&&(a=-(this.j>>15&1),0<=K(this,e,a)&&(this.B=a,this.u=0));break;case 35328:a&56?0<=(e=R(this,a,5))&&0<=Q(this,e,0)&&(this.j=this.D=this.u=this.B=0):(this.b[a&7]&=65280,this.j=this.D=this.u=this.B=0);break;case 35392:0<=(f=P(this,e=R(this,a,7)))&&(a= +~f,0<=Q(this,e,a)&&(this.j=this.B=a<<8,this.D=65536,this.u=0));break;case 35456:0<=(f=P(this,e=R(this,a,7)))&&(a=f+1,0<=Q(this,e,a)&&(this.j=this.B=a<<8,this.u=(a&(a^f))<<8));break;case 35520:0<=(f=P(this,e=R(this,a,7)))&&(a=f-1,0<=Q(this,e,a)&&(this.j=this.B=a<<8,this.u=((a^f)&f)<<8));break;case 35584:0<=(f=P(this,e=R(this,a,7)))&&(a=-f,0<=Q(this,e,a)&&(this.D=this.j=this.B=a<<8,this.u=(a&f)<<8));break;case 35648:0<=(f=P(this,e=R(this,a,7)))&&(a=f+(this.D>>16&1),0<=Q(this,e,a)&&(this.j=this.B=this.D= +a<<8,this.u=(a&(a^f))<<8));break;case 35712:0<=(f=P(this,e=R(this,a,7)))&&(a=f-(this.D>>16&1),0<=Q(this,e,a)&&(this.j=this.B=this.D=a<<8,this.u=((a^f)&f)<<8));break;case 35776:0<=(f=ad(this,a))&&(this.j=this.B=f<<8,this.D=this.u=0);break;case 35840:0<=(f=P(this,e=R(this,a,7)))&&(a=((this.D&65536)>>8|f)>>1,0<=Q(this,e,a)&&(this.D=f<<16,this.j=this.B=a<<8,this.u=this.j^this.D>>1));break;case 35904:0<=(f=P(this,e=R(this,a,7)))&&(a=f<<1|this.D>>16&1,0<=Q(this,e,a)&&(this.D=this.j=this.B=a<<8,this.u=(a^ +f)<<8));break;case 35968:0<=(f=P(this,e=R(this,a,7)))&&(a=f&128|f>>1,0<=Q(this,e,a)&&(this.D=f<<16,this.j=this.B=a<<8,this.u=this.j^this.D>>1));break;case 36032:0<=(f=P(this,e=R(this,a,7)))&&(a=f<<1,0<=Q(this,e,a)&&(this.D=this.j=this.B=a<<8,this.u=(a^f)<<8));break;case 36160:a&56?0<=(h=$c(this,a,0))&&(this.A=this.M>>12&3,0<=(c=N(this,h|65536))&&(this.A=this.M>>14&3,0<=Xc(this,c)&&(this.j=this.B=c,this.u=0))):(g=a&7,c=6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]:this.sa[this.M>>12&3],0<=Xc(this, +c)&&(this.j=this.B=c,this.u=0));break;case 36224:0<=(f=Zc(this))&&((this.ba&57344||(this.Da=22),a&56)?0<=(h=$c(this,a,0))&&(this.A=this.M>>12&3,0<=(e=Yc(this,h|65536,4))&&(this.A=this.M>>14&3,0<=K(this,e,f)&&(this.j=this.B=f,this.u=0))):(g=a&7,6!==g||(this.M>>2&12288)===(this.M&12288)?this.b[g]=f:this.sa[this.M>>12&3]=f,this.j=this.B=f,this.u=0));break;default:switch(a&65528){case 128:0<=(c=Zc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.M&49152||(this.M=this.M&63519|(a&7)<< +5,this.Oa=1);break;case 160:case 168:a&1&&(this.D=0);a&2&&(this.u=0);a&4&&(this.B=1);a&8&&(this.j=0);break;case 176:case 184:a&1&&(this.D=65536);a&2&&(this.u=32768);a&4&&(this.B=0);a&8&&(this.j=32768);break;default:switch(a){case 0:49152&this.M?(this.L|=128,J(this,4,46)):(this.ga=3,Rc(this),console.log("HALT at "+this.b[7].toString(8)));break;case 1:g=0;if(0<(a=this.f.length))for(;0>12].call(this,a)}function U(){--this.G} +var dd=[function(){},function(a){var b=S(this,a>>6);a&56?K(this,R(this,a,4),b):this.b[a&7]=b;Wc(this,b);--this.G},function(a){var b=S(this,a>>6);a=S(this,a);var d=b-a;!this.W&128&&(this.j=this.B=this.D=d,this.u=(b^a)&(b^d));--this.G},function(a){Wc(this,S(this,a>>6)&S(this,a));--this.G},function(a){var b=S(this,a>>6);if(a&56){a=R(this,a,4);var d=L(this,a);K(this,a,b=~b&d)}else a&=7,this.b[a]=b=~b&this.b[a];Wc(this,b);--this.G},U,U,U,U,U,U,U,U,U,U,U]; +function ed(a){u.call(this,"ROM",a,ed);this.i=null;this.J=a.addr;this.A=a.size;this.N=a.writable;this.G=a.alias;this.I=a.file;this.P=ca(this.I);if(this.I){a=this.I;var b=da(this.P);"json"!=b&&"hex"!=b&&(a=ka()+"/api/v1/dump?file="+this.I+"&format=bytes&decimal=true");var d=this;xa(a,null,!0,function(a,b,e){fd(d,a,b,e)})}}w(ed);ed.prototype.Xa=function(a,b,d,c){this.F=b;this.f=d;this.H=c;gd(this)}; +ed.prototype.Na=function(){if(this.Ka){if(this.H){var a=this.H,b=this.id,d=this.J,c=this.A,f=this.Ka,e=[],h;for(h in f){var g=f[h];"number"==typeof g&&(f[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var n=e,k=[k>>>0,h],p=ra(n,k,a.qc);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.N.push({hd:b,C:d,Qc:c,Ka:f,nc:e})}delete this.Ka}return!0};ed.prototype.Ma=function(){return!0}; +function fd(a,b,d,c){if(c)a.oa("Unable to load system ROM (error "+c+": "+b+")");else{ab(a.oc,b,d);var f;if("["==d.charAt(0)||"{"==d.charAt(0))try{var e,h,g=eval("("+d+")");if(e=g.bytes)a.i=e;else if(e=g.words)for(a.i=Array(2*e.length),h=f=0;f>8&255;else if(e=g.data)for(a.i=Array(4*e.length),h=f=0;f>8&255,a.i[h++]=e[f]>>16&255,a.i[h++]=e[f]>>24&255;else a.i=g;a.Ka=g.symbols;if(!a.i.length){t("Empty ROM: "+ +b);return}if(1==a.i.length){t(a.i[0]);return}}catch(k){a.oa("ROM data error: "+k.message);return}else for(b=d.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.i=Array(b.length),f=0;f>>c.X].yb(f&c.F,a.i[d]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.G?b.push(a.G):null!=a.G&&a.G.length&&(b=a.G);for(d=0;d>>f.X;0>>=f.X;0=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; +function ld(a,b,d,c){if(d)if(b){0>a.I&&a.G.length&&(a.I=0);if(0>a.I||b!=a.G[a.I])a.G.splice(0,0,b),a.I=0;a.I--}else a.da?b="end":b=a.G[a.I+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");d=0;var f=null;c=c||";";for(var e=0;e<=b.length;e++){var h=b.charAt(e);if('"'==h||"'"==h)f?h==f&&(f=null):f=h;else if(h==c&&!f||!h)a.push(qa(b.substring(d,e))),d=e+1}}return a} +function md(a,b,d){for(d=d||-1;d--&&b.length;){var c=b.pop();if(2>a.length)return!1;var f=a.pop(),e=a.pop();switch(c){case "*":c=e*f;break;case "/":if(!f)return!1;c=e/f;break;case "%":if(!f)return!1;c=e%f;break;case "+":c=e+f;break;case "-":c=e-f;break;case "<<":c=e<>":c=e>>f;break;case ">>>":c=e>>>f;break;case "<":c=e":c=e>f?1:0;break;case ">=":c=e>=f?1:0;break;case "==":c=e==f?1:0;break;case "!=":c=e!=f?1:0;break;case "&":c=e&f;break; case "^":c=e^f;break;case "|":c=e|f;break;case "&&":c=e&&f?1:0;break;case "||":c=e||f?1:0;break;default:return!1}a.push(c|0)}return!0} -function kd(a,b,d){var c;if(b){b=ld(a,b);for(var f=0,e=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);f>=1;h=n+h;c>>=8}c=r(d,0,!0)+" "+d+". "+ba(d,0,!0)+" "+("0b"+h)}a.g((null!=b?b+": ":"")+c);return f} -function od(a,b){if(b)return nd(a,b,a.fa[b]);var d=0;for(b in a.fa)nd(a,b,a.fa[b]),d++;return 0=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);f>=1;h=n+h;c>>=8}c=r(d,0,!0)+" "+d+". "+ba(d,0,!0)+" "+("0b"+h)}a.g((null!=b?b+": ":"")+c);return f} +function rd(a,b){if(b)return qd(a,b,a.ga[b]);var d=0;for(b in a.ga)qd(a,b,a.ga[b]),d++;return 0>>c.G.X;k=1}c.g("blockid physical blockaddr used size type");c.g("-------- --------- ---------- ------ ------ ----");for(var d=-1,l=0;k--;){var n=b[g];n.type==d?l++||c.g("..."):(d=n.type,l=Fb[d],n&&c.g(r(n.id,8)+" %"+r(g<>>d.X].Ob(c&d.G,c),b&&zd(a,b));return d};m.Ga=function(a,b){var d=65535,c=Z(a);-1!==c&&(d=Gb(this.G,c),b&&zd(a,b));return d}; -m.ac=function(a,b,d){var c=Z(a);if(-1!==c){var f=this.G;f.R[(c&f.i)>>>f.X].yb(c&f.G,b&255,c);d&&zd(a,d);M(this.f,!0)}};m.ic=function(a,b,d){var c=Z(a);if(-1!==c){var f=this.G,e=c&f.G,h=(c&f.i)>>>f.X;e!=f.G?f.R[h].kc(e,b&65535,c):(f.R[h++].yb(e,b&255,c),f.R[h&f.B].yb(0,b>>8&255,c+1));d&&zd(a,d);M(this.f,!0)}};function Y(a){return{C:a,Fa:!1}}function Ad(a){return[a.C,a.Fa]}function Bd(a){return{C:a[0],Fa:a[1]}} -function yd(a,b,d){var c;d=(d?a.V:a.zb).C;if(void 0!==b){c=b=ld(a,b);var f;if(c.match(/^[a-z_][a-z0-9_]*$/i))for(c=c.toUpperCase(),d=0;df&&(f+=d.length);0>f&&(f=0);for(var e=d.length;f>>c.X],!1)}a.W=["br"];if(void 0!==a.J)for(b=1;b>>c.X],!0);a.J=["bw"];a.Eb=0} -m.cb=function(a,b,d){var c=!0;d||ee(this,a,b,!1,!0);if(a!=this.B){var f=Z(b);if(-1===f)this.g("invalid address: "+X(this,b.C)),c=!1;else{var e=this.G;e.R[f>>>e.X].cb(f&e.G,a==this.J)}}c&&(a.push(b),d?b.Fa=!0:(fe(this,a,a.length-1,"set"),rd(this)));return c};function ee(a,b,d,c,f){var e=!1;d=Z(d);for(var h=1;h>>c.X],b==a.J));g.Fa||rd(a);break}}return e} -function ge(a,b){for(var d=1;d>23,y=p.C+y&65535,x=X(q,y);else if(8192==y)y=(e&63)<<1,y=p.C-y&65535,x=X(q,y);else if(12288==y)y=e&7,x=X(q,y,2);else if(24576==y)y=e&63,x=X(q,y);else if(y=e&D,D&4032&&(y>>=6,D>>=6),D&63){var D=void 0,B=y&7;switch((y&56)>>3){case 0:x=je(B);break; -case 1:x="@"+je(B);break;case 2:7>B?x="("+je(B)+")+":(D=q.Ga(p,2),x="#"+X(q,D));break;case 3:7>B?x="@("+je(B)+")+":(D=q.Ga(p,2),x="@#"+X(q,D));break;case 4:x="-("+je(B)+")";break;case 5:x="@-("+je(B)+")";break;case 6:D=q.Ga(p,2);x=X(q,D)+"("+je(B)+")";7==B&&(x=[x,X(q,D+p.C&65535)]);break;case 7:D=q.Ga(p,2),x="@"+X(q,D)+"("+je(B)+")",7==B&&(x=[x,X(q,D+p.C&65535)])}}q=x;if(!q||!q.length){g="INVALID";break}"string"!=typeof q&&(d||(d=q[1]),q=q[0]);0a?"R"+a:6==a?"SP":"PC"}function le(a,b){var d="",c=a.f;8>b?(d=je(b),d+="="+X(a,c.b[b])):13>b?d="A"+(b-8)+"="+X(a,c.Ya[b-8]):16<=b&&20>b?d="S"+(b-16)+"="+X(a,c.ra[b-16]):20==b&&(d="PS="+X(a,Vb(c)));d&&(d+=" ");return d}function me(a){var b,d="";for(b=0;6>b;b++)d+=le(a,b);d=d+"\n"+(le(a,6)+le(a,7)+le(a,20));return d+=ke(a,"T")+ke(a,"N")+ke(a,"Z")+ke(a,"V")+ke(a,"C")}m.pc=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=e.Pc;if(f>=h&&fg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],e=null);e=ie(a,b,h,e);a.g(e);a.V=b;f-=b.C-k;d++}}} -function he(a,b,d){var c=!0;try{b.length&&"end"!=b?d||a.g(">> "+b):(a.aa&&(a.g("ended assemble at "+X(a,a.$.C)),a.V=a.$,a.aa=!1),b="");var f=b.charAt(0);if('"'==f||"'"==f)return!0;a.ya=null;if(rb(a)&&0l||"z"fa.length&&(a.g("note: only "+fa.length+" available"),W=fa.length);O-=W;0>O&&(null==fa[fa.length-1].C?(W=O+W,O=0):O+=fa.length);var Ac=[];"call"==Jd&&(Ja=1E5,Ac=["CALL"]);for(void 0!==Id&&a.g(W+" instructions earlier:");0=fa.length&&(O= -0);a.Ub=W;Ld++;Ja--}}Ld||(a.g("no "+Kd+"history available"),a.Ub=void 0)}else{var Jb=yd(a,da);if(Jb){var Kb=0;ta&&("l"==ta.charAt(0)&&(ta=ta.substr(1)||Me),Kb=md(a,ta)>>>0,65536>4||1;Oe--&&0Ob?String.fromCharCode(Ob):".";Mb--}ua&& -(ua+="\n");ua+=da+" "+ib+(0==hb?" "+Cc:"")}ua&&a.g(ua);a.zb=Jb}}}}break;case "e":if("else"==e[0])break;var Pb=1,Od=255,Pd=a.Hb,Qd=a.ac;"ew"==e[0]&&(Pb=2,Od=65535,Pd=a.Ga,Qd=a.ic);var Rd=Pb<<1,Sd=e[1];if(null==Sd)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 Qb=yd(a,Sd);if(Qb)for(var Rb=2;RbGc;){for(var va=null,Se=256;65536>lb.C>>>0;){Ud.C=a.Ga(lb,2);if(null==lb.C||!Se--)break;for(var Te=a,Sb=Ud,Vd=null,mb=Sb.C,Wd=mb,Hc=1;6>=Hc&&mb;Hc++){if(2\nLicense: GPL version 3 or later ");this.g("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bwe){if(ye(c,this.T)){this.J=new Uc(this,"1.30.0","failsafe");ye(this.J)&&(Ee(this,c),a=2,Fe(this.J));N(this.J,"timestamp",wa());Ge(this.J);var f=this.i&&!this.N;if(1==a||ya("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(d=Ce(c)){var e=De(c,"code"),h=De(c,"data");e&&("ok"==e?ye(c,h):("error"== -e&&"no machine state"!=h?(this.na("Error: "+h),"unable to verify user"==h&&(Ca("user",""),this.B=null)):this.g(e+": "+h),Fe(c),ye(c)?(d=Ce(c),f=!0):d=!1))}f&&Be(this,d?c:null)}else 2==a&&c.clear()}else Be(this);delete this.T;delete this.V}f=bb(this.id);for(e=0;ea[1];a=a[2];this.ga=!0;this.A.ea=!0;var c=this.O.power;c&&(c.textContent="Shutdown");this.f&&(He(this,this.f,b,d,a),this.f.Db());this.$&&(Ee(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.F=0}; -function Ee(a,b){if(ya("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var d=a.B||"",c=b.toString(),f={app:"PDP11js",ver:"1.30.0"};f.url=a.url;f.user=d;f.type="bug";f.data=c;xa("http://www.pcjs.org/api/v1/report",f,!0)}} -function te(a,b,d){var c,f="none";if(a.F)return null;a.F--;var e=new Uc(a,"1.30.0"),h=new Uc(a,"1.30.0","validate"),g=wa();N(h,"timestamp",g);N(e,"timestamp",g);N(e,"version","1.30.0");N(e,"url",window?window.location.href:null);N(e,"browser",window?window.navigator.userAgent:"");a.f&&a.f.Ma&&(d&&a.f.la(),c=a.f.Ma(b,d),"object"===typeof c&&N(e,a.f.id,c),d&&(a.f.A.ea=!1,!1===c&&(f=null)));for(var g=bb(a.id),k=0;k>>c.F.X;k=1}c.g("blockid physical blockaddr used size type");c.g("-------- --------- ---------- ------ ------ ----");for(var d=-1,l=0;k--;){var n=b[g];n.type==d?l++||c.g("..."):(d=n.type,l=Fb[d],n&&c.g(r(n.id,8)+" %"+r(g<>>d.X].Ob(c&d.F,c),b&&Cd(a,b));return d};m.Ha=function(a,b){var d=65535,c=Z(a);-1!==c&&(d=Gb(this.F,c),b&&Cd(a,b));return d}; +m.bc=function(a,b,d){var c=Z(a);if(-1!==c){var f=this.F;f.R[(c&f.i)>>>f.X].yb(c&f.F,b&255,c);d&&Cd(a,d);yc(this.f,!0)}};m.jc=function(a,b,d){var c=Z(a);if(-1!==c){var f=this.F,e=c&f.F,h=(c&f.i)>>>f.X;e!=f.F?f.R[h].lc(e,b&65535,c):(f.R[h++].yb(e,b&255,c),f.R[h&f.A].yb(0,b>>8&255,c+1));d&&Cd(a,d);yc(this.f,!0)}};function Y(a){return{C:a,Ga:!1}}function Dd(a){return[a.C,a.Ga]}function Ed(a){return{C:a[0],Ga:a[1]}} +function Bd(a,b,d){var c;d=(d?a.V:a.zb).C;if(void 0!==b){c=b=od(a,b);var f;if(c.match(/^[a-z_][a-z0-9_]*$/i))for(c=c.toUpperCase(),d=0;df&&(f+=d.length);0>f&&(f=0);for(var e=d.length;f>>c.X],!1)}a.Y=["br"];if(void 0!==a.J)for(b=1;b>>c.X],!0);a.J=["bw"];a.Eb=0} +m.eb=function(a,b,d){var c=!0;d||he(this,a,b,!1,!0);if(a!=this.A){var f=Z(b);if(-1===f)this.g("invalid address: "+X(this,b.C)),c=!1;else{var e=this.F;e.R[f>>>e.X].eb(f&e.F,a==this.J)}}c&&(a.push(b),d?b.Ga=!0:(ie(this,a,a.length-1,"set"),ud(this)));return c};function he(a,b,d,c,f){var e=!1;d=Z(d);for(var h=1;h>>c.X],b==a.J));g.Ga||ud(a);break}}return e} +function je(a,b){for(var d=1;d>23,y=p.C+y&65535,x=X(q,y);else if(8192==y)y=(e&63)<<1,y=p.C-y&65535,x=X(q,y);else if(12288==y)y=e&7,x=X(q,y,2);else if(24576==y)y=e&63,x=X(q,y);else if(y=e&D,D&4032&&(y>>=6,D>>=6),D&63){var D=void 0,B=y&7;switch(y&56){case 0:x=me(B);break;case 8:x= +"@"+me(B);break;case 16:7>B?x="("+me(B)+")+":(D=q.Ha(p,2),x="#"+X(q,D));break;case 24:7>B?x="@("+me(B)+")+":(D=q.Ha(p,2),x="@#"+X(q,D));break;case 32:x="-("+me(B)+")";break;case 40:x="@-("+me(B)+")";break;case 48:D=q.Ha(p,2);x=X(q,D)+"("+me(B)+")";7==B&&(x=[x,X(q,D+p.C&65535)]);break;case 56:D=q.Ha(p,2),x="@"+X(q,D)+"("+me(B)+")",7==B&&(x=[x,X(q,D+p.C&65535)])}}q=x;if(!q||!q.length){g="INVALID";break}"string"!=typeof q&&(d||(d=q[1]),q=q[0]);0a?"R"+a:6==a?"SP":"PC"} +function oe(a,b){var d="",c=a.f;8>b?(d=me(b),d+="="+X(a,c.b[b])):13>b?d="A"+(b-8)+"="+X(a,c.Za[b-8]):16<=b&&20>b?d="S"+(b-16)+"="+X(a,c.sa[b-16]):20==b&&(d="PS="+X(a,Vb(c)));d&&(d+=" ");return d}function pe(a){var b,d="";for(b=0;6>b;b++)d+=oe(a,b);d=d+"\n"+(oe(a,6)+oe(a,7)+oe(a,20));return d+=ne(a,"T")+ne(a,"N")+ne(a,"Z")+ne(a,"V")+ne(a,"C")}m.qc=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=e.Qc;if(f>=h&&fg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],e=null);e=le(a,b,h,e);a.g(e);a.V=b;f-=b.C-k;d++}}} +function ke(a,b,d){var c=!0;try{b.length&&"end"!=b?d||a.g(">> "+b):(a.da&&(a.g("ended assemble at "+X(a,a.aa.C)),a.V=a.aa,a.da=!1),b="");var f=b.charAt(0);if('"'==f||"'"==f)return!0;a.za=null;if(rb(a)&&0l||"z"ga.length&&(a.g("note: only "+ga.length+" available"),W=ga.length);O-=W;0>O&&(null==ga[ga.length-1].C?(W=O+W,O=0):O+=ga.length);var Cc=[];"call"==Kd&&(Ka=1E5,Cc=["CALL"]);for(void 0!==Jd&&a.g(W+" instructions earlier:");0=ga.length&&(O= +0);a.Vb=W;Md++;Ka--}}Md||(a.g("no "+Ld+"history available"),a.Vb=void 0)}else{var Kb=Bd(a,ea);if(Kb){var Lb=0;ua&&("l"==ua.charAt(0)&&(ua=ua.substr(1)||Pe),Lb=pd(a,ua)>>>0,65536>4||1;Re--&&0Pb?String.fromCharCode(Pb):".";Nb--}va&& +(va+="\n");va+=ea+" "+jb+(0==ib?" "+Ec:"")}va&&a.g(va);a.zb=Kb}}}}break;case "e":if("else"==e[0])break;var Qb=1,Pd=255,Qd=a.Hb,Rd=a.bc;"ew"==e[0]&&(Qb=2,Pd=65535,Qd=a.Ha,Rd=a.jc);var Sd=Qb<<1,Td=e[1];if(null==Td)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 Rb=Bd(a,Td);if(Rb)for(var Sb=2;SbIc;){for(var wa=null,Ve=256;65536>mb.C>>>0;){Vd.C=a.Ha(mb,2);if(null==mb.C||!Ve--)break;for(var We=a,Tb=Vd,Wd=null,nb=Tb.C,Xd=nb,Jc=1;6>=Jc&&nb;Jc++){if(2\nLicense: GPL version 3 or later ");this.g("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bze){if(Be(c,this.T)){this.J=new Vc(this,"1.30.0","failsafe");Be(this.J)&&(He(this,c),a=2,Ie(this.J));M(this.J,"timestamp",ta());Je(this.J);var f=this.i&&!this.N;if(1==a||ya("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(d=Fe(c)){var e=Ge(c,"code"),h=Ge(c,"data");e&&("ok"==e?Be(c,h):("error"== +e&&"no machine state"!=h?(this.oa("Error: "+h),"unable to verify user"==h&&(Ca("user",""),this.A=null)):this.g(e+": "+h),Ie(c),Be(c)?(d=Fe(c),f=!0):d=!1))}f&&Ee(this,d?c:null)}else 2==a&&c.clear()}else Ee(this);delete this.T;delete this.V}f=bb(this.id);for(e=0;ea[1];a=a[2];this.ja=!0;this.w.fa=!0;var c=this.O.power;c&&(c.textContent="Shutdown");this.f&&(Ke(this,this.f,b,d,a),this.f.Db());this.aa&&(He(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.G=0}; +function He(a,b){if(ya("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var d=a.A||"",c=b.toString(),f={app:"PDP11js",ver:"1.30.0"};f.url=a.url;f.user=d;f.type="bug";f.data=c;xa("http://www.pcjs.org/api/v1/report",f,!0)}} +function we(a,b,d){var c,f="none";if(a.G)return null;a.G--;var e=new Vc(a,"1.30.0"),h=new Vc(a,"1.30.0","validate"),g=ta();M(h,"timestamp",g);M(e,"timestamp",g);M(e,"version","1.30.0");M(e,"url",window?window.location.href:null);M(e,"browser",window?window.navigator.userAgent:"");a.f&&a.f.Ma&&(d&&a.f.ma(),c=a.f.Ma(b,d),"object"===typeof c&&M(e,a.f.id,c),d&&(a.f.w.fa=!1,!1===c&&(f=null)));for(var g=bb(a.id),k=0;kg.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);c?"}"==c.slice(-1)?(c=c.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+d+"$2"+(c?" parms='"+c+"'":"")+(g?' url="'+g+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(p){g=null,a=p.message}else a="unrecognized XML: "+(255/g.exec(a)){var f=c[2];b("Loading "+f+"...");xa(f,null,!0,function(e,h,g){if(g||!h)d(a,"unable to resolve XML reference: "+c[0]+" ("+g+")");else{if(e=c[3])if(g=h.match(new RegExp("<"+c[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(e);)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{d(a,"missing <"+c[1]+"> in "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(c[0],h);Ze(a,b,d)}})}else d(a,null)} -function $e(a,b,d,c){function f(a){if(void 0===g){var b=h&&A(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ma(a))}function e(a){f("Error: "+a);k&&(--Le||Sa(!0));k=!1}var h,g,k=!0;Le++;$a[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=l:p.appendChild(document.createTextNode(l));n.appendChild(p)}d|| -(d="/versions/pdp11/1.30.0/components.xsl");l=function(c,g){g?Xe(d,null,null,!1,f,function(c,k){if(k)if(ab(a,d,c),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--Le||Sa(!0)):e("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),--Le||Sa(!0)):e("invalid machine element: "+ -a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser");else e(c)}):e(c)};"<"!=b.charAt(0)?Xe(b,a,c,!0,f,l):Ye(b,null,a,c,!1,f,l)}else e("missing machine element: "+a)}catch(q){e(q.message)}return k}window.embedPDP11=function(a,b,d,c){Sa(!1);return $e(a,b,d,c)};window.enableEvents=Sa;window.sendEvent=Ta;})(); +m.ua=function(a,b,d){var c=this;switch(b){case "power":return this.O[b]=d,d.onclick=function(){c.G||(c.w.fa?we(c,!1,!0):De(c,c.Nb))},!0;case "reset":return this.O[b]=d,d.onclick=function(){if(c.w.fa&&!c.G)if(c.i&&!c.P){var a=ya("Click OK to save changes to this PDP11js machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");we(c,a,!0);!a&&c.$?window&&window.location.reload():c.Nb(ze)}else c.reset(),c.f&&c.f.Db()},!0;case "save":if(ja()){d.parentNode.removeChild(d);break}this.O[b]= +d;d.onclick=function(){var a=Ae(c,!0);if(a){var b=!!(c.i&&!c.P||c.$),d=we(c,b);b?Le(c,a,d):c.oa("Resume disabled, machine state not saved")}};return!0}return!1}; +function Ae(a,b){var d=a.A;d||(d=Ba("user"),void 0!==d?!d&&b&&(d=null,window&&(d=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.","")),d&&((d=Me(a,d))||a.oa("The user ID is invalid."))):b&&a.oa("Browser local storage is not available"));return d} +function Me(a,b){a.A=null;var d=xa(ka()+"/api/v1/user?req=verify&user="+b),c=d[1];if(!d[0]&&c)try{d=eval("("+c+")"),d.code&&"ok"==d.code&&(Ca("user",d.data),a.A=d.data)}catch(f){t(f.message+" ("+c+")")}return a.A}function Ce(a){var b=null;a.A&&(b=ka()+"/api/v1/user?req=load&user="+a.A+"&state="+Ne(a,"1.30.0"));return b} +function Le(a,b,d){if(d){var c={req:"store"};c.user=b;c.state=Ne(a,"1.30.0");c.data=d;b=xa(ka()+"/api/v1/user",c);c=b[0];if(b[1]){if(c){var f=c.indexOf("\n");0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);c?"}"==c.slice(-1)?(c=c.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+d+"$2"+(c?" parms='"+c+"'":"")+(g?' url="'+g+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(p){g=null,a=p.message}else a="unrecognized XML: "+(255/g.exec(a)){var f=c[2];b("Loading "+f+"...");xa(f,null,!0,function(e,h,g){if(g||!h)d(a,"unable to resolve XML reference: "+c[0]+" ("+g+")");else{if(e=c[3])if(g=h.match(new RegExp("<"+c[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(e);)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{d(a,"missing <"+c[1]+"> in "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(c[0],h);bf(a,b,d)}})}else d(a,null)} +function cf(a,b,d,c){function f(a){if(void 0===g){var b=h&&A(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ma(a))}function e(a){f("Error: "+a);k&&(--Oe||Sa(!0));k=!1}var h,g,k=!0;Oe++;$a[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=l:p.appendChild(document.createTextNode(l));n.appendChild(p)}d|| +(d="/versions/pdp11/1.30.0/components.xsl");l=function(c,g){g?$e(d,null,null,!1,f,function(c,k){if(k)if(ab(a,d,c),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--Oe||Sa(!0)):e("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),--Oe||Sa(!0)):e("invalid machine element: "+ +a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser");else e(c)}):e(c)};"<"!=b.charAt(0)?$e(b,a,c,!0,f,l):af(b,null,a,c,!1,f,l)}else e("missing machine element: "+a)}catch(q){e(q.message)}return k}window.embedPDP11=function(a,b,d,c){Sa(!1);return cf(a,b,d,c)};window.enableEvents=Sa;window.sendEvent=Ta;})(); diff --git a/versions/pdp11/1.30.0/pdp11.js b/versions/pdp11/1.30.0/pdp11.js index 818898038..dea8dbc64 100644 --- a/versions/pdp11/1.30.0/pdp11.js +++ b/versions/pdp11/1.30.0/pdp11.js @@ -8,146 +8,145 @@ typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encod function q(a){window&&window.alert(a)}function ja(a){var b=!1;window&&(b=window.confirm(a));return b}var ka=null;function la(){if(null==ka){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ka=a}return ka}function ma(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b} function na(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function oa(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}var t={init:[],show:[],exit:[]},pa=!1,qa=!1,ra=!0;function sa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function u(a){t.init.push(a)} function ta(a){if(ra)try{for(var b=0;bb?this.tb=this.id:(this.Eb=this.id.substr(0,b),this.tb=this.id.substr(b+1));this[a]=c;this.h={ready:!1,Za:!1,xb:!1,L:!1,error:!1};this.lb=null;this.h.error=!1;this.A={};this.H=null;x.push(this)}var wa=void 0,xa={}; +function v(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Hb=b.comment;this.cc=b;b=this.id.indexOf(".");0>b?this.ub=this.id:(this.Fb=this.id.substr(0,b),this.ub=this.id.substr(b+1));this[a]=c;this.h={ready:!1,Za:!1,yb:!1,L:!1,error:!1};this.mb=null;this.h.error=!1;this.w={};this.I=null;x.push(this)}var wa=void 0,xa={}; if(window){wa||(wa=window.location.search.substr(1));for(var ya,za=/\+/g,Aa=/([^&=]+)=?([^&]*)/g;ya=Aa.exec(wa);)xa[decodeURIComponent(ya[1].replace(za," "))]=decodeURIComponent(ya[2].replace(za," "))}function Ba(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b} function y(a,b){b||(b=v);a.prototype=Ba(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var Ca=window.PCjs.Machines||(window.PCjs.Machines={}),x=window.PCjs.Components||(window.PCjs.Components=[])}else Ca={},x=[];function Da(a,b,c){Ca[a]&&b&&(Ca[a][b]=c)}function z(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b>1)+2;10>this.f&&(this.f=10);15>2;this.i=this.g-1;this.j=this.s/this.g|0;this.M=this.j-1;this.oa=[];this.u=null;this.$a=this.P;a=new F;Ka(a,this.H);this.b=Array(this.j);for(b=0;b>1)+2;10>this.f&&(this.f=10);15>2;this.i=this.g-1;this.j=this.s/this.g|0;this.N=this.j-1;this.oa=[];this.A=null;this.$a=this.R;a=new F;Ka(a,this.I);this.b=Array(this.j);for(b=0;b>8:c[2](b)&255}else if(b&1&&(c=this.controller.oa[a&-2],c[2]))return c[2](b&-2)>>8;return this.controller.$a(b,-1,1)} function Ma(a,b,c){var d=this.controller.oa[a];if(d){if(d[1]){d[1](b,c);return}if(d[3]){a=d[2]?d[2](c):0;if(c&1)d[3](a&255|b<<8,c&-2);else d[3](a&-256|b,c);return}}else if(c&1&&(d=this.controller.oa[a&-2],d[3])){c&=-2;a=d[2]?d[2](c):0;d[3](a&255|b<<8,c);return}this.controller.$a(c,b,1)}function Na(a,b){var c=this.controller.oa[a];if(c){if(c[2])return c[2](b);if(c[0])return c[0](b)|c[0](b+1)<<8}return this.controller.$a(b,-1,0)} -function Oa(a,b,c){if(a=this.controller.oa[a]){if(a[3]){a[3](b,c);return}if(a[1]){a[1](b&255,c);a[1](b>>8,c+1);return}}this.controller.$a(c,b,0)}E.prototype.reset=function(){this.u&&this.u()};E.prototype.P=function(){return 0};E.prototype.ua=function(a,b){b||this.reset();return!0}; -function Pa(a,b,c,d,f){for(var e=b,h=c,g=e>>>a.f;0h&&(r=h);if(k&&k.size){if(k.type==d&&k.controller==f){if(e+h<=k.Pa)return k.rb+=k.Pa-e,k.Pa=e,!0;if(e>=k.Pa+k.rb){r=k.size-(e-l);r>h&&(r=h);k.rb=e-k.Pa+r;e=l+a.g;h-=r;g++;continue}}return Ra(1,e,h)}e=new F(e,r,a.g,d,f);Ka(e,a.H,k);a.b[g++]=e;e=l+a.g;h-=r}return 0>=h?(a.status(Math.floor(c/1024)+"Kb "+Sa[d]+" at "+n(b,8,!0)),!0):Ra(2,b,c)} +function Oa(a,b,c){if(a=this.controller.oa[a]){if(a[3]){a[3](b,c);return}if(a[1]){a[1](b&255,c);a[1](b>>8,c+1);return}}this.controller.$a(c,b,0)}E.prototype.reset=function(){this.A&&this.A()};E.prototype.R=function(){return 0};E.prototype.ua=function(a,b){b||this.reset();return!0}; +function Pa(a,b,c,d,f){for(var e=b,h=c,g=e>>>a.f;0h&&(r=h);if(k&&k.size){if(k.type==d&&k.controller==f){if(e+h<=k.Qa)return k.sb+=k.Qa-e,k.Qa=e,!0;if(e>=k.Qa+k.sb){r=k.size-(e-l);r>h&&(r=h);k.sb=e-k.Qa+r;e=l+a.g;h-=r;g++;continue}}return Ra(1,e,h)}e=new F(e,r,a.g,d,f);Ka(e,a.I,k);a.b[g++]=e;e=l+a.g;h-=r}return 0>=h?(a.status(Math.floor(c/1024)+"Kb "+Sa[d]+" at "+n(b,8,!0)),!0):Ra(2,b,c)} function Ra(a,b,c){q("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1} -function G(a){v.call(this,"Device",a,G);this.u=a.name;this.s={Bb:[],fa:0,T:128,b:127,Zb:0};this.b={data:0,wc:0,Qa:20,sc:0};this.f={Ab:0,l:0};this.g={gb:2496,O:0,w:128,hb:0,fb:0,U:0,Pb:0,R:[],Ea:[406,406,406,406],C:[12,12,12,12]};this.i={l:129,Ya:0,G:0,sa:0,pa:0,wa:0,R:[],C:[40,40,40,40],Ea:[1024,1024,512,512],Xb:[157,157,29,29]};this.j={c:[8210,8208,8210,8226],C:[22,22,22,50],Da:[19,19,19,32],sb:[815,411,815,630],R:[],B:2176,Ta:0,Ra:0,$:[0,0,0,0,0,0,0,0],Z:0,S:[4544,4544,4544,4544,4544,4544,4544, -4544],Sa:[0,0,0,0,0,0,0,0],Ja:0,qc:[0,0,0,0,0,0,0,0],Qb:0,Rb:[0,0,0,0,0,0,0,0],f:[0,0,0,0,0,0,0,0],rc:[1,2,3,4,5,6,7,8],Sb:[0,0,0,0,0,0,0,0],ka:[0,0,0,0,0,0,0,0],qb:[0,0,0,0,0,0,0,0],oc:[0,0,0,0,0,0,0,0],pc:[0,0,0,0,0,0,0,0],mc:[0,0,0,0,0,0,0,0],nc:[0,0,0,0,0,0,0,0],va:0,Cb:0}}y(G); +function G(a){v.call(this,"Device",a,G);this.A=a.name;this.s={Cb:[],ga:0,U:128,b:127,$b:0};this.b={data:0,xc:0,Ra:20,tc:0};this.f={Bb:0,l:0};this.g={gb:2496,P:0,v:128,hb:0,fb:0,V:0,Qb:0,S:[],Ea:[406,406,406,406],D:[12,12,12,12]};this.i={l:129,Ya:0,H:0,sa:0,pa:0,wa:0,S:[],D:[40,40,40,40],Ea:[1024,1024,512,512],Yb:[157,157,29,29]};this.j={c:[8210,8208,8210,8226],D:[22,22,22,50],Da:[19,19,19,32],tb:[815,411,815,630],S:[],B:2176,Ua:0,Sa:0,aa:[0,0,0,0,0,0,0,0],$:0,T:[4544,4544,4544,4544,4544,4544,4544, +4544],Ta:[0,0,0,0,0,0,0,0],Ja:0,rc:[0,0,0,0,0,0,0,0],Rb:0,Sb:[0,0,0,0,0,0,0,0],f:[0,0,0,0,0,0,0,0],sc:[1,2,3,4,5,6,7,8],Tb:[0,0,0,0,0,0,0,0],ka:[0,0,0,0,0,0,0,0],rb:[0,0,0,0,0,0,0,0],pc:[0,0,0,0,0,0,0,0],qc:[0,0,0,0,0,0,0,0],nc:[0,0,0,0,0,0,0,0],oc:[0,0,0,0,0,0,0,0],va:0,Db:0}}y(G); var Ta=[4127,448,4191,450,4383,452,2591,454,21983,32768,65534,13791,16384,65534,770,2719,454,2591,65534,257,0,2566,33028,34051,33282,1281,33537,0,2758,32771,770,1025,1793,0,3078,33794,34305,513,0,5574,43690,4480,4097,4162,4227,4292,4357,57665,1281,769,0,3138,34305,1281,0,24707,2691,2627,24769,34561,1793,0,3076,20739,24899,2691,34562,2753,1281,0,2624,33537,0,16385,24641,1537,1793,0,193,8279,21589,516,12549,1538,2629,513,0,38336,65281,32769,0,32258,2561,2689,32258,3008,514,3009,769,0,5574,510,2551, 2,0,9678,208,769,0,5582,226,135,0,2598,5606,236,2,0,95,242,128,5573,57344,2591,6,5599,256,4,5574,510,3045,5599,460,76,2591,78,5571,65510,5579,12,5570,512,4224,4104,3024,8197,33788,4224,4609,8193,769,0,2640,8197,33785,6145,2625,8193,769,0,8194,761,2574,5572,43690,5579,24,5568,2048,5570,512,2628,4360,2632,2632,8708,769,0,3103,65514,34562,0,305,35406,754,258,119,65160,3024,32403,5579,36,5568,3072,35446,1,740,5570,512,4224,4104,3024,8197,33788,5569,3,2574,3039,454,528,5582,24,4224,2632,2632,8200,769, 0,3024,3103,65514,34562,0,264,8197,33779,5003,2574,32337,260,0,258,5579,12,6080,448,6081,450,6084,452,116,2,6084,65400,17860,65024,21956,62976,38848,65401,3200,161,76,0,16944,10797];m=G.prototype; -m.Ga=function(a,b,c,d){this.v=b;this.c=c;this.H=d;switch(this.u){default:a=Ua;for(var f in a){var e=a[f];c=b;d=+f;for(var h=e[0]?e[0].bind(this):null,g=e[1]?e[1].bind(this):null,k=e[2]?e[2].bind(this):null,e=e[3]?e[3].bind(this):null,l=+f;l<=d;l+=2){var r=l&8191;void 0!==c.oa[r]?q("I/O address already registered: "+n(c.I+r,8,!0)):c.oa[r]=[h,g,k,e,!1]}}f=this.Wb.bind(this);b.u=this.reset.bind(this);b.$a=f}D(this)};m.hc=function(){return Va(this.c)};m.uc=function(a){Wa(this.c,a&-1809|Va(this.c)&1808)}; -function Xa(a){var b=a.g,c,d,f,e=b.U>>13&7;"undefined"===typeof b.R[e]&&(b.R[e]={cache:[],postProcess:a.jc,drive:e,blocksize:256,mapped:0,maxblock:b.Ea[e]*b.C[e],url:"rk"+e+".dsk"});b.w&=-129;switch(b.w>>1&7){case 0:b.gb=2496;b.O=0;b.w=128;b.U=0;break;case 1:if((b.U>>4&511)>=b.Ea[e]){b.O|=32832;b.w|=49152;break}if((b.U&15)>=b.C[e]){b.O|=32800;b.w|=49152;break}c=(b.U>>4&511)*b.C[e]+(b.U&15);d=(b.w&48)<<12|b.fb;f=65536-b.hb&65535;Ya(a,b.R[e],c,d,f);return;case 2:if((b.U>>4&511)>=b.Ea[e]){b.O|=32832; -b.w|=49152;break}if((b.U&15)>=b.C[e]){b.O|=32800;b.w|=49152;break}c=(b.U>>4&511)*b.C[e]+(b.U&15);d=(b.w&48)<<12|b.fb;f=65536-b.hb&65535;a.pb(b.R[e],c,d,f);return}b.gb=e<<13|b.gb&8176|b.U%9&15;H(a.c,20,160,144,function(){b.w=b.w&65534|128;return!!(b.w&64)})}m.jc=function(a,b,c,d,f){var e=this.g;e.fb=d&65535;e.w=e.w&-49|d>>12&48;e.hb=65536-f&65535;switch(a){case 1:e.O|=33024;e.w|=49152;break;case 2:e.O|=33792,e.w|=49152}H(this.c,20,160,144,function(){e.w=e.w&65534|128;return!!(e.w&64)})}; -function Za(a){var b=a.i,c,d,f,e=b.l>>8&3;b.l&=-2;"undefined"===typeof b.R[e]&&(b.R[e]={cache:[],postProcess:a.kc,drive:e,blocksize:128,mapped:1,maxblock:b.Ea[e]*b.C[e],url:"rl"+e+".dsk"});switch(b.l>>1&7){case 2:b.sa&8&&(b.l&=63);b.sa=b.Xb[e]|b.wa&64;break;case 3:1==(b.G&3)&&(b.wa=b.G&4?b.wa+(b.G&65408)&65408|b.G<<2&64:b.wa-(b.G&65408)&65408|b.G<<2&64,b.G=b.wa);break;case 4:b.sa=b.wa;break;case 5:if(b.G>>6>=b.Ea[e]){b.l|=37888;break}if((b.G&63)>=b.C[e]){b.l|=37888;break}c=(b.G>>6)*b.C[e]+(b.G&63); -d=(b.pa&63)<<16|b.Ya;f=65536-b.sa&65535;Ya(a,b.R[e],c,d,f);return;case 6:if(b.G>>6>=b.Ea[e]){b.l|=37888;break}if((b.G&63)>=b.C[e]){b.l|=37888;break}c=(b.G>>6)*b.C[e]+(b.G&63);d=(b.pa&63)<<16|b.Ya;f=65536-b.sa&65535;a.pb(b.R[e],c,d,f);return}H(a.c,20,160,112,function(){b.l|=129;return!!(b.l&64)})} -m.kc=function(a,b,c,d,f){var e=this.i;e.Ya=d&65535;e.l=e.l&-49|d>>12&48;e.pa=d>>16&63;e.G=~~(c/e.C[b.ia])<<6|c%e.C[b.ia];e.wa=e.G;e.sa=65536-f&65535;switch(a){case 1:e.l|=33792;break;case 2:e.l|=40960}H(this.c,20,160,112,function(){e.l|=129;return!!(e.l&64)})};function $a(a){a=a.j;a.B=2176;a.Z=0;a.S=[4544,4544,4544,4544,4544,4544,4544,4544];a.Sa=[0,0,0,0,0,0,0,0];a.Ja=a.Ta=a.Ra=a.va=a.Cb=0} -function ab(a,b){var c=a.j,d,f,e;c.B&=-16513;c.Z&=-2049;c.S[b]&=-1153;H(a.c,-1,0,172);"undefined"===typeof c.R[b]&&(c.R[b]={cache:[],postProcess:a.lc,drive:b,blocksize:256,mapped:0,maxblock:c.sb[0]*c.Da[0]*c.C[0],url:"rp"+b+".dsk"});switch(c.B&63){case 5:c.qb[b]=c.ka[b];c.B|=32896;c.S[b]|=32896;c.Ja|=1<=c.sb[0]||c.$[b]>>8>=c.Da[0]||(c.$[b]&255)>=c.C[0]){c.Sa[b]|=1024;c.B|=49152;break}d=(c.ka[b]*c.Da[0]+(c.$[b]>>8))*c.C[0]+(c.$[b]& -255);f=(c.va&63)<<16|c.Ra;e=65536-c.Ta&65535;Ya(a,c.R[b],d,f,e);return;case 57:if(c.ka[b]>=c.sb[0]||c.$[b]>>8>=c.Da[0]||(c.$[b]&255)>=c.C[0]){c.Sa[b]|=1024;c.B|=49152;break}d=(c.ka[b]*c.Da[0]+(c.$[b]>>8))*c.C[0]+(c.$[b]&255);f=(c.va&63)<<16|c.Ra;e=65536-c.Ta&65535;a.pb(c.R[b],d,f,e);return}H(a.c,3,160,172,function(){c.B=c.B&65534|128;c.S[b]|=128;return!!(c.B&64)})} -m.lc=function(a,b,c,d,f){var e=this.j;e.Ta=65536-f&65535;e.Ra=d&65535;e.B=e.B&-769|d>>8&768;e.va=d>>16&63;f=~~(c/e.C[0]);d=~~(f/e.Da[0]);e.$[b.ia]=f%e.Da[0]<<8|c%e.C[0];e.qb[b.ia]=e.ka[b.ia]=d;e.Ja|=1<=b.fc-1&&(e.S[b.ia]|=1024);switch(a){case 1:e.Z|=512;e.B|=49152;break;case 2:e.Z|=2048,e.B|=49152}H(this.c,20,160,172,function(){e.S[b.ia]|=128;e.B=e.B&65534|128;return!!(e.B&64)})};m.dc=function(){this.f.l|=128;this.f.l&64&&H(this.c,0,192,64)}; -function bb(a,b){var c=b>>13&31;31>c?a.c.ha&32&&(b=a.c.Ua[c]+(b&8190)&4194302,3932160<=b&&4186112>b&&cb(898)):b|=4186112;return b} -function db(a,b,c,d,f,e){var h=~~((e+c.qa-1)/c.qa),g=new XMLHttpRequest;2048>h&&d+2048L(this.c,a.ec?bb(this,c):c,a.cache[b][f])){a.ob(2,a,b,c,d);return}c+=2;--d}b++}a.ob(0,a,b,c,d)}; -function Ya(a,b,c,d,f){for(var e,h;0h){b.ob(2,b,c,d,f);return}b.cache[c][e]=h;d+=2;--f}c++}b.ob(0,b,c,d,f)}m.reset=function(){this.b.Qa=this.b.Qa&-120|20;this.s.fa=0;this.s.T=128;this.f.l=0;this.g.w=128;this.i.l=128;$a(this)}; -m.Wb=function(a,b,c){var d,f,e=this.c;switch(a&-64){case 4194240:switch(a&-2){case 4194300:0>b?d=e.la&65280:(a&1&&(b<<=8),e.la=b|255,d=0);break;case 4194298:if(0>b)d=e.nb;else{a&1&&(b<<=8);if(d=b&65024){f=d>>9;do d+=34;while(f>>=1)}e.nb=d;e.ja=2}break;case 4194294:if(70!==e.Fa)return J(e,4);0>b?d=e.m:d=e.m=0;break;case 4194292:if(70!==e.Fa)return J(e,4);d=1;break;case 4194290:if(70!==e.Fa)return J(e,4);d=0;break;case 4194288:if(70!==e.Fa)return J(e,4);d=61183;break;case 4194296:0<=b&&!(a&1)&&(b&= -255);case 4194286:case 4194284:case 4194282:case 4194280:case 4194278:case 4194276:case 4194274:case 4194272:if(70!==e.Fa)return J(e,4);f=a-4194272>>1;0>b?d=e.zb[f]:(d=I(this,e.zb[f],a,b,c),0<=d&&(e.zb[f]=d));break;case 4194254:return a&1?e.o>>14&1?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[3]=b),d=e.Y[3]):e.o>>14&0?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[1]=b),d=e.Y[1]),d;case 4194252:case 4194250:case 4194248:return f=a&7,e.o&2048?(0<=b&&(e.a[f]=b),d=e.a[f]):(0<=b&&(e.Ia[f]=b),d=e.Ia[f]),d;case 4194246:return a& -1?(0<=b&&(e.a[7]=b),d=e.a[7]):e.o>>14&0?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[0]=b),d=e.Y[0]),d;case 4194244:case 4194242:case 4194240:return f=a&7,e.o&2048?(0<=b&&(e.Ia[f]=b),d=e.Ia[f]):(0<=b&&(e.a[f]=b),d=e.a[f]),d;default:return e.m|=16,J(e,4)}break;case 4194176:f=a>>1&31;d=I(this,e.N[3][f],a,b,c);0<=d&&(e.N[3][f]=d,e.N[3][f&15]&=65295);break;case 4194112:var h=this.s;f=this.f;switch(a&-2){case 4194174:d=I(this,e.Va,a,b,c);0<=d&&(e.Va=d);break;case 4194172:d=e.da;d&65280&&(d=(d<<8|d>>8)&65535); -break;case 4194170:e.F=e.F&62337|e.bb<<5|e.mb<<1;0>b?d=e.F:(d=I(this,e.F,a,b,c),0<=d&&(e.F=d&=62337,e.bb=d>>5&3,e.mb=d>>1&15,d&257?(f=2,e.ha&16&&(f=1),e.ab=d&1?6:4):(e.ab=0,f=4),this.b.Qa=this.b.Qa&-8|f));break;case 4194168:0>b?d=this.b.sc&65535:(d=I(this,this.b.data,a,b,c),0<=d&&(this.b.data=d));break;case 4194166:0<=b&&(b&127&&(h.Zb=0),h.T&=-129,H(e,100,128,52,function(){h.T|=128;return!!(h.T&64)}));d=0;break;case 4194164:0>b?d=h.T:(d=I(this,h.T,a,b,c),0<=d&&(128==(h.T&192)&&d&64&&H(e,8,128,52, -function(){h.T|=128;return!!(h.T&64)}),h.T=h.T&128|d&-129));break;case 4194162:d=0;0>b&&(h.fa&=-129,0b?d=h.fa:(d=I(this,h.fa,a,b,c),0<=d&&(h.fa=h.fa&128|d&-129));break;case 4194150:0>b?(d=f.l,f.l&=-129):(d=I(this,f.l,a,b,c),0<=d&&(d&64&&!f.Ab&&(setInterval(this.dc.bind(this),25),f.Ab=1),f.l=d&-129));break;default:return e.m|=16,J(e,4)}break;case 4194048:f=this.g;switch(a& --2){case 4194048:d=I(this,f.gb,a,b,c);0<=d&&(f.gb=d);break;case 4194050:d=I(this,f.O,a,b,c);0<=d&&(f.O=d);break;case 4194052:d=I(this,f.w,a,b,c);0<=b&&0<=d&&(f.w=d&-36993|f.w&36992,f.w&1&&Xa(this));break;case 4194054:d=I(this,f.hb,a,b,c);0<=d&&(f.hb=d);break;case 4194056:d=I(this,f.fb,a,b,c);0<=d&&(f.fb=d);break;case 4194058:d=I(this,f.U,a,b,c);0<=d&&(f.U=d);break;case 4194060:break;case 4194062:d=I(this,f.Pb,a,b,c);0<=d&&(f.Pb=d);break;default:return e.m|=16,J(e,4)}break;case 4193728:var g=this.j; -f=g.Z&7;switch(a&-2){case 4193728:d=I(this,g.B,a,b,c);0<=b&&0<=d&&(g.va=g.va&60|d>>8&3,g.B=d&17279|g.B&34944|2048,d&1&&g.B&128?ab(this,f):192==(d&192)&&H(e,0,160,172));break;case 4193730:d=I(this,g.Ta,a,b,c);0<=d&&(g.Ta=d);break;case 4193732:d=I(this,g.Ra,a,b,c);0<=d&&(g.Ra=d&65534);break;case 4193734:d=I(this,g.$[f],a,b,c);0<=d&&(g.$[f]=d&7967);break;case 4193736:d=I(this,g.Z,a,b,c);0<=d&&(g.Z=d&63|g.Z&65472,d&128&&$a(this));break;case 4193738:d=g.S[f];break;case 4193740:d=g.Sa[f];break;case 4193742:d= -I(this,g.Ja,a,b,c);0<=d&&(g.Ja=d&255);break;case 4193744:d=g.qc[f];break;case 4193746:d=I(this,g.Qb,a,b,c);0<=d&&(g.Qb=d);break;case 4193748:d=I(this,g.Rb[f],a,b,c);0<=d&&(g.Rb[f]=d&1023);break;case 4193750:d=8210;break;case 4193752:d=g.rc[f];break;case 4193754:d=I(this,g.Sb[f],a,b,c);0<=d&&(g.Sb[f]=d);break;case 4193756:d=I(this,g.ka[f],a,b,c);0<=d&&(g.ka[f]=d&511);break;case 4193758:g.qb[f]=g.ka[f];d=g.qb[f];break;case 4193760:d=g.oc[f];break;case 4193762:d=g.pc[f];break;case 4193764:d=g.mc[f]; -break;case 4193766:d=g.nc[f];break;case 4193768:d=I(this,g.va,a,b,c);0<=d&&(g.va=d&63,g.B=g.B&-769|(d&3)<<8);break;case 4193770:d=I(this,g.Cb,a,b,c);0<=d&&(g.Cb=d);break;default:return e.m|=16,J(e,4)}break;case 4192512:f=this.i;switch(a&-2){case 4192512:d=I(this,f.l,a,b,c);0<=b&&0<=d&&(f.pa=f.pa&60|d>>4&3,f.l=f.l&-1023|d&1022,f.l&128||Za(this));break;case 4192514:d=I(this,f.Ya,a,b,c);0<=d&&(f.Ya=d&65534);break;case 4192516:d=I(this,f.G,a,b,c);0<=d&&(f.G=d);break;case 4192518:d=I(this,f.sa,a,b,c); -0<=d&&(f.sa=d);break;case 4192520:d=I(this,f.pa,a,b,c);0<=d&&(f.pa=d&63,f.l=f.l&-49|(f.pa&3)<<4);break;default:return e.m|=16,J(e,4)}break;case 4191552:switch(a&-2){case 4191566:0>b?d=e.ha:(d=I(this,e.ha,a,b,c),0<=d&&(70!==e.Fa&&(d&=-49),e.ha=d,e.Ha[0]=d&4?15:7,e.Ha[1]=d&2?15:7,e.Ha[3]=d&1?15:7,e.ab&&(f=2,e.ha&16&&(f=1),this.b.Qa=this.b.Qa&-8|f)));break;default:return e.m|=16,J(e,4)}break;case 4191424:f=a>>1&31;d=I(this,e.N[0][f],a,b,c);0<=d&&(e.N[0][f]=d,e.N[0][f&15]&=65295);break;case 4191360:f= -a>>1&31;d=I(this,e.N[1][f],a,b,c);0<=d&&(e.N[1][f]=d,e.N[1][f&15]&=65295);break;case 4190400:case 4190336:if(70!==e.Fa)return J(e,4);f=a>>2&31;d=e.Ua[f];a&2&&(d=d>>16);d&=65535;0<=b&&(d=I(this,d,a,b,c),0<=d&&(e.Ua[f]=a&2?d<<16|e.Ua[f]&65535:e.Ua[f]&4294901760|d&65534));break;case 4188672:case 4188736:case 4188800:case 4188864:case 4188928:case 4188992:case 4189056:case 4189120:if(0>b)d=Ta[a>>1&255];else return e.m|=16,J(e,4);break;default:return e.m|=16,J(e,4)}c&&0<=d&&(a&1?d=d>>8:d&=255);"undefined"=== -typeof d&&cb(76);return d};var Ua={};Ua[4194302]=[null,null,G.prototype.hc,G.prototype.uc];u(function(){for(var a=C(document,"pdp11","device"),b=0;b>1),this.c=new Int32Array(this.f,0,c>>2),kb(this,gb?lb:mb);else{this.c=Array(c>>2);for(a=0;a>2),b=0;b>8,c)},W:function(a){return this.c[a>>2]>>>((a&3)<<3)&255},xa:function(a){var b=a>>2;a=(a&3)<<3;var c=this.c[b]>>a;return 24>a?c&65535:c&255|(this.c[b+1]&255)<<8},Ba:function(a,b){var c=a>>2,d=(a&3)<<3;this.c[c]=this.c[c]&~(255<>2,d=(a&3)<<3;24>d?this.c[c]=this.c[c]&~(65535<>8);this.ra=!0},M:function(a,b){return this.P(a, -b)},ca:function(a,b){return this.ma(a,b)},za:function(a,b,c){this.i||this.Vb(a,b,c)},La:function(a,b,c){this.i||this.Ma(a,b,c)},J:function(a){return this.b[a]},V:function(a){return this.b[a]},ba:function(a){return this.g.getUint16(a,!0)},na:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.j[a>>1]},ya:function(a,b){this.b[a]=b;this.ra=!0},Aa:function(a,b){this.b[a]=b;this.ra=!0},Ca:function(a,b){this.g.setUint16(a,b,!0);this.ra=!0},Na:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.j[a>> -1]=b;this.ra=!0}};function Ka(a,b,c){a.H=b;a.A=a.v=0;c&&((a.A=c.A)&&ob(a,pb,!1),(a.v=c.v)&&qb(a,pb,!1))}function qb(a,b,c){c&&a.v||(a.ib=!a.i&&b[1]||a.D,a.vc=!a.i&&b[3]||a.I);if(c||void 0===c)a.Vb=b[1]||a.D,a.Ma=b[3]||a.I}function ob(a,b,c){c&&a.A||(a.eb=b[0]||a.s,a.ic=b[2]||a.u);if(c||void 0===c)a.P=b[0]||a.s,a.ma=b[2]||a.u}function kb(a,b){b||(b=rb);ob(a,b,void 0);qb(a,b,void 0)} -var rb=[],nb=[F.prototype.W,F.prototype.Ba,F.prototype.xa,F.prototype.Oa],pb=[F.prototype.M,F.prototype.za,F.prototype.ca,F.prototype.La];if(Ha)var mb=[F.prototype.J,F.prototype.ya,F.prototype.ba,F.prototype.Ca],lb=[F.prototype.V,F.prototype.Aa,F.prototype.na,F.prototype.Na]; -function sb(a,b){v.call(this,"CPU",a,sb);var c=a.multiplier||1;this.vb=a.cycles||b;this.ma=c;this.ub=Math.round(this.vb/1E4)/100;this.ba=this.ub*this.ma;this.h.ga=!1;this.h.Tb=!1;this.h.Xa=a.autoStart;this.h.Mb=!1;this.h.kb=!1;this.Na=this.ca=0;this.Oa=a.csStart;this.ya=a.csInterval;this.za=a.csStop;this.La=[];this.Lb=this.Db.bind(this);D(this)}y(sb);var tb=["power","reset"];m=sb.prototype; -m.Ga=function(a,b,c,d){this.s=a;this.v=b;this.H=d;for(b=0;b>=3;d=""+f}else d=n(c,d);else d="--------".substr(0,d||4);a.A[b].textContent!=d&&(a.A[b].textContent=d)}} -m.aa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.A[b]=c;a=!0;break;case "run":this.A[b]=c;c.onclick=function(){var a;if(a=d.s)if(a=d.s,a.h.L)a=!0;else{var b=null,c,g=z(a.id);for(c=0;ca.M/a.ba&&(b=1);a.ma=b;var c=a.ub*a.ma;if(a.ba!=c){a.ba=c;var c=a.ba.toFixed(2)+"Mhz",d=a.A.setSpeed;d&&(d.textContent=c);a.X("target speed: "+c)}}zb(a,a.I);a.I=0;a.D=ha();a.P=0;Ab(a)}function Cb(a){a.V-=a.J;a.J=0} -m.Db=function(){if(Fa(this,!0)){if(!this.h.ga){yb(this);this.s&&this.s.start(this.D,Bb(this));this.h.ga=!0;this.h.Tb=!0;this.xa&&this.xa.start();var a=this.A.run;a&&(a.textContent="Halt");this.s&&this.s.Ka(!0)}this.wb>=this.vb&&Ab(this,!0);this.Ba=0;this.Ma=ha();this.P&&(a=this.Ma-this.P,a>this.Ib&&(this.D+=a,this.D>this.Ma&&(this.D=this.Ma)));try{do{for(var b=this.h.kb?1:this.jb,c=this.La.length-1;0<=c;c--){var d=this.La[c];0>d[0]||b>d[0]&&(b=d[0])}this.Ub(b);for(var f=this.V-this.J,a=f,e=this.La.length- -1;0<=e;e--){var h=this.La[e];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.Ba+=f;this.I+=f;zb(this,0,!0);a=f;if(this.h.kb){var g=!1;this.Na=this.Na+this.Ob()|0;this.ca-=a;0>=this.ca&&(this.ca+=this.ya,g=!0);0<=this.za&&this.za<=Bb(this)&&(this.ya=this.za=-1,wb(this),O(this),g=!0);g&&this.X(Bb(this)+" cycles: checksum="+n(this.Na))}this.Aa-=f;if(0>=this.Aa){this.Aa+=this.jb;15<=++this.Jb&&(this.s&&this.s.Ka(),this.Jb=0);break}}while(this.h.ga)}catch(k){O(this);xb(this);this.s&&this.s.stop(ha(), -Bb(this));Fa(this,!1);b=k.stack||k.message;this.h.error=!0;this.K(b);return}b=setTimeout;c=this.Lb;this.P=ha();d=this.Ib;this.Ba&&(d=Math.round(d*this.Ba/this.jb));d=d-(this.P-this.Ma);if(f=this.P-this.D)this.M=Math.round(this.I/(10*f))/100,864E5<=f&&(this.W=0,yb(this));if(0>d||this.Md&&(this.D-=d),d=0;this.wb+=this.Ba;this.P+=d;b(c,d)}else xb(this),this.s&&this.s.stop(ha(),Bb(this))};m.Ub=function(){return 0}; -function O(a){a.h.Za&&(a.h.xb=!0);Cb(a);zb(a,a.I);a.I=0;if(a.h.ga){a.h.ga=!1;a.xa&&a.xa.stop();var b=a.A.run;b&&(b.textContent="Run")}a.h.complete=void 0}function xb(a){a.s&&a.s.Ka(void 0)} -function Db(a){this.$b=+a.model||1170;this.cc=a.resetAddr||0;sb.call(this,a,1E6);this.Fb=0;this.g=65536;this.b=32768;this.f=65535;this.c=32768;this.o=15;this.a=[0,0,0,0,0,0,0,this.cc];this.Ia=[0,0,0,0,0,0];this.Y=[0,0,0,0];this.memory=[];this.i=[];this.Ca=this.nb=0;this.ja=2;this.la=255;this.u=0;this.na=-1;this.m=0;this.Fa=70;this.mb=this.bb=this.ab=this.j=this.ha=this.Va=this.da=this.F=0;this.Ha=[7,7,7,7];this.N=[[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,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,0,0,0,0,0,0,0]];this.Ua=[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.zb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h.complete=this.h.Yb=!1}y(Db,sb);m=Db.prototype; -m.reset=function(){this.h.ga&&O(this);Eb(this);vb(this);this.h.error=!1;this.parent.reset.call(this)};function Eb(a){a.la=255;a.m=0;a.i=[];a.nb=0;a.F=a.da=a.Va=a.ha=a.ab=0;a.Ha[0]=a.Ha[1]=a.Ha[3]=7;a.bb=0}m.Ob=function(){return 0}; -m.save=function(){var a=new P(this);Q(a,0,[]);Q(a,1,[this.Hb,this.W,this.ma]);for(var b=this.v,c=0,d=[],f=0;fb){a.i[e].ea-=b;break}b-=a.i[e].ea}a.i.splice(e+1,0,{delay:b,priority:c&224,vector:d,callback:f})}a.ja=2}function Va(a){return a.o=a.o&63728|(a.c&32768?8:0)|(a.f&65535?0:4)|(a.b&32768?2:0)|(a.g&65536?1:0)} -function Wa(a,b){a.c=b<<12;a.f=~b&4;a.b=b<<14;a.g=b<<16;if((b^a.o)&2048)for(var c=a.Ia.length;0<=--c;){var d=a.a[c];a.a[c]=a.Ia[c];a.Ia[c]=d}a.j=b>>14&3;c=a.o>>14&3;a.j!=c&&(a.Y[c]=a.a[6],a.a[6]=a.Y[a.j]);a.ja=2;a.o=b}function cb(a){console.log("panic("+a+")")} -function J(a,b){var c,d,f=0;0>a.na?a.na=Va(a):a.j||(b=4,f=1);a.F&57344||(a.da=63222,a.Va=b);a.j=0;0<=(c=R(a,b|65536))&&0<=(d=R(a,b+2&65535|65536))&&(Wa(a,d&53247|a.na>>2&12288),f&&(a.m|=4,a.a[6]=4),0<=S(a,a.na)&&0<=S(a,a.a[7])&&(a.a[7]=c));a.u=0;return a.na=-1} -function Fb(a,b,c){var d,f,e,h=0;if(c&a.ab){d=b>>13&a.Ha[a.j];f=a.N[a.j][d];e=(a.N[a.j][d+16]<<6)+(b&8191)&4194303;if(a.ha&16){if(3932160<=e&&4186112>e){e=e&262143;var g=e>>13&31;31>g?a.ha&32&&(e=a.Ua[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&cb(898)):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e){if(3915776<=e)return a.m|=32,J(a,4);if(e&1&&!(c&1))return a.m|=64,J(a,4)}switch(f&7){case 1:h=4096;case 2:f|=128;c&4&&(h=8192);break;case 4:h=4096;case 5:c&4&&(h=4096);case 6:f|=c&4?192: -128;break;default:h=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(h|=16384):(b&8128)>(f>>2&8128)&&(h|=16384));a.N[a.j][d]=f;if(4194170!==e||a.j)a.bb=a.j,a.mb=d;if(h){if(h&57344)return 0<=a.na&&(h|=128),a.F&57344||(a.F=a.F|h|a.bb<<5|a.mb<<1),J(a,168);a.F&61440||!(4191360>e||4194239>>c.f;c=d!=c.i?c.b[f].ic(d,b):c.b[f++].eb(d,b)|c.b[f&c.M].eb(0,b+1)<<8}else c=b;return c}function L(a,b,c){c&=65535;if(4194304<=b)return a.a[b-4194304]=c;if(0<=b){a=a.v;var d=c,f=b&a.i,e=(b&a.v)>>>a.f;f!=a.i?a.b[e].vc(f,d&65535,b):(a.b[e++].ib(f,d&255,b),a.b[e&a.M].ib(0,d>>8&255,b+1));return c}return b} -function T(a,b){var c;4194304<=b?c=a.a[b-4194304]&255:0<=b?(c=a.v,c=c.b[(b&c.v)>>>c.f].eb(b&c.i,b)):c=b;return c}function U(a,b,c){c&=255;return 4194304<=b?a.a[b-4194304]=a.a[b-4194304]&65280|c:0<=b?(a=a.v,a.b[(b&a.v)>>>a.f].ib(b&a.i,c&255,b),c):b}function R(a,b){return M(a,Fb(a,b,2))}function Gb(a){var b=R(a,a.a[6]|65536);0<=b&&(a.a[6]=a.a[6]+2&65535);return b} -function S(a,b){var c,d;a.a[6]=d=a.a[6]-2&65535;a.F&57344||(a.da=a.da<<8|246);if(!a.j&&d<=a.la&&4>3&7){case 0:return J(a,4);case 1:if(6===e&&!a.j&&c&4&&(a.a[6]<=a.la||65534<=a.a[6])){if(a.a[6]<=a.la-32||65534<=a.a[6])return a.m|=4,a.a[6]=4,J(a,4);a.m|=8;a.u|=4}return 7===e?a.a[e]:a.a[e]|65536;case 2:f=2;d=a.a[e];7!==e&&(d|=65536,6>e&&c&1&&(f=1));break;case 3:f=2;d=a.a[e];7!==e&&(d|=65536);if(0>(d=R(a,d)))return d;d|=65536;break;case 4:f=-2;6>e&&c&1&&(f=-1);d=a.a[e]+f&65535;7!==e&&(d|=65536);break;case 5:f=-2;d=a.a[e]-2&65535;7!==e&&(d|=65536);if(0>(d= -R(a,d)))return d;d|=65536;break;case 6:if(0>(d=R(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return d|65536;case 7:if(0>(d=R(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return 0>(d=R(a,d|65536))?d:d|65536}a.a[e]=a.a[e]+f&65535;a.F&57344||(a.da=a.da<<8|f<<3&248|e);if(6===e&&!a.j&&c&4&&0>=f&&(a.a[6]<=a.la||65534<=a.a[6])){if(a.a[6]<=a.la-32)return a.m|=4,a.a[6]=4,J(a,4);a.m|=8;a.u|=4}return d} -function W(a,b,c){var d;return b&56?(0<=(d=V(a,b,c))&&(d=Fb(a,d,c)),d):4194304+(b&7)}function X(a,b){var c;b&56?0<=(c=W(a,b,2))&&(c=M(a,c)):c=a.a[b&7];return c}function Y(a,b){var c;b&56?0<=(c=W(a,b,3))&&(c=T(a,c)):c=a.a[b&7]&255;return c}function Z(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.Ub=function(a){this.h.complete=!0;this.h.Yb=!1;this.h.Tb=!1;this.V=this.J=a;this.Hb&256?(Cb(this),a=!1):a=!0;if(a){do{var b,c,d,f,e;if(this.ja)if(1===this.ja)this.ja=2;else{this.ja=0;e=-1;b=this.nb&224;if(0<(a=this.i.length))for(;0b&&(b=this.i[a].gc,e=a)}b>(this.o&224)&&(0>e?J(this,160):(J(this,this.i[e].tc),this.i.splice(e,1)))}this.F&57344|| -(this.da=0,this.Va=this.a[7]);this.u=this.o&16;if(0<=(a=R(this,this.a[7])))switch(this.a[7]=this.a[7]+2&65535,a&61440){case 4096:0<=(b=X(this,a>>6))&&(a&56?0<=(d=W(this,a,4))&&0<=L(this,d,b)&&(this.c=this.f=b,this.b=0):(this.c=this.f=this.a[a&7]=b,this.b=0));break;case 8192:0<=(b=X(this,a>>6))&&0<=(c=X(this,a))&&(this.c=this.f=this.g=a=b-c,this.b=(b^c)&(b^a));break;case 12288:0<=(b=X(this,a>>6))&&0<=(c=X(this,a))&&(this.c=this.f=b&c,this.b=0);break;case 16384:0<=(b=X(this,a>>6))&&(a&56?0<=(c=M(this, -d=W(this,a,6)))&&(a=c&~b,0<=L(this,d,a)&&(this.c=this.f=a,this.b=0)):(this.c=this.f=a=this.a[a&7]&=~b,this.b=0));break;case 20480:0<=(b=X(this,a>>6))&&(a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c|b,0<=L(this,d,a)&&(this.c=this.f=a,this.b=0)):(this.c=this.f=a=this.a[a&7]|=b,this.b=0));break;case 24576:0<=(b=X(this,a>>6))&&(a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=b+c,0<=L(this,d,a)&&(this.c=this.f=this.g=a,this.b=(b^a)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=b+c)&65535,this.c=this.f=this.g=a,this.b=(b^a)& -(c^a)));break;case 36864:0<=(b=Y(this,a>>6))&&(a&56?0<=(d=W(this,a,5))&&0<=U(this,d,b)&&(this.c=this.f=b<<8,this.b=0):(b&128&&(b|=65280),this.c=this.f=this.a[a&7]=b,this.b=0));break;case 40960:0<=(b=Y(this,a>>6))&&0<=(c=Y(this,a))&&(a=b-c,this.c=this.f=this.g=a<<8,this.b=((b^c)&(b^a))<<8);break;case 45056:0<=(b=Y(this,a>>6))&&0<=(c=Y(this,a))&&(this.c=this.f=(b&c)<<8,this.b=0);break;case 49152:0<=(b=Y(this,a>>6))&&0<=(c=T(this,d=W(this,a,7)))&&(a=c&~b,0<=U(this,d,a)&&(this.c=this.f=a<<8,this.b=0)); -break;case 53248:0<=(b=Y(this,a>>6))&&0<=(c=T(this,d=W(this,a,7)))&&(a=c|b,0<=U(this,d,a)&&(this.c=this.f=a<<8,this.b=0));break;case 57344:0<=(b=X(this,a>>6))&&(a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c-b,0<=L(this,d,a)&&(this.c=this.f=this.g=a,this.b=(b^c)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=c-b)&65535,this.c=this.f=this.g=a,this.b=(b^c)&(c^a)));break;default:switch(a&65024){case 2048:0<=(f=V(this,a,0))&&(e=a>>6&7,0<=S(this,this.a[e])&&(this.a[e]=this.a[7],this.a[7]=f&65535));break;case 28672:0<= -(b=X(this,a))&&(e=a>>6&7,b&32768&&(b|=-65536),c=this.a[e],c&32768&&(c|=-65536),a=~~(b*c),this.a[e]=a>>16&65535,this.a[e|1]=a&65535,this.c=a>>16,this.f=this.c|a,this.g=this.b=0,-32768>a||32767>6&7,c=this.a[e]<<16|this.a[e|1],this.g=this.b=0,b&32768&&(b|=-65536),a=~~(c/b),-32768<=a&&32767>=a?(this.a[e]=a&65535,this.a[e|1]=c-a*b&65535,this.f=a>>16|a,this.c=a>>16):(this.b=32768,this.f=a>>15|a,this.c=c>>16,-1===b&&65534===this.a[e]&&(this.a[e]= -this.a[e|1]=1))):(this.f=this.c=0,this.b=32768,this.g=65536));break;case 29696:0<=(b=X(this,a))&&(e=a>>6&7,a=this.a[e],a&32768&&(a|=4294901760),this.g=this.b=0,b&=63,b&32?(b=64-b,16>b):b&&(16>15&65535)&&65535!==c&&(this.b=32768))),this.a[e]=a&65535,this.c=this.f=a);break;case 30208:if(0<=(b=X(this,a))){e=a>>6&7;c=this.a[e]<<16|this.a[e|1];this.g=this.b=0;b&=63;if(b&32)b=64-b,32>b-1,this.g=a<<16,a>>=1,c&2147483648&& -(a|=4294967295<<32-b);else if(b){if(a=c<>15,a<<=1,32>=32-b)c|=4294967295<>16&65535;this.a[e|1]=a&65535;this.c=a>>16;this.f=a>>16|a}break;case 30720:a&56?0<=(c=M(this,d=W(this,a,6)))&&(c^=this.a[a>>6&7],0<=L(this,d,c)&&(this.c=this.f=c,this.b=0)):(this.c=this.f=c=this.a[a&7]^=this.a[a>>6&7],this.b=0);break;case 32256:e=a>>6&7;if(this.a[e]=this.a[e]-1&65535)this.a[7]=this.a[7]-((a&63)<<1)&65535;break;default:switch(a& -65280){case 256:this.a[7]=Z(this.a[7],a);break;case 512:this.f&65535&&(this.a[7]=Z(this.a[7],a));break;case 768:this.f&65535||(this.a[7]=Z(this.a[7],a));break;case 1024:(this.c&32768)===(this.b&32768)&&(this.a[7]=Z(this.a[7],a));break;case 1280:(this.c&32768)!==(this.b&32768)&&(this.a[7]=Z(this.a[7],a));break;case 1536:this.f&65535&&(this.c&32768)===(this.b&32768)&&(this.a[7]=Z(this.a[7],a));break;case 1792:this.f&65535&&(this.c&32768)===(this.b&32768)||(this.a[7]=Z(this.a[7],a));break;case 32768:this.c& -32768||(this.a[7]=Z(this.a[7],a));break;case 33280:!(this.g&65536)&&this.f&65535&&(this.a[7]=Z(this.a[7],a));break;case 33024:this.c&32768&&(this.a[7]=Z(this.a[7],a));break;case 33536:if(this.g&65536||!(this.f&65535))this.a[7]=Z(this.a[7],a);break;case 33792:this.b&32768||(this.a[7]=Z(this.a[7],a));break;case 34048:this.b&32768&&(this.a[7]=Z(this.a[7],a));break;case 34304:this.g&65536||(this.a[7]=Z(this.a[7],a));break;case 34560:this.g&65536&&(this.a[7]=Z(this.a[7],a));break;case 34816:J(this,24); -break;case 35072:J(this,28);break;default:switch(a&65472){case 64:0<=(f=V(this,a,0))&&(this.a[7]=f&65535);break;case 192:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c<<8|c>>8,0<=L(this,d,a)&&(this.c=this.f=c&65280,this.b=this.g=0)):(e=a&7,c=this.a[e],this.a[e]=(c<<8|c>>8)&65535,this.c=this.f=c&65280,this.b=this.g=0);break;case 2560:a&56?0<=(d=W(this,a,4))&&0<=L(this,d,0)&&(this.c=this.g=this.b=this.f=0):this.c=this.g=this.b=this.f=this.a[a&7]=0;break;case 2624:0<=(c=M(this,d=W(this,a,6)))&&(a=~c,0<=L(this, -d,a)&&(this.c=this.f=a,this.g=65536,this.b=0));break;case 2688:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c+1,0<=L(this,d,a)&&(this.c=this.f=a,this.b=a&(a^c))):(e=a&7,c=this.a[e],a=c+1,this.a[e]=a&65535,this.c=this.f=a,this.b=a&(a^c));break;case 2752:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c-1,0<=L(this,d,a)&&(this.c=this.f=a,this.b=(a^c)&c)):(e=a&7,c=this.a[e],a=c-1,this.a[e]=a&65535,this.c=this.f=a,this.b=(a^c)&c);break;case 2816:0<=(c=M(this,d=W(this,a,6)))&&(a=-c,0<=L(this,d,a)&&(this.g=this.c=this.f= -a,this.b=a&c));break;case 2880:0<=(c=M(this,d=W(this,a,6)))&&(a=c+(this.g>>16&1),0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a&(a^c)));break;case 2944:0<=(c=M(this,d=W(this,a,6)))&&(a=c-(this.g>>16&1),0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=(a^c)&c));break;case 3008:0<=(c=X(this,a))&&(this.c=this.f=c,this.g=this.b=0);break;case 3072:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=(this.g&65536|c)>>1,0<=L(this,d,a)&&(this.g=c<<16,this.c=this.f=a,this.b=a^this.g>>1)):(e=a&7,c=this.a[e],a=(this.g&65536| -c)>>1,this.a[e]=a&65535,this.g=c<<16,this.c=this.f=a,this.b=a^this.g>>1);break;case 3136:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c<<1|this.g>>16&1,0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a^c)):(e=a&7,c=this.a[e],a=c<<1|this.g>>16&1,this.a[e]=a&65535,this.g=this.c=this.f=a,this.b=a^c);break;case 3200:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c&32768|c>>1,0<=L(this,d,a)&&(this.g=c<<16,this.c=this.f=a,this.b=this.c^this.g>>1)):(e=a&7,c=this.a[e],a=c&32768|c>>1,this.a[e]=a&65535,this.g=c<<16,this.c= -this.f=a,this.b=this.c^this.g>>1);break;case 3264:a&56?0<=(c=M(this,d=W(this,a,6)))&&(a=c<<1,0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a^c)):(e=a&7,c=this.a[e],a=c<<1,this.a[e]=a&65535,this.g=this.c=this.f=a,this.b=a^c);break;case 3328:f=this.a[7]+((a&63)<<1)&65535;0<=(b=R(this,f|65536))&&(this.a[7]=this.a[5],this.a[5]=b,this.a[6]=f+2&65535);break;case 3392:a&56?0<=(f=V(this,a,0))&&(61440!==(this.o&61440)&&(f&=65535),this.j=this.o>>12&3,0<=(b=R(this,f))&&(this.j=this.o>>14&3,0<=S(this,b)&&(this.c= -this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]:this.Y[this.o>>12&3],0<=S(this,b)&&(this.c=this.f=b,this.b=0));break;case 3456:0<=(c=Gb(this))&&((this.F&57344||(this.da=22),a&56)?0<=(f=V(this,a,0))&&(f&=65535,this.j=this.o>>12&3,0<=(d=Fb(this,f,4))&&(this.j=this.o>>14&3,0<=L(this,d,c)&&(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]=c:this.Y[this.o>>12&3]=c,this.c=this.f=c,this.b=0));break;case 3520:0<=(d=W(this,a,4))&&(a=-(this.c>> -15&1),0<=L(this,d,a)&&(this.f=a,this.b=0));break;case 35328:a&56?0<=(d=W(this,a,5))&&0<=U(this,d,0)&&(this.c=this.g=this.b=this.f=0):(this.a[a&7]&=65280,this.c=this.g=this.b=this.f=0);break;case 35392:0<=(c=T(this,d=W(this,a,7)))&&(a=~c,0<=U(this,d,a)&&(this.c=this.f=a<<8,this.g=65536,this.b=0));break;case 35456:0<=(c=T(this,d=W(this,a,7)))&&(a=c+1,0<=U(this,d,a)&&(this.c=this.f=a<<8,this.b=(a&(a^c))<<8));break;case 35520:0<=(c=T(this,d=W(this,a,7)))&&(a=c-1,0<=U(this,d,a)&&(this.c=this.f=a<<8,this.b= -((a^c)&c)<<8));break;case 35584:0<=(c=T(this,d=W(this,a,7)))&&(a=-c,0<=U(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a&c)<<8));break;case 35648:0<=(c=T(this,d=W(this,a,7)))&&(a=c+(this.g>>16&1),0<=U(this,d,a)&&(this.c=this.f=this.g=a<<8,this.b=(a&(a^c))<<8));break;case 35712:0<=(c=T(this,d=W(this,a,7)))&&(a=c-(this.g>>16&1),0<=U(this,d,a)&&(this.c=this.f=this.g=a<<8,this.b=((a^c)&c)<<8));break;case 35776:0<=(c=Y(this,a))&&(this.c=this.f=c<<8,this.g=this.b=0);break;case 35840:0<=(c=T(this,d=W(this, -a,7)))&&(a=((this.g&65536)>>8|c)>>1,0<=U(this,d,a)&&(this.g=c<<16,this.c=this.f=a<<8,this.b=this.c^this.g>>1));break;case 35904:0<=(c=T(this,d=W(this,a,7)))&&(a=c<<1|this.g>>16&1,0<=U(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a^c)<<8));break;case 35968:0<=(c=T(this,d=W(this,a,7)))&&(a=c&128|c>>1,0<=U(this,d,a)&&(this.g=c<<16,this.c=this.f=a<<8,this.b=this.c^this.g>>1));break;case 36032:0<=(c=T(this,d=W(this,a,7)))&&(a=c<<1,0<=U(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a^c)<<8));break;case 36160:a& -56?0<=(f=V(this,a,0))&&(this.j=this.o>>12&3,0<=(b=R(this,f|65536))&&(this.j=this.o>>14&3,0<=S(this,b)&&(this.c=this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]:this.Y[this.o>>12&3],0<=S(this,b)&&(this.c=this.f=b,this.b=0));break;case 36224:0<=(c=Gb(this))&&((this.F&57344||(this.da=22),a&56)?0<=(f=V(this,a,0))&&(this.j=this.o>>12&3,0<=(d=Fb(this,f|65536,4))&&(this.j=this.o>>14&3,0<=L(this,d,c)&&(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.o>>2&12288)===(this.o& -12288)?this.a[e]=c:this.Y[this.o>>12&3]=c,this.c=this.f=c,this.b=0));break;default:switch(a&65528){case 128:0<=(b=Gb(this))&&(e=a&7,this.a[7]=this.a[e],this.a[e]=b);break;case 152:this.o&49152||(this.o=this.o&63519|(a&7)<<5,this.ja=1);break;case 160:case 168:a&1&&(this.g=0);a&2&&(this.b=0);a&4&&(this.f=1);a&8&&(this.c=0);break;case 176:case 184:a&1&&(this.g=65536);a&2&&(this.b=32768);a&4&&(this.f=0);a&8&&(this.c=32768);break;default:switch(a){case 0:49152&this.o?(this.m|=128,J(this,4)):(this.Ca=3, -Cb(this),console.log("HALT at "+this.a[7].toString(8)));break;case 1:e=0;if(0<(a=this.i.length))for(;0>8&255;else if(e=g.data)for(a.b=Array(4*e.length),h=f=0;f>8&255,a.b[h++]=e[f]>>16&255,a.b[h++]=e[f]>>24&255;else a.b=g;a.j=g.symbols;if(!a.b.length){q("Empty ROM: "+b); -return}if(1==a.b.length){q(a.b[0]);return}}catch(k){a.K("ROM data error: "+k.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f>>d.f].Vb(f&d.i,a.b[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.g?b.push(a.g):null!=a.g&&a.g.length&&(b=a.g);for(c=0;c>>f.f;0>>=f.f;0\nLicense: GPL version 3 or later ");this.X("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bOb){if(Qb(d,this.D)){this.j=new P(this,"1.30.0","failsafe");Qb(this.j)&&(Wb(this,d),a=2,Xb(this.j));Q(this.j,"timestamp",ia());Yb(this.j);var f=this.b&&!this.s;if(1==a||ja("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(c=Ub(d)){var e=Vb(d,"code"),h=Vb(d,"data");e&&("ok"==e?Qb(d,h):("error"==e&& -"no machine state"!=h?(this.K("Error: "+h),"unable to verify user"==h&&(na("user",""),this.f=null)):this.X(e+": "+h),Xb(d),Qb(d)?(c=Ub(d),f=!0):c=!1))}f&&Tb(this,c?d:null)}else 2==a&&d.clear()}else Tb(this);delete this.D;delete this.I}f=z(this.id);for(e=0;ea[1];a=a[2];this.ca=!0;this.h.L=!0;var d=this.A.power;d&&(d.textContent="Shutdown");this.c&&(Zb(this,this.c,b,c,a),this.c.Xa());this.P&&(Wb(this,b),b.clear());!c&&this.j&&(this.j.clear(),delete this.j);this.g=0}; -function Wb(a,b){if(ja("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var c=a.f||"",d=b.toString(),f={app:"PDP11js",ver:"1.30.0"};f.url=a.url;f.user=c;f.type="bug";f.data=d;p("http://www.pcjs.org/api/v1/report",f,!0)}} -function $b(a,b,c){var d,f="none";if(a.g)return null;a.g--;var e=new P(a,"1.30.0"),h=new P(a,"1.30.0","validate"),g=ia();Q(h,"timestamp",g);Q(e,"timestamp",g);Q(e,"version","1.30.0");Q(e,"url",window?window.location.href:null);Q(e,"browser",window?window.navigator.userAgent:"");a.c&&a.c.ta&&(c&&O(a.c),d=a.c.ta(b,c),"object"===typeof d&&Q(e,a.c.id,d),c&&(a.c.h.L=!1,!1===d&&(f=null)));for(var g=z(a.id),k=0;k>13&7;"undefined"===typeof b.S[e]&&(b.S[e]={cache:[],postProcess:a.kc,drive:e,blocksize:256,mapped:0,maxblock:b.Ea[e]*b.D[e],url:"rk"+e+".dsk"});b.v&=-129;switch(b.v>>1&7){case 0:b.gb=2496;b.P=0;b.v=128;b.V=0;break;case 1:if((b.V>>4&511)>=b.Ea[e]){b.P|=32832;b.v|=49152;break}if((b.V&15)>=b.D[e]){b.P|=32800;b.v|=49152;break}c=(b.V>>4&511)*b.D[e]+(b.V&15);d=(b.v&48)<<12|b.fb;f=65536-b.hb&65535;Ya(a,b.S[e],c,d,f);return;case 2:if((b.V>>4&511)>=b.Ea[e]){b.P|=32832; +b.v|=49152;break}if((b.V&15)>=b.D[e]){b.P|=32800;b.v|=49152;break}c=(b.V>>4&511)*b.D[e]+(b.V&15);d=(b.v&48)<<12|b.fb;f=65536-b.hb&65535;a.qb(b.S[e],c,d,f);return}b.gb=e<<13|b.gb&8176|b.V%9&15;H(a.c,20,160,144,function(){b.v=b.v&65534|128;return!!(b.v&64)})}m.kc=function(a,b,c,d,f){var e=this.g;e.fb=d&65535;e.v=e.v&-49|d>>12&48;e.hb=65536-f&65535;switch(a){case 1:e.P|=33024;e.v|=49152;break;case 2:e.P|=33792,e.v|=49152}H(this.c,20,160,144,function(){e.v=e.v&65534|128;return!!(e.v&64)})}; +function Za(a){var b=a.i,c,d,f,e=b.l>>8&3;b.l&=-2;"undefined"===typeof b.S[e]&&(b.S[e]={cache:[],postProcess:a.lc,drive:e,blocksize:128,mapped:1,maxblock:b.Ea[e]*b.D[e],url:"rl"+e+".dsk"});switch(b.l>>1&7){case 2:b.sa&8&&(b.l&=63);b.sa=b.Yb[e]|b.wa&64;break;case 3:1==(b.H&3)&&(b.wa=b.H&4?b.wa+(b.H&65408)&65408|b.H<<2&64:b.wa-(b.H&65408)&65408|b.H<<2&64,b.H=b.wa);break;case 4:b.sa=b.wa;break;case 5:if(b.H>>6>=b.Ea[e]){b.l|=37888;break}if((b.H&63)>=b.D[e]){b.l|=37888;break}c=(b.H>>6)*b.D[e]+(b.H&63); +d=(b.pa&63)<<16|b.Ya;f=65536-b.sa&65535;Ya(a,b.S[e],c,d,f);return;case 6:if(b.H>>6>=b.Ea[e]){b.l|=37888;break}if((b.H&63)>=b.D[e]){b.l|=37888;break}c=(b.H>>6)*b.D[e]+(b.H&63);d=(b.pa&63)<<16|b.Ya;f=65536-b.sa&65535;a.qb(b.S[e],c,d,f);return}H(a.c,20,160,112,function(){b.l|=129;return!!(b.l&64)})} +m.lc=function(a,b,c,d,f){var e=this.i;e.Ya=d&65535;e.l=e.l&-49|d>>12&48;e.pa=d>>16&63;e.H=~~(c/e.D[b.ia])<<6|c%e.D[b.ia];e.wa=e.H;e.sa=65536-f&65535;switch(a){case 1:e.l|=33792;break;case 2:e.l|=40960}H(this.c,20,160,112,function(){e.l|=129;return!!(e.l&64)})};function $a(a){a=a.j;a.B=2176;a.$=0;a.T=[4544,4544,4544,4544,4544,4544,4544,4544];a.Ta=[0,0,0,0,0,0,0,0];a.Ja=a.Ua=a.Sa=a.va=a.Db=0} +function ab(a,b){var c=a.j,d,f,e;c.B&=-16513;c.$&=-2049;c.T[b]&=-1153;H(a.c,-1,0,172);"undefined"===typeof c.S[b]&&(c.S[b]={cache:[],postProcess:a.mc,drive:b,blocksize:256,mapped:0,maxblock:c.tb[0]*c.Da[0]*c.D[0],url:"rp"+b+".dsk"});switch(c.B&63){case 5:c.rb[b]=c.ka[b];c.B|=32896;c.T[b]|=32896;c.Ja|=1<=c.tb[0]||c.aa[b]>>8>=c.Da[0]||(c.aa[b]&255)>=c.D[0]){c.Ta[b]|=1024;c.B|=49152;break}d=(c.ka[b]*c.Da[0]+(c.aa[b]>>8))*c.D[0]+ +(c.aa[b]&255);f=(c.va&63)<<16|c.Sa;e=65536-c.Ua&65535;Ya(a,c.S[b],d,f,e);return;case 57:if(c.ka[b]>=c.tb[0]||c.aa[b]>>8>=c.Da[0]||(c.aa[b]&255)>=c.D[0]){c.Ta[b]|=1024;c.B|=49152;break}d=(c.ka[b]*c.Da[0]+(c.aa[b]>>8))*c.D[0]+(c.aa[b]&255);f=(c.va&63)<<16|c.Sa;e=65536-c.Ua&65535;a.qb(c.S[b],d,f,e);return}H(a.c,3,160,172,function(){c.B=c.B&65534|128;c.T[b]|=128;return!!(c.B&64)})} +m.mc=function(a,b,c,d,f){var e=this.j;e.Ua=65536-f&65535;e.Sa=d&65535;e.B=e.B&-769|d>>8&768;e.va=d>>16&63;f=~~(c/e.D[0]);d=~~(f/e.Da[0]);e.aa[b.ia]=f%e.Da[0]<<8|c%e.D[0];e.rb[b.ia]=e.ka[b.ia]=d;e.Ja|=1<=b.gc-1&&(e.T[b.ia]|=1024);switch(a){case 1:e.$|=512;e.B|=49152;break;case 2:e.$|=2048,e.B|=49152}H(this.c,20,160,172,function(){e.T[b.ia]|=128;e.B=e.B&65534|128;return!!(e.B&64)})};m.ec=function(){this.f.l|=128;this.f.l&64&&H(this.c,0,192,64)}; +function bb(a,b,c,d,f,e){var h=~~((e+c.qa-1)/c.qa),g=new XMLHttpRequest;2048>h&&d+2048L(this.c,a.fc?cb(this.c,c):c,a.cache[b][f])){a.pb(2,a,b,c,d);return}c+=2;--d}b++}a.pb(0,a,b,c,d)}; +function Ya(a,b,c,d,f){for(var e,h;0h){b.pb(2,b,c,d,f);return}b.cache[c][e]=h;d+=2;--f}c++}b.pb(0,b,c,d,f)}m.reset=function(){this.b.Ra=this.b.Ra&-120|20;this.s.ga=0;this.s.U=128;this.f.l=0;this.g.v=128;this.i.l=128;$a(this)}; +m.Xb=function(a,b,c){var d,f,e=this.c;switch(a&-64){case 4194240:switch(a&-2){case 4194300:0>b?d=e.la&65280:(a&1&&(b<<=8),e.la=b|255,d=0);break;case 4194298:if(0>b)d=e.ob;else{a&1&&(b<<=8);if(d=b&65024){f=d>>9;do d+=34;while(f>>=1)}e.ob=d;e.ja=2}break;case 4194294:if(70!==e.Fa)return J(e,4,222);0>b?d=e.m:d=e.m=0;break;case 4194292:if(70!==e.Fa)return J(e,4,224);d=1;break;case 4194290:if(70!==e.Fa)return J(e,4,226);d=0;break;case 4194288:if(70!==e.Fa)return J(e,4,228);d=61183;break;case 4194296:0<= +b&&!(a&1)&&(b&=255);case 4194286:case 4194284:case 4194282:case 4194280:case 4194278:case 4194276:case 4194274:case 4194272:if(70!==e.Fa)return J(e,4,232);f=a-4194272>>1;0>b?d=e.Ab[f]:(d=I(this,e.Ab[f],a,b,c),0<=d&&(e.Ab[f]=d));break;case 4194254:return a&1?e.o>>14&1?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[3]=b),d=e.Y[3]):e.o>>14&0?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[1]=b),d=e.Y[1]),d;case 4194252:case 4194250:case 4194248:return f=a&7,e.o&2048?(0<=b&&(e.a[f]=b),d=e.a[f]):(0<=b&&(e.Ia[f]=b),d= +e.Ia[f]),d;case 4194246:return a&1?(0<=b&&(e.a[7]=b),d=e.a[7]):e.o>>14&0?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[0]=b),d=e.Y[0]),d;case 4194244:case 4194242:case 4194240:return f=a&7,e.o&2048?(0<=b&&(e.Ia[f]=b),d=e.Ia[f]):(0<=b&&(e.a[f]=b),d=e.a[f]),d;default:return e.m|=16,J(e,4,124)}break;case 4194176:f=a>>1&31;d=I(this,e.O[3][f],a,b,c);0<=d&&(e.O[3][f]=d,e.O[3][f&15]&=65295);break;case 4194112:var h=this.s;f=this.f;switch(a&-2){case 4194174:d=I(this,e.Va,a,b,c);0<=d&&(e.Va=d);break;case 4194172:d= +e.ea;d&65280&&(d=(d<<8|d>>8)&65535);break;case 4194170:e.G=e.G&62337|e.bb<<5|e.nb<<1;0>b?d=e.G:(d=I(this,e.G,a,b,c),0<=d&&(e.G=d&=62337,e.bb=d>>5&3,e.nb=d>>1&15,d&257?(f=2,e.na&16&&(f=1),e.ab=d&1?6:4):(e.ab=0,f=4),this.b.Ra=this.b.Ra&-8|f));break;case 4194168:0>b?d=this.b.tc&65535:(d=I(this,this.b.data,a,b,c),0<=d&&(this.b.data=d));break;case 4194166:0<=b&&(b&127&&(h.$b=0),h.U&=-129,H(e,100,128,52,function(){h.U|=128;return!!(h.U&64)}));d=0;break;case 4194164:0>b?d=h.U:(d=I(this,h.U,a,b,c),0<=d&& +(128==(h.U&192)&&d&64&&H(e,8,128,52,function(){h.U|=128;return!!(h.U&64)}),h.U=h.U&128|d&-129));break;case 4194162:d=0;0>b&&(h.ga&=-129,0b?d=h.ga:(d=I(this,h.ga,a,b,c),0<=d&&(h.ga=h.ga&128|d&-129));break;case 4194150:0>b?(d=f.l,f.l&=-129):(d=I(this,f.l,a,b,c),0<=d&&(d&64&&!f.Bb&&(setInterval(this.ec.bind(this),25),f.Bb=1),f.l=d&-129));break;default:return e.m|=16,J(e,4, +126)}break;case 4194048:f=this.g;switch(a&-2){case 4194048:d=I(this,f.gb,a,b,c);0<=d&&(f.gb=d);break;case 4194050:d=I(this,f.P,a,b,c);0<=d&&(f.P=d);break;case 4194052:d=I(this,f.v,a,b,c);0<=b&&0<=d&&(f.v=d&-36993|f.v&36992,f.v&1&&Xa(this));break;case 4194054:d=I(this,f.hb,a,b,c);0<=d&&(f.hb=d);break;case 4194056:d=I(this,f.fb,a,b,c);0<=d&&(f.fb=d);break;case 4194058:d=I(this,f.V,a,b,c);0<=d&&(f.V=d);break;case 4194060:break;case 4194062:d=I(this,f.Qb,a,b,c);0<=d&&(f.Qb=d);break;default:return e.m|= +16,J(e,4,128)}break;case 4193728:var g=this.j;f=g.$&7;switch(a&-2){case 4193728:d=I(this,g.B,a,b,c);0<=b&&0<=d&&(g.va=g.va&60|d>>8&3,g.B=d&17279|g.B&34944|2048,d&1&&g.B&128?ab(this,f):192==(d&192)&&H(e,0,160,172));break;case 4193730:d=I(this,g.Ua,a,b,c);0<=d&&(g.Ua=d);break;case 4193732:d=I(this,g.Sa,a,b,c);0<=d&&(g.Sa=d&65534);break;case 4193734:d=I(this,g.aa[f],a,b,c);0<=d&&(g.aa[f]=d&7967);break;case 4193736:d=I(this,g.$,a,b,c);0<=d&&(g.$=d&63|g.$&65472,d&128&&$a(this));break;case 4193738:d=g.T[f]; +break;case 4193740:d=g.Ta[f];break;case 4193742:d=I(this,g.Ja,a,b,c);0<=d&&(g.Ja=d&255);break;case 4193744:d=g.rc[f];break;case 4193746:d=I(this,g.Rb,a,b,c);0<=d&&(g.Rb=d);break;case 4193748:d=I(this,g.Sb[f],a,b,c);0<=d&&(g.Sb[f]=d&1023);break;case 4193750:d=8210;break;case 4193752:d=g.sc[f];break;case 4193754:d=I(this,g.Tb[f],a,b,c);0<=d&&(g.Tb[f]=d);break;case 4193756:d=I(this,g.ka[f],a,b,c);0<=d&&(g.ka[f]=d&511);break;case 4193758:g.rb[f]=g.ka[f];d=g.rb[f];break;case 4193760:d=g.pc[f];break;case 4193762:d= +g.qc[f];break;case 4193764:d=g.nc[f];break;case 4193766:d=g.oc[f];break;case 4193768:d=I(this,g.va,a,b,c);0<=d&&(g.va=d&63,g.B=g.B&-769|(d&3)<<8);break;case 4193770:d=I(this,g.Db,a,b,c);0<=d&&(g.Db=d);break;default:return e.m|=16,J(e,4,132)}break;case 4192512:f=this.i;switch(a&-2){case 4192512:d=I(this,f.l,a,b,c);0<=b&&0<=d&&(f.pa=f.pa&60|d>>4&3,f.l=f.l&-1023|d&1022,f.l&128||Za(this));break;case 4192514:d=I(this,f.Ya,a,b,c);0<=d&&(f.Ya=d&65534);break;case 4192516:d=I(this,f.H,a,b,c);0<=d&&(f.H=d); +break;case 4192518:d=I(this,f.sa,a,b,c);0<=d&&(f.sa=d);break;case 4192520:d=I(this,f.pa,a,b,c);0<=d&&(f.pa=d&63,f.l=f.l&-49|(f.pa&3)<<4);break;default:return e.m|=16,J(e,4,134)}break;case 4191552:switch(a&-2){case 4191566:0>b?d=e.na:(d=I(this,e.na,a,b,c),0<=d&&(70!==e.Fa&&(d&=-49),e.na=d,e.Ha[0]=d&4?15:7,e.Ha[1]=d&2?15:7,e.Ha[3]=d&1?15:7,e.ab&&(f=2,e.na&16&&(f=1),this.b.Ra=this.b.Ra&-8|f)));break;default:return e.m|=16,J(e,4,136)}break;case 4191424:f=a>>1&31;d=I(this,e.O[0][f],a,b,c);0<=d&&(e.O[0][f]= +d,e.O[0][f&15]&=65295);break;case 4191360:f=a>>1&31;d=I(this,e.O[1][f],a,b,c);0<=d&&(e.O[1][f]=d,e.O[1][f&15]&=65295);break;case 4190400:case 4190336:if(70!==e.Fa)return J(e,4,234);f=a>>2&31;d=e.ib[f];a&2&&(d=d>>16);d&=65535;0<=b&&(d=I(this,d,a,b,c),0<=d&&(e.ib[f]=a&2?d<<16|e.ib[f]&65535:e.ib[f]&4294901760|d&65534));break;case 4188672:case 4188736:case 4188800:case 4188864:case 4188928:case 4188992:case 4189056:case 4189120:if(0>b)d=Ta[a>>1&255];else return e.m|=16,J(e,4,138);break;default:return e.m|= +16,J(e,4,142)}c&&0<=d&&(a&1?d=d>>8:d&=255);"undefined"===typeof d&&console.log("panic(76)");return d};var Ua={};Ua[4194302]=[null,null,G.prototype.ic,G.prototype.vc];u(function(){for(var a=C(document,"pdp11","device"),b=0;b>1),this.c=new Int32Array(this.f,0,c>>2),jb(this,fb?kb:lb);else{this.c=Array(c>>2);for(a=0;a>2),b=0;b>8,c)},Z:function(a){return this.c[a>>2]>>>((a&3)<<3)&255},ya:function(a){var b=a>>2;a=(a&3)<<3;var c=this.c[b]>>a;return 24>a?c&65535:c&255|(this.c[b+1]&255)<<8},Ca:function(a,b){var c=a>>2,d=(a&3)<<3;this.c[c]=this.c[c]&~(255<>2,d=(a&3)<<3;24>d?this.c[c]=this.c[c]&~(65535<>8);this.ra=!0},N:function(a,b){return this.R(a, +b)},da:function(a,b){return this.ma(a,b)},Aa:function(a,b,c){this.i||this.Wb(a,b,c)},Ma:function(a,b,c){this.i||this.Na(a,b,c)},M:function(a){return this.b[a]},W:function(a){return this.b[a]},ca:function(a){return this.g.getUint16(a,!0)},xa:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.j[a>>1]},za:function(a,b){this.b[a]=b;this.ra=!0},Ba:function(a,b){this.b[a]=b;this.ra=!0},La:function(a,b){this.g.setUint16(a,b,!0);this.ra=!0},Oa:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.j[a>> +1]=b;this.ra=!0}};function Ka(a,b,c){a.I=b;a.w=a.u=0;c&&((a.w=c.w)&&nb(a,ob,!1),(a.u=c.u)&&pb(a,ob,!1))}function pb(a,b,c){c&&a.u||(a.jb=!a.i&&b[1]||a.F,a.wc=!a.i&&b[3]||a.J);if(c||void 0===c)a.Wb=b[1]||a.F,a.Na=b[3]||a.J}function nb(a,b,c){c&&a.w||(a.eb=b[0]||a.s,a.jc=b[2]||a.A);if(c||void 0===c)a.R=b[0]||a.s,a.ma=b[2]||a.A}function jb(a,b){b||(b=qb);nb(a,b,void 0);pb(a,b,void 0)} +var qb=[],mb=[F.prototype.Z,F.prototype.Ca,F.prototype.ya,F.prototype.Pa],ob=[F.prototype.N,F.prototype.Aa,F.prototype.da,F.prototype.Ma];if(Ha)var lb=[F.prototype.M,F.prototype.za,F.prototype.ca,F.prototype.La],kb=[F.prototype.W,F.prototype.Ba,F.prototype.xa,F.prototype.Oa]; +function rb(a,b){v.call(this,"CPU",a,rb);var c=a.multiplier||1;this.wb=a.cycles||b;this.da=c;this.vb=Math.round(this.wb/1E4)/100;this.Z=this.vb*this.da;this.h.ha=!1;this.h.Ub=!1;this.h.Xa=a.autoStart;this.h.Nb=!1;this.h.lb=!1;this.Na=this.ca=0;this.Oa=a.csStart;this.ya=a.csInterval;this.za=a.csStop;this.La=[];this.Mb=this.Eb.bind(this);D(this)}y(rb);var sb=["power","reset"];m=rb.prototype; +m.Ga=function(a,b,c,d){this.s=a;this.u=b;this.I=d;for(b=0;b>=3;d=""+f}else d=n(c,d);else d="--------".substr(0,d||4);a.w[b].textContent!=d&&(a.w[b].textContent=d)}} +m.ba=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.w[b]=c;a=!0;break;case "run":this.w[b]=c;c.onclick=function(){var a;if(a=d.s)if(a=d.s,a.h.L)a=!0;else{var b=null,c,g=z(a.id);for(c=0;ca.M/a.Z&&(b=1);a.da=b;var c=a.vb*a.da;if(a.Z!=c){a.Z=c;var c=a.Z.toFixed(2)+"Mhz",d=a.w.setSpeed;d&&(d.textContent=c);a.X("target speed: "+c)}}zb(a,a.J);a.J=0;a.F=ha();a.N=0;Ab(a)}function Cb(a){a.R-=a.A;a.A=0} +m.Eb=function(){if(Fa(this,!0)){if(!this.h.ha){yb(this);this.s&&this.s.start(this.F,Bb(this));this.h.ha=!0;this.h.Ub=!0;this.xa&&this.xa.start();var a=this.w.run;a&&(a.textContent="Halt");this.s&&this.s.Ka(!0)}this.xb>=this.wb&&Ab(this,!0);this.Ba=0;this.Ma=ha();this.N&&(a=this.Ma-this.N,a>this.Jb&&(this.F+=a,this.F>this.Ma&&(this.F=this.Ma)));try{do{for(var b,c=this.h.lb?1:this.Pa,d=this.La.length-1;0<=d;d--){var f=this.La[d];0>f[0]||c>f[0]&&(c=f[0])}b=c;try{this.Vb(b)}catch(l){if("number"!=typeof l)throw l; +}for(var e=this.R-this.A,a=e,h=this.La.length-1;0<=h;h--){var g=this.La[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.Ba+=e;this.J+=e;zb(this,0,!0);a=e;if(this.h.lb){var k=!1;this.Na=this.Na+this.Pb()|0;this.ca-=a;0>=this.ca&&(this.ca+=this.ya,k=!0);0<=this.za&&this.za<=Bb(this)&&(this.ya=this.za=-1,vb(this),xb(this),k=!0);k&&this.X(Bb(this)+" cycles: checksum="+n(this.Na))}this.Aa-=e;if(0>=this.Aa){this.Aa+=this.Pa;15<=++this.Kb&&(this.s&&this.s.Ka(),this.Kb=0);break}}while(this.h.ha)}catch(l){xb(this); +wb(this);this.s&&this.s.stop(ha(),Bb(this));Fa(this,!1);b=l.stack||l.message;this.h.error=!0;this.K(b);return}b=setTimeout;c=this.Mb;this.N=ha();d=this.Jb;this.Ba&&(d=Math.round(d*this.Ba/this.Pa));d=d-(this.N-this.Ma);if(f=this.N-this.F)this.M=Math.round(this.J/(10*f))/100,864E5<=f&&(this.W=0,yb(this));if(0>d||this.Md&&(this.F-=d),d=0;this.xb+=this.Ba;this.N+=d;b(c,d)}else wb(this),this.s&&this.s.stop(ha(),Bb(this))};m.Vb=function(){return 0}; +function xb(a){a.h.Za&&(a.h.yb=!0);Cb(a);zb(a,a.J);a.J=0;if(a.h.ha){a.h.ha=!1;a.xa&&a.xa.stop();var b=a.w.run;b&&(b.textContent="Run")}a.h.complete=void 0}function wb(a){a.s&&a.s.Ka(void 0)} +function Db(a){this.ac=+a.model||1170;this.dc=a.resetAddr||0;rb.call(this,a,1E6);this.Gb=0;this.decode=Eb.bind(this);this.g=65536;this.b=32768;this.f=65535;this.c=32768;this.kb=-1;this.a=[0,0,0,0,0,0,0,this.dc];this.Ia=[0,0,0,0,0,0];this.Y=[0,0,0,0];this.memory=[];this.i=[];this.Ca=this.ob=0;this.ja=2;this.la=255;this.C=0;this.ma=-1;this.m=0;this.Fa=70;this.nb=this.bb=this.ab=this.j=this.na=this.Va=this.ea=this.G=0;this.Ha=[7,7,7,7];this.O=[[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,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,0,0,0,0,0,0,0]];this.ib=[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.Ab=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h.complete=this.h.Zb=!1}y(Db,rb);m=Db.prototype; +m.reset=function(){this.h.ha&&xb(this);Fb(this);ub(this);this.h.error=!1;this.parent.reset.call(this)};function Fb(a){a.la=255;a.m=0;a.i=[];a.ob=0;a.G=a.ea=a.Va=a.na=a.ab=0;a.Ha[0]=a.Ha[1]=a.Ha[3]=7;a.bb=0}m.Pb=function(){return 0}; +m.save=function(){var a=new O(this);P(a,0,[]);P(a,1,[this.Ib,this.W,this.da]);for(var b=this.u,c=0,d=[],f=0;fb){a.i[e].fa-=b;break}b-=a.i[e].fa}a.i.splice(e+1,0,{delay:b,priority:c&224,vector:d,callback:f})}a.ja=2}function Va(a){return a.o=a.o&63728|(a.c&32768?8:0)|(a.f&65535?0:4)|(a.b&32768?2:0)|(a.g&65536?1:0)} +function Wa(a,b){a.c=b<<12;a.f=~b&4;a.b=b<<14;a.g=b<<16;if((b^a.o)&2048)for(var c=a.Ia.length;0<=--c;){var d=a.a[c];a.a[c]=a.Ia[c];a.Ia[c]=d}a.j=b>>14&3;c=a.o>>14&3;a.j!=c&&(a.Y[c]=a.a[6],a.a[6]=a.Y[a.j]);a.ja=2;a.o=b}function Gb(a,b){!a.C&128&&(a.c=a.f=b,a.b=0)} +function J(a,b,c){var d,f,e=0;0>a.ma?a.ma=Va(a):a.j||(b=4,e=1);a.G&57344||(a.ea=63222,a.Va=b);a.j=0;0<=(d=Q(a,b|65536))&&0<=(f=Q(a,b+2&65535|65536))&&(Wa(a,f&53247|a.ma>>2&12288),e&&(a.m|=4,a.a[6]=4),0<=R(a,a.ma)&&0<=R(a,a.a[7])&&(a.a[7]=d));a.C&=-113;a.ma=-1;throw b|c<<8;}function cb(a,b){var c=b>>13&31;31>c?a.na&32&&(b=a.ib[c]+(b&8190)&4194302,3932160<=b&&4186112>b&&console.log("panic(898)")):b|=4186112;return b} +function Hb(a,b,c){var d,f,e,h=0;if(c&a.ab){d=b>>13&a.Ha[a.j];f=a.O[a.j][d];e=(a.O[a.j][d+16]<<6)+(b&8191)&4194303;a.na&16?3932160<=e&&4186112>e&&(e=cb(a,e&262143)):(e&=262143,253952<=e&&(e|=4186112));3932160>e&&(3915776<=e&&(a.m|=32,J(a,4,24)),e&1&&!(c&1)&&(a.m|=64,J(a,4,26)));switch(f&7){case 1:h=4096;case 2:f|=128;c&4&&(h=8192);break;case 4:h=4096;case 5:c&4&&(h=4096);case 6:f|=c&4?192:128;break;default:h=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(h|=16384):(b&8128)>(f>>2&8128)&& +(h|=16384));a.O[a.j][d]=f;if(4194170!==e||a.j)a.bb=a.j,a.nb=d;h&&(h&57344&&(0<=a.ma&&(h|=128),a.G&57344||(a.G=a.G|h|a.bb<<5|a.nb<<1),J(a,168,28)),a.G&61440||!(4191360>e||4194239>>c.f;c=d!=c.i?c.b[f].jc(d,b):c.b[f++].eb(d,b)|c.b[f&c.N].eb(0,b+1)<<8}else c=b;return c} +function L(a,b,c){c&=65535;if(4194304<=b)return a.a[b-4194304]=c;if(0<=b){a=a.u;var d=c,f=b&a.i,e=(b&a.u)>>>a.f;f!=a.i?a.b[e].wc(f,d&65535,b):(a.b[e++].jb(f,d&255,b),a.b[e&a.N].jb(0,d>>8&255,b+1));return c}return b}function S(a,b){var c;4194304<=b?c=a.a[b-4194304]&255:0<=b?(c=a.u,c=c.b[(b&c.u)>>>c.f].eb(b&c.i,b)):c=b;return c}function T(a,b,c){c&=255;return 4194304<=b?a.a[b-4194304]=a.a[b-4194304]&65280|c:0<=b?(a=a.u,a.b[(b&a.u)>>>a.f].jb(b&a.i,c&255,b),c):b} +function Q(a,b){return M(a,Hb(a,b,2))}function Ib(a){var b=Q(a,a.a[6]|65536);0<=b&&(a.a[6]=a.a[6]+2&65535);return b}function R(a,b){var c,d;a.a[6]=d=a.a[6]-2&65535;a.G&57344||(a.ea=a.ea<<8|246);!a.j&&d<=a.la&&4>3&7){case 0:J(a,4,34);break;case 1:return 6===e&&!a.j&&c&4&&(a.a[6]<=a.la||65534<=a.a[6])&&(a.a[6]<=a.la-32||65534<=a.a[6]?(a.m|=4,a.a[6]=4,J(a,4,36)):(a.m|=8,a.C|=64)),7===e?a.a[e]:a.a[e]|65536;case 2:f=2;d=a.a[e];7!==e&&(d|=65536,6>e&&c&1&&(f=1));break;case 3:f=2;d=a.a[e];7!==e&&(d|=65536);if(0>(d=Q(a,d)))return d;d|=65536;break;case 4:f=-2;6>e&&c&1&&(f=-1);d=a.a[e]+f&65535;7!==e&&(d|=65536);break;case 5:f=-2;d=a.a[e]-2&65535;7!==e&&(d|=65536);if(0>(d=Q(a, +d)))return d;d|=65536;break;case 6:if(0>(d=Q(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return d|65536;case 7:if(0>(d=Q(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return 0>(d=Q(a,d|65536))?d:d|65536}a.a[e]=a.a[e]+f&65535;a.G&57344||(a.ea=a.ea<<8|f<<3&248|e);6===e&&!a.j&&c&4&&0>=f&&(a.a[6]<=a.la||65534<=a.a[6])&&(a.a[6]<=a.la-32?(a.m|=4,a.a[6]=4,J(a,4,38)):(a.m|=8,a.C|=64));return d} +function V(a,b,c){var d;return b&56?(0<=(d=U(a,b,c))&&(d=Hb(a,d,c)),d):4194304+(b&7)}function W(a,b){var c;b&56?(c=V(a,b,2),c=M(a,c)):c=a.a[b&7];return c}function X(a,b){var c;b&56?0<=(c=V(a,b,3))&&(c=S(a,c)):c=a.a[b&7]&255;return c}function Y(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} +m.Vb=function(a){this.h.complete=!0;this.h.Zb=!1;this.h.Ub=!1;this.R=this.A=a;this.Ib&256?(Cb(this),a=!1):a=!0;if(a){do{var b,c,d,f,e;this.C&112&&(this.C&32?J(this,168,52):this.C&64?J(this,4,54):this.C&16&&J(this,12,56),this.C&=-113);if(this.ja)if(1===this.ja)this.ja=2;else{this.ja=0;e=-1;b=this.ob&224;if(0<(a=this.i.length))for(;0b&&(b=this.i[a].hc, +e=a)}b>(this.o&224)&&(0>e?J(this,160,42):(J(this,this.i[e].uc,44),this.i.splice(e,1)))}this.G&57344||(this.ea=0,this.Va=this.a[7]);this.C=this.o&16;this.kb=Q(this,this.a[7]);this.a[7]=this.a[7]+2&65535;this.decode(this.kb);if(0<=this.kb)switch(a=this.kb,this.a[7]=this.a[7]+2&65535,a&61440){case 20480:0<=(b=W(this,a>>6))&&(a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c|b,0<=L(this,d,a)&&(this.c=this.f=a,this.b=0)):(this.c=this.f=a=this.a[a&7]|=b,this.b=0));break;case 24576:0<=(b=W(this,a>>6))&&(a&56?0<=(c= +M(this,d=V(this,a,6)))&&(a=b+c,0<=L(this,d,a)&&(this.c=this.f=this.g=a,this.b=(b^a)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=b+c)&65535,this.c=this.f=this.g=a,this.b=(b^a)&(c^a)));break;case 36864:0<=(b=X(this,a>>6))&&(a&56?0<=(d=V(this,a,5))&&0<=T(this,d,b)&&(this.c=this.f=b<<8,this.b=0):(b&128&&(b|=65280),this.c=this.f=this.a[a&7]=b,this.b=0));break;case 40960:0<=(b=X(this,a>>6))&&0<=(c=X(this,a))&&(a=b-c,this.c=this.f=this.g=a<<8,this.b=((b^c)&(b^a))<<8);break;case 45056:0<=(b=X(this,a>>6))&&0<= +(c=X(this,a))&&(this.c=this.f=(b&c)<<8,this.b=0);break;case 49152:0<=(b=X(this,a>>6))&&0<=(c=S(this,d=V(this,a,7)))&&(a=c&~b,0<=T(this,d,a)&&(this.c=this.f=a<<8,this.b=0));break;case 53248:0<=(b=X(this,a>>6))&&0<=(c=S(this,d=V(this,a,7)))&&(a=c|b,0<=T(this,d,a)&&(this.c=this.f=a<<8,this.b=0));break;case 57344:0<=(b=W(this,a>>6))&&(a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c-b,0<=L(this,d,a)&&(this.c=this.f=this.g=a,this.b=(b^c)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=c-b)&65535,this.c=this.f=this.g=a, +this.b=(b^c)&(c^a)));break;default:switch(a&65024){case 2048:0<=(f=U(this,a,0))&&(e=a>>6&7,0<=R(this,this.a[e])&&(this.a[e]=this.a[7],this.a[7]=f&65535));break;case 28672:0<=(b=W(this,a))&&(e=a>>6&7,b&32768&&(b|=-65536),c=this.a[e],c&32768&&(c|=-65536),a=~~(b*c),this.a[e]=a>>16&65535,this.a[e|1]=a&65535,this.c=a>>16,this.f=this.c|a,this.g=this.b=0,-32768>a||32767>6&7,c=this.a[e]<<16|this.a[e|1],this.g=this.b=0,b&32768&&(b|=-65536),a=~~(c/ +b),-32768<=a&&32767>=a?(this.a[e]=a&65535,this.a[e|1]=c-a*b&65535,this.f=a>>16|a,this.c=a>>16):(this.b=32768,this.f=a>>15|a,this.c=c>>16,-1===b&&65534===this.a[e]&&(this.a[e]=this.a[e|1]=1))):(this.f=this.c=0,this.b=32768,this.g=65536));break;case 29696:0<=(b=W(this,a))&&(e=a>>6&7,a=this.a[e],a&32768&&(a|=4294901760),this.g=this.b=0,b&=63,b&32?(b=64-b,16>b):b&&(16>15&65535)&&65535!==c&&(this.b=32768))),this.a[e]=a&65535,this.c=this.f= +a);break;case 30208:if(0<=(b=W(this,a))){e=a>>6&7;c=this.a[e]<<16|this.a[e|1];this.g=this.b=0;b&=63;if(b&32)b=64-b,32>b-1,this.g=a<<16,a>>=1,c&2147483648&&(a|=4294967295<<32-b);else if(b){if(a=c<>15,a<<=1,32>=32-b)c|=4294967295<>16&65535;this.a[e|1]=a&65535;this.c=a>>16;this.f=a>>16|a}break;case 30720:a&56?0<=(c=M(this,d=V(this,a,6)))&&(c^=this.a[a>>6&7],0<=L(this,d,c)&&(this.c=this.f=c,this.b= +0)):(this.c=this.f=c=this.a[a&7]^=this.a[a>>6&7],this.b=0);break;case 32256:e=a>>6&7;if(this.a[e]=this.a[e]-1&65535)this.a[7]=this.a[7]-((a&63)<<1)&65535;break;default:switch(a&65280){case 256:this.a[7]=Y(this.a[7],a);break;case 512:this.f&65535&&(this.a[7]=Y(this.a[7],a));break;case 768:this.f&65535||(this.a[7]=Y(this.a[7],a));break;case 1024:(this.c&32768)===(this.b&32768)&&(this.a[7]=Y(this.a[7],a));break;case 1280:(this.c&32768)!==(this.b&32768)&&(this.a[7]=Y(this.a[7],a));break;case 1536:this.f& +65535&&(this.c&32768)===(this.b&32768)&&(this.a[7]=Y(this.a[7],a));break;case 1792:this.f&65535&&(this.c&32768)===(this.b&32768)||(this.a[7]=Y(this.a[7],a));break;case 32768:this.c&32768||(this.a[7]=Y(this.a[7],a));break;case 33280:!(this.g&65536)&&this.f&65535&&(this.a[7]=Y(this.a[7],a));break;case 33024:this.c&32768&&(this.a[7]=Y(this.a[7],a));break;case 33536:if(this.g&65536||!(this.f&65535))this.a[7]=Y(this.a[7],a);break;case 33792:this.b&32768||(this.a[7]=Y(this.a[7],a));break;case 34048:this.b& +32768&&(this.a[7]=Y(this.a[7],a));break;case 34304:this.g&65536||(this.a[7]=Y(this.a[7],a));break;case 34560:this.g&65536&&(this.a[7]=Y(this.a[7],a));break;case 34816:J(this,24,2);break;case 35072:J(this,28,4);break;default:switch(a&65472){case 64:0<=(f=U(this,a,0))&&(this.a[7]=f&65535);break;case 192:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c<<8|c>>8,0<=L(this,d,a)&&(this.c=this.f=c&65280,this.b=this.g=0)):(e=a&7,c=this.a[e],this.a[e]=(c<<8|c>>8)&65535,this.c=this.f=c&65280,this.b=this.g=0);break;case 2560:a& +56?0<=(d=V(this,a,4))&&0<=L(this,d,0)&&(this.c=this.g=this.b=this.f=0):this.c=this.g=this.b=this.f=this.a[a&7]=0;break;case 2624:0<=(c=M(this,d=V(this,a,6)))&&(a=~c,0<=L(this,d,a)&&(this.c=this.f=a,this.g=65536,this.b=0));break;case 2688:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c+1,0<=L(this,d,a)&&(this.c=this.f=a,this.b=a&(a^c))):(e=a&7,c=this.a[e],a=c+1,this.a[e]=a&65535,this.c=this.f=a,this.b=a&(a^c));break;case 2752:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c-1,0<=L(this,d,a)&&(this.c=this.f=a,this.b= +(a^c)&c)):(e=a&7,c=this.a[e],a=c-1,this.a[e]=a&65535,this.c=this.f=a,this.b=(a^c)&c);break;case 2816:0<=(c=M(this,d=V(this,a,6)))&&(a=-c,0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a&c));break;case 2880:0<=(c=M(this,d=V(this,a,6)))&&(a=c+(this.g>>16&1),0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a&(a^c)));break;case 2944:0<=(c=M(this,d=V(this,a,6)))&&(a=c-(this.g>>16&1),0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=(a^c)&c));break;case 3008:0<=(c=W(this,a))&&(this.c=this.f=c,this.g=this.b= +0);break;case 3072:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=(this.g&65536|c)>>1,0<=L(this,d,a)&&(this.g=c<<16,this.c=this.f=a,this.b=a^this.g>>1)):(e=a&7,c=this.a[e],a=(this.g&65536|c)>>1,this.a[e]=a&65535,this.g=c<<16,this.c=this.f=a,this.b=a^this.g>>1);break;case 3136:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c<<1|this.g>>16&1,0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a^c)):(e=a&7,c=this.a[e],a=c<<1|this.g>>16&1,this.a[e]=a&65535,this.g=this.c=this.f=a,this.b=a^c);break;case 3200:a&56?0<=(c=M(this, +d=V(this,a,6)))&&(a=c&32768|c>>1,0<=L(this,d,a)&&(this.g=c<<16,this.c=this.f=a,this.b=this.c^this.g>>1)):(e=a&7,c=this.a[e],a=c&32768|c>>1,this.a[e]=a&65535,this.g=c<<16,this.c=this.f=a,this.b=this.c^this.g>>1);break;case 3264:a&56?0<=(c=M(this,d=V(this,a,6)))&&(a=c<<1,0<=L(this,d,a)&&(this.g=this.c=this.f=a,this.b=a^c)):(e=a&7,c=this.a[e],a=c<<1,this.a[e]=a&65535,this.g=this.c=this.f=a,this.b=a^c);break;case 3328:f=this.a[7]+((a&63)<<1)&65535;0<=(b=Q(this,f|65536))&&(this.a[7]=this.a[5],this.a[5]= +b,this.a[6]=f+2&65535);break;case 3392:a&56?0<=(f=U(this,a,0))&&(61440!==(this.o&61440)&&(f&=65535),this.j=this.o>>12&3,0<=(b=Q(this,f))&&(this.j=this.o>>14&3,0<=R(this,b)&&(this.c=this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]:this.Y[this.o>>12&3],0<=R(this,b)&&(this.c=this.f=b,this.b=0));break;case 3456:0<=(c=Ib(this))&&((this.G&57344||(this.ea=22),a&56)?0<=(f=U(this,a,0))&&(f&=65535,this.j=this.o>>12&3,0<=(d=Hb(this,f,4))&&(this.j=this.o>>14&3,0<=L(this,d,c)&& +(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]=c:this.Y[this.o>>12&3]=c,this.c=this.f=c,this.b=0));break;case 3520:0<=(d=V(this,a,4))&&(a=-(this.c>>15&1),0<=L(this,d,a)&&(this.f=a,this.b=0));break;case 35328:a&56?0<=(d=V(this,a,5))&&0<=T(this,d,0)&&(this.c=this.g=this.b=this.f=0):(this.a[a&7]&=65280,this.c=this.g=this.b=this.f=0);break;case 35392:0<=(c=S(this,d=V(this,a,7)))&&(a=~c,0<=T(this,d,a)&&(this.c=this.f=a<<8,this.g=65536,this.b=0));break;case 35456:0<= +(c=S(this,d=V(this,a,7)))&&(a=c+1,0<=T(this,d,a)&&(this.c=this.f=a<<8,this.b=(a&(a^c))<<8));break;case 35520:0<=(c=S(this,d=V(this,a,7)))&&(a=c-1,0<=T(this,d,a)&&(this.c=this.f=a<<8,this.b=((a^c)&c)<<8));break;case 35584:0<=(c=S(this,d=V(this,a,7)))&&(a=-c,0<=T(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a&c)<<8));break;case 35648:0<=(c=S(this,d=V(this,a,7)))&&(a=c+(this.g>>16&1),0<=T(this,d,a)&&(this.c=this.f=this.g=a<<8,this.b=(a&(a^c))<<8));break;case 35712:0<=(c=S(this,d=V(this,a,7)))&&(a=c- +(this.g>>16&1),0<=T(this,d,a)&&(this.c=this.f=this.g=a<<8,this.b=((a^c)&c)<<8));break;case 35776:0<=(c=X(this,a))&&(this.c=this.f=c<<8,this.g=this.b=0);break;case 35840:0<=(c=S(this,d=V(this,a,7)))&&(a=((this.g&65536)>>8|c)>>1,0<=T(this,d,a)&&(this.g=c<<16,this.c=this.f=a<<8,this.b=this.c^this.g>>1));break;case 35904:0<=(c=S(this,d=V(this,a,7)))&&(a=c<<1|this.g>>16&1,0<=T(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a^c)<<8));break;case 35968:0<=(c=S(this,d=V(this,a,7)))&&(a=c&128|c>>1,0<=T(this, +d,a)&&(this.g=c<<16,this.c=this.f=a<<8,this.b=this.c^this.g>>1));break;case 36032:0<=(c=S(this,d=V(this,a,7)))&&(a=c<<1,0<=T(this,d,a)&&(this.g=this.c=this.f=a<<8,this.b=(a^c)<<8));break;case 36160:a&56?0<=(f=U(this,a,0))&&(this.j=this.o>>12&3,0<=(b=Q(this,f|65536))&&(this.j=this.o>>14&3,0<=R(this,b)&&(this.c=this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]:this.Y[this.o>>12&3],0<=R(this,b)&&(this.c=this.f=b,this.b=0));break;case 36224:0<=(c=Ib(this))&&((this.G&57344|| +(this.ea=22),a&56)?0<=(f=U(this,a,0))&&(this.j=this.o>>12&3,0<=(d=Hb(this,f|65536,4))&&(this.j=this.o>>14&3,0<=L(this,d,c)&&(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.o>>2&12288)===(this.o&12288)?this.a[e]=c:this.Y[this.o>>12&3]=c,this.c=this.f=c,this.b=0));break;default:switch(a&65528){case 128:0<=(b=Ib(this))&&(e=a&7,this.a[7]=this.a[e],this.a[e]=b);break;case 152:this.o&49152||(this.o=this.o&63519|(a&7)<<5,this.ja=1);break;case 160:case 168:a&1&&(this.g=0);a&2&&(this.b=0);a&4&&(this.f=1); +a&8&&(this.c=0);break;case 176:case 184:a&1&&(this.g=65536);a&2&&(this.b=32768);a&4&&(this.f=0);a&8&&(this.c=32768);break;default:switch(a){case 0:49152&this.o?(this.m|=128,J(this,4,46)):(this.Ca=3,Cb(this),console.log("HALT at "+this.a[7].toString(8)));break;case 1:e=0;if(0<(a=this.i.length))for(;0>12].call(this,a)}function Z(){--this.A} +var Jb=[function(){},function(a){var b=W(this,a>>6);a&56?L(this,V(this,a,4),b):this.a[a&7]=b;Gb(this,b);--this.A},function(a){var b=W(this,a>>6);a=W(this,a);var c=b-a;!this.C&128&&(this.c=this.f=this.g=c,this.b=(b^a)&(b^c));--this.A},function(a){Gb(this,W(this,a>>6)&W(this,a));--this.A},function(a){var b=W(this,a>>6);if(a&56){a=V(this,a,4);var c=M(this,a);L(this,a,b=~b&c)}else a&=7,this.a[a]=b=~b&this.a[a];Gb(this,b);--this.A},Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z]; +function Kb(a){v.call(this,"ROM",a,Kb);this.b=null;this.s=a.addr;this.f=a.size;this.A=a.writable;this.g=a.alias;this.i=a.file;this.F=ba(this.i);if(this.i){a=this.i;var b=ca(this.F);"json"!=b&&"hex"!=b&&(a=ea()+"/api/v1/dump?file="+this.i+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,e){Lb(c,a,b,e)})}}y(Kb);Kb.prototype.Ga=function(a,b,c,d){this.u=b;this.c=c;this.I=d;Mb(this)};Kb.prototype.ua=function(){this.j&&(this.I&&this.I.c(this.id,this.s,this.f,this.j),delete this.j);return!0}; +Kb.prototype.ta=function(){return!0}; +function Lb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Da(a.Fb,b,c);var f;if("["==c.charAt(0)||"{"==c.charAt(0))try{var e,h,g=eval("("+c+")");if(e=g.bytes)a.b=e;else if(e=g.words)for(a.b=Array(2*e.length),h=f=0;f>8&255;else if(e=g.data)for(a.b=Array(4*e.length),h=f=0;f>8&255,a.b[h++]=e[f]>>16&255,a.b[h++]=e[f]>>24&255;else a.b=g;a.j=g.symbols;if(!a.b.length){q("Empty ROM: "+b); +return}if(1==a.b.length){q(a.b[0]);return}}catch(k){a.K("ROM data error: "+k.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f>>d.f].Wb(f&d.i,a.b[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.g?b.push(a.g):null!=a.g&&a.g.length&&(b=a.g);for(c=0;c>>f.f;0>>=f.f;0\nLicense: GPL version 3 or later ");this.X("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bRb){if(Tb(d,this.F)){this.j=new O(this,"1.30.0","failsafe");Tb(this.j)&&(Zb(this,d),a=2,$b(this.j));P(this.j,"timestamp",ia());ac(this.j);var f=this.b&&!this.s;if(1==a||ja("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(c=Xb(d)){var e=Yb(d,"code"),h=Yb(d,"data");e&&("ok"==e?Tb(d,h):("error"==e&& +"no machine state"!=h?(this.K("Error: "+h),"unable to verify user"==h&&(na("user",""),this.f=null)):this.X(e+": "+h),$b(d),Tb(d)?(c=Xb(d),f=!0):c=!1))}f&&Wb(this,c?d:null)}else 2==a&&d.clear()}else Wb(this);delete this.F;delete this.J}f=z(this.id);for(e=0;ea[1];a=a[2];this.da=!0;this.h.L=!0;var d=this.w.power;d&&(d.textContent="Shutdown");this.c&&(bc(this,this.c,b,c,a),this.c.Xa());this.R&&(Zb(this,b),b.clear());!c&&this.j&&(this.j.clear(),delete this.j);this.g=0}; +function Zb(a,b){if(ja("There may be a problem with your PDP11js machine.\n\nTo help us diagnose it, click OK to send this PDP11js machine state to http://www.pcjs.org.")){var c=a.f||"",d=b.toString(),f={app:"PDP11js",ver:"1.30.0"};f.url=a.url;f.user=c;f.type="bug";f.data=d;p("http://www.pcjs.org/api/v1/report",f,!0)}} +function cc(a,b,c){var d,f="none";if(a.g)return null;a.g--;var e=new O(a,"1.30.0"),h=new O(a,"1.30.0","validate"),g=ia();P(h,"timestamp",g);P(e,"timestamp",g);P(e,"version","1.30.0");P(e,"url",window?window.location.href:null);P(e,"browser",window?window.navigator.userAgent:"");a.c&&a.c.ta&&(c&&xb(a.c),d=a.c.ta(b,c),"object"===typeof d&&P(e,a.c.id,d),c&&(a.c.h.L=!1,!1===d&&(f=null)));for(var g=z(a.id),k=0;kg.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\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(w){g=null,a=w.message}else a="unrecognized XML: "+(255/g.exec(a)){var f=d[2];b("Loading "+f+"...");p(f,null,!0,function(e,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(e=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,r=/( [a-z]+=)(['"])(.*?)\2/g;l=r.exec(e);)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 "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(d[0],h);gc(a,b,c)}})}else c(a,null)} -function hc(a,b,c,d){function f(a){if(void 0===g){var b=h&&C(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function e(a){f("Error: "+a);k&&(--dc||ua(!0));k=!1}var h,g,k=!0;dc++;Ca[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var r=document.head||document.getElementsByTagName("head")[0],w=document.createElement("style");w.type="text/css";w.styleSheet?w.styleSheet.cssText=l:w.appendChild(document.createTextNode(l));r.appendChild(w)}c|| -(c="/versions/pdp11/1.30.0/components.xsl");l=function(d,g){g?ec(c,null,null,!1,f,function(d,k){if(k)if(Da(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--dc||ua(!0)):e("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),--dc||ua(!0)):e("invalid machine element: "+ -a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser");else e(d)}):e(d)};"<"!=b.charAt(0)?ec(b,a,d,!0,f,l):fc(b,null,a,d,!1,f,l)}else e("missing machine element: "+a)}catch(K){e(K.message)}return k}window.embedPDP11=function(a,b,c,d){ua(!1);return hc(a,b,c,d)};window.enableEvents=ua;window.sendEvent=va;})(); +m.ba=function(a,b,c){var d=this;switch(b){case "power":return this.w[b]=c,c.onclick=function(){d.g||(d.h.L?cc(d,!1,!0):Vb(d,d.cb))},!0;case "reset":return this.w[b]=c,c.onclick=function(){if(d.h.L&&!d.g)if(d.b&&!d.A){var a=ja("Click OK to save changes to this PDP11js machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");cc(d,a,!0);!a&&d.N?window&&window.location.reload():d.cb(Rb)}else d.reset(),d.c&&d.c.Xa()},!0;case "save":if(da()){c.parentNode.removeChild(c);break}this.w[b]= +c;c.onclick=function(){var a=Sb(d,!0);if(a){var b=!!(d.b&&!d.A||d.N),c=cc(d,b);b?dc(d,a,c):d.K("Resume disabled, machine state not saved")}};return!0}return!1}; +function Sb(a,b){var c=a.f;c||(c=ma("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=ec(a,c))||a.K("The user ID is invalid."))):b&&a.K("Browser local storage is not available"));return c} +function ec(a,b){a.f=null;var c=p(ea()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(na("user",c.data),a.f=c.data)}catch(f){q(f.message+" ("+d+")")}return a.f}function Ub(a){var b=null;a.f&&(b=ea()+"/api/v1/user?req=load&user="+a.f+"&state="+fc(a,"1.30.0"));return b} +function dc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=fc(a,"1.30.0");d.data=c;b=p(ea()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var f=d.indexOf("\n");0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\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(w){g=null,a=w.message}else a="unrecognized XML: "+(255/g.exec(a)){var f=d[2];b("Loading "+f+"...");p(f,null,!0,function(e,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(e=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,r=/( [a-z]+=)(['"])(.*?)\2/g;l=r.exec(e);)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 "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(d[0],h);jc(a,b,c)}})}else c(a,null)} +function kc(a,b,c,d){function f(a){if(void 0===g){var b=h&&C(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=ga(a))}function e(a){f("Error: "+a);k&&(--gc||ua(!0));k=!1}var h,g,k=!0;gc++;Ca[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var r=document.head||document.getElementsByTagName("head")[0],w=document.createElement("style");w.type="text/css";w.styleSheet?w.styleSheet.cssText=l:w.appendChild(document.createTextNode(l));r.appendChild(w)}c|| +(c="/versions/pdp11/1.30.0/components.xsl");l=function(d,g){g?hc(c,null,null,!1,f,function(d,k){if(k)if(Da(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--gc||ua(!0)):e("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),--gc||ua(!0)):e("invalid machine element: "+ +a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser");else e(d)}):e(d)};"<"!=b.charAt(0)?hc(b,a,d,!0,f,l):ic(b,null,a,d,!1,f,l)}else e("missing machine element: "+a)}catch(K){e(K.message)}return k}window.embedPDP11=function(a,b,c,d){ua(!1);return kc(a,b,c,d)};window.enableEvents=ua;window.sendEvent=va;})();