diff --git a/modules/pdp11/lib/bus.js b/modules/pdp11/lib/bus.js index 171b7049f..b07eb489b 100644 --- a/modules/pdp11/lib/bus.js +++ b/modules/pdp11/lib/bus.js @@ -108,9 +108,9 @@ function BusPDP11(parmsBus, cpu, dbg) * entry contains an array: * * [0]: readByte(addr) - * [1]: writeByte() - * [2]: readShort() - * [3]: writeShort() + * [1]: writeByte(b, addr) + * [2]: readShort(addr) + * [3]: writeShort(w, addr) * * Each of these 4-element arrays are similar to the memory access arrays assigned to entire Memory * blocks, but these handlers generally target a specific address (or handful of addresses), while @@ -129,6 +129,9 @@ function BusPDP11(parmsBus, cpu, dbg) this.aIONotify = []; this.fIOBreakAll = false; + this.fnReset = null; + this.fnAccess = this.access; + /* * Allocate empty Memory blocks to span the entire physical address space. */ @@ -144,6 +147,7 @@ BusPDP11.IOPAGE_18BIT = 0x3E000; /*000760000*/ // eg, PDP-11/45 BusPDP11.IOPAGE_UNIBUS = 0x3C0000; /*017000000*/ BusPDP11.IOPAGE_22BIT = 0x3FE000; /*017760000*/ // eg, PDP-11/70 BusPDP11.IOPAGE_LENGTH = 0x2000; // ie, 8Kb +BusPDP11.IOPAGE_MASK = BusPDP11.IOPAGE_LENGTH - 1; BusPDP11.MAX_MEMORY = BusPDP11.IOPAGE_UNIBUS - 16384; // Maximum memory address (need less memory for BSD 2.9 boot) BusPDP11.MAX_ADDRESS = 0x400000; /*020000000*/ // Register addresses are above 22 bit addressing @@ -155,6 +159,21 @@ BusPDP11.ERROR = { REMOVE_INVALID: 5 }; +/* + * These are our custom controller functions for all IOPAGE accesses. + * + * Note that we try to have reasonable fall-backs for byte reads when only short read handlers exist, + * and short reads if only byte handlers exist. Ditto for writes. These fall-backs may not always be + * appropriate; for example, when a byte write falls back to a short write, the address must be read + * first, and depending on the underlying I/O device, that may or may not have side-effects. It's really + * up to the device to know whether that matters, and provide all the necessary handlers if it does. + * + * TODO: Another small potential improvement would be for addIOHandlers() to predefine fall-backs for all + * missing handlers, so there's never a need to check each entry (eg, afn[0], afn[1], etc) before calling + * it. However, since there's no avoiding checking afn itself (unless we FULLY populate the aIONotify + * array), and since these I/O accesses should be pretty infrequent relative to all other memory accesses, + * the benefit seems pretty minimal. + */ BusPDP11.controller = { /** @@ -168,7 +187,23 @@ BusPDP11.controller = { readIOPageByte: function(off, addr) { var afn = this.controller.aIONotify[off]; - return afn && afn[0]? afn[0](addr) : 0; + if (afn) { + if (afn[0]) { + return afn[0](addr); + } else if (afn[2]) { + if (!(addr & 0x1)) { + return afn[2](addr) & 0xff; + } else { + return afn[2](addr & ~0x1) >> 8; + } + } + } else if (addr & 0x1) { + afn = this.controller.aIONotify[off & ~0x1]; + if (afn[2]) { + return afn[2](addr & ~0x1) >> 8; + } + } + return this.controller.fnAccess(addr, -1, 1); }, /** @@ -181,10 +216,31 @@ BusPDP11.controller = { */ writeIOPageByte: function(off, b, addr) { + var w; var afn = this.controller.aIONotify[off]; - if (afn && afn[1]) { - afn[1](b, addr); + if (afn) { + if (afn[1]) { + afn[1](b, addr); + return; + } else if (afn[3]) { + w = afn[2]? afn[2](addr) : 0; + if (!(addr & 0x1)) { + afn[3]((w & ~0xff) | b, addr) + } else { + afn[3]((w & 0xff) | (b << 8), addr & ~0x1); + } + return; + } + } else if (addr & 0x1) { + afn = this.controller.aIONotify[off & ~0x1]; + if (afn[3]) { + addr &= ~0x1; + w = afn[2]? afn[2](addr) : 0; + afn[3]((w & 0xff) | (b << 8), addr); + return; + } } + this.controller.fnAccess(addr, b, 1); }, /** @@ -206,7 +262,7 @@ BusPDP11.controller = { return afn[0](addr) | (afn[0](addr + 1) << 8); } } - return 0; + return this.controller.fnAccess(addr, -1, 0); }, /** @@ -224,11 +280,14 @@ BusPDP11.controller = { if (afn) { if (afn[3]) { afn[3](w, addr); + return; } else if (afn[1]) { afn[1](w & 0xff, addr); afn[1](w >> 8, addr + 1); + return; } } + this.controller.fnAccess(addr, w, 0); } }; @@ -290,6 +349,20 @@ BusPDP11.prototype.getControllerAccess = function() */ BusPDP11.prototype.reset = function() { + if (this.fnReset) this.fnReset(); +}; + +/** + * access() + * + * @this {BusPDP11} + * @param {number} addr + * @param {number} data + * @param {number} byteFlag + */ +BusPDP11.prototype.access = function(addr, data, byteFlag) +{ + return 0; }; /** @@ -872,7 +945,7 @@ BusPDP11.prototype.restoreMemory = function(a) * * Add I/O notification handlers to the master list (aIONotify). The start and end addresses are typically * relative to the starting IOPAGE address, but they can also be absolute; we simply mask all addresses with - * (IOPAGE_LENGTH - 1). + * IOPAGE_MASK. * * @this {BusPDP11} * @param {number} start address @@ -885,11 +958,7 @@ BusPDP11.prototype.restoreMemory = function(a) BusPDP11.prototype.addIOHandlers = function(start, end, fnReadByte, fnWriteByte, fnReadShort, fnWriteShort) { for (var addr = start; addr <= end; addr += 2) { - var off = addr & (BusPDP11.IOPAGE_LENGTH - 1); - if (off < 0 || off >= BusPDP11.IOPAGE_LENGTH) { - Component.warning("I/O address out of bounds: " + str.toHexLong(this.addrIOPage + off)); - break; - } + var off = addr & BusPDP11.IOPAGE_MASK; if (this.aIONotify[off] !== undefined) { Component.warning("I/O address already registered: " + str.toHexLong(this.addrIOPage + off)); continue; @@ -921,37 +990,18 @@ BusPDP11.prototype.addIOTable = function(component, table) }; /** - * reset_iopage() + * addIODefaultHandlers(fnReset, fnAccess) * - * TODO: Implement + * Add default I/O notification handlers. * * @this {BusPDP11} + * @param {function()} fnReset + * @param {function(number,number,number)} fnAccess */ -BusPDP11.prototype.reset_iopage = function() +BusPDP11.prototype.addIODefaultHandlers = function(fnReset, fnAccess) { - // display.misc = (display.misc & ~0x77) | 0x14; // kernel 16 bit - // tty.rcsr = 0; - // tty.xcsr = 0x80; /*0200*/ - // kw11.csr = 0; - // rk11.rkcs = 0x80; /*0200*/ - // rl11.csr = 0x80; - // rp11_init(); -}; - -/** - * access_iopage(physicalAddress, data, byteFlag) - * - * TODO: Implement - * - * @this {BusPDP11} - * @param {number} physicalAddress - * @param {number} data - * @param {number} byteFlag - * @return {number} - */ -BusPDP11.prototype.access_iopage = function(physicalAddress, data, byteFlag) -{ - return -1; + this.fnReset = fnReset; + this.fnAccess = fnAccess; }; /** diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index 0e7cb0f0f..9b939a53e 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -116,7 +116,7 @@ CPUStatePDP11.prototype.reset = function() if (this.flags.running) this.stopCPU(); this.resetRegs(); this.resetCycles(); - this.clearError(); // clear any fatal error/exception that setError() may have flagged + this.clearError(); // clear any fatal error/exception that setError() may have flagged this.parent.reset.call(this); }; @@ -544,7 +544,7 @@ CPUStatePDP11.prototype.requestHALT = function() * @param {number} delay * @param {number} priority * @param {number} vector - * @param {function()} callback + * @param {function()} [callback] */ CPUStatePDP11.prototype.interrupt = function(delay, priority, vector, callback) { @@ -887,13 +887,13 @@ CPUStatePDP11.prototype.readWordByAddr = function(physicalAddress) if (physicalAddress >= PDP11.MAX_ADDRESS) { return this.regsGen[physicalAddress - PDP11.MAX_ADDRESS]; } else { - if (physicalAddress >= PDP11.IOBASE_UNIBUS) { - return this.bus.access_iopage(physicalAddress, -1, 0); - } else { + // if (physicalAddress >= PDP11.IOBASE_UNIBUS) { + // return this.bus.access_iopage(physicalAddress, -1, 0); + // } else { if (physicalAddress >= 0) { return this.bus.getShort(physicalAddress); } - } + // } } return physicalAddress; }; @@ -937,13 +937,13 @@ CPUStatePDP11.prototype.readByteByAddr = function(physicalAddress) if (physicalAddress >= PDP11.MAX_ADDRESS) { return (this.regsGen[physicalAddress - PDP11.MAX_ADDRESS] & 0xff); } else { - if (physicalAddress >= PDP11.IOBASE_UNIBUS) { - return this.bus.access_iopage(physicalAddress, -1, 1); - } else { + // if (physicalAddress >= PDP11.IOBASE_UNIBUS) { + // return this.bus.access_iopage(physicalAddress, -1, 1); + // } else { if (physicalAddress >= 0) { return this.bus.getByte(physicalAddress); } - } + // } } return physicalAddress; }; @@ -962,14 +962,14 @@ CPUStatePDP11.prototype.writeByteByAddr = function(physicalAddress, data) if (physicalAddress >= PDP11.MAX_ADDRESS) { return (this.regsGen[physicalAddress - PDP11.MAX_ADDRESS] = (this.regsGen[physicalAddress - PDP11.MAX_ADDRESS] & 0xff00) | data); } else { - if (physicalAddress >= PDP11.IOBASE_UNIBUS) { - return this.bus.access_iopage(physicalAddress, data, 1); - } else { + // if (physicalAddress >= PDP11.IOBASE_UNIBUS) { + // return this.bus.access_iopage(physicalAddress, data, 1); + // } else { if (physicalAddress >= 0) { this.bus.setByte(physicalAddress, data); return data; } - } + // } } return physicalAddress; }; @@ -2333,7 +2333,7 @@ CPUStatePDP11.prototype.stepCPU = function(nMinCycles) //LOG_INSTRUCTION(instruction, 0, "RESET"); if (!(this.PSW & 0xc000)) { this.resetRegs(); - this.bus.reset_iopage(); + this.bus.reset(); // display.data = this.regsGen[0]; // TODO: Review } break; diff --git a/modules/pdp11/lib/device.js b/modules/pdp11/lib/device.js index 851a76be7..6bb6ec75b 100644 --- a/modules/pdp11/lib/device.js +++ b/modules/pdp11/lib/device.js @@ -1,5 +1,5 @@ /** - * @fileoverview Implements the PDP11 device support. + * @fileoverview Implements PDP11 device support. * @author Jeff Parsons * @version 1.0 * Created 2016-Sep-20 @@ -37,7 +37,7 @@ if (NODE) { var web = require("../../shared/lib/weblib"); var Component = require("../../shared/lib/component"); var State = require("../../shared/lib/state"); - var BusPDP11 = require("./memory"); + var BusPDP11 = require("./bus"); } /** @@ -47,6 +47,10 @@ if (NODE) { * * name: the name of the device to be supported (eg, "unibus" for generic UNIBUS support) * + * TODO: This is currently a "catch-all" device; ideally, each of the assorted devices emulated here + * (eg, KW11, RK11, RL11, etc) would be a separate component. But because we're in the middle of porting + * all this code from a common module (iopage.js), that's the way it is. + * * @constructor * @extends Component * @param {Object} parmsDevice @@ -55,6 +59,82 @@ function DevicePDP11(parmsDevice) { Component.call(this, "Device", parmsDevice, DevicePDP11); this.sDeviceName = parmsDevice['name']; + + this.tty = { + rbuf: [], + rcsr: 0, + xcsr: 0x80, /*0200*/ + delCode: 127, + del: 0 + }; + + this.display = { + data: 0, + address: 0, + misc: 0x14, + switches: 0 + }; + + this.kw11 = { + init: 0, + csr: 0 + }; + + this.rk11 = { + rkds: 0x9C0, /*04700*/ // 017777400 Drive Status + rker: 0, // 017777402 Error Register + rkcs: 0x80, /*0200*/ // 017777404 Control Status + rkwc: 0, // 017777406 Word Count + rkba: 0, // 017777410 Bus Address + rkda: 0, // 017777412 Disk Address + rkdb: 0, // 017777416 Data Buffer + meta: [], + TRACKS: [406, 406, 406, 406], + SECTORS: [12, 12, 12, 12] + }; + + this.rl11 = { + csr: 0x81, // 017774400 Control status register + bar: 0, // 017774402 Bus address + dar: 0, // 017774404 Disk address + mpr: 0, // 017774406 Multi purpose + bae: 0, // 017774410 Bus address extension + DAR: 0, // internal disk address + meta: [], // sector cache + SECTORS: [40, 40, 40, 40], // sectors per track + TRACKS: [1024, 1024, 512, 512], // First two drives RL02 - last two RL01 - cylinders * 2 + STATUS: [0x9D /*0235*/, 0x9D /*0235*/, 0x1D /*035*/, 0x1D /*035*/] // First two drives RL02 - last two RL01 + }; + + this.rp11 = { + DTYPE: [0x2012 /*020022*/, 0x2010 /*020020*/, 0x2012 /*020022*/, 0x2022 /*020042*/], // Drive type rp04, rp06, rp07 + SECTORS: [22, 22, 22, 50], // sectors per track + SURFACES: [19, 19, 19, 32], // + CYLINDERS: [815, 411, 815, 630], + meta: [], //meta data for drive + rpcs1: 0x880, // Massbus 00 - actual register is a mix of controller and drive bits :-( + rpwc: 0, + rpba: 0, + rpda: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 05 + rpcs2: 0, + rpds: [0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0], // Massbus 01 Read only + rper1: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 02 + rpas: 0, // Massbus 04??? + rpla: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 07 Read only + rpdb: 0, + rpmr: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 03 + rpdt: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 06 Read only + rpsn: [1, 2, 3, 4, 5, 6, 7, 8], // Massbus 10 Read only + rpof: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 11 + rpdc: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 12 + rpcc: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 13 Read only + rper2: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 14 + rper3: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 15 + rpec1: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 16 Read only + rpec2: [0, 0, 0, 0, 0, 0, 0, 0], // Massbus 17 Read only + rpbae: 0, + rpcs3: 0 + }; } Component.subclass(DevicePDP11); @@ -62,6 +142,41 @@ Component.subclass(DevicePDP11); DevicePDP11.UNIBUS_NAME = "unibus"; DevicePDP11.ADDR_PSW = 0x3FFFFE; /*017777776*/ // PSW +DevicePDP11.M9312 = [ + 0x101F, /*0010037*/ 0x1C0, /*0000700*/ 0x105F, /*0010137*/ 0x1C2, /*0000702*/ 0x111F, /*0010437*/ 0x1C4, /*0000704*/ 0xA1F, /*0005037*/ 0x1C6, /*0000706*/ + 0x55DF, /*0052737*/ 0x8000, /*0100000*/ 0xFFFE, /*0177776*/ 0x35DF, /*0032737*/ 0x4000, /*0040000*/ 0xFFFE, /*0177776*/ 0x302, /*0001402*/ 0xA9F, /*0005237*/ + 0x1C6, /*0000706*/ 0xA1F, /*0005037*/ 0xFFFE, /*0177776*/ 0x101, /*0000401*/ 0x0, /*0000000*/ 0xA06, /*0005006*/ 0x8104, /*0100404*/ 0x8503, /*0102403*/ + 0x8202, /*0101002*/ 0x501, /*0002401*/ 0x8301, /*0101401*/ 0x0, /*0000000*/ 0xAC6, /*0005306*/ 0x8003, /*0100003*/ 0x302, /*0001402*/ 0x401, /*0002001*/ + 0x701, /*0003401*/ 0x0, /*0000000*/ 0xC06, /*0006006*/ 0x8402, /*0102002*/ 0x8601, /*0103001*/ 0x201, /*0001001*/ 0x0, /*0000000*/ 0x15C6, /*0012706*/ + 0xAAAA, /*0125252*/ 0x1180, /*0010600*/ 0x1001, /*0010001*/ 0x1042, /*0010102*/ 0x1083, /*0010203*/ 0x10C4, /*0010304*/ 0x1105, /*0010405*/ 0xE141, /*0160501*/ + 0x501, /*0002401*/ 0x301, /*0001401*/ 0x0, /*0000000*/ 0xC42, /*0006102*/ 0x8601, /*0103001*/ 0x501, /*0002401*/ 0x0, /*0000000*/ 0x6083, /*0060203*/ + 0xA83, /*0005203*/ 0xA43, /*0005103*/ 0x60C1, /*0060301*/ 0x8701, /*0103401*/ 0x701, /*0003401*/ 0x0, /*0000000*/ 0xC04, /*0006004*/ 0x5103, /*0050403*/ + 0x6143, /*0060503*/ 0xA83, /*0005203*/ 0x8702, /*0103402*/ 0xAC1, /*0005301*/ 0x501, /*0002401*/ 0x0, /*0000000*/ 0xA40, /*0005100*/ 0x8301, /*0101401*/ + 0x0, /*0000000*/ 0x4001, /*0040001*/ 0x6041, /*0060101*/ 0x601, /*0003001*/ 0x701, /*0003401*/ 0x0, /*0000000*/ 0xC1, /*0000301*/ 0x2057, /*0020127*/ + 0x5455, /*0052125*/ 0x204, /*0001004*/ 0x3105, /*0030405*/ 0x602, /*0003002*/ 0xA45, /*0005105*/ 0x201, /*0001001*/ 0x0, /*0000000*/ 0x95C0, /*0112700*/ + 0xFF01, /*0177401*/ 0x8001, /*0100001*/ 0x0, /*0000000*/ 0x7E02, /*0077002*/ 0xA01, /*0005001*/ 0xA81, /*0005201*/ 0x7E02, /*0077002*/ 0xBC0, /*0005700*/ + 0x202, /*0001002*/ 0xBC1, /*0005701*/ 0x301, /*0001401*/ 0x0, /*0000000*/ 0x15C6, /*0012706*/ 0x1FE, /*0000776*/ 0x9F7, /*0004767*/ 0x2, /*0000002*/ + 0x0, /*0000000*/ 0x25CE, /*0022716*/ 0xD0, /*0000320*/ 0x301, /*0001401*/ 0x0, /*0000000*/ 0x15CE, /*0012716*/ 0xE2, /*0000342*/ 0x87, /*0000207*/ + 0x0, /*0000000*/ 0xA26, /*0005046*/ 0x15E6, /*0012746*/ 0xEC, /*0000354*/ 0x2, /*0000002*/ 0x0, /*0000000*/ 0x5F, /*0000137*/ 0xF2, /*0000362*/ + 0x80, /*0000200*/ 0x15C5, /*0012705*/ 0xE000, /*0160000*/ 0xA1F, /*0005037*/ 0x6, /*0000006*/ 0x15DF, /*0012737*/ 0x100, /*0000400*/ 0x4, /*0000004*/ + 0x15C6, /*0012706*/ 0x1FE, /*0000776*/ 0xBE5, /*0005745*/ 0x15DF, /*0012737*/ 0x1CC, /*0000714*/ 0x4C, /*0000114*/ 0xA1F, /*0005037*/ 0x4E, /*0000116*/ + 0x15C3, /*0012703*/ 0xFFE6, /*0177746*/ 0x15CB, /*0012713*/ 0xC, /*0000014*/ 0x15C2, /*0012702*/ 0x200, /*0001000*/ 0x1080, /*0010200*/ 0x1008, /*0010010*/ + 0xBD0, /*0005720*/ 0x2005, /*0020005*/ 0x83FC, /*0101774*/ 0x1080, /*0010200*/ 0x1201, /*0011001*/ 0x2001, /*0020001*/ 0x301, /*0001401*/ 0x0, /*0000000*/ + 0xA50, /*0005120*/ 0x2005, /*0020005*/ 0x83F9, /*0101771*/ 0x1801, /*0014001*/ 0xA41, /*0005101*/ 0x2001, /*0020001*/ 0x301, /*0001401*/ 0x0, /*0000000*/ + 0x2002, /*0020002*/ 0x2F9, /*0001371*/ 0xA0E, /*0005016*/ 0x15C4, /*0012704*/ 0xAAAA, /*0125252*/ 0x15CB, /*0012713*/ 0x18, /*0000030*/ 0x15C0, /*0012700*/ + 0x800, /*0004000*/ 0x15C2, /*0012702*/ 0x200, /*0001000*/ 0xA44, /*0005104*/ 0x1108, /*0010410*/ 0xA48, /*0005110*/ 0xA48, /*0005110*/ 0x2204, /*0021004*/ + 0x301, /*0001401*/ 0x0, /*0000000*/ 0xC1F, /*0006037*/ 0xFFEA, /*0177752*/ 0x8702, /*0103402*/ 0x0, /*0000000*/ 0x131, /*0000461*/ 0x8A4E, /*0105116*/ + 0x2F2, /*0001362*/ 0x102, /*0000402*/ 0x77, /*0000167*/ 0xFE88, /*0177210*/ 0xBD0, /*0005720*/ 0x7E93, /*0077223*/ 0x15CB, /*0012713*/ 0x24, /*0000044*/ + 0x15C0, /*0012700*/ 0xC00, /*0006000*/ 0x8A76, /*0105166*/ 0x1, /*0000001*/ 0x2E4, /*0001344*/ 0x15C2, /*0012702*/ 0x200, /*0001000*/ 0x1080, /*0010200*/ + 0x1008, /*0010010*/ 0xBD0, /*0005720*/ 0x2005, /*0020005*/ 0x83FC, /*0101774*/ 0x15C1, /*0012701*/ 0x3, /*0000003*/ 0xA0E, /*0005016*/ 0xBDF, /*0005737*/ + 0x1C6, /*0000706*/ 0x210, /*0001020*/ 0x15CE, /*0012716*/ 0x18, /*0000030*/ 0x1080, /*0010200*/ 0xA48, /*0005110*/ 0xA48, /*0005110*/ 0x2008, /*0020010*/ + 0x301, /*0001401*/ 0x0, /*0000000*/ 0xBD0, /*0005720*/ 0xC1F, /*0006037*/ 0xFFEA, /*0177752*/ 0x8702, /*0103402*/ 0x0, /*0000000*/ 0x108, /*0000410*/ + 0x2005, /*0020005*/ 0x83F3, /*0101763*/ 0x138B, /*0011613*/ 0xA0E, /*0005016*/ 0x7E51, /*0077121*/ 0x104, /*0000404*/ 0x0, /*0000000*/ 0x102, /*0000402*/ + 0x15CB, /*0012713*/ 0xC, /*0000014*/ 0x17C0, /*0013700*/ 0x1C0, /*0000700*/ 0x17C1, /*0013701*/ 0x1C2, /*0000702*/ 0x17C4, /*0013704*/ 0x1C4, /*0000704*/ + 0x74, /*0000164*/ 0x2, /*0000002*/ 0x17C4, /*0013704*/ 0xFF78, /*0177570*/ 0x45C4, /*0042704*/ 0xFE00, /*0177000*/ 0x55C4, /*0052704*/ 0xF600, /*0173000*/ + 0x97C0, /*0113700*/ 0xFF79, /*0177571*/ 0xC80, /*0006200*/ 0xA1, /*0000241*/ 0x4C, /*0000114*/ 0x0, /*0000000*/ 0x4230, /*0041060*/ 0x2A2D /*0025055*/ +]; + /** * initBus(cmp, bus, cpu, dbg) * @@ -80,6 +195,7 @@ DevicePDP11.prototype.initBus = function(cmp, bus, cpu, dbg) case DevicePDP11.UNIBUS_NAME: default: bus.addIOTable(this, DevicePDP11.UNIBUS_TABLE); + bus.addIODefaultHandlers(this.reset.bind(this), this.access.bind(this)); break; } this.setReady(); @@ -106,9 +222,1209 @@ DevicePDP11.prototype.readPSW = function(addr) */ DevicePDP11.prototype.writePSW = function(data, addr) { + /* + * TODO: Review the next line, which mimics access(), and determine if writePSW() can do this itself. + */ + data = (data & 0xf8ef) | (this.cpu.readPSW() & 0x0710); this.cpu.writePSW(data); }; +/** + * rk11_go() + * + * @this {DevicePDP11} + */ +DevicePDP11.prototype.rk11_go = function() +{ + var rk11 = this.rk11; + var sector, address, count; + var drive = (rk11.rkda >> 13) & 7; + if (typeof rk11.meta[drive] === "undefined") { + rk11.meta[drive] = { + "cache": [], + "postProcess": this.rk11_end, + "drive": drive, + "blocksize": 256, + "mapped": 0, + "maxblock": rk11.TRACKS[drive] * rk11.SECTORS[drive], + "url": "rk" + drive + ".dsk" + }; + } + rk11.rkcs &= ~0x80; // turn off done bit + switch ((rk11.rkcs >> 1) & 7) { // function code + case 0: // controller reset + rk11.rkds = 0x9C0; /*04700*/ // Set bits 6, 7, 8, 11 + rk11.rker = 0; // + rk11.rkcs = 0x80; /*0200*/ + rk11.rkda = 0; + break; + case 1: // write + if (((rk11.rkda >> 4) & 0x1ff) >= rk11.TRACKS[drive]) { + rk11.rker |= 0x8040; // NXC + rk11.rkcs |= 0xc000; // err + break; + } + if ((rk11.rkda & 0xf) >= rk11.SECTORS[drive]) { + rk11.rker |= 0x8020; // NXS + rk11.rkcs |= 0xc000; // err + break; + } + sector = (((rk11.rkda >> 4) & 0x1ff) * rk11.SECTORS[drive] + (rk11.rkda & 0xf)); + address = (((rk11.rkcs & 0x30)) << 12) | rk11.rkba; + count = (0x10000 - rk11.rkwc) & 0xffff; + this.writeData(rk11.meta[drive], sector, address, count); + return; + case 2: // read + if (((rk11.rkda >> 4) & 0x1ff) >= rk11.TRACKS[drive]) { + rk11.rker |= 0x8040; // NXC + rk11.rkcs |= 0xc000; // err + break; + } + if ((rk11.rkda & 0xf) >= rk11.SECTORS[drive]) { + rk11.rker |= 0x8020; // NXS + rk11.rkcs |= 0xc000; // err + break; + } + sector = (((rk11.rkda >> 4) & 0x1ff) * rk11.SECTORS[drive] + (rk11.rkda & 0xf)); + address = (((rk11.rkcs & 0x30)) << 12) | rk11.rkba; + count = (0x10000 - rk11.rkwc) & 0xffff; + this.readData(rk11.meta[drive], sector, address, count); + return; + case 3: // Write Check + break; + case 4: // Seek - complete immediately + break; + default: + break; + } + rk11.rkds = (drive << 13) | (rk11.rkds & 0x1ff0) | ((rk11.rkda % 9) & 0xf); + this.cpu.interrupt(20, 5 << 5, 0x90, /*0220*/ function() { + rk11.rkcs = (rk11.rkcs & 0xfffe) | 0x80; // turn off go & set done + return !!(rk11.rkcs & 0x40); + }); +}; + +/** + * rk11_end(err, meta, block, address, count) + * + * @this {DevicePDP11} + * @param {number} err + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.rk11_end = function(err, meta, block, address, count) +{ + var rk11 = this.rk11; + rk11.rkba = address & 0xffff; + rk11.rkcs = (rk11.rkcs & ~0x30) | ((address >> 12) & 0x30); + rk11.rkwc = (0x10000 - count) & 0xffff; + switch (err) { + case 1: // read error + rk11.rker |= 0x8100; // Report TE (Timing error) + rk11.rkcs |= 0xc000; // err + break; + case 2: // NXM + rk11.rker |= 0x8400; // NXM + rk11.rkcs |= 0xc000; // err + break; + } + this.cpu.interrupt(20, 5 << 5, 0x90, /*0220*/ function() { + rk11.rkcs = (rk11.rkcs & 0xfffe) | 0x80; // turn off go & set done + return !!(rk11.rkcs & 0x40); + }); +}; + +/** + * rl11_go() + * + * @this {DevicePDP11} + */ +DevicePDP11.prototype.rl11_go = function() +{ + var rl11 = this.rl11; + var sector, address, count; + var drive = (rl11.csr >> 8) & 3; + rl11.csr &= ~0x1; // ready bit (0!) + if (typeof rl11.meta[drive] === "undefined") { + rl11.meta[drive] = { + "cache": [], + "postProcess": this.rl11_end, + "drive": drive, + "blocksize": 128, + "mapped": 1, + "maxblock": rl11.TRACKS[drive] * rl11.SECTORS[drive], + "url": "rl" + drive + ".dsk" + }; + } + switch ((rl11.csr >> 1) & 7) { // function code + case 0: // no op + break; + case 1: // write check + break; + case 2: // get status + if (rl11.mpr & 8) rl11.csr &= 0x3f; + rl11.mpr = rl11.STATUS[drive] | (rl11.DAR & 0x40) /*0100*/; // bit 6 Head Select bit 7 Drive Type 1=rl02 + break; + case 3: // seek + if ((rl11.dar & 3) == 1) { + if (rl11.dar & 4) { + rl11.DAR = ((rl11.DAR + (rl11.dar & 0xff80)) & 0xff80) | ((rl11.dar << 2) & 0x40); + } else { + rl11.DAR = ((rl11.DAR - (rl11.dar & 0xff80)) & 0xff80) | ((rl11.dar << 2) & 0x40); + } + rl11.dar = rl11.DAR; + } + break; + case 4: // read header + rl11.mpr = rl11.DAR; + break; + case 5: // write + if ((rl11.dar >> 6) >= rl11.TRACKS[drive]) { + rl11.csr |= 0x9400; // HNF + break; + } + if ((rl11.dar & 0x3f) >= rl11.SECTORS[drive]) { + rl11.csr |= 0x9400; // HNF + break; + } + sector = ((rl11.dar >> 6) * rl11.SECTORS[drive]) + (rl11.dar & 0x3f); + address = (((rl11.bae & 0x3f)) << 16) | rl11.bar; // 22 bit mode + count = (0x10000 - rl11.mpr) & 0xffff; + this.writeData(rl11.meta[drive], sector, address, count); + return; + case 6: // read + if ((rl11.dar >> 6) >= rl11.TRACKS[drive]) { + rl11.csr |= 0x9400; // HNF + break; + } + if ((rl11.dar & 0x3f) >= rl11.SECTORS[drive]) { + rl11.csr |= 0x9400; // HNF + break; + } + sector = ((rl11.dar >> 6) * rl11.SECTORS[drive]) + (rl11.dar & 0x3f); + address = (((rl11.bae & 0x3f)) << 16) | rl11.bar; // 22 bit mode + count = (0x10000 - rl11.mpr) & 0xffff; + this.readData(rl11.meta[drive], sector, address, count); + return; + case 7: // Read data without header check + break; + } + this.cpu.interrupt(20, 5 << 5, 0x70, /*0160*/ function() { + rl11.csr |= 0x81; // turn off go & set ready + return !!(rl11.csr & 0x40); + }); +}; + +/** + * rl11_end(err, meta, block, address, count) + * + * @this {DevicePDP11} + * @param {number} err + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.rl11_end = function(err, meta, block, address, count) +{ + var rl11 = this.rl11; + var sector = block; + rl11.bar = address & 0xffff; + rl11.csr = (rl11.csr & ~0x30) | ((address >> 12) & 0x30); + rl11.bae = (address >> 16) & 0x3f; // 22 bit mode + rl11.dar = ((~~(sector / rl11.SECTORS[meta.drive])) << 6) | (sector % rl11.SECTORS[meta.drive]); + rl11.DAR = rl11.dar; + rl11.mpr = (0x10000 - count) & 0xffff; + switch (err) { + case 1: // read error + rl11.csr |= 0x8400; // Report operation incomplete + break; + case 2: // NXM + rl11.csr |= 0xa000; // NXM + break; + } + this.cpu.interrupt(20, 5 << 5, 0x70, /*0160*/ function() { + rl11.csr |= 0x81; // turn off go & set ready + return !!(rl11.csr & 0x40); + }); +}; + +/** + * rp11_init() + * + * @this {DevicePDP11} + */ +DevicePDP11.prototype.rp11_init = function() +{ + var rp11 = this.rp11; + rp11.rpcs1 = 0x880; + rp11.rpcs2 = 0; + rp11.rpds = [0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c0]; + rp11.rper1 = [0, 0, 0, 0, 0, 0, 0, 0]; + rp11.rpas = rp11.rpwc = rp11.rpba = rp11.rpbae = rp11.rpcs3 = 0; +}; + +/** + * rp11_init() + * + * @this {DevicePDP11} + * @param {number} drive + * @param {number} flags + */ +DevicePDP11.prototype.rp11_attention = function(drive, flags) +{ + var rp11= this.rp11; + rp11.rpas |= 1 << drive; + rp11.rpds[drive] |= 0x8080; + if (flags) { + rp11.rper1[drive] |= flags; + rp11.rpds[drive] |= 0x4000; + } +}; + +//optional increment :-( +// cs1 is half in drive and half in controller :-( + +/** + * rp11_go() + * + * @this {DevicePDP11} + * @param {number} drive + */ +DevicePDP11.prototype.rp11_go = function(drive) +{ + var rp11 = this.rp11; + var sector, address, count; + rp11.rpcs1 &= ~0x4080; // Turn TRE & ready off + rp11.rpcs2 &= ~0x800; // Turn off NEM (NXM) + rp11.rpds[drive] &= ~0x480; // Turn off LST & ATA + this.cpu.interrupt(-1, 0, 0xAC) /*0254*/; //remove pending interrupt + if (typeof rp11.meta[drive] === "undefined") { + rp11.meta[drive] = { + "cache": [], + "postProcess": this.rp11_end, + "drive": drive, + "blocksize": 256, + "mapped": 0, + "maxblock": rp11.CYLINDERS[0] * rp11.SURFACES[0] * rp11.SECTORS[0], + "url": "rp" + drive + ".dsk" + }; + } + switch (rp11.rpcs1 & 0x3f) { // function code + case 0x1: /*01*/ // NULL + break; + case 0x5: /*05*/ // seek + rp11.rpcc[drive] = rp11.rpdc[drive]; + rp11.rpcs1 |= 0x8080; + rp11.rpds[drive] |= 0x8080; // ATA + rp11.rpas |= 1 << drive; + break; + case 0x9: /*011*/ // init + this.rp11_init(); + break; + case 0x13: /*023*/ // pack ack + rp11.rpds[drive] |= 0x40; // set VV + break; + case 0x31: /*061*/ // write + if (rp11.rpdc[drive] >= rp11.CYLINDERS[0] || (rp11.rpda[drive] >> 8) >= rp11.SURFACES[0] || + (rp11.rpda[drive] & 0xff) >= rp11.SECTORS[0]) { + rp11.rper1[drive] |= 0x400; // invalid sector address + rp11.rpcs1 |= 0xc000; // set SC & TRE + break; + } + sector = (rp11.rpdc[drive] * rp11.SURFACES[0] + (rp11.rpda[drive] >> 8)) * rp11.SECTORS[0] + (rp11.rpda[drive] & 0xff); + address = ((rp11.rpbae & 0x3f) << 16) | rp11.rpba; // 22 bit mode + count = (0x10000 - rp11.rpwc) & 0xffff; + this.writeData(rp11.meta[drive], sector, address, count); + return; + case 0x39: /*071*/ // read + if (rp11.rpdc[drive] >= rp11.CYLINDERS[0] || (rp11.rpda[drive] >> 8) >= rp11.SURFACES[0] || + (rp11.rpda[drive] & 0xff) >= rp11.SECTORS[0]) { + rp11.rper1[drive] |= 0x400; // invalid sector address + rp11.rpcs1 |= 0xc000; // set SC & TRE + break; + } + sector = (rp11.rpdc[drive] * rp11.SURFACES[0] + (rp11.rpda[drive] >> 8)) * rp11.SECTORS[0] + (rp11.rpda[drive] & 0xff); + address = ((rp11.rpbae & 0x3f) << 16) | rp11.rpba; // 22 bit mode + count = (0x10000 - rp11.rpwc) & 0xffff; + this.readData(rp11.meta[drive], sector, address, count); + return; + default: + break; + } + this.cpu.interrupt(3, 5 << 5, 0xAC, /*0254*/ function() { + rp11.rpcs1 = (rp11.rpcs1 & 0xfffe) | 0x80; // Turn go off and ready on + rp11.rpds[drive] |= 0x80; // ATA + return !!(rp11.rpcs1 & 0x40); + }); +}; + +/** + * rp11_end() + * + * @this {DevicePDP11} + * @param {number} err + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.rp11_end = function(err, meta, block, address, count) +{ + var rp11 = this.rp11; + var surface, sector; + rp11.rpwc = (0x10000 - count) & 0xffff; + rp11.rpba = address & 0xffff; + rp11.rpcs1 = (rp11.rpcs1 & ~0x300) | ((address >> 8) & 0x300); + rp11.rpbae = (address >> 16) & 0x3f; // 22 bit mode + sector = ~~(block / rp11.SECTORS[0]); + surface = ~~(sector / rp11.SURFACES[0]); + rp11.rpda[meta.drive] = ((sector % rp11.SURFACES[0]) << 8) | (block % rp11.SECTORS[0]); + rp11.rpcc[meta.drive] = rp11.rpdc[meta.drive] = surface; + rp11.rpas |= 1 << meta.drive; + if (block >= meta.maxblock - 1) { + rp11.rpds[meta.drive] |= 0x400; // LST + } + switch (err) { + case 1: // read error + rp11.rpcs2 |= 0x200; // MXF Missed transfer + rp11.rpcs1 |= 0xc000; // set SC & TRE + break; + case 2: // NXM + rp11.rpcs2 |= 0x800; // NEM (NXM) + rp11.rpcs1 |= 0xc000; // set SC & TRE + break; + } + this.cpu.interrupt(20, 5 << 5, 0xAC, /*0254*/ function() { + rp11.rpds[meta.drive] |= 0x80; + rp11.rpcs1 = (rp11.rpcs1 & 0xfffe) | 0x80; // Turn go off and ready on + return !!(rp11.rpcs1 & 0x40); + }); +}; + +/** + * kw11_interrupt() + * + * @this {DevicePDP11} + */ +DevicePDP11.prototype.kw11_interrupt = function() +{ + this.kw11.csr |= 0x80; + if (this.kw11.csr & 0x40) { + this.cpu.interrupt(0, 6 << 5, 0x40 /*0100*/); + } +}; + +/** + * 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 >= PDP11.IOBASE_UNIBUS && unibusAddress < PDP11.IOBASE_22BIT) this.cpu.panic(898); + } + } else { + unibusAddress |= PDP11.IOBASE_22BIT; + } + return unibusAddress; +}; + +/** + * getData(xhr, callback, meta, block, address, count) + * + * @this {DevicePDP11} + * @param {XMLHttpRequest} xhr + * @param {function(Object,number,number,number)} callback + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.getData = function(xhr, callback, meta, block, address, count) +{ + var arrayBuffer, byteArray, blockno, word, base; + arrayBuffer = /** @type {ArrayBuffer} */ (xhr.response); + if ((xhr.status != 0 && xhr.status != 206) || !arrayBuffer) { + meta.postProcess(1, meta, block, address, count); // NXD - read error? + } else { + byteArray = new Uint8Array(arrayBuffer); + blockno = block; + for (base = 0; base < byteArray.length;) { + if (typeof meta.cache[blockno] === "undefined") { + meta.cache[blockno] = []; + for (word = 0; word < meta.blocksize; word++) { + if (base < byteArray.length) { + meta.cache[blockno][word] = (byteArray[base] & 0xff) | ((byteArray[base + 1] << 8) & 0xff00); + } else { + meta.cache[blockno][word] = 0; + } + base += 2; + } + } else { + base += meta.blocksize << 1; + } + blockno++; + } + callback(meta, block, address, count); + } +}; + +/** + * getCache(callback, meta, block, address, count) + * + * @this {DevicePDP11} + * @param {function(Object,number,number,number)} callback + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.getCache = function(callback, meta, block, address, count) +{ + var device = this; + var sectors = ~~((count + meta.blocksize - 1) / meta.blocksize); + var xhr = new XMLHttpRequest(); + if (sectors < 2048 && block + 2048 < meta.maxblock) sectors = 2048; // make it a decent read + xhr.open("GET", meta.url, true); + xhr.setRequestHeader("Range", "bytes=" + ((block * meta.blocksize) << 1) + "-" + + ((((block + sectors) * meta.blocksize) << 1) - 1)); + xhr.responseType = "arraybuffer"; + xhr.onreadystatechange = function() { + if (xhr.readyState == 4 /* xhr.DONE */) { + device.getData(xhr, callback.bind(device), meta, block, address, count); + } + }; + xhr.send(null); +}; + +/** + * readData(meta, block, address, count) + * + * @this {DevicePDP11} + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.readData = function(meta, block, address, count) +{ + var word; + while (count > 0) { + if (typeof meta.cache[block] === "undefined") { + this.getCache(this.readData, 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) { + meta.postProcess(2, meta, block, address, count); // NXM + return; + } + //if (meta.increment) { + address += 2; + //} + --count; + } + block++; + } + meta.postProcess(0, meta, block, address, count); // success +}; + +/** + * writeData(meta, block, address, count) + * + * @this {DevicePDP11} + * @param {Object} meta + * @param {number} block + * @param {number} address + * @param {number} count + */ +DevicePDP11.prototype.writeData = function(meta, block, address, count) +{ + var word, data; + while (count > 0) { + if (typeof meta.cache[block] === "undefined") { + meta.cache[block] = []; + for (word = 0; word < meta.blocksize; word++) { + meta.cache[block][word] = 0; + } + } + for (word = 0; word < meta.blocksize && count > 0; word++) { + data = this.cpu.readWordByAddr((meta.mapped? this.mapUnibus(address) : address)); + if (data < 0) { + meta.postProcess(2, meta, block, address, count); // NXM + return; + } + meta.cache[block][word] = data; + //if (meta.increment) { + address += 2; + //} + --count; + } + block++; + } + meta.postProcess(0, meta, block, address, count); // success +}; + +/** + * reset() + * + * Formerly reset_iopage(). + * + * @this {DevicePDP11} + */ +DevicePDP11.prototype.reset = function() +{ + this.display.misc = (this.display.misc & ~0x77) | 0x14; // kernel 16 bit + this.tty.rcsr = 0; + this.tty.xcsr = 0x80; /*0200*/ + this.kw11.csr = 0; + this.rk11.rkcs = 0x80; /*0200*/ + this.rl11.csr = 0x80; + this.rp11_init(); +}; + +/** + * access(physicalAddress, data, byteFlag) + * + * Formerly access_iopage(). + * + * @this {DevicePDP11} + * @param {number} physicalAddress + * @param {number} data (-1 if read) + * @param {number} byteFlag (zero if word, non-zero if byte) + * @return {number} + */ +DevicePDP11.prototype.access = function(physicalAddress, data, byteFlag) +{ + var result, idx; + var cpu = this.cpu; + switch (physicalAddress & ~0x3F) /*077*/ { + case 0x3FFFC0: /*017777700*/ // 017777700 - 017777777 + switch (physicalAddress & ~1) { + case 0x3FFFFE: /*017777776*/ // PSW + Component.assert(false); // verify that this is being handled by our new registered functions now + result = cpu.readPSW(); + if (data >= 0) { + if (physicalAddress & 1) { + data = (data << 8) | (result & 0xff); + } else { + if (byteFlag) data = (result & 0xff00) | (data & 0xff); + } + data = (data & 0xf8ef) | (result & 0x0710); + cpu.writePSW(data); + return -1; // KLUDGE - no trap but abort any CC updates + } + break; + case 0x3FFFFC: /*017777774*/ // stack limit + if (data < 0) { + result = cpu.stackLimit & 0xff00; + } else { + if (physicalAddress & 1) { + data = data << 8; + } + cpu.stackLimit = data | 0xff; + result = 0; + } + //log.push("stacklimit access "+cpu.stackLimit.toString(8)); + break; + case 0x3FFFFA: /*017777772*/ // PIR + if (data < 0) { + result = cpu.pir; + } else { + if (physicalAddress & 1) { + data = data << 8; + } + result = data & 0xfe00; + if (result) { + idx = result >> 9; + do { + result += 0x22; + } while (idx >>= 1); + } + cpu.pir = result; + cpu.priorityReview = 2; + } + break; + case 0x3FFFF6: /*017777766*/ // CPU error + if (cpu.cpuType !== 70) return cpu.trap(4, 222); + if (data < 0) { + result = cpu.CPU_Error; + } else { + result = cpu.CPU_Error = 0; // Always writes as zero? + } + break; + case 0x3FFFF4: /*017777764*/ // System I/D + if (cpu.cpuType !== 70) return cpu.trap(4, 224); + result = 1; + break; + case 0x3FFFF2: /*017777762*/ // Upper size + if (cpu.cpuType !== 70) return cpu.trap(4, 226); + result = 0; + break; + case 0x3FFFF0: /*017777760*/ // Lower size + if (cpu.cpuType !== 70) return cpu.trap(4, 228); + result = (PDP11.MAX_MEMORY >> 6) - 1; + break; + case 0x3FFFF8: /*017777770*/ // Microprogram break + if (data >= 0 && !(physicalAddress & 1)) data &= 0xff; // Required for KB11-CM without MFPT instruction + /* falls through */ + case 0x3FFFEE: /*017777756*/ // + case 0x3FFFEC: /*017777754*/ // + case 0x3FFFEA: /*017777752*/ // Hit/miss + case 0x3FFFE8: /*017777750*/ // Maintenance + case 0x3FFFE6: /*017777746*/ // Cache control + case 0x3FFFE4: /*017777744*/ // Memory system error + case 0x3FFFE2: /*017777742*/ // High error address + case 0x3FFFE0: /*017777740*/ // Low error address + if (cpu.cpuType !== 70) return cpu.trap(4, 232); + idx = (physicalAddress - 0x3FFFE0) /*017777740*/ >> 1; + if (data < 0) { + result = cpu.controlReg[idx]; + } else { + result = this.insertData(cpu.controlReg[idx], physicalAddress, data, byteFlag); + if (result >= 0) { + cpu.controlReg[idx] = result; + } + } + break; + case 0x3FFFCE: /*017777716*/ // User and Super SP + if (physicalAddress & 1) { + if ((cpu.PSW >> 14) & 3 == 3) { // User Mode + if (data >= 0) cpu.regsGen[6] = data; + result = cpu.regsGen[6]; + } else { + if (data >= 0) cpu.regsAltStack[3] = data; + result = cpu.regsAltStack[3]; + } + } else { + if ((cpu.PSW >> 14) & 3 == 1) { // Super Mode + if (data >= 0) cpu.regsGen[6] = data; + result = cpu.regsGen[6]; + } else { + if (data >= 0) cpu.regsAltStack[1] = data; + result = cpu.regsAltStack[1]; + } + } + return result; + case 0x3FFFCC: /*017777714*/ + case 0x3FFFCA: /*017777712*/ + case 0x3FFFC8: /*017777710*/ // Register set 1 + idx = physicalAddress & 7; + if (cpu.PSW & 0x800) { + if (data >= 0) cpu.regsGen[idx] = data; + result = cpu.regsGen[idx]; + } else { + if (data >= 0) cpu.regsAlt[idx] = data; + result = cpu.regsAlt[idx]; + } + return result; + case 0x3FFFC6: /*017777706*/ // Kernel SP & PC + if (physicalAddress & 1) { + if (data >= 0) cpu.regsGen[7] = data; + result = cpu.regsGen[7]; + } else { + if ((cpu.PSW >> 14) & 3 == 0) { // Kernel Mode + if (data >= 0) cpu.regsGen[6] = data; + result = cpu.regsGen[6]; + } else { + if (data >= 0) cpu.regsAltStack[0] = data; + result = cpu.regsAltStack[0]; + } + } + return result; + case 0x3FFFC4: /*017777704*/ + case 0x3FFFC2: /*017777702*/ + case 0x3FFFC0: /*017777700*/ // Register set 0 + idx = physicalAddress & 7; + if (cpu.PSW & 0x800) { + if (data >= 0) cpu.regsAlt[idx] = data; + result = cpu.regsAlt[idx]; + } else { + if (data >= 0) cpu.regsGen[idx] = data; + result = cpu.regsGen[idx]; + } + return result; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 124); + } + break; + case 0x3FFF80: /*017777600*/ // 017777600 - 017777677 MMU user mode Map + idx = (physicalAddress >> 1) & 0x1F; /*037*/ + result = this.insertData(cpu.mmuMap[3][idx], physicalAddress, data, byteFlag); + if (result >= 0) { + cpu.mmuMap[3][idx] = result; + cpu.mmuMap[3][idx & 0xf] &= 0xff0f; + } + break; + case 0x3FFF40: /*017777500*/ // 017777500 - 017777577 + var tty = this.tty; + var kw11 = this.kw11; + switch (physicalAddress & ~1) { + case 0x3FFF7E: /*017777576*/ // MMR2 + result = this.insertData(cpu.MMR2, physicalAddress, data, byteFlag); + if (result >= 0) cpu.MMR2 = result; + break; + case 0x3FFF7C: /*017777574*/ // MMR1 + result = cpu.MMR1; + if (result & 0xff00) result = ((result << 8) | (result >> 8)) & 0xffff; + break; + case 0x3FFF7A: /*017777572*/ // MMR0 + cpu.MMR0 = (cpu.MMR0 & 0xf381) | (cpu.mmuLastMode << 5) | (cpu.mmuLastPage << 1); + if (data < 0) { + result = cpu.MMR0; + } else { + result = this.insertData(cpu.MMR0, physicalAddress, data, byteFlag); + if (result >= 0) { + cpu.MMR0 = result &= 0xf381; + cpu.mmuLastMode = (result >> 5) & 3; + cpu.mmuLastPage = (result >> 1) & 0xf; + if (result & 0x101) { + idx = 2; // 18 bit + if (cpu.MMR3 & 0x10) idx = 1; // 22 bit + if (result & 0x1) { + cpu.mmuEnable = PDP11.READ_MODE | PDP11.WRITE_MODE; + } else { + cpu.mmuEnable = PDP11.WRITE_MODE; + } + } else { + cpu.mmuEnable = 0; + idx = 4; // 16 bit + } + this.display.misc = (this.display.misc & ~7) | idx; + } + } + break; + case 0x3FFF78: /*017777570*/ // console display/switch; + if (data < 0) { + result = this.display.switches & 0xffff; + } else { + result = this.insertData(this.display.data, physicalAddress, data, byteFlag); + if (result >= 0) this.display.data = result; + } + break; + case 0x3FFF76: /*017777566*/ // console xbuf + if (data >= 0) { + data &= 0x7f; + if (data) { + switch (data) { + case 0: + case 0xD: /*015*/ + /* + if (document.forms.console.line.value.length > 9000) { + document.forms.console.line.value = document.forms.console.line.value.substring(document.forms.console.line.value.length - 8192); + } + */ + break; + case 0x8: /*010*/ + /* + if (!tty.del) { + document.forms.console.line.value = document.forms.console.line.value.substring(0, document.forms.console.line.value.length - 1); + } + */ + break; + default: + /* + document.forms.console.line.value += String.fromCharCode(data); + if (data == 0x0A) { + document.forms.console.line.scrollTop = document.forms.console.line.scrollHeight; + } + */ + } + tty.del = 0; + } + tty.xcsr &= ~0x80; /*0200*/ + cpu.interrupt(100, 4 << 5, 0x34, /*064*/ function() { + tty.xcsr |= 0x80; /*0200*/ + return !!(tty.xcsr & 0x40); /*0100*/ + }); + } + result = 0; + break; + case 0x3FFF74: /*017777564*/ // console xcsr + if (data < 0) { + result = tty.xcsr; + } else { + result = this.insertData(tty.xcsr, physicalAddress, data, byteFlag); + if (result >= 0) { + if ((tty.xcsr & 0xC0) /*0300*/ == 0x80 /*0200*/&& (result & 0x40) /*0100*/) { + cpu.interrupt(8, 4 << 5, 0x34, /*064*/ function() { + tty.xcsr |= 0x80; /*0200*/ + return !!(tty.xcsr & 0x40); /*0100*/ + }); + } + tty.xcsr = (tty.xcsr & 0x80) /*0200*/ | (result & ~0x80) /*0200*/; + } + } + break; + case 0x3FFF72: /*017777562*/ // console rbuf + result = 0; + if (data < 0) { + tty.rcsr &= ~0x80; /*0200*/ + if (tty.rbuf.length > 0) { + result = tty.rbuf.shift(); + if (tty.rbuf.length > 0) { + setTimeout(function() { + tty.rcsr |= 0x80; /*0200*/ + if (tty.rcsr & 0x40) /*0100*/ cpu.interrupt(40, 4 << 5, 0x30) /*060*/; + }, 50); + } + } + } + break; + case 0x3FFF70: /*017777560*/ // console rcsr + if (data < 0) { + result = tty.rcsr; + } else { + result = this.insertData(tty.rcsr, physicalAddress, data, byteFlag); + if (result >= 0) tty.rcsr = (tty.rcsr & 0x80) /*0200*/ | (result & ~0x80) /*0200*/; + } + break; + case 0x3FFF66: /*017777546*/ // kw11.csr + if (data < 0) { + result = kw11.csr; + kw11.csr &= ~0x80; /*0200*/ + } else { + result = this.insertData(kw11.csr, physicalAddress, data, byteFlag); + if (result >= 0) { + if (result & 0x40) /*0100*/ { + if (!kw11.init) { + setInterval(this.kw11_interrupt.bind(this), 25); + kw11.init = 1; + } + } + kw11.csr = result & ~0x80; /*0200*/ + } + } + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 126); + } + break; + case 0x3FFF00: /*017777400*/ // 017777400 - 017777477 + var rk11 = this.rk11; + switch (physicalAddress & ~1) { + case 0x3FFF00: /*017777400*/ // rk11.rkds + result = this.insertData(rk11.rkds, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rkds = result; + break; + case 0x3FFF02: /*017777402*/ // rk11.rker + result = this.insertData(rk11.rker, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rker = result; + break; + case 0x3FFF04: /*017777404*/ // rk11.rkcs + result = this.insertData(rk11.rkcs, physicalAddress, data, byteFlag); + if (data >= 0 && result >= 0) { + rk11.rkcs = (result & ~0x9080) | (rk11.rkcs & 0x9080); // Bits 7 and 12 - 15 are read only + if (rk11.rkcs & 1) { + this.rk11_go(); + } + } + break; + case 0x3FFF06: /*017777406*/ // rk11.rkwc + result = this.insertData(rk11.rkwc, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rkwc = result; + break; + case 0x3FFF08: /*017777410*/ // rk11.rkba + result = this.insertData(rk11.rkba, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rkba = result; + break; + case 0x3FFF0A: /*017777412*/ // rk11.rkda + result = this.insertData(rk11.rkda, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rkda = result; + break; + case 0x3FFF0C: /*017777414*/ // rk11.unused + break; + case 0x3FFF0E: /*017777416*/ // rk11.rkdb + result = this.insertData(rk11.rkdb, physicalAddress, data, byteFlag); + if (result >= 0) rk11.rkdb = result; + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 128); + } + break; + case 0x3FFDC0: /*017776700*/ // 017777600 - 017777677 rp11 controller + //if (physicalAddress != 017776700) console.log("RP11 register " + physicalAddress.toString(8) + " " + data.toString(8)); + var rp11 = this.rp11; + idx = rp11.rpcs2 & 7; + switch (physicalAddress & ~1) { + case 0x3FFDC0: /*017776700*/ // rp11.rpcs1 Control status 1 + result = this.insertData(rp11.rpcs1, physicalAddress, data, byteFlag); + if (data >= 0 && result >= 0) { + rp11.rpbae = (rp11.rpbae & 0x3c) | ((result >> 8) & 0x3); + rp11.rpcs1 = (result & 0x437f) | (rp11.rpcs1 & 0x8880) | 0x800; + if (result & 1 && (rp11.rpcs1 & 0x80)) { + this.rp11_go(idx); + } else { + if ((result & 0xc0) == 0xc0) { + cpu.interrupt(0, 5 << 5, 0xAC) /*0254*/; + } + } + } + break; + case 0x3FFDC2: /*017776702*/ // rp11.rpwc Word count + result = this.insertData(rp11.rpwc, physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpwc = result; + break; + case 0x3FFDC4: /*017776704*/ // rp11.rpba Memory address + result = this.insertData(rp11.rpba, physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpba = result & 0xfffe; // must be even + break; + case 0x3FFDC6: /*017776706*/ // rp11.rpda Disk address + result = this.insertData(rp11.rpda[idx], physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpda[idx] = result & 0x1f1f; + break; + case 0x3FFDC8: /*017776710*/ // rp11.rpcs2 Control status 2 + result = this.insertData(rp11.rpcs2, physicalAddress, data, byteFlag); + if (result >= 0) { + rp11.rpcs2 = (result & 0x3f) | (rp11.rpcs2 & 0xffc0); + if (result & 0x80) /*0200*/ this.rp11_init(); + } + break; + case 0x3FFDCA: /*017776712*/ // rp11.rpds drive status + result = rp11.rpds[idx]; + break; + case 0x3FFDCC: /*017776714*/ // rp11.rper1 Error 1 + result = rp11.rper1[idx]; + break; + case 0x3FFDCE: /*017776716*/ // rp11.rpas Attention summary + result = this.insertData(rp11.rpas, physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpas = result & 0xff; + break; + case 0x3FFDD0: /*017776720*/ // rp11.rpla Look ahead + result = rp11.rpla[idx]; + break; + case 0x3FFDD2: /*017776722*/ // rp11.rpdb Data buffer + result = this.insertData(rp11.rpdb, physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpdb = result; + break; + case 0x3FFDD4: /*017776724*/ // rp11.rpmr Maintenance + result = this.insertData(rp11.rpmr[idx], physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpmr[idx] = result & 0x3ff; + break; + case 0x3FFDD6: /*017776726*/ // rp11.rpdt drive type read only + result = 0x2012; /*020022*/ // rp11.rpdt[idx]; + break; + case 0x3FFDD8: /*017776730*/ // rp11.rpsn Serial number read only + result = rp11.rpsn[idx]; + break; + case 0x3FFDDA: /*017776732*/ // rp11.rpof Offset register + result = this.insertData(rp11.rpof[idx], physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpof[idx] = result; + break; + case 0x3FFDDC: /*017776734*/ // rp11.rpdc Desired cylinder + result = this.insertData(rp11.rpdc[idx], physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpdc[idx] = result & 0x1ff; + break; + case 0x3FFDDE: /*017776736*/ // rp11.rpcc Current cylinder read only + rp11.rpcc[idx] = rp11.rpdc[idx]; + result = rp11.rpcc[idx]; + break; + case 0x3FFDE0: /*017776740*/ // rp11.rper2 Error 2 + result = rp11.rper2[idx]; + break; + case 0x3FFDE2: /*017776742*/ // rp11.rper3 Error 3 + result = rp11.rper3[idx]; + break; + case 0x3FFDE4: /*017776744*/ // rp11.rpec1 Error correction 1 read only + result = rp11.rpec1[idx]; + break; + case 0x3FFDE6: /*017776746*/ // rp11.rpec2 Error correction 2 read only + result = rp11.rpec2[idx]; + break; + case 0x3FFDE8: /*017776750*/ // rp11.rpbae Bus address extension + result = this.insertData(rp11.rpbae, physicalAddress, data, byteFlag); + if (result >= 0) { + rp11.rpbae = result & 0x3f; + rp11.rpcs1 = (rp11.rpcs1 & ~0x300) | ((result & 0x3) << 8); + } + break; + case 0x3FFDEA: /*017776752*/ // rp11.rpcs3 Control status 3 + result = this.insertData(rp11.rpcs3, physicalAddress, data, byteFlag); + if (result >= 0) rp11.rpcs3 = result; + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 132); + } + break; + case 0x3FF900: /*017774400*/ // 017774400 - 017774477 + var rl11 = this.rl11; + switch (physicalAddress & ~1) { + case 0x3FF900: /*017774400*/ // rl11.csr + result = this.insertData(rl11.csr, physicalAddress, data, byteFlag); + if (data >= 0 && result >= 0) { + rl11.bae = (rl11.bae & 0x3c) | ((result >> 4) & 0x3); + rl11.csr = (rl11.csr & ~0x3fe) | (result & 0x3fe); + if (!(rl11.csr & 0x80)) { + this.rl11_go(); + } + } + break; + case 0x3FF902: /*017774402*/ // rl11.bar + result = this.insertData(rl11.bar, physicalAddress, data, byteFlag); + if (result >= 0) { + rl11.bar = result & 0xfffe; + } + break; + case 0x3FF904: /*017774404*/ // rl11.dar + result = this.insertData(rl11.dar, physicalAddress, data, byteFlag); + if (result >= 0) rl11.dar = result; + break; + case 0x3FF906: /*017774406*/ // rl11.mpr + result = this.insertData(rl11.mpr, physicalAddress, data, byteFlag); + if (result >= 0) rl11.mpr = result; + break; + case 0x3FF908: /*017774410*/ // rl11.bae + result = this.insertData(rl11.bae, physicalAddress, data, byteFlag); + if (result >= 0) { + rl11.bae = result & 0x3f; + rl11.csr = (rl11.csr & ~0x30) | ((rl11.bae & 0x3) << 4); + } + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 134); + } + break; + case 0x3FF540: /*017772500*/ // 017772500 - 017772577 + switch (physicalAddress & ~1) { + case 0x3FF54E: /*017772516*/ // MMR3 - UB 22 x K S U + if (data < 0) { + result = cpu.MMR3; + } else { + result = this.insertData(cpu.MMR3, physicalAddress, data, byteFlag); + if (result >= 0) { + if (cpu.cpuType !== 70) result &= ~0x30; // don't allow 11/45 to do 22 bit or use unibus map + cpu.MMR3 = result; + cpu.mmuMask[0] = (result & 4 ? 0xf : 0x7); + cpu.mmuMask[1] = (result & 2 ? 0xf : 0x7); + cpu.mmuMask[3] = (result & 1 ? 0xf : 0x7); + if (cpu.mmuEnable) { + idx = 2; // 18 bit + if (cpu.MMR3 & 0x10) idx = 1; // 22 bit + this.display.misc = (this.display.misc & ~7) | idx; + } + } + } + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 136); + } + break; + case 0x3FF4C0: /*017772300*/ // 017772300 - 017772377 MMU kernel mode Map + idx = (physicalAddress >> 1) & 0x1F; /*037*/ + result = this.insertData(cpu.mmuMap[0][idx], physicalAddress, data, byteFlag); + if (result >= 0) { + cpu.mmuMap[0][idx] = result; + cpu.mmuMap[0][idx & 0xf] &= 0xff0f; + } + break; + case 0x3FF480: /*017772200*/ // 017772200 - 017772277 MMU super mode Map + idx = (physicalAddress >> 1) & 0x1F; /*037*/ + result = this.insertData(cpu.mmuMap[1][idx], physicalAddress, data, byteFlag); + if (result >= 0) { + cpu.mmuMap[1][idx] = result; + cpu.mmuMap[1][idx & 0xf] &= 0xff0f; + } + break; + case 0x3FF0C0: /*017770300*/ // 017770300 - 017770377 Unibus Map + case 0x3FF080: /*017770200*/ // 017770200 - 017770277 Unibus Map + if (cpu.cpuType !== 70) return cpu.trap(4, 234); + idx = (physicalAddress >> 2) & 0x1f; + result = cpu.unibusMap[idx]; + if (physicalAddress & 0x2) /*02*/ result = result >> 16; + result &= 0xffff; + if (data >= 0) { + result = this.insertData(result, physicalAddress, data, byteFlag); + if (result >= 0) { + if (physicalAddress & 0x2) /*02*/ { + cpu.unibusMap[idx] = (result << 16) | (cpu.unibusMap[idx] & 0xffff); + } else { + cpu.unibusMap[idx] = (cpu.unibusMap[idx] & 0xffff0000) | (result & 0xfffe); + } + } + } + break; + case 0x3FEA00: /*017765000*/ // 017765000 - 017765777 Bootstrap diagnostic + case 0x3FEA40: /*017765100*/ + case 0x3FEA80: /*017765200*/ + case 0x3FEAC0: /*017765300*/ + case 0x3FEB00: /*017765400*/ + case 0x3FEB40: /*017765500*/ + case 0x3FEB80: /*017765600*/ + case 0x3FEBC0: /*017765700*/ + if (data < 0) { + idx = (physicalAddress >> 1) & 0xff; + result = DevicePDP11.M9312[idx]; + } else { + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 138); + } + break; + default: + cpu.CPU_Error |= 0x10; + return cpu.trap(4, 142); + } + if (byteFlag && result >= 0) { // make any required byte adjustment + if ((physicalAddress & 1)) { + result = result >> 8; + } else { + result &= 0xff; + } + } + if (typeof result === "undefined") { + cpu.panic(76); + } + return result; +}; + +/** + * insertData(original, physicalAddress, data, byteFlag) + * + * @this {DevicePDP11} + * @param {number} original + * @param {number} physicalAddress + * @param {number} data + * @param {number} byteFlag + * @return {number} + */ +DevicePDP11.prototype.insertData = function(original, physicalAddress, data, byteFlag) +{ + if (physicalAddress & 1) { + if (!byteFlag) { + //log.push("TRAP 4 201 " + physicalAddress.toString(8) + " " + data.toString(8)); + return this.cpu.trap(4, 122); + } + if (data >= 0) { + data = ((data << 8) & 0xff00) | (original & 0xff); + } else { + data = original; + } + } else { + if (data >= 0) { + if (byteFlag) { + data = (original & 0xff00) | (data & 0xff); + } + } else { + data = original; + } + } + return data; +}; + DevicePDP11.UNIBUS_TABLE = {}; DevicePDP11.UNIBUS_TABLE[DevicePDP11.ADDR_PSW] = [null, null, DevicePDP11.prototype.readPSW, DevicePDP11.prototype.writePSW]; diff --git a/versions/pdp11/1.30.0/pdp11-dbg.js b/versions/pdp11/1.30.0/pdp11-dbg.js index acb8eb9ea..cd720403b 100644 --- a/versions/pdp11/1.30.0/pdp11-dbg.js +++ b/versions/pdp11/1.30.0/pdp11-dbg.js @@ -1,179 +1,213 @@ (function(){var m; -function aa(a,b){var d;if(a){b||(b=10);var c=a.charAt(0),e=0>=3;return(d?"0o":"")+c}function r(a,b,d){var c="";b?8=e?48:55),c=String.fromCharCode(e)+c;a>>=4}return(d?"0x":"")+c} -function ha(a){var b=a,d=a.lastIndexOf("/");0<=d&&(b=a.substr(d+1));d=b.indexOf("&");0":">",'"':""","'":"'"};function oa(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,e=a.length,f=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 e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return c&&c(a,f,e),[f,e];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&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=g.status||-1),c&&c(a,f,e))});if(b&&"object"== -typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!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||(f=g.responseText,200!=g.status&&(e=g.status||-1),c&&c(a,f,e),h=[f,e]);return h}function ka(){return"http://"+(window?window.location.host:"www.pcjs.org")} +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 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 Ia(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 Ja(a,b,d){function c(){--a;0<=a&&(b()||(a=0));0b?this.gb=this.id:(this.ub=this.id.substr(0,b),this.gb=this.id.substr(b+1));this[a]=d;this.A={ready:!1,Ha:!1,hb:!1,$:!1,error:!1};this.bb=null;this.A.error=!1;this.K={};this.I=null;this.aa=c||0;x.push(this)}var Ua=void 0,Va={}; +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.Db=this.id:(this.pc=this.id.substr(0,b),this.Db=this.id.substr(b+1));this[a]=d;this.A={ready:!1,mb:!1,ec:!1,ea:!1,error:!1};this.Xb=null;this.A.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 y(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={}),x=window.PCjs.Components||(window.PCjs.Components=[])}else $a={},x=[];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.S&&(this.S=10);15>2;this.F=this.ma-1;this.G=this.J/this.ma|0;this.B=this.G-1;this.Ea=[];a=new G;xb(a,this.I);this.N=Array(this.G);for(b=0;b>8))}m=wb.prototype;m.reset=function(){};m.ta=function(a,b){b||this.reset();return!0}; -function Cb(a,b,d,c,e){for(var f=b,h=d,g=f>>>a.S;0h&&(n=h);if(k&&k.size){if(k.type==c&&k.controller==e){if(f+h<=k.D)return k.Za+=k.D-f,k.D=f,!0;if(f>=k.D+k.Za){n=k.size-(f-l);n>h&&(n=h);k.Za=f-k.D+n;f=l+a.ma;h-=n;g++;continue}}return Eb(1,f,h)}f=new G(f,n,a.ma,c,e);xb(f,a.I,k);a.N[g++]=f;f=l+a.ma;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.Ta=function(a){return this.N[(a&this.j)>>>this.S].La(a&this.F,a)};m.pa=function(a){var b=a&this.F,d=(a&this.j)>>>this.S;return b!=this.F?this.N[d].Db(b,a):this.N[d++].La(b,a)|this.N[d&this.B].La(0,a+1)<<8};function Rb(a,b){var d=b&a.F,c=(b&a.j)>>>a.S;return d!=a.F?a.N[c].kb(d,b):a.N[c++].Xa(d,b)|a.N[c&a.B].Xa(0,b+1)<<8}m.fb=function(a,b){this.N[(a&this.j)>>>this.S].Na(a&this.F,b&255,a)}; -m.lb=function(a,b){var d=a&this.F,c=(a&this.j)>>>this.S;d!=this.F?this.N[c].Fb(d,b&65535,a):(this.N[c++].Na(d,b&255,a),this.N[c&this.B].Na(0,b>>8&255,a+1))};function Eb(a,b,d){t("Memory block error ("+a+": "+r(b)+","+r(d)+")");return!1}function Sb(a){u.call(this,"Device",a,Sb);this.j=a.name}y(Sb); -Sb.prototype.va=function(a,b,d,c){this.F=b;this.f=d;this.I=c;switch(this.j){default:a=Tb;for(var e in a){var f=a[e];d=b;c=+e;for(var h=f[0]?f[0].bind(this):null,g=f[1]?f[1].bind(this):null,k=f[2]?f[2].bind(this):null,f=f[3]?f[3].bind(this):null,l=+e;l<=c;l+=2){var n=l&8191;if(0>n||8192<=n){t("I/O address out of bounds: "+r(d.H+n,8,!0));break}void 0!==d.Ea[n]?t("I/O address already registered: "+r(d.H+n,8,!0)):d.Ea[n]=[h,g,k,f,!1]}}}E(this)};Sb.prototype.cb=function(){return this.f.cb()}; -Sb.prototype.$a=function(a){this.f.$a(a)};var Tb={};Tb[4194302]=[null,null,Sb.prototype.cb,Sb.prototype.$a];Qa(function(){for(var a=C(document,"pdp11","device"),b=0;b>1),this.f=new Int32Array(this.H,0,d>>2),$b(this,Wb?ac:bc);else{this.f=Array(d>>2);for(a=0;a>2),b=0;b>8,d)},V:function(a){return this.f[a>>2]>>>((a&3)<<3)&255},Z: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},ia: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.ua=!0},T:function(a,b){if(this.I&&null!=this.D){var d=this.I;gc(d,this.D+a,1,d.R)&&d.ca(!0)}return this.Xa(a,b)},X:function(a,b){if(this.I&&null!=this.D){var d=this.I;gc(d,this.D+a,2,d.R)&&d.ca(!0)}return this.kb(a,b)},fa:function(a,b,d){if(this.I&&null!=this.D){var c=this.I;gc(c,this.D+a,1, -c.J)&&c.ca(!0)}this.K?this.G(a,b,d):this.Oa(a,b,d)},la:function(a,b,d){if(this.I&&null!=this.D){var c=this.I;gc(c,this.D+a,2,c.J)&&c.ca(!0)}this.K?this.G(a,b,d):this.nb(a,b,d)},R:function(a){return this.F[a]},U:function(a){return this.F[a]},W:function(a){return this.J.getUint16(a,!0)},Y:function(a){return a&1?this.F[a]|this.F[a+1]<<8:this.M[a>>1]},da:function(a,b){this.F[a]=b;this.ua=!0},ga:function(a,b){this.F[a]=b;this.ua=!0},ka:function(a,b){this.J.setUint16(a,b,!0);this.ua=!0},na:function(a,b){a& -1?(this.F[a]=b,this.F[a+1]=b>>8):this.M[a>>1]=b;this.ua=!0}};function xb(a,b,d){a.I=b;a.j=a.B=0;d&&((a.j=d.j)&&fc(a,ec,!1),(a.B=d.B)&&dc(a,ec,!1))}function hc(a,b){b?0===--a.B&&(a.Na=a.K?a.G:a.Oa,a.Fb=a.K?a.L:a.nb):0===--a.j&&(a.La=a.Xa,a.Db=a.kb)}function dc(a,b,d){d&&a.B||(a.Na=!a.K&&b[1]||a.G,a.Fb=!a.K&&b[3]||a.L);if(d||void 0===d)a.Oa=b[1]||a.G,a.nb=b[3]||a.L}function fc(a,b,d){d&&a.j||(a.La=b[0]||a.O,a.Db=b[2]||a.P);if(d||void 0===d)a.Xa=b[0]||a.O,a.kb=b[2]||a.P} -function $b(a,b){b||(b=ic);fc(a,b,void 0);dc(a,b,void 0)}var ic=[],cc=[G.prototype.V,G.prototype.ia,G.prototype.Z,G.prototype.qa],ec=[G.prototype.T,G.prototype.fa,G.prototype.X,G.prototype.la];if(tb)var bc=[G.prototype.R,G.prototype.da,G.prototype.W,G.prototype.ka],ac=[G.prototype.U,G.prototype.ga,G.prototype.Y,G.prototype.na]; -function jc(a,b){u.call(this,"CPU",a,jc,1);var d=a.multiplier||1;this.Ga=a.cycles||b;this.za=d;this.Da=Math.round(this.Ga/1E4)/100;this.ya=this.Da*this.za;this.A.ba=!1;this.A.mb=!1;this.A.Qa=a.autoStart;this.A.rb=!1;this.A.Ia=!1;this.Ua=this.Y=0;this.Va=a.csStart;this.Ja=a.csInterval;this.Ka=a.csStop;this.ia=[];this.Lb=this.Ba.bind(this);E(this)}y(jc);var kc=["power","reset"];m=jc.prototype; -m.va=function(a,b,d,c){this.j=a;this.F=b;this.I=c;for(b=0;b=a.Y&&(a.Y+=a.Ja,d=!0);0<=a.Ka&&a.Ka<=qc(a)&&(a.Ja=a.Ka=-1,nc(a),a.ca(),d=!0);d&&a.g(qc(a)+" cycles: checksum="+r(a.Ua))}} -function Dc(a,b,d,c){if(a.K[b]){void 0===d&&(sb(a,"Value for "+b+" is invalid"),a.ca());var e=a.I&&a.I.fa||8;d=!a.A.ba||a.A.rb?8==e?ga(d,c):r(d,c):"--------".substr(0,c||4);a.K[b].textContent!=d&&(a.K[b].textContent=d)}} -m.ha=function(a,b,d){var c=this;a=!1;switch(b){case "power":case "reset":this.K[b]=d;a=!0;break;case "run":this.K[b]=d;d.onclick=function(){var a;if(a=c.j)if(a=c.j,a.A.$)a=!0;else{var b=null,d,g=bb(a.id);for(d=0;da.R/a.ya?b=1:c=!0;a.za=b;b=a.Da*a.za;if(a.ya!=b){a.ya=b;b=a.ya.toFixed(2)+"Mhz";var e=a.K.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}d&&a.j&&a.j.Ya()}Fc(a,a.O);a.O=0;a.M=va();a.T=0;Gc(a);return c}function Hc(a){a.U-=a.P;a.P=0} -m.Ba=function(a){if(pb(this,!0)){if(!this.A.ba){Ec(this);this.j&&this.j.start(this.M,qc(this));this.A.ba=!0;this.A.mb=!0;this.fa&&this.fa.start();var b=this.K.run;b&&(b.textContent="Halt");this.j&&(this.j.ja(!0),a&&this.j.Ya(!0))}this.Ra>=this.Ga&&Gc(this,!0);this.ga=0;this.la=va();this.T&&(a=this.la-this.T,a>this.zb&&(this.M+=a,this.M>this.la&&(this.M=this.la)));try{do{for(var d=this.A.Ia?1:this.na,c=this.ia.length-1;0<=c;c--){var e=this.ia[c];0>e[0]||d>e[0]&&(d=e[0])}this.Ma(d);var f=this.U-this.P; -a=f;for(var h=this.ia.length-1;0<=h;h--){var g=this.ia[h];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.ga+=f;this.O+=f;Fc(this,0,!0);pc(this,f);this.Z-=f;if(0>=this.Z){this.Z+=this.na;15<=++this.Ab&&(this.j&&this.j.ja(),this.Ab=0);break}}while(this.A.ba)}catch(k){this.ca();H(this);this.j&&this.j.stop(va(),qc(this));pb(this,!1);sb(this,k.stack||k.message);return}d=setTimeout;c=this.Lb;this.T=va();e=this.zb;this.ga&&(e=Math.round(e*this.ga/this.na));e=e-(this.T-this.la);if(f=this.T-this.M)this.R= -Math.round(this.O/(10*f))/100,864E5<=f&&(this.V=0,Ec(this));if(0>e||this.Re&&(this.M-=e),e=0;this.Ra+=this.ga;this.T+=e;d(c,e)}else H(this),this.j&&this.j.stop(va(),qc(this))};m.Ma=function(){return 0};m.ca=function(a){qb(this,!0);Hc(this);Fc(this,this.O);this.O=0;if(this.A.ba){this.A.ba=!1;this.fa&&this.fa.stop();var b=this.K.run;b&&(b.textContent="Run")}this.A.complete=a};function H(a,b){a.j&&a.j.ja(b)} -function Ic(a){this.Cb=+a.model||1170;this.Nb=a.resetAddr||0;jc.call(this,a,1E6);this.ab=0;this.C=65536;this.u=32768;this.w=65535;this.i=32768;this.f=15;this.b=[0,0,0,0,0,0,0,this.Nb];this.eb=[0,0,0,0,0,0];this.Aa=[0,0,0,0];this.memory=[];this.H=[];this.Sa=this.Bb=0;this.W=2;this.X=255;this.G=0;this.da=-1;this.yb=this.Ca=this.xb=this.B=this.qa=this.L=this.J=0;this.ka=[7,7,7,7];this.Fa=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,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.Pb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.A.complete=this.A.Ib=!1}y(Ic,jc);m=Ic.prototype;m.reset=function(){this.A.ba&&this.ca();Jc(this);mc(this);this.A.error=!1;this.parent.reset.call(this)}; -function Jc(a){a.X=255;a.H=[];a.Bb=0;a.J=a.L=a.qa=a.xb=0;a.ka[0]=a.ka[1]=a.ka[3]=7;a.Ca=0}m.vb=function(){return 0};m.save=function(){var a=new I(this);J(a,0,[]);J(a,1,[this.wb,this.V,this.za]);for(var b=this.F,d=0,c=[],e=0;e>14&3;b=this.f>>14&3;this.B!=b&&(this.Aa[b]=this.b[6],this.b[6]=this.Aa[this.B]);this.W=2;this.f=a};m.cb=function(){return this.f=this.f&63728|(this.i&32768?8:0)|(this.w&65535?0:4)|(this.u&32768?2:0)|(this.C&65536?1:0)}; -function K(a,b){var d,c,e=0;0>a.da?a.da=a.cb():a.B||(b=4,e=1);a.J&57344||(a.L=63222);a.B=0;0<=(d=L(a,b|65536))&&0<=(c=L(a,b+2&65535|65536))&&(a.$a(c&53247|a.da>>2&12288),e&&(a.b[6]=4),0<=Lc(a,a.da)&&0<=Lc(a,a.b[7])&&(a.b[7]=d));a.G=0;return a.da=-1} -function Mc(a,b,d){var c,e,f,h=0;if(d&a.xb){c=b>>13&a.ka[a.B];e=a.Fa[a.B][c];f=(a.Fa[a.B][c+16]<<6)+(b&8191)&4194303;if(a.qa&16){if(3932160<=f&&4186112>f){f=f&262143;var g=f>>13&31;31>g?a.qa&32&&(f=a.Pb[g]+(f&8190)&4194302,3932160<=f&&4186112>f&&console.log("panic(898)")):f|=4186112}}else f&=262143,253952<=f&&(f|=4186112);if(3932160>f&&(3915776<=f||f&1&&!(d&1)))return K(a,4);switch(e&7){case 1:h=4096;case 2:e|=128;d&4&&(h=8192);break;case 4:h=4096;case 5:d&4&&(h=4096);case 6:e|=d&4?192:128;break; -default:h=32768}32512!==(e&32520)&&(e&8?e&32512&&(b&8128)<(e>>2&8128)&&(h|=16384):(b&8128)>(e>>2&8128)&&(h|=16384));a.Fa[a.B][c]=e;if(4194170!==f||a.B)a.Ca=a.B,a.yb=c;if(h){if(h&57344)return 0<=a.da&&(h|=128),a.J&57344||(a.J=a.J|h|a.Ca<<5|a.yb<<1),K(a,168);a.J&61440||!(4191360>f||4194239>3&7){case 0:return K(a,4);case 1:if(6===f&&!a.B&&d&4&&(a.b[6]<=a.X||65534<=a.b[6])){if(a.b[6]<=a.X-32||65534<=a.b[6])return a.b[6]=4,K(a,4);a.G|=4}return 7===f?a.b[f]:a.b[f]|65536;case 2:e=2;c=a.b[f];7!==f&&(c|=65536,6>f&&d&1&&(e=1));break;case 3:e=2;c=a.b[f];7!==f&&(c|=65536);if(0>(c=L(a,c)))return c;c|=65536;break;case 4:e=-2;6>f&&d&1&&(e=-1);c=a.b[f]+e&65535;7!==f&&(c|=65536);break;case 5:e=-2;c=a.b[f]-2&65535;7!==f&&(c|=65536);if(0>(c=L(a,c)))return c; -c|=65536;break;case 6:if(0>(c=L(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return c|65536;case 7:if(0>(c=L(a,a.b[7])))return c;a.b[7]=a.b[7]+2&65535;c=c+a.b[f]&65535;return 0>(c=L(a,c|65536))?c:c|65536}a.b[f]=a.b[f]+e&65535;a.J&57344||(a.L=a.L<<8|e<<3&248|f);if(6===f&&!a.B&&d&4&&0>=e&&(a.b[6]<=a.X||65534<=a.b[6])){if(a.b[6]<=a.X-32)return a.b[6]=4,K(a,4);a.G|=4}return c}function R(a,b,d){var c;return b&56?(0<=(c=Oc(a,b,d))&&(c=Mc(a,c,d)),c):4194304+(b&7)} -function S(a,b){var d;b&56?0<=(d=R(a,b,2))&&(d=M(a,d)):d=a.b[b&7];return d}function Pc(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 V(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.Ma=function(a){this.A.complete=!0;var b=this.A.Ib=this.I&&Qc(this.I),d=a?this.A.mb?0:1:-1;this.A.mb=!1;this.U=this.P=a;this.wb&256?(Hc(this),a=!1):a=!0;if(a){do{if(b){if(Rc(this.I,this.b[7],d)){this.ca();break}d=1}var c,e,f,h,g;if(this.W)if(1===this.W)this.W=2;else{this.W=0;g=-1;c=this.Bb&224;if(0<(a=this.H.length))for(;0c&&(c=this.H[a].Ob,g= -a)}c>(this.f&224)&&(0>g?K(this,160):(K(this,this.H[g].Rb),this.H.splice(g,1)))}this.J&57344||(this.L=0);this.G=this.f&16;if(0<=(a=L(this,this.b[7])))switch(this.b[7]=this.b[7]+2&65535,a&61440){case 4096:0<=(c=S(this,a>>6))&&(a&56?0<=(f=R(this,a,4))&&0<=O(this,f,c)&&(this.i=this.w=c,this.u=0):(this.i=this.w=this.b[a&7]=c,this.u=0));break;case 8192:0<=(c=S(this,a>>6))&&0<=(e=S(this,a))&&(this.i=this.w=this.C=a=c-e,this.u=(c^e)&(c^a));break;case 12288:0<=(c=S(this,a>>6))&&0<=(e=S(this,a))&&(this.i=this.w= -c&e,this.u=0);break;case 16384:0<=(c=S(this,a>>6))&&(a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e&~c,0<=O(this,f,a)&&(this.i=this.w=a,this.u=0)):(this.i=this.w=a=this.b[a&7]&=~c,this.u=0));break;case 20480:0<=(c=S(this,a>>6))&&(a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e|c,0<=O(this,f,a)&&(this.i=this.w=a,this.u=0)):(this.i=this.w=a=this.b[a&7]|=c,this.u=0));break;case 24576:0<=(c=S(this,a>>6))&&(a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=c+e,0<=O(this,f,a)&&(this.i=this.w=this.C=a,this.u=(c^a)&(e^a))):(g=a&7, -e=this.b[g],this.b[g]=(a=c+e)&65535,this.i=this.w=this.C=a,this.u=(c^a)&(e^a)));break;case 36864:0<=(c=Pc(this,a>>6))&&(a&56?0<=(f=R(this,a,5))&&0<=Q(this,f,c)&&(this.i=this.w=c<<8,this.u=0):(c&128&&(c|=65280),this.i=this.w=this.b[a&7]=c,this.u=0));break;case 40960:0<=(c=Pc(this,a>>6))&&0<=(e=Pc(this,a))&&(a=c-e,this.i=this.w=this.C=a<<8,this.u=((c^e)&(c^a))<<8);break;case 45056:0<=(c=Pc(this,a>>6))&&0<=(e=Pc(this,a))&&(this.i=this.w=(c&e)<<8,this.u=0);break;case 49152:0<=(c=Pc(this,a>>6))&&0<=(e= -P(this,f=R(this,a,7)))&&(a=e&~c,0<=Q(this,f,a)&&(this.i=this.w=a<<8,this.u=0));break;case 53248:0<=(c=Pc(this,a>>6))&&0<=(e=P(this,f=R(this,a,7)))&&(a=e|c,0<=Q(this,f,a)&&(this.i=this.w=a<<8,this.u=0));break;case 57344:0<=(c=S(this,a>>6))&&(a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e-c,0<=O(this,f,a)&&(this.i=this.w=this.C=a,this.u=(c^e)&(e^a))):(g=a&7,e=this.b[g],this.b[g]=(a=e-c)&65535,this.i=this.w=this.C=a,this.u=(c^e)&(e^a)));break;default:switch(a&65024){case 2048:0<=(h=Oc(this,a,0))&&(g=a>>6&7, -0<=Lc(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),e=this.b[g],e&32768&&(e|=-65536),a=~~(c*e),this.b[g]=a>>16&65535,this.b[g|1]=a&65535,this.i=a>>16,this.w=this.i|a,this.C=this.u=0,-32768>a||32767>6&7,e=this.b[g]<<16|this.b[g|1],this.C=this.u=0,c&32768&&(c|=-65536),a=~~(e/c),-32768<=a&&32767>=a?(this.b[g]=a&65535,this.b[g|1]=e-a*c&65535,this.w=a>>16|a,this.i= -a>>16):(this.u=32768,this.w=a>>15|a,this.i=e>>16,-1===c&&65534===this.b[g]&&(this.b[g]=this.b[g|1]=1))):(this.w=this.i=0,this.u=32768,this.C=65536));break;case 29696:0<=(c=S(this,a))&&(g=a>>6&7,a=this.b[g],a&32768&&(a|=4294901760),this.C=this.u=0,c&=63,c&32?(c=64-c,16>c):c&&(16>15&65535)&&65535!==e&&(this.u=32768))),this.b[g]=a&65535,this.i=this.w=a);break;case 30208:if(0<=(c=S(this,a))){g=a>>6&7;e=this.b[g]<<16|this.b[g|1];this.C= -this.u=0;c&=63;if(c&32)c=64-c,32>c-1,this.C=a<<16,a>>=1,e&2147483648&&(a|=4294967295<<32-c);else if(c){if(a=e<>15,a<<=1,32>=32-c)e|=4294967295<>16&65535;this.b[g|1]=a&65535;this.i=a>>16;this.w=a>>16|a}break;case 30720:a&56?0<=(e=M(this,f=R(this,a,6)))&&(e^=this.b[a>>6&7],0<=O(this,f,e)&&(this.i=this.w=e,this.u=0)):(this.i=this.w=e=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]=V(this.b[7],a);break;case 512:this.w&65535&&(this.b[7]=V(this.b[7],a));break;case 768:this.w&65535||(this.b[7]=V(this.b[7],a));break;case 1024:(this.i&32768)===(this.u&32768)&&(this.b[7]=V(this.b[7],a));break;case 1280:(this.i&32768)!==(this.u&32768)&&(this.b[7]=V(this.b[7],a));break;case 1536:this.w&65535&&(this.i&32768)===(this.u&32768)&&(this.b[7]=V(this.b[7],a));break;case 1792:this.w& -65535&&(this.i&32768)===(this.u&32768)||(this.b[7]=V(this.b[7],a));break;case 32768:this.i&32768||(this.b[7]=V(this.b[7],a));break;case 33280:!(this.C&65536)&&this.w&65535&&(this.b[7]=V(this.b[7],a));break;case 33024:this.i&32768&&(this.b[7]=V(this.b[7],a));break;case 33536:if(this.C&65536||!(this.w&65535))this.b[7]=V(this.b[7],a);break;case 33792:this.u&32768||(this.b[7]=V(this.b[7],a));break;case 34048:this.u&32768&&(this.b[7]=V(this.b[7],a));break;case 34304:this.C&65536||(this.b[7]=V(this.b[7], -a));break;case 34560:this.C&65536&&(this.b[7]=V(this.b[7],a));break;case 34816:K(this,24);break;case 35072:K(this,28);break;default:switch(a&65472){case 64:0<=(h=Oc(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e<<8|e>>8,0<=O(this,f,a)&&(this.i=this.w=e&65280,this.u=this.C=0)):(g=a&7,e=this.b[g],this.b[g]=(e<<8|e>>8)&65535,this.i=this.w=e&65280,this.u=this.C=0);break;case 2560:a&56?0<=(f=R(this,a,4))&&0<=O(this,f,0)&&(this.i=this.C=this.u=this.w=0):this.i=this.C= -this.u=this.w=this.b[a&7]=0;break;case 2624:0<=(e=M(this,f=R(this,a,6)))&&(a=~e,0<=O(this,f,a)&&(this.i=this.w=a,this.C=65536,this.u=0));break;case 2688:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e+1,0<=O(this,f,a)&&(this.i=this.w=a,this.u=a&(a^e))):(g=a&7,e=this.b[g],a=e+1,this.b[g]=a&65535,this.i=this.w=a,this.u=a&(a^e));break;case 2752:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e-1,0<=O(this,f,a)&&(this.i=this.w=a,this.u=(a^e)&e)):(g=a&7,e=this.b[g],a=e-1,this.b[g]=a&65535,this.i=this.w=a,this.u=(a^e)&e); -break;case 2816:0<=(e=M(this,f=R(this,a,6)))&&(a=-e,0<=O(this,f,a)&&(this.C=this.i=this.w=a,this.u=a&e));break;case 2880:0<=(e=M(this,f=R(this,a,6)))&&(a=e+(this.C>>16&1),0<=O(this,f,a)&&(this.C=this.i=this.w=a,this.u=a&(a^e)));break;case 2944:0<=(e=M(this,f=R(this,a,6)))&&(a=e-(this.C>>16&1),0<=O(this,f,a)&&(this.C=this.i=this.w=a,this.u=(a^e)&e));break;case 3008:0<=(e=S(this,a))&&(this.i=this.w=e,this.C=this.u=0);break;case 3072:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=(this.C&65536|e)>>1,0<=O(this, -f,a)&&(this.C=e<<16,this.i=this.w=a,this.u=a^this.C>>1)):(g=a&7,e=this.b[g],a=(this.C&65536|e)>>1,this.b[g]=a&65535,this.C=e<<16,this.i=this.w=a,this.u=a^this.C>>1);break;case 3136:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e<<1|this.C>>16&1,0<=O(this,f,a)&&(this.C=this.i=this.w=a,this.u=a^e)):(g=a&7,e=this.b[g],a=e<<1|this.C>>16&1,this.b[g]=a&65535,this.C=this.i=this.w=a,this.u=a^e);break;case 3200:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e&32768|e>>1,0<=O(this,f,a)&&(this.C=e<<16,this.i=this.w=a,this.u= -this.i^this.C>>1)):(g=a&7,e=this.b[g],a=e&32768|e>>1,this.b[g]=a&65535,this.C=e<<16,this.i=this.w=a,this.u=this.i^this.C>>1);break;case 3264:a&56?0<=(e=M(this,f=R(this,a,6)))&&(a=e<<1,0<=O(this,f,a)&&(this.C=this.i=this.w=a,this.u=a^e)):(g=a&7,e=this.b[g],a=e<<1,this.b[g]=a&65535,this.C=this.i=this.w=a,this.u=a^e);break;case 3328:h=this.b[7]+((a&63)<<1)&65535;0<=(c=L(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=Oc(this,a,0))&&(61440!==(this.f&61440)&& -(h&=65535),this.B=this.f>>12&3,0<=(c=L(this,h))&&(this.B=this.f>>14&3,0<=Lc(this,c)&&(this.i=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Aa[this.f>>12&3],0<=Lc(this,c)&&(this.i=this.w=c,this.u=0));break;case 3456:0<=(e=Nc(this))&&((this.J&57344||(this.L=22),a&56)?0<=(h=Oc(this,a,0))&&(h&=65535,this.B=this.f>>12&3,0<=(f=Mc(this,h,4))&&(this.B=this.f>>14&3,0<=O(this,f,e)&&(this.i=this.w=e,this.u=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]= -e:this.Aa[this.f>>12&3]=e,this.i=this.w=e,this.u=0));break;case 3520:0<=(f=R(this,a,4))&&(a=-(this.i>>15&1),0<=O(this,f,a)&&(this.w=a,this.u=0));break;case 35328:a&56?0<=(f=R(this,a,5))&&0<=Q(this,f,0)&&(this.i=this.C=this.u=this.w=0):(this.b[a&7]&=65280,this.i=this.C=this.u=this.w=0);break;case 35392:0<=(e=P(this,f=R(this,a,7)))&&(a=~e,0<=Q(this,f,a)&&(this.i=this.w=a<<8,this.C=65536,this.u=0));break;case 35456:0<=(e=P(this,f=R(this,a,7)))&&(a=e+1,0<=Q(this,f,a)&&(this.i=this.w=a<<8,this.u=(a&(a^ -e))<<8));break;case 35520:0<=(e=P(this,f=R(this,a,7)))&&(a=e-1,0<=Q(this,f,a)&&(this.i=this.w=a<<8,this.u=((a^e)&e)<<8));break;case 35584:0<=(e=P(this,f=R(this,a,7)))&&(a=-e,0<=Q(this,f,a)&&(this.C=this.i=this.w=a<<8,this.u=(a&e)<<8));break;case 35648:0<=(e=P(this,f=R(this,a,7)))&&(a=e+(this.C>>16&1),0<=Q(this,f,a)&&(this.i=this.w=this.C=a<<8,this.u=(a&(a^e))<<8));break;case 35712:0<=(e=P(this,f=R(this,a,7)))&&(a=e-(this.C>>16&1),0<=Q(this,f,a)&&(this.i=this.w=this.C=a<<8,this.u=((a^e)&e)<<8));break; -case 35776:0<=(e=Pc(this,a))&&(this.i=this.w=e<<8,this.C=this.u=0);break;case 35840:0<=(e=P(this,f=R(this,a,7)))&&(a=((this.C&65536)>>8|e)>>1,0<=Q(this,f,a)&&(this.C=e<<16,this.i=this.w=a<<8,this.u=this.i^this.C>>1));break;case 35904:0<=(e=P(this,f=R(this,a,7)))&&(a=e<<1|this.C>>16&1,0<=Q(this,f,a)&&(this.C=this.i=this.w=a<<8,this.u=(a^e)<<8));break;case 35968:0<=(e=P(this,f=R(this,a,7)))&&(a=e&128|e>>1,0<=Q(this,f,a)&&(this.C=e<<16,this.i=this.w=a<<8,this.u=this.i^this.C>>1));break;case 36032:0<= -(e=P(this,f=R(this,a,7)))&&(a=e<<1,0<=Q(this,f,a)&&(this.C=this.i=this.w=a<<8,this.u=(a^e)<<8));break;case 36160:a&56?0<=(h=Oc(this,a,0))&&(this.B=this.f>>12&3,0<=(c=L(this,h|65536))&&(this.B=this.f>>14&3,0<=Lc(this,c)&&(this.i=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]:this.Aa[this.f>>12&3],0<=Lc(this,c)&&(this.i=this.w=c,this.u=0));break;case 36224:0<=(e=Nc(this))&&((this.J&57344||(this.L=22),a&56)?0<=(h=Oc(this,a,0))&&(this.B=this.f>>12&3,0<=(f=Mc(this,h| -65536,4))&&(this.B=this.f>>14&3,0<=O(this,f,e)&&(this.i=this.w=e,this.u=0))):(g=a&7,6!==g||(this.f>>2&12288)===(this.f&12288)?this.b[g]=e:this.Aa[this.f>>12&3]=e,this.i=this.w=e,this.u=0));break;default:switch(a&65528){case 128:0<=(c=Nc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.f&49152||(this.f=this.f&63519|(a&7)<<5,this.W=1);break;case 160:case 168:a&1&&(this.C=0);a&2&&(this.u=0);a&4&&(this.w=1);a&8&&(this.i=0);break;case 176:case 184:a&1&&(this.C=65536);a&2&&(this.u=32768); -a&4&&(this.w=0);a&8&&(this.i=32768);break;default:switch(a){case 0:49152&this.f?K(this,4):(this.Sa=3,Hc(this),console.log("HALT at "+this.b[7].toString(8)));break;case 1:g=0;if(0<(a=this.H.length))for(;0>>0,h],p=ra(n,k,a.qb);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.L.push({Qb:b,D:d,Kb:c,ra:e,ob:f})}delete this.ra}return!0};Sc.prototype.sa=function(){return!0}; -function Tc(a,b,d,c){if(c)a.ea("Unable to load system ROM (error "+c+": "+b+")");else{ab(a.ub,b,d);var e;if("["==d.charAt(0)||"{"==d.charAt(0))try{var f,h,g=eval("("+d+")");if(f=g.bytes)a.j=f;else if(f=g.words)for(a.j=Array(2*f.length),h=e=0;e>8&255;else if(f=g.data)for(a.j=Array(4*f.length),h=e=0;e>8&255,a.j[h++]=f[e]>>16&255,a.j[h++]=f[e]>>24&255;else a.j=g;a.ra=g.symbols;if(!a.j.length){t("Empty ROM: "+ -b);return}if(1==a.j.length){t(a.j[0]);return}}catch(k){a.ea("ROM data error: "+k.message);return}else for(b=d.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.j=Array(b.length),e=0;e>>c.S].Oa(e&c.F,a.j[d]&255,e)}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>>e.S;0>>=e.S;0=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; -function Zc(a,b,d,c){if(d)if(b){0>a.H&&a.G.length&&(a.H=0);if(0>a.H||b!=a.G[a.H])a.G.splice(0,0,b),a.H=0;a.H--}else a.V?b="end":b=a.G[a.H+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");d=0;var e=null;c=c||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==c&&!e||!h)a.push(qa(b.substring(d,f))),d=f+1}}return a} -function $c(a,b,d){for(d=d||-1;d--&&b.length;){var c=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(c){case "*":c=f*e;break;case "/":if(!e)return!1;c=f/e;break;case "%":if(!e)return!1;c=f%e;break;case "+":c=f+e;break;case "-":c=f-e;break;case "<<":c=f<>":c=f>>e;break;case ">>>":c=f>>>e;break;case "<":c=f":c=f>e?1:0;break;case ">=":c=f>=e?1:0;break;case "==":c=f==e?1:0;break;case "!=":c=f!=e?1:0;break;case "&":c=f&e;break; -case "^":c=f^e;break;case "|":c=f|e;break;case "&&":c=f&&e?1:0;break;case "||":c=f||e?1:0;break;default:return!1}a.push(c|0)}return!0} -function ad(a,b,d){var c;if(b){b=bd(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1;h=n+h;c>>=8}c=r(d,0,!0)+" "+d+". "+ga(d,0,!0)+" "+("0b"+h)}a.g((null!=b?b+": ":"")+c);return e} -function ed(a,b){if(b)return dd(a,b,a.X[b]);var d=0;for(b in a.X)dd(a,b,a.X[b]),d++;return 0>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.Ib=this.Ec;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.Ib(b,-1,1)} +function Ab(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.Ib(d,b,1)}function zb(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.Ib(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.Ib(d,b,0)}m=wb.prototype;m.reset=function(){this.J&&this.J()};m.Ec=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.D)return k.Vb+=k.D-e,k.D=e,!0;if(e>=k.D+k.Vb){n=k.size-(e-l);n>h&&(n=h);k.Vb=e-k.D+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.Jb=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].xc(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].ic(d,b):a.R[c++].Qb(d,b)|a.R[c&a.B].Qb(0,b+1)<<8}m.cc=function(a,b){this.R[(a&this.i)>>>this.X].yb(a&this.G,b&255,a)}; +m.kc=function(a,b){var d=a&this.G,c=(a&this.i)>>>this.X;d!=this.G?this.R[c].Dc(d,b&65535,a):(this.R[c++].yb(d,b&255,a),this.R[c&this.B].yb(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={hc:[],Ha:0,pa:128,H:127,Kc:0};this.i={data:0,fd:0,ob:20,dd:0};this.B={Kb:0,K:0};this.F={Sb:2496,ka:0,S:128,Tb:0,Rb:0,sa:0,yc:0,ma:[],bb:[406,406,406,406],Y:[12,12,12,12]};this.I={K:129,Hb:0,ca:0,Xa:0,Ta:0,$a:0,ma:[],Y:[40,40,40,40],bb:[1024,1024,512,512],Gc:[157,157,29,29]};this.J={f:[8210,8208,8210,8226],Y:[22,22,22,50],ab:[19,19,19,32],dc:[815,411,815,630],ma:[],U:2176,vb:0,tb:0,Ba:[0,0,0,0,0,0,0,0],Aa:0,oa:[4544,4544,4544,4544,4544, +4544,4544,4544],ub:[0,0,0,0,0,0,0,0],jb:0,bd:[0,0,0,0,0,0,0,0],zc:0,Ac:[0,0,0,0,0,0,0,0],G:[0,0,0,0,0,0,0,0],cd:[1,2,3,4,5,6,7,8],Bc:[0,0,0,0,0,0,0,0],Pa:[0,0,0,0,0,0,0,0],bc:[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],Za:0,jc:0}}w(Hb); +var Tb=[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.Fc.bind(this);b.J=this.reset.bind(this);b.Ib=f}C(this)};m.sb=function(){return this.f.sb()};m.Ab=function(a){a=a&63727|this.f.sb()&1808;this.f.Ab(a)}; +function Vb(a){var b=a.F,d,c,f,e=b.sa>>13&7;"undefined"===typeof b.ma[e]&&(b.ma[e]={cache:[],postProcess:a.Vc,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.Sb=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.Rb;f=65536-b.Tb&65535;Wb(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.Rb;f=65536-b.Tb&65535;a.ac(b.ma[e],d,c,f);return}b.Sb=e<<13|b.Sb&8176|b.sa%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.F;e.Rb=c&65535;e.S=e.S&-49|c>>12&48;e.Tb=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 Xb(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.Wc,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.Gc[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.Hb;f=65536-b.Xa&65535;Wb(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.Hb;f=65536-b.Xa&65535;a.ac(b.ma[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.Hb=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 Yb(a){a=a.J;a.U=2176;a.Aa=0;a.oa=[4544,4544,4544,4544,4544,4544,4544,4544];a.ub=[0,0,0,0,0,0,0,0];a.jb=a.vb=a.tb=a.Za=a.jc=0} +function Zb(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.Xc,drive:b,blocksize:256,mapped:0,maxblock:d.dc[0]*d.ab[0]*d.Y[0],url:"rp"+b+".dsk"});switch(d.U&63){case 5:d.bc[b]=d.Pa[b];d.U|=32896;d.oa[b]|=32896;d.jb|=1<=d.dc[0]||d.Ba[b]>>8>=d.ab[0]||(d.Ba[b]&255)>=d.Y[0]){d.ub[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.tb;e=65536-d.vb&65535;Wb(a,d.ma[b],c,f,e);return;case 57:if(d.Pa[b]>=d.dc[0]||d.Ba[b]>>8>=d.ab[0]||(d.Ba[b]&255)>=d.Y[0]){d.ub[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.tb;e=65536-d.vb&65535;a.ac(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.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.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.bc[b.La]=e.Pa[b.La]=c;e.jb|=1<=b.Tc-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.Qc=function(){this.B.K|=128;this.B.K&64&&H(this.f,0,192,64)}; +function $b(a,b){var d=b>>13&31;31>d?a.f.Ia&32&&(b=a.f.xb[d]+(b&8190)&4194302,3932160<=b&&4186112>b&&ac(898)):b|=4186112;return b} +function bc(a,b,d,c,f,e){var h=~~((e+d.Ua-1)/d.Ua),g=new XMLHttpRequest;2048>h&&c+2048I(this.f,a.Sc?$b(this,d):d,a.cache[b][f])){a.$b(2,a,b,d,c);return}d+=2;--c}b++}a.$b(0,a,b,d,c)}; +function Wb(a,b,d,c,f){for(var e,h;0h){b.$b(2,b,d,c,f);return}b.cache[d][e]=h;c+=2;--f}d++}b.$b(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;Yb(this)}; +m.Fc=function(a,b,d){var c,f,e=this.f;switch(a&-64){case 4194240:switch(a&-2){case 4194302:c=e.sb();if(0<=b)return a&1?b=b<<8|c&255:d&&(b=c&65280|b&255),e.Ab(b&63727|c&1808),-1;break;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.Zb;else{a&1&&(b<<=8);if(c=b&65024){f=c>>9;do c+=34;while(f>>=1)}e.Zb=c;e.Oa=2}break;case 4194294:if(70!==e.fb)return K(e,4);0>b?c=e.M:c=e.M=0;break;case 4194292:if(70!==e.fb)return K(e,4);c=1;break;case 4194290:if(70!==e.fb)return K(e, +4);c=0;break;case 4194288:if(70!==e.fb)return K(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 K(e,4);f=a-4194272>>1;0>b?c=e.gc[f]:(c=L(this,e.gc[f],a,b,d),0<=c&&(e.gc[f]=c));break;case 4194254:return a&1?e.L>>14&1?(0<=b&&(e.b[6]=b),c=e.b[6]):(0<=b&&(e.ra[3]=b),c=e.ra[3]):e.L>>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.L&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.L>>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.L&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.M|=16,K(e,4)}break;case 4194176:f=a>>1&31;c=L(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= +L(this,e.Cb,a,b,d);0<=c&&(e.Cb=c);break;case 4194172:c=e.Ca;c&65280&&(c=(c<<8|c>>8)&65535);break;case 4194170:e.ba=e.ba&62337|e.Mb<<5|e.Yb<<1;0>b?c=e.ba:(c=L(this,e.ba,a,b,d),0<=c&&(e.ba=c&=62337,e.Mb=c>>5&3,e.Yb=c>>1&15,c&257?(f=2,e.Ia&16&&(f=1),e.Lb=c&1?6:4):(e.Lb=0,f=4),this.i.ob=this.i.ob&-8|f));break;case 4194168:0>b?c=this.i.dd&65535:(c=L(this,this.i.data,a,b,d),0<=c&&(this.i.data=c));break;case 4194166:if(0<=b){if(b&=127)h.Kc=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=L(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=L(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=L(this,f.K,a,b,d),0<=c&&(c&64&&!f.Kb&&(setInterval(this.Qc.bind(this), +25),f.Kb=1),f.K=c&-129));break;default:return e.M|=16,K(e,4)}break;case 4194048:f=this.F;switch(a&-2){case 4194048:c=L(this,f.Sb,a,b,d);0<=c&&(f.Sb=c);break;case 4194050:c=L(this,f.ka,a,b,d);0<=c&&(f.ka=c);break;case 4194052:c=L(this,f.S,a,b,d);0<=b&&0<=c&&(f.S=c&-36993|f.S&36992,f.S&1&&Vb(this));break;case 4194054:c=L(this,f.Tb,a,b,d);0<=c&&(f.Tb=c);break;case 4194056:c=L(this,f.Rb,a,b,d);0<=c&&(f.Rb=c);break;case 4194058:c=L(this,f.sa,a,b,d);0<=c&&(f.sa=c);break;case 4194060:break;case 4194062:c= +L(this,f.yc,a,b,d);0<=c&&(f.yc=c);break;default:return e.M|=16,K(e,4)}break;case 4193728:var g=this.J;f=g.Aa&7;switch(a&-2){case 4193728:c=L(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?Zb(this,f):192==(c&192)&&H(e,0,160,172));break;case 4193730:c=L(this,g.vb,a,b,d);0<=c&&(g.vb=c);break;case 4193732:c=L(this,g.tb,a,b,d);0<=c&&(g.tb=c&65534);break;case 4193734:c=L(this,g.Ba[f],a,b,d);0<=c&&(g.Ba[f]=c&7967);break;case 4193736:c=L(this,g.Aa,a,b,d);0<=c&&(g.Aa= +c&63|g.Aa&65472,c&128&&Yb(this));break;case 4193738:c=g.oa[f];break;case 4193740:c=g.ub[f];break;case 4193742:c=L(this,g.jb,a,b,d);0<=c&&(g.jb=c&255);break;case 4193744:c=g.bd[f];break;case 4193746:c=L(this,g.zc,a,b,d);0<=c&&(g.zc=c);break;case 4193748:c=L(this,g.Ac[f],a,b,d);0<=c&&(g.Ac[f]=c&1023);break;case 4193750:c=8210;break;case 4193752:c=g.cd[f];break;case 4193754:c=L(this,g.Bc[f],a,b,d);0<=c&&(g.Bc[f]=c);break;case 4193756:c=L(this,g.Pa[f],a,b,d);0<=c&&(g.Pa[f]=c&511);break;case 4193758:g.bc[f]= +g.Pa[f];c=g.bc[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=L(this,g.Za,a,b,d);0<=c&&(g.Za=c&63,g.U=g.U&-769|(c&3)<<8);break;case 4193770:c=L(this,g.jc,a,b,d);0<=c&&(g.jc=c);break;default:return e.M|=16,K(e,4)}break;case 4192512:f=this.I;switch(a&-2){case 4192512:c=L(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||Xb(this));break;case 4192514:c=L(this,f.Hb,a,b,d);0<=c&&(f.Hb= +c&65534);break;case 4192516:c=L(this,f.ca,a,b,d);0<=c&&(f.ca=c);break;case 4192518:c=L(this,f.Xa,a,b,d);0<=c&&(f.Xa=c);break;case 4192520:c=L(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.M|=16,K(e,4)}break;case 4191552:switch(a&-2){case 4191566:0>b?c=e.Ia:(c=L(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.Lb&&(f=2,e.Ia&16&&(f=1),this.i.ob=this.i.ob&-8|f)));break;default:return e.M|=16,K(e,4)}break;case 4191424:f= +a>>1&31;c=L(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=L(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 K(e,4);f=a>>2&31;c=e.xb[f];a&2&&(c=c>>16);c&=65535;0<=b&&(c=L(this,c,a,b,d),0<=c&&(e.xb[f]=a&2?c<<16|e.xb[f]&65535:e.xb[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=Tb[a>>1&255]; +else return e.M|=16,K(e,4);break;default:return e.M|=16,K(e,4)}d&&0<=c&&(a&1?c=c>>8:c&=255);"undefined"===typeof c&&ac(76);return c};function L(a,b,d,c,f){if(d&1){if(!f)return K(a.f,4);c=0<=c?c<<8&65280|b&255:b}else 0<=c?f&&(c=b&65280|c&255):c=b;return c}var Ub={};Ub[4194302]=[null,null,Hb.prototype.sb,Hb.prototype.Ab];Qa(function(){for(var a=A(document,"pdp11","device"),b=0;b>1),this.f=new Int32Array(this.I,0,d>>2),ic(this,ec?jc:kc);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.D){var d=this.H;pc(d,this.D+a,1,d.W)&&d.la(!0)}return this.Qb(a,b)},fa:function(a,b){if(this.H&&null!=this.D){var d=this.H;pc(d,this.D+a,2,d.W)&&d.la(!0)}return this.ic(a,b)},va:function(a,b,d){if(this.H&&null!=this.D){var c=this.H; +pc(c,this.D+a,1,c.J)&&c.la(!0)}this.O?this.F(a,b,d):this.zb(a,b,d)},Ja:function(a,b,d){if(this.H&&null!=this.D){var c=this.H;pc(c,this.D+a,2,c.J)&&c.la(!0)}this.O?this.F(a,b,d):this.mc(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)&&oc(a,nc,!1),(a.B=d.B)&&mc(a,nc,!1))}function qc(a,b){b?0===--a.B&&(a.yb=a.O?a.F:a.zb,a.Dc=a.O?a.N:a.mc):0===--a.i&&(a.rb=a.Qb,a.xc=a.ic)}function mc(a,b,d){d&&a.B||(a.yb=!a.O&&b[1]||a.F,a.Dc=!a.O&&b[3]||a.N);if(d||void 0===d)a.zb=b[1]||a.F,a.mc=b[3]||a.N}function oc(a,b,d){d&&a.i||(a.rb=b[0]||a.T,a.xc=b[2]||a.V);if(d||void 0===d)a.Qb=b[0]||a.T,a.ic=b[2]||a.V} +function ic(a,b){b||(b=rc);oc(a,b,void 0);mc(a,b,void 0)}var rc=[],lc=[G.prototype.aa,G.prototype.ya,G.prototype.qa,G.prototype.Db],nc=[G.prototype.Z,G.prototype.va,G.prototype.fa,G.prototype.Ja];if(tb)var kc=[G.prototype.W,G.prototype.ua,G.prototype.da,G.prototype.Da],jc=[G.prototype.$,G.prototype.xa,G.prototype.ga,G.prototype.Ra]; +function sc(a,b){u.call(this,"CPU",a,sc,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.lc=!1;this.A.Fb=a.autoStart;this.A.tc=!1;this.A.nb=!1;this.Nb=this.Z=0;this.Ob=a.csStart;this.pb=a.csInterval;this.qb=a.csStop;this.qa=[];this.Gb=this.kb.bind(this);C(this)}w(sc);var tc=["power","reset"];m=sc.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<=Kc(a)&&(a.pb=a.qb=-1,Ic(a),a.la(),d=!0);d&&a.g(Kc(a)+" cycles: checksum="+r(a.Nb))}} +function Lc(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.tc?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.Ub()}Nc(a,a.J);a.J=0;a.I=sa();a.T=0;Oc(a);return c}function Pc(a){a.V-=a.N;a.N=0} +m.kb=function(a){if(pb(this,!0)){if(!this.A.ia){Mc(this);this.i&&this.i.start(this.I,Kc(this));this.A.ia=!0;this.A.lc=!0;this.da&&this.da.start();var b=this.O.run;b&&(b.textContent="Halt");this.i&&(this.i.wa(!0),a&&this.i.Ub(!0))}this.Da>=this.ya&&Oc(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.wb(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;Nc(this,0,!0);Jc(this,e);this.$-=e;if(0>=this.$){this.$+=this.va;15<=++this.Bb&&(this.i&&this.i.wa(),this.Bb=0);break}}while(this.A.ia)}catch(k){this.la();M(this);this.i&&this.i.stop(sa(),Kc(this));pb(this,!1);sb(this,k.stack||k.message);return}d=setTimeout;c=this.Gb;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,Mc(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(),Kc(this))};m.wb=function(){return 0};m.la=function(a){qb(this,!0);Pc(this);Nc(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 Qc(a){this.wc=+a.model||1170;this.Wb=a.resetAddr||0;sc.call(this,a,1E6);this.Ja=0;this.C=65536;this.u=32768;this.w=65535;this.j=32768;this.L=15;this.b=[0,0,0,0,0,0,0,this.Wb];this.Ya=[0,0,0,0,0,0];this.ra=[0,0,0,0];this.memory=[];this.f=[];this.ga=this.Zb=0;this.Oa=2;this.Qa=255;this.F=0;this.aa=-1;this.M=0;this.fb=70;this.Yb=this.Mb=this.Lb=this.B=this.Ia=this.Cb=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.xb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.gc=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.A.complete=this.A.Jc=!1}w(Qc,sc);m=Qc.prototype; +m.reset=function(){this.A.ia&&this.la();Rc(this);vc(this);this.A.error=!1;this.parent.reset.call(this)};function Rc(a){a.Qa=255;a.M=0;a.f=[];a.Zb=0;a.ba=a.Ca=a.Cb=a.Ia=a.Lb=0;a.hb[0]=a.hb[1]=a.hb[3]=7;a.Mb=0}m.vc=function(){return 0}; +m.save=function(){var a=new Sc(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} +m.Ab=function(a){this.j=a<<12;this.w=~a&4;this.u=a<<14;this.C=a<<16;if((a^this.L)&2048)for(var b=this.Ya.length;0<=--b;){var d=this.b[b];this.b[b]=this.Ya[b];this.Ya[b]=d}this.B=a>>14&3;b=this.L>>14&3;this.B!=b&&(this.ra[b]=this.b[6],this.b[6]=this.ra[this.B]);this.Oa=2;this.L=a};m.sb=function(){return this.L=this.L&63728|(this.j&32768?8:0)|(this.w&65535?0:4)|(this.u&32768?2:0)|(this.C&65536?1:0)};function ac(a){console.log("panic("+a+")")} +function K(a,b){var d,c,f=0;0>a.aa?a.aa=a.sb():a.B||(b=4,f=1);a.ba&57344||(a.Ca=63222,a.Cb=b);a.B=0;0<=(d=P(a,b|65536))&&0<=(c=P(a,b+2&65535|65536))&&(a.Ab(c&53247|a.aa>>2&12288),f&&(a.M|=4,a.b[6]=4),0<=Uc(a,a.aa)&&0<=Uc(a,a.b[7])&&(a.b[7]=d));a.F=0;return a.aa=-1} +function Vc(a,b,d){var c,f,e,h=0;if(d&a.Lb){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.xb[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&ac(898)):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e){if(3915776<=e)return a.M|=32,K(a,4);if(e&1&&!(d&1))return a.M|=64,K(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.Mb=a.B,a.Yb=c;if(h){if(h&57344)return 0<=a.aa&&(h|=128),a.ba&57344||(a.ba=a.ba|h|a.Mb<<5|a.Yb<<1),K(a,168);a.ba&61440||!(4191360>e||4194239>3&7){case 0:return K(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.M|=4,a.b[6]=4,K(a,4);a.M|=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.M|=4,a.b[6]=4,K(a,4);a.M|=8;a.F|=4}return c} +function S(a,b,d){var c;return b&56?(0<=(c=Xc(a,b,d))&&(c=Vc(a,c,d)),c):4194304+(b&7)}function T(a,b){var d;b&56?0<=(d=S(a,b,2))&&(d=J(a,d)):d=a.b[b&7];return d}function Yc(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.wb=function(a){this.A.complete=!0;var b=this.A.Jc=this.H&&Zc(this.H),d=a?this.A.lc?0:1:-1;this.A.lc=!1;this.V=this.N=a;this.Ra&256?(Pc(this),a=!1):a=!0;if(a){do{if(b){if($c(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.Zb&224;if(0<(a=this.f.length))for(;0c&&(c=this.f[a].Uc, +g=a)}c>(this.L&224)&&(0>g?K(this,160):(K(this,this.f[g].ed),this.f.splice(g,1)))}this.ba&57344||(this.Ca=0,this.Cb=this.b[7]);this.F=this.L&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<=I(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.C=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=J(this,e=S(this,a,6)))&&(a=f&~c,0<=I(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=J(this,e=S(this,a,6)))&&(a=f|c,0<=I(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=J(this,e=S(this,a,6)))&&(a=c+f,0<=I(this,e,a)&&(this.j=this.w=this.C=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.C=a,this.u=(c^a)&(f^a)));break;case 36864:0<=(c=Yc(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=Yc(this,a>>6))&&0<=(f=Yc(this,a))&&(a=c-f,this.j=this.w=this.C=a<<8,this.u=((c^f)&(c^a))<<8);break;case 45056:0<=(c=Yc(this,a>>6))&&0<=(f=Yc(this,a))&&(this.j=this.w=(c&f)<<8,this.u=0);break;case 49152:0<=(c= +Yc(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=Yc(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=J(this,e=S(this,a,6)))&&(a=f-c,0<=I(this,e,a)&&(this.j=this.w=this.C=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.C=a,this.u=(c^f)&(f^a)));break;default:switch(a&65024){case 2048:0<=(h=Xc(this, +a,0))&&(g=a>>6&7,0<=Uc(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.C=this.u=0,-32768>a||32767>6&7,f=this.b[g]<<16|this.b[g|1],this.C=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.C=65536));break;case 29696:0<=(c=T(this,a))&&(g=a>>6&7,a=this.b[g],a&32768&&(a|=4294901760),this.C=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.C=this.u=0;c&=63;if(c&32)c=64-c,32>c-1,this.C=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=J(this,e=S(this,a,6)))&&(f^=this.b[a>>6&7],0<=I(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.C&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.C&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.C&65536||(this.b[7]=U(this.b[7], +a));break;case 34560:this.C&65536&&(this.b[7]=U(this.b[7],a));break;case 34816:K(this,24);break;case 35072:K(this,28);break;default:switch(a&65472){case 64:0<=(h=Xc(this,a,0))&&(this.b[7]=h&65535);break;case 192:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=f<<8|f>>8,0<=I(this,e,a)&&(this.j=this.w=f&65280,this.u=this.C=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.C=0);break;case 2560:a&56?0<=(e=S(this,a,4))&&0<=I(this,e,0)&&(this.j=this.C=this.u=this.w=0):this.j=this.C= +this.u=this.w=this.b[a&7]=0;break;case 2624:0<=(f=J(this,e=S(this,a,6)))&&(a=~f,0<=I(this,e,a)&&(this.j=this.w=a,this.C=65536,this.u=0));break;case 2688:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=f+1,0<=I(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=J(this,e=S(this,a,6)))&&(a=f-1,0<=I(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=J(this,e=S(this,a,6)))&&(a=-f,0<=I(this,e,a)&&(this.C=this.j=this.w=a,this.u=a&f));break;case 2880:0<=(f=J(this,e=S(this,a,6)))&&(a=f+(this.C>>16&1),0<=I(this,e,a)&&(this.C=this.j=this.w=a,this.u=a&(a^f)));break;case 2944:0<=(f=J(this,e=S(this,a,6)))&&(a=f-(this.C>>16&1),0<=I(this,e,a)&&(this.C=this.j=this.w=a,this.u=(a^f)&f));break;case 3008:0<=(f=T(this,a))&&(this.j=this.w=f,this.C=this.u=0);break;case 3072:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=(this.C&65536|f)>>1,0<=I(this, +e,a)&&(this.C=f<<16,this.j=this.w=a,this.u=a^this.C>>1)):(g=a&7,f=this.b[g],a=(this.C&65536|f)>>1,this.b[g]=a&65535,this.C=f<<16,this.j=this.w=a,this.u=a^this.C>>1);break;case 3136:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=f<<1|this.C>>16&1,0<=I(this,e,a)&&(this.C=this.j=this.w=a,this.u=a^f)):(g=a&7,f=this.b[g],a=f<<1|this.C>>16&1,this.b[g]=a&65535,this.C=this.j=this.w=a,this.u=a^f);break;case 3200:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=f&32768|f>>1,0<=I(this,e,a)&&(this.C=f<<16,this.j=this.w=a,this.u= +this.j^this.C>>1)):(g=a&7,f=this.b[g],a=f&32768|f>>1,this.b[g]=a&65535,this.C=f<<16,this.j=this.w=a,this.u=this.j^this.C>>1);break;case 3264:a&56?0<=(f=J(this,e=S(this,a,6)))&&(a=f<<1,0<=I(this,e,a)&&(this.C=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.C=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=Xc(this,a,0))&&(61440!==(this.L&61440)&& +(h&=65535),this.B=this.L>>12&3,0<=(c=P(this,h))&&(this.B=this.L>>14&3,0<=Uc(this,c)&&(this.j=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.L>>2&12288)===(this.L&12288)?this.b[g]:this.ra[this.L>>12&3],0<=Uc(this,c)&&(this.j=this.w=c,this.u=0));break;case 3456:0<=(f=Wc(this))&&((this.ba&57344||(this.Ca=22),a&56)?0<=(h=Xc(this,a,0))&&(h&=65535,this.B=this.L>>12&3,0<=(e=Vc(this,h,4))&&(this.B=this.L>>14&3,0<=I(this,e,f)&&(this.j=this.w=f,this.u=0))):(g=a&7,6!==g||(this.L>>2&12288)===(this.L&12288)?this.b[g]= +f:this.ra[this.L>>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<=I(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.C=this.u=this.w=0):(this.b[a&7]&=65280,this.j=this.C=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.C=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.C=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.C>>16&1),0<=R(this,e,a)&&(this.j=this.w=this.C=a<<8,this.u=(a&(a^f))<<8));break;case 35712:0<=(f=Q(this,e=S(this,a,7)))&&(a=f-(this.C>>16&1),0<=R(this,e,a)&&(this.j=this.w=this.C=a<<8,this.u=((a^f)&f)<<8));break; +case 35776:0<=(f=Yc(this,a))&&(this.j=this.w=f<<8,this.C=this.u=0);break;case 35840:0<=(f=Q(this,e=S(this,a,7)))&&(a=((this.C&65536)>>8|f)>>1,0<=R(this,e,a)&&(this.C=f<<16,this.j=this.w=a<<8,this.u=this.j^this.C>>1));break;case 35904:0<=(f=Q(this,e=S(this,a,7)))&&(a=f<<1|this.C>>16&1,0<=R(this,e,a)&&(this.C=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.C=f<<16,this.j=this.w=a<<8,this.u=this.j^this.C>>1));break;case 36032:0<= +(f=Q(this,e=S(this,a,7)))&&(a=f<<1,0<=R(this,e,a)&&(this.C=this.j=this.w=a<<8,this.u=(a^f)<<8));break;case 36160:a&56?0<=(h=Xc(this,a,0))&&(this.B=this.L>>12&3,0<=(c=P(this,h|65536))&&(this.B=this.L>>14&3,0<=Uc(this,c)&&(this.j=this.w=c,this.u=0))):(g=a&7,c=6!==g||(this.L>>2&12288)===(this.L&12288)?this.b[g]:this.ra[this.L>>12&3],0<=Uc(this,c)&&(this.j=this.w=c,this.u=0));break;case 36224:0<=(f=Wc(this))&&((this.ba&57344||(this.Ca=22),a&56)?0<=(h=Xc(this,a,0))&&(this.B=this.L>>12&3,0<=(e=Vc(this, +h|65536,4))&&(this.B=this.L>>14&3,0<=I(this,e,f)&&(this.j=this.w=f,this.u=0))):(g=a&7,6!==g||(this.L>>2&12288)===(this.L&12288)?this.b[g]=f:this.ra[this.L>>12&3]=f,this.j=this.w=f,this.u=0));break;default:switch(a&65528){case 128:0<=(c=Wc(this))&&(g=a&7,this.b[7]=this.b[g],this.b[g]=c);break;case 152:this.L&49152||(this.L=this.L&63519|(a&7)<<5,this.Oa=1);break;case 160:case 168:a&1&&(this.C=0);a&2&&(this.u=0);a&4&&(this.w=1);a&8&&(this.j=0);break;case 176:case 184:a&1&&(this.C=65536);a&2&&(this.u= +32768);a&4&&(this.w=0);a&8&&(this.j=32768);break;default:switch(a){case 0:49152&this.L?(this.M|=128,K(this,4)):(this.ga=3,Pc(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.rc);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.N.push({gd:b,D:d,Rc:c,Ka:f,oc:e})}delete this.Ka}return!0};ad.prototype.Ma=function(){return!0}; +function bd(a,b,d,c){if(c)a.na("Unable to load system ROM (error "+c+": "+b+")");else{ab(a.pc,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].zb(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 hd(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 id(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 jd(a,b,d){var c;if(b){b=kd(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 nd(a,b){if(b)return md(a,b,a.fa[b]);var d=0;for(b in a.fa)md(a,b,a.fa[b]),d++;return 0>>c.F.S;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.S].Xa(c&d.F,c),b&&nd(a,b));return d};m.pa=function(a,b){var d=65535,c=Y(a);-1!==c&&(d=Rb(this.F,c),b&&nd(a,b));return d}; -m.fb=function(a,b,d){var c=Y(a);if(-1!==c){var e=this.F;e.N[(c&e.j)>>>e.S].Oa(c&e.F,b&255,c);d&&nd(a,d);H(this.f,!0)}};m.lb=function(a,b,d){var c=Y(a);if(-1!==c){var e=this.F,f=c&e.F,h=(c&e.j)>>>e.S;f!=e.F?e.N[h].nb(f,b&65535,c):(e.N[h++].Oa(f,b&255,c),e.N[h&e.B].Oa(0,b>>8&255,c+1));d&&nd(a,d);H(this.f,!0)}};function X(a){return{D:a,oa:!1}}function od(a){return[a.D,a.oa]}function pd(a){return{D:a[0],oa:a[1]}} -function Z(a,b,d){var c;d=(d?a.P:a.Da).D;if(void 0!==b){c=b=bd(a,b);var e;if(c.match(/^[a-z_][a-z0-9_]*$/i))for(c=c.toUpperCase(),d=0;de&&(e+=d.length);0>e&&(e=0);for(var f=d.length;e>>c.S],!1)}a.R=["br"];if(void 0!==a.J)for(b=1;b>>c.S],!0);a.J=["bw"];a.Ca=0} -m.wa=function(a,b,d){var c=!0;d||vd(this,a,b,!1,!0);if(a!=this.B){var e=Y(b);if(-1===e)this.g("invalid address: "+W(this,b.D)),c=!1;else{var f=this.F;f.N[e>>>f.S].wa(e&f.F,a==this.J)}}c&&(a.push(b),d?b.oa=!0:(wd(this,a,a.length-1,"set"),hd(this)));return c};function vd(a,b,d,c,e){var f=!1;d=Y(d);for(var h=1;h>>c.S],b==a.J));g.oa||hd(a);break}}return f} -function Vd(a,b){for(var d=1;d>23,w=p.D+w&65535,v=W(q,w);else if(8192==w)w=(f&63)<<1,w=p.D-w&65535,v=W(q,w);else if(12288==w)w=f&7,v=W(q,w,2);else if(24576==w)w=f&63,v=W(q,w);else if(w=f&A,A&4032&&(w>>=6,A>>=6),A&63){var A=void 0,z=w&7;switch((w&56)>>3){case 0:v=Yd(z);break; -case 1:v="@"+Yd(z);break;case 2:7>z?v="("+Yd(z)+")+":(A=q.pa(p,2),v="#"+W(q,A));break;case 3:7>z?v="@("+Yd(z)+")+":(A=q.pa(p,2),v="@#"+W(q,A));break;case 4:v="-("+Yd(z)+")";break;case 5:v="@-("+Yd(z)+")";break;case 6:A=q.pa(p,2);v=W(q,A)+"("+Yd(z)+")";7==z&&(v=[v,W(q,A+p.D&65535)]);break;case 7:A=q.pa(p,2),v="@"+W(q,A)+"("+Yd(z)+")",7==z&&(v=[v,W(q,A+p.D&65535)])}}q=v;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 $d(a,b){var d="",c=a.f;8>b?(d=Yd(b),d+="="+W(a,c.b[b])):13>b?d="A"+(b-8)+"="+W(a,c.eb[b-8]):16<=b&&20>b?d="S"+(b-16)+"="+W(a,c.Aa[b-16]):20==b&&(d="PS="+W(a,Kc(c)));d&&(d+=" ");return d}m.qb=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=f.Kb;if(e>=h&&ee;e++)f+=$d(a,e);f=f+"\n"+($d(a,6)+$d(a,7)+$d(a,20));f+=Zd(a,"T")+Zd(a,"N")+Zd(a,"Z")+Zd(a,"V")+Zd(a,"C");a.g(f);d&&(a.P=X(c.b[7]),td(a,W(a,a.P.D)))}}function ee(a,b){b=qa(b);var d=b.match(/^(['"])(.*?)\1$/);d?a.g(d[2]):ad(a,b,!0)} -function fe(a,b,d){var c="t"!=b;d=cd(a,d,null,!0)||1;var e=1==d?0:1;"tc"==b&&(e=d,d=1);Ja(d,function(){return pb(a,!0)&&a.Ma(e,c,!1)},function(){H(a.f);pb(a,!1)})} -function td(a,b,d,c){if(b=Z(a,b,!0)){void 0===c&&(c=1);var e=256;if(void 0!==d){c=Z(a,d,!0);if(!c||c.Dg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=Xd(a,b,h,f);a.g(f);a.P=b;e-=b.D-k;d++}}} -function Wd(a,b,d){var c=!0;try{b.length&&"end"!=b?d||a.g(">> "+b):(a.V&&(a.g("ended assemble at "+W(a,a.U.D)),a.P=a.U,a.V=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.ia=null;if(rb(a)&&0l||"z"da.length&&(a.g("note: only "+da.length+" available"),U=da.length);N-=U;0>N&&(null==da[da.length-1].D?(U=N+U,N=0):N+=da.length);var tc=[];"call"==Cd&&(Ha=1E5,tc=["CALL"]);for(void 0!==Bd&&a.g(U+" instructions earlier:");0=da.length&&(N=0);a.Fa=U;Ed++;Ha--}}Ed||(a.g("no "+Dd+ -"history available"),a.Fa=void 0)}else{var Gb=Z(a,ba);if(Gb){var Hb=0;sa&&("l"==sa.charAt(0)&&(sa=sa.substr(1)||ze),Hb=cd(a,sa)>>>0,65536>4||1;Be--&&0Lb?String.fromCharCode(Lb):".";Jb--}ta&&(ta+="\n");ta+=ba+" "+fb+(0==eb?" "+vc: -"")}ta&&a.g(ta);a.Da=Gb}}}}break;case "e":if("else"==f[0])break;var Mb=1,Hd=255,Id=a.Ta,Jd=a.fb;"ew"==f[0]&&(Mb=2,Hd=65535,Id=a.pa,Jd=a.lb);var Kd=Mb<<1,Ld=f[1];if(null==Ld)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 Nb=Z(a,Ld);if(Nb)for(var Ob=2;Obzc;){for(var ua=null,Fe=256;65536>ib.D>>>0;){Nd.D=a.pa(ib,2);if(null==ib.D||!Fe--)break;for(var Ge=a,Pb=Nd,Od=null,jb=Pb.D,Pd=jb,Ac=1;6>=Ac&&jb;Ac++){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;bje){if(le(c,this.O)){this.J=new I(this,"1.30.0","failsafe");le(this.J)&&(re(this,c),a=2,se(this.J));J(this.J,"timestamp",wa());te(this.J);var e=this.j&&!this.L;if(1==a||ya("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(d=pe(c)){var f=qe(c,"code"),h=qe(c,"data");f&&("ok"==f?le(c,h):("error"==f&& -"no machine state"!=h?(this.ea("Error: "+h),"unable to verify user"==h&&(Ca("user",""),this.B=null)):this.g(f+": "+h),se(c),le(c)?(d=pe(c),e=!0):d=!1))}e&&oe(this,d?c:null)}else 2==a&&c.clear()}else oe(this);delete this.O;delete this.P}e=bb(this.id);for(f=0;fa[1];a=a[2];this.Z=!0;this.A.$=!0;var c=this.K.power;c&&(c.textContent="Shutdown");this.f&&(ue(this,this.f,b,d,a),this.f.Qa());this.U&&(re(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.G=0}; -function re(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(),e={app:"PDP11js",ver:"1.30.0"};e.url=a.Y;e.user=d;e.type="bug";e.data=c;xa("http://www.pcjs.org/api/v1/report",e,!0)}} -function ge(a,b,d){var c,e="none";if(a.G)return null;a.G--;var f=new I(a,"1.30.0"),h=new I(a,"1.30.0","validate"),g=wa();J(h,"timestamp",g);J(f,"timestamp",g);J(f,"version","1.30.0");J(f,"url",window?window.location.href:null);J(f,"browser",window?window.navigator.userAgent:"");a.f&&a.f.sa&&(d&&a.f.ca(),c=a.f.sa(b,d),"object"===typeof c&&J(f,a.f.id,c),d&&(a.f.A.$=!1,!1===c&&(e=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+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));g=null;if("<"==a.charAt(0))try{e||(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 e=c[2];b("Loading "+e+"...");xa(e,null,!0,function(f,h,g){if(g||!h)d(a,"unable to resolve XML reference: "+c[0]+" ("+g+")");else{if(f=c[3])if(g=h.match(new RegExp("<"+c[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{d(a,"missing <"+c[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(c[0],h);Me(a,b,d)}})}else d(a,null)} -function Ne(a,b,d,c){function e(a){if(void 0===g){var b=h&&C(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=oa(a))}function f(a){e("Error: "+a);k&&(--ye||Sa(!0));k=!1}var h,g,k=!0;ye++;$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?Ke(d,null,null,!1,e,function(c,k){if(k)if(ab(a,d,c),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=g.transformNode(k);l?(h.outerHTML=l,--ye||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(l,h),--ye||Sa(!0)):f("invalid machine element: "+ -a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(c)}):f(c)};"<"!=b.charAt(0)?Ke(b,a,c,!0,e,l):Le(b,null,a,c,!1,e,l)}else f("missing machine element: "+a)}catch(q){f(q.message)}return k}window.embedPDP11=function(a,b,d,c){Sa(!1);return Ne(a,b,d,c)};window.enableEvents=Sa;window.sendEvent=Ta;})(); +63],35968:[7,63],36032:[5,63],36096:[66,63],36160:[59,63],36224:[64,63],36288:[61,63]},65528:{128:[76,7],152:[108,12288]},65535:{0:[55],1:[99],2:[75],3:[26],4:[109],5:[70],6:[110],7:[111],160:[69],161:[31],162:[41],163:[33],164:[45],165:[36],166:[43],167:[35],168:[38],169:[32],170:[42],171:[34],172:[46],173:[37],174:[44],175:[30],176:[69],177:[80],178:[88],179:[82],180:[92],181:[85],182:[90],183:[84],184:[87],185:[81],186:[89],187:[83],188:[93],189:[86],190:[91],191:[79]}};m=od.prototype; +m.Wa=function(a,b,d,c){this.G=b;this.f=d;this.i=a;(a=uc(a,"messages"))&&rd(this,a);this.sc=vd;wd(this,function(a){a:{var b=c.G.R,d=a[0],g=a=0,k=b.length;if(d){a=Z(xd(c,d));if(-1===a){c.g("invalid address: "+d);break a}g=a>>>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].Qb(c&d.G,c),b&&yd(a,b));return d};m.Ga=function(a,b){var d=65535,c=Z(a);-1!==c&&(d=Gb(this.G,c),b&&yd(a,b));return d}; +m.cc=function(a,b,d){var c=Z(a);if(-1!==c){var f=this.G;f.R[(c&f.i)>>>f.X].zb(c&f.G,b&255,c);d&&yd(a,d);M(this.f,!0)}};m.kc=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].mc(e,b&65535,c):(f.R[h++].zb(e,b&255,c),f.R[h&f.B].zb(0,b>>8&255,c+1));d&&yd(a,d);M(this.f,!0)}};function Y(a){return{D:a,Fa:!1}}function zd(a){return[a.D,a.Fa]}function Ad(a){return{D:a[0],Fa:a[1]}} +function xd(a,b,d){var c;d=(d?a.V:a.Bb).D;if(void 0!==b){c=b=kd(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.Gb=0} +m.cb=function(a,b,d){var c=!0;d||de(this,a,b,!1,!0);if(a!=this.B){var f=Z(b);if(-1===f)this.g("invalid address: "+X(this,b.D)),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:(ee(this,a,a.length-1,"set"),qd(this)));return c};function de(a,b,d,c,f){var e=!1;d=Z(d);for(var h=1;h>>c.X],b==a.J));g.Fa||qd(a);break}}return e} +function fe(a,b){for(var d=1;d>23,y=p.D+y&65535,x=X(q,y);else if(8192==y)y=(e&63)<<1,y=p.D-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=ie(B);break; +case 1:x="@"+ie(B);break;case 2:7>B?x="("+ie(B)+")+":(D=q.Ga(p,2),x="#"+X(q,D));break;case 3:7>B?x="@("+ie(B)+")+":(D=q.Ga(p,2),x="@#"+X(q,D));break;case 4:x="-("+ie(B)+")";break;case 5:x="@-("+ie(B)+")";break;case 6:D=q.Ga(p,2);x=X(q,D)+"("+ie(B)+")";7==B&&(x=[x,X(q,D+p.D&65535)]);break;case 7:D=q.Ga(p,2),x="@"+X(q,D)+"("+ie(B)+")",7==B&&(x=[x,X(q,D+p.D&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 ke(a,b){var d="",c=a.f;8>b?(d=ie(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,Tc(c)));d&&(d+=" ");return d}m.rc=function(a,b){return a[0]>b[0]?1:a[0]>>0;for(b=0;b>>0,g=e.Rc;if(f>=h&&ff;f++)e+=ke(a,f);e=e+"\n"+(ke(a,6)+ke(a,7)+ke(a,20));e+=je(a,"T")+je(a,"N")+je(a,"Z")+je(a,"V")+je(a,"C");a.g(e);d&&(a.V=Y(c.b[7]),be(a,X(a,a.V.D)))}}function pe(a,b){b=qa(b);var d=b.match(/^(['"])(.*?)\1$/);d?a.g(d[2]):jd(a,b,!0)} +function qe(a,b,d){var c="t"!=b;d=ld(a,d,null,!0)||1;var f=1==d?0:1;"tc"==b&&(f=d,d=1);Ea(d,function(){return pb(a,!0)&&a.wb(f,c,!1)},function(){M(a.f);pb(a,!1)})} +function be(a,b,d,c){if(b=xd(a,b,!0)){void 0===c&&(c=1);var f=256;if(void 0!==d){c=xd(a,d,!0);if(!c||c.Dg[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],e=null);e=he(a,b,h,e);a.g(e);a.V=b;f-=b.D-k;d++}}} +function ge(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.$.D)),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].D?(W=O+W,O=0):O+=fa.length);var yc=[];"call"==Id&&(Ja=1E5,yc=["CALL"]);for(void 0!==Hd&&a.g(W+" instructions earlier:");0=fa.length&&(O= +0);a.Wb=W;Kd++;Ja--}}Kd||(a.g("no "+Jd+"history available"),a.Wb=void 0)}else{var Ib=xd(a,da);if(Ib){var Jb=0;ta&&("l"==ta.charAt(0)&&(ta=ta.substr(1)||Ke),Jb=ld(a,ta)>>>0,65536>4||1;Me--&&0Nb?String.fromCharCode(Nb):".";Lb--}ua&& +(ua+="\n");ua+=da+" "+hb+(0==gb?" "+Ac:"")}ua&&a.g(ua);a.Bb=Ib}}}}break;case "e":if("else"==e[0])break;var Ob=1,Nd=255,Od=a.Jb,Pd=a.cc;"ew"==e[0]&&(Ob=2,Nd=65535,Od=a.Ga,Pd=a.kc);var Qd=Ob<<1,Rd=e[1];if(null==Rd)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 Pb=xd(a,Rd);if(Pb)for(var Qb=2;QbEc;){for(var va=null,Qe=256;65536>kb.D>>>0;){Td.D=a.Ga(kb,2);if(null==kb.D||!Qe--)break;for(var Re=a,Rb=Td,Ud=null,lb=Rb.D,Vd=lb,Fc=1;6>=Fc&&lb;Fc++){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;bue){if(we(c,this.T)){this.J=new Sc(this,"1.30.0","failsafe");we(this.J)&&(Ce(this,c),a=2,De(this.J));N(this.J,"timestamp",wa());Ee(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=Ae(c)){var e=Be(c,"code"),h=Be(c,"data");e&&("ok"==e?we(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),De(c),we(c)?(d=Ae(c),f=!0):d=!1))}f&&ze(this,d?c:null)}else 2==a&&c.clear()}else ze(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&&(Fe(this,this.f,b,d,a),this.f.Fb());this.$&&(Ce(this,b),b.clear());!d&&this.J&&(this.J.clear(),delete this.J);this.F=0}; +function Ce(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 re(a,b,d){var c,f="none";if(a.F)return null;a.F--;var e=new Sc(a,"1.30.0"),h=new Sc(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;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);Xe(a,b,d)}})}else d(a,null)} +function Ye(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&&(--Je||Sa(!0));k=!1}var h,g,k=!0;Je++;$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?Ve(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,--Je||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),--Je||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)?Ve(b,a,c,!0,f,l):We(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 Ye(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 49fd50d2b..97fe85427 100644 --- a/versions/pdp11/1.30.0/pdp11.js +++ b/versions/pdp11/1.30.0/pdp11.js @@ -3,118 +3,152 @@ function aa(a){var b=16,c;if(a){b||(b=10);var d=a.charAt(0),f=0=f?48:55),d=String.fromCharCode(f)+d;a>>=4}return(c?"0x":"")+d}function ba(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0":">",'"':""","'":"'"};function ga(a){return a.replace(/[&<>"']/g,function(a){return fa[a]})}var ha=Date.now||function(){return+new Date}; function ia(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())} -function q(a,b,c,d){var f=0,e=null,g=null;if("object"==typeof resources&&(e=resources[a]))return d&&d(a,e,f),[e,f];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(e=h.responseText,200==h.status||!h.status&&e.length&&"file:"==(window?window.location.protocol:"file:")||(f=h.status||-1),d&&d(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,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(k)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(e=h.responseText,200!=h.status&&(f=h.status||-1),d&&d(a,e,f),g=[e,f]);return g}function ea(){return"http://"+(window?window.location.host:"www.pcjs.org")} -function r(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 p(a,b,c,d){var f=0,e=null,h=null;if("object"==typeof resources&&(e=resources[a]))return d&&d(a,e,f),[e,f];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(e=g.responseText,200==g.status||!g.status&&e.length&&"file:"==(window?window.location.protocol:"file:")||(f=g.status||-1),d&&d(a,e,f))});if(b&&"object"== +typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(e=g.responseText,200!=g.status&&(f=g.status||-1),d&&d(a,e,f),h=[e,f]);return h}function ea(){return"http://"+(window?window.location.host:"www.pcjs.org")} +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.za=this.id:(this.Ra=this.id.substr(0,b),this.za=this.id.substr(b+1));this[a]=c;this.h={ready:!1,ja:!1,Aa:!1,B:!1,error:!1};this.va=null;this.h.error=!1;this.o={};this.w=null;w.push(this)}var wa=void 0,xa={}; +function ta(a){if(ra)try{for(var b=0;bb?this.vb=this.id:(this.Gb=this.id.substr(0,b),this.vb=this.id.substr(b+1));this[a]=c;this.h={ready:!1,ab:!1,zb:!1,L:!1,error:!1};this.nb=null;this.h.error=!1;this.A={};this.H=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 x(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={}),w=window.PCjs.Components||(window.PCjs.Components=[])}else Ca={},w=[];function Da(a,b,c){Ca[a]&&b&&(Ca[a][b]=c)}function y(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b>1)+2;10>this.c&&(this.c=10);15>2;this.g=this.f-1;this.s=this.l/this.f|0;this.v=this.s-1;this.da=[];a=new E;La(a,this.w);this.b=Array(this.s);for(b=0;b>8))}Ka.prototype.reset=function(){};Ka.prototype.Y=function(a,b){b||this.reset();return!0}; -function Qa(a,b,c,d,f){for(var e=b,g=c,h=e>>>a.c;0g&&(p=g);if(k&&k.size){if(k.type==d&&k.controller==f){if(e+g<=k.ga)return k.xa+=k.ga-e,k.ga=e,!0;if(e>=k.ga+k.xa){p=k.size-(e-l);p>g&&(p=g);k.xa=e-k.ga+p;e=l+a.f;g-=p;h++;continue}}return Sa(1,e,g)}e=new E(e,p,a.f,d,f);La(e,a.w,k);a.b[h++]=e;e=l+a.f;g-=p}return 0>=g?(a.status(Math.floor(c/1024)+"Kb "+Ta[d]+" at "+n(b,8,!0)),!0):Sa(2,b,c)} -function Sa(a,b,c){r("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}function F(a){v.call(this,"Device",a,F);this.b=a.name}x(F); -F.prototype.ba=function(a,b,c,d){this.s=b;this.a=c;this.w=d;switch(this.b){default:a=Ua;for(var f in a){var e=a[f];c=b;d=+f;for(var g=e[0]?e[0].bind(this):null,h=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 p=l&8191;if(0>p||8192<=p){r("I/O address out of bounds: "+n(c.j+p,8,!0));break}void 0!==c.da[p]?r("I/O address already registered: "+n(c.j+p,8,!0)):c.da[p]=[g,h,k,e,!1]}}}D(this)};F.prototype.wa=function(){return this.a.wa()}; -F.prototype.na=function(a){this.a.na(a)};var Ua={};Ua[4194302]=[null,null,F.prototype.wa,F.prototype.na];u(function(){for(var a=C(document,"pdp11","device"),b=0;b>1),this.a=new Int32Array(this.c,0,c>>2),ab(this,Xa?bb:cb);else{this.a=Array(c>>2);for(a=0;a>2),b=0;b>8,c)},G:function(a){return this.a[a>>2]>>>((a&3)<<3)&255},O:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},T:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<>8);this.W=!0},C:function(a,b){return this.D(a,b)},J:function(a,b){return this.K(a, -b)},R:function(a,b,c){this.g||this.$a(a,b,c)},V:function(a,b,c){this.g||this.Z(a,b,c)},v:function(a){return this.b[a]},F:function(a){return this.b[a]},I:function(a){return this.f.getUint16(a,!0)},N:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.s[a>>1]},P:function(a,b){this.b[a]=b;this.W=!0},S:function(a,b){this.b[a]=b;this.W=!0},U:function(a,b){this.f.setUint16(a,b,!0);this.W=!0},$:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.s[a>>1]=b;this.W=!0}}; -function La(a,b,c){a.w=b;a.i=a.o=0;c&&((a.i=c.i)&&eb(a,fb,!1),(a.o=c.o)&&gb(a,fb,!1))}function gb(a,b,c){c&&a.o||(a.ma=!a.g&&b[1]||a.m,a.kb=!a.g&&b[3]||a.u);if(c||void 0===c)a.$a=b[1]||a.m,a.Z=b[3]||a.u}function eb(a,b,c){c&&a.i||(a.la=b[0]||a.j,a.eb=b[2]||a.l);if(c||void 0===c)a.D=b[0]||a.j,a.K=b[2]||a.l}function ab(a,b){b||(b=hb);eb(a,b,void 0);gb(a,b,void 0)}var hb=[],db=[E.prototype.G,E.prototype.T,E.prototype.O,E.prototype.aa],fb=[E.prototype.C,E.prototype.R,E.prototype.J,E.prototype.V]; -if(Ha)var cb=[E.prototype.v,E.prototype.P,E.prototype.I,E.prototype.U],bb=[E.prototype.F,E.prototype.S,E.prototype.N,E.prototype.$];function ib(a,b){v.call(this,"CPU",a,ib);var c=a.multiplier||1;this.Ga=a.cycles||b;this.T=c;this.Ba=Math.round(this.Ga/1E4)/100;this.R=this.Ba*this.T;this.h.M=!1;this.h.Ya=!1;this.h.ia=a.autoStart;this.h.Ma=!1;this.h.ua=!1;this.sa=this.S=0;this.ta=a.csStart;this.$=a.csInterval;this.aa=a.csStop;this.pa=[];this.gb=this.Ka.bind(this);D(this)}x(ib);var jb=["power","reset"]; -m=ib.prototype;m.ba=function(a,b,c,d){this.l=a;this.s=b;this.w=d;for(b=0;b>=3;d=""+f}else d=n(c,d);else d="--------".substr(0,d||4);a.o[b].textContent!=d&&(a.o[b].textContent=d)}} -m.L=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.o[b]=c;a=!0;break;case "run":this.o[b]=c;c.onclick=function(){var a;if(a=d.l)if(a=d.l,a.h.B)a=!0;else{var b=null,c,h=y(a.id);for(c=0;ca.I/a.R&&(b=1);a.T=b;var c=a.Ba*a.T;if(a.R!=c){a.R=c;var c=a.R.toFixed(2)+"Mhz",d=a.o.setSpeed;d&&(d.textContent=c);a.H("target speed: "+c)}}pb(a,a.F);a.F=0;a.D=ha();a.J=0;qb(a)}function sb(a){a.K-=a.G;a.G=0} -m.Ka=function(){if(Fa(this,!0)){if(!this.h.M){ob(this);this.l&&this.l.start(this.D,rb(this));this.h.M=!0;this.h.Ya=!0;this.Z&&this.Z.start();var a=this.o.run;a&&(a.textContent="Halt");this.l&&this.l.ca(!0)}this.Ha>=this.Ga&&qb(this,!0);this.fa=0;this.ra=ha();this.J&&(a=this.ra-this.J,a>this.Va&&(this.D+=a,this.D>this.ra&&(this.D=this.ra)));try{do{for(var b=this.h.ua?1:this.oa,c=this.pa.length-1;0<=c;c--){var d=this.pa[c];0>d[0]||b>d[0]&&(b=d[0])}this.Za(b);for(var f=this.K-this.G,a=f,e=this.pa.length- -1;0<=e;e--){var g=this.pa[e];0>g[0]||(g[0]-=a,0>=g[0]&&(g[0]=-1,g[1]()))}this.fa+=f;this.F+=f;pb(this,0,!0);a=f;if(this.h.ua){var h=!1;this.sa=this.sa+this.Oa()|0;this.S-=a;0>=this.S&&(this.S+=this.$,h=!0);0<=this.aa&&this.aa<=rb(this)&&(this.$=this.aa=-1,mb(this),H(this),h=!0);h&&this.H(rb(this)+" cycles: checksum="+n(this.sa))}this.ea-=f;if(0>=this.ea){this.ea+=this.oa;15<=++this.Wa&&(this.l&&this.l.ca(),this.Wa=0);break}}while(this.h.M)}catch(k){H(this);nb(this);this.l&&this.l.stop(ha(),rb(this)); -Fa(this,!1);b=k.stack||k.message;this.h.error=!0;this.A(b);return}b=setTimeout;c=this.gb;this.J=ha();d=this.Va;this.fa&&(d=Math.round(d*this.fa/this.oa));d=d-(this.J-this.ra);if(f=this.J-this.D)this.I=Math.round(this.F/(10*f))/100,864E5<=f&&(this.N=0,ob(this));if(0>d||this.Id&&(this.D-=d),d=0;this.Ha+=this.fa;this.J+=d;b(c,d)}else nb(this),this.l&&this.l.stop(ha(),rb(this))};m.Za=function(){return 0}; -function H(a){a.h.ja&&(a.h.Aa=!0);sb(a);pb(a,a.F);a.F=0;if(a.h.M){a.h.M=!1;a.Z&&a.Z.stop();var b=a.o.run;b&&(b.textContent="Run")}a.h.complete=void 0}function nb(a){a.l&&a.l.ca(void 0)} -function tb(a){this.fb=+a.model||1170;this.ib=a.resetAddr||0;ib.call(this,a,1E6);this.Pa=0;this.g=65536;this.c=32768;this.f=65535;this.b=32768;this.i=15;this.a=[0,0,0,0,0,0,0,this.ib];this.Ia=[0,0,0,0,0,0];this.U=[0,0,0,0];this.memory=[];this.u=[];this.Ja=this.Xa=0;this.O=2;this.P=255;this.m=0;this.V=-1;this.Ua=this.Da=this.Ta=this.j=this.ya=this.C=this.v=0;this.qa=[7,7,7,7];this.Fa=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,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.jb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.h.complete=this.h.ab=!1}x(tb,ib);m=tb.prototype;m.reset=function(){this.h.M&&H(this);ub(this);lb(this);this.h.error=!1;this.parent.reset.call(this)}; -function ub(a){a.P=255;a.u=[];a.Xa=0;a.v=a.C=a.ya=a.Ta=0;a.qa[0]=a.qa[1]=a.qa[3]=7;a.Da=0}m.Oa=function(){return 0};m.save=function(){var a=new I(this);J(a,0,[]);J(a,1,[this.Sa,this.N,this.T]);for(var b=this.s,c=0,d=[],f=0;f>14&3;b=this.i>>14&3;this.j!=b&&(this.U[b]=this.a[6],this.a[6]=this.U[this.j]);this.O=2;this.i=a};m.wa=function(){return this.i=this.i&63728|(this.b&32768?8:0)|(this.f&65535?0:4)|(this.c&32768?2:0)|(this.g&65536?1:0)}; -function K(a,b){var c,d,f=0;0>a.V?a.V=a.wa():a.j||(b=4,f=1);a.v&57344||(a.C=63222);a.j=0;0<=(c=L(a,b|65536))&&0<=(d=L(a,b+2&65535|65536))&&(a.na(d&53247|a.V>>2&12288),f&&(a.a[6]=4),0<=M(a,a.V)&&0<=M(a,a.a[7])&&(a.a[7]=c));a.m=0;return a.V=-1} -function vb(a,b,c){var d,f,e,g=0;if(c&a.Ta){d=b>>13&a.qa[a.j];f=a.Fa[a.j][d];e=(a.Fa[a.j][d+16]<<6)+(b&8191)&4194303;if(a.ya&16){if(3932160<=e&&4186112>e){e=e&262143;var h=e>>13&31;31>h?a.ya&32&&(e=a.jb[h]+(e&8190)&4194302,3932160<=e&&4186112>e&&console.log("panic(898)")):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e&&(3915776<=e||e&1&&!(c&1)))return K(a,4);switch(f&7){case 1:g=4096;case 2:f|=128;c&4&&(g=8192);break;case 4:g=4096;case 5:c&4&&(g=4096);case 6:f|=c&4?192:128;break; -default:g=32768}32512!==(f&32520)&&(f&8?f&32512&&(b&8128)<(f>>2&8128)&&(g|=16384):(b&8128)>(f>>2&8128)&&(g|=16384));a.Fa[a.j][d]=f;if(4194170!==e||a.j)a.Da=a.j,a.Ua=d;if(g){if(g&57344)return 0<=a.V&&(g|=128),a.v&57344||(a.v=a.v|g|a.Da<<5|a.Ua<<1),K(a,168);a.v&61440||!(4191360>e||4194239>>c.c;c=d!=c.g?c.b[f].eb(d,b):c.b[f++].la(d,b)|c.b[f&c.v].la(0,b+1)<<8}else c=b;return c}function O(a,b,c){c&=65535;if(4194304<=b)return a.a[b-4194304]=c;if(0<=b){a=a.s;var d=c,f=b&a.g,e=(b&a.i)>>>a.c;f!=a.g?a.b[e].kb(f,d&65535,b):(a.b[e++].ma(f,d&255,b),a.b[e&a.v].ma(0,d>>8&255,b+1));return c}return b} -function P(a,b){var c;4194304<=b?c=a.a[b-4194304]&255:3932160<=b?c=-1:0<=b?(c=a.s,c=c.b[(b&c.i)>>>c.c].la(b&c.g,b)):c=b;return c}function Q(a,b,c){c&=255;return 4194304<=b?a.a[b-4194304]=a.a[b-4194304]&65280|c:3932160<=b?-1:0<=b?(a=a.s,a.b[(b&a.i)>>>a.c].ma(b&a.g,c&255,b),c):b}function L(a,b){return N(a,vb(a,b,2))}function wb(a){var b=L(a,a.a[6]|65536);0<=b&&(a.a[6]=a.a[6]+2&65535);return b} -function M(a,b){var c,d;a.a[6]=d=a.a[6]-2&65535;a.v&57344||(a.C=a.C<<8|246);if(!a.j&&d<=a.P&&4>3&7){case 0:return K(a,4);case 1:if(6===e&&!a.j&&c&4&&(a.a[6]<=a.P||65534<=a.a[6])){if(a.a[6]<=a.P-32||65534<=a.a[6])return a.a[6]=4,K(a,4);a.m|=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=L(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=L(a,d)))return d; -d|=65536;break;case 6:if(0>(d=L(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=L(a,a.a[7])))return d;a.a[7]=a.a[7]+2&65535;d=d+a.a[e]&65535;return 0>(d=L(a,d|65536))?d:d|65536}a.a[e]=a.a[e]+f&65535;a.v&57344||(a.C=a.C<<8|f<<3&248|e);if(6===e&&!a.j&&c&4&&0>=f&&(a.a[6]<=a.P||65534<=a.a[6])){if(a.a[6]<=a.P-32)return a.a[6]=4,K(a,4);a.m|=4}return d}function S(a,b,c){var d;return b&56?(0<=(d=R(a,b,c))&&(d=vb(a,d,c)),d):4194304+(b&7)} -function T(a,b){var c;b&56?0<=(c=S(a,b,2))&&(c=N(a,c)):c=a.a[b&7];return c}function U(a,b){var c;b&56?0<=(c=S(a,b,3))&&(c=P(a,c)):c=a.a[b&7]&255;return c}function V(a,b){return((b&128?b|65280:b&255)<<1)+a&65535} -m.Za=function(a){this.h.complete=!0;this.h.ab=!1;this.h.Ya=!1;this.K=this.G=a;this.Sa&256?(sb(this),a=!1):a=!0;if(a){do{var b,c,d,f,e;if(this.O)if(1===this.O)this.O=2;else{this.O=0;e=-1;b=this.Xa&224;if(0<(a=this.u.length))for(;0b&&(b=this.u[a].cb,e=a)}b>(this.i&224)&&(0>e?K(this,160):(K(this,this.u[e].lb),this.u.splice(e,1)))}this.v&57344||(this.C= -0);this.m=this.i&16;if(0<=(a=L(this,this.a[7])))switch(this.a[7]=this.a[7]+2&65535,a&61440){case 4096:0<=(b=T(this,a>>6))&&(a&56?0<=(d=S(this,a,4))&&0<=O(this,d,b)&&(this.b=this.f=b,this.c=0):(this.b=this.f=this.a[a&7]=b,this.c=0));break;case 8192:0<=(b=T(this,a>>6))&&0<=(c=T(this,a))&&(this.b=this.f=this.g=a=b-c,this.c=(b^c)&(b^a));break;case 12288:0<=(b=T(this,a>>6))&&0<=(c=T(this,a))&&(this.b=this.f=b&c,this.c=0);break;case 16384:0<=(b=T(this,a>>6))&&(a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c&~b, -0<=O(this,d,a)&&(this.b=this.f=a,this.c=0)):(this.b=this.f=a=this.a[a&7]&=~b,this.c=0));break;case 20480:0<=(b=T(this,a>>6))&&(a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c|b,0<=O(this,d,a)&&(this.b=this.f=a,this.c=0)):(this.b=this.f=a=this.a[a&7]|=b,this.c=0));break;case 24576:0<=(b=T(this,a>>6))&&(a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=b+c,0<=O(this,d,a)&&(this.b=this.f=this.g=a,this.c=(b^a)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=b+c)&65535,this.b=this.f=this.g=a,this.c=(b^a)&(c^a)));break;case 36864:0<= -(b=U(this,a>>6))&&(a&56?0<=(d=S(this,a,5))&&0<=Q(this,d,b)&&(this.b=this.f=b<<8,this.c=0):(b&128&&(b|=65280),this.b=this.f=this.a[a&7]=b,this.c=0));break;case 40960:0<=(b=U(this,a>>6))&&0<=(c=U(this,a))&&(a=b-c,this.b=this.f=this.g=a<<8,this.c=((b^c)&(b^a))<<8);break;case 45056:0<=(b=U(this,a>>6))&&0<=(c=U(this,a))&&(this.b=this.f=(b&c)<<8,this.c=0);break;case 49152:0<=(b=U(this,a>>6))&&0<=(c=P(this,d=S(this,a,7)))&&(a=c&~b,0<=Q(this,d,a)&&(this.b=this.f=a<<8,this.c=0));break;case 53248:0<=(b=U(this, -a>>6))&&0<=(c=P(this,d=S(this,a,7)))&&(a=c|b,0<=Q(this,d,a)&&(this.b=this.f=a<<8,this.c=0));break;case 57344:0<=(b=T(this,a>>6))&&(a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c-b,0<=O(this,d,a)&&(this.b=this.f=this.g=a,this.c=(b^c)&(c^a))):(e=a&7,c=this.a[e],this.a[e]=(a=c-b)&65535,this.b=this.f=this.g=a,this.c=(b^c)&(c^a)));break;default:switch(a&65024){case 2048:0<=(f=R(this,a,0))&&(e=a>>6&7,0<=M(this,this.a[e])&&(this.a[e]=this.a[7],this.a[7]=f&65535));break;case 28672:0<=(b=T(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.b=a>>16,this.f=this.b|a,this.g=this.c=0,-32768>a||32767>6&7,c=this.a[e]<<16|this.a[e|1],this.g=this.c=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.b=a>>16):(this.c=32768,this.f=a>>15|a,this.b=c>>16,-1===b&&65534===this.a[e]&&(this.a[e]=this.a[e|1]=1))):(this.f= -this.b=0,this.c=32768,this.g=65536));break;case 29696:0<=(b=T(this,a))&&(e=a>>6&7,a=this.a[e],a&32768&&(a|=4294901760),this.g=this.c=0,b&=63,b&32?(b=64-b,16>b):b&&(16>15&65535)&&65535!==c&&(this.c=32768))),this.a[e]=a&65535,this.b=this.f=a);break;case 30208:if(0<=(b=T(this,a))){e=a>>6&7;c=this.a[e]<<16|this.a[e|1];this.g=this.c=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.b=a>>16;this.f=a>>16|a}break;case 30720:a&56?0<=(c=N(this,d=S(this,a,6)))&&(c^=this.a[a>>6&7],0<=O(this,d,c)&&(this.b=this.f=c,this.c=0)):(this.b=this.f=c=this.a[a&7]^=this.a[a>>6&7],this.c=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]=V(this.a[7], -a);break;case 512:this.f&65535&&(this.a[7]=V(this.a[7],a));break;case 768:this.f&65535||(this.a[7]=V(this.a[7],a));break;case 1024:(this.b&32768)===(this.c&32768)&&(this.a[7]=V(this.a[7],a));break;case 1280:(this.b&32768)!==(this.c&32768)&&(this.a[7]=V(this.a[7],a));break;case 1536:this.f&65535&&(this.b&32768)===(this.c&32768)&&(this.a[7]=V(this.a[7],a));break;case 1792:this.f&65535&&(this.b&32768)===(this.c&32768)||(this.a[7]=V(this.a[7],a));break;case 32768:this.b&32768||(this.a[7]=V(this.a[7], -a));break;case 33280:!(this.g&65536)&&this.f&65535&&(this.a[7]=V(this.a[7],a));break;case 33024:this.b&32768&&(this.a[7]=V(this.a[7],a));break;case 33536:if(this.g&65536||!(this.f&65535))this.a[7]=V(this.a[7],a);break;case 33792:this.c&32768||(this.a[7]=V(this.a[7],a));break;case 34048:this.c&32768&&(this.a[7]=V(this.a[7],a));break;case 34304:this.g&65536||(this.a[7]=V(this.a[7],a));break;case 34560:this.g&65536&&(this.a[7]=V(this.a[7],a));break;case 34816:K(this,24);break;case 35072:K(this,28);break; -default:switch(a&65472){case 64:0<=(f=R(this,a,0))&&(this.a[7]=f&65535);break;case 192:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c<<8|c>>8,0<=O(this,d,a)&&(this.b=this.f=c&65280,this.c=this.g=0)):(e=a&7,c=this.a[e],this.a[e]=(c<<8|c>>8)&65535,this.b=this.f=c&65280,this.c=this.g=0);break;case 2560:a&56?0<=(d=S(this,a,4))&&0<=O(this,d,0)&&(this.b=this.g=this.c=this.f=0):this.b=this.g=this.c=this.f=this.a[a&7]=0;break;case 2624:0<=(c=N(this,d=S(this,a,6)))&&(a=~c,0<=O(this,d,a)&&(this.b=this.f=a,this.g= -65536,this.c=0));break;case 2688:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c+1,0<=O(this,d,a)&&(this.b=this.f=a,this.c=a&(a^c))):(e=a&7,c=this.a[e],a=c+1,this.a[e]=a&65535,this.b=this.f=a,this.c=a&(a^c));break;case 2752:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c-1,0<=O(this,d,a)&&(this.b=this.f=a,this.c=(a^c)&c)):(e=a&7,c=this.a[e],a=c-1,this.a[e]=a&65535,this.b=this.f=a,this.c=(a^c)&c);break;case 2816:0<=(c=N(this,d=S(this,a,6)))&&(a=-c,0<=O(this,d,a)&&(this.g=this.b=this.f=a,this.c=a&c));break;case 2880:0<= -(c=N(this,d=S(this,a,6)))&&(a=c+(this.g>>16&1),0<=O(this,d,a)&&(this.g=this.b=this.f=a,this.c=a&(a^c)));break;case 2944:0<=(c=N(this,d=S(this,a,6)))&&(a=c-(this.g>>16&1),0<=O(this,d,a)&&(this.g=this.b=this.f=a,this.c=(a^c)&c));break;case 3008:0<=(c=T(this,a))&&(this.b=this.f=c,this.g=this.c=0);break;case 3072:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=(this.g&65536|c)>>1,0<=O(this,d,a)&&(this.g=c<<16,this.b=this.f=a,this.c=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.b=this.f=a,this.c=a^this.g>>1);break;case 3136:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c<<1|this.g>>16&1,0<=O(this,d,a)&&(this.g=this.b=this.f=a,this.c=a^c)):(e=a&7,c=this.a[e],a=c<<1|this.g>>16&1,this.a[e]=a&65535,this.g=this.b=this.f=a,this.c=a^c);break;case 3200:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c&32768|c>>1,0<=O(this,d,a)&&(this.g=c<<16,this.b=this.f=a,this.c=this.b^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.b=this.f=a,this.c=this.b^this.g>> -1);break;case 3264:a&56?0<=(c=N(this,d=S(this,a,6)))&&(a=c<<1,0<=O(this,d,a)&&(this.g=this.b=this.f=a,this.c=a^c)):(e=a&7,c=this.a[e],a=c<<1,this.a[e]=a&65535,this.g=this.b=this.f=a,this.c=a^c);break;case 3328:f=this.a[7]+((a&63)<<1)&65535;0<=(b=L(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=R(this,a,0))&&(61440!==(this.i&61440)&&(f&=65535),this.j=this.i>>12&3,0<=(b=L(this,f))&&(this.j=this.i>>14&3,0<=M(this,b)&&(this.b=this.f=b,this.c=0))):(e=a& -7,b=6!==e||(this.i>>2&12288)===(this.i&12288)?this.a[e]:this.U[this.i>>12&3],0<=M(this,b)&&(this.b=this.f=b,this.c=0));break;case 3456:0<=(c=wb(this))&&((this.v&57344||(this.C=22),a&56)?0<=(f=R(this,a,0))&&(f&=65535,this.j=this.i>>12&3,0<=(d=vb(this,f,4))&&(this.j=this.i>>14&3,0<=O(this,d,c)&&(this.b=this.f=c,this.c=0))):(e=a&7,6!==e||(this.i>>2&12288)===(this.i&12288)?this.a[e]=c:this.U[this.i>>12&3]=c,this.b=this.f=c,this.c=0));break;case 3520:0<=(d=S(this,a,4))&&(a=-(this.b>>15&1),0<=O(this,d, -a)&&(this.f=a,this.c=0));break;case 35328:a&56?0<=(d=S(this,a,5))&&0<=Q(this,d,0)&&(this.b=this.g=this.c=this.f=0):(this.a[a&7]&=65280,this.b=this.g=this.c=this.f=0);break;case 35392:0<=(c=P(this,d=S(this,a,7)))&&(a=~c,0<=Q(this,d,a)&&(this.b=this.f=a<<8,this.g=65536,this.c=0));break;case 35456:0<=(c=P(this,d=S(this,a,7)))&&(a=c+1,0<=Q(this,d,a)&&(this.b=this.f=a<<8,this.c=(a&(a^c))<<8));break;case 35520:0<=(c=P(this,d=S(this,a,7)))&&(a=c-1,0<=Q(this,d,a)&&(this.b=this.f=a<<8,this.c=((a^c)&c)<<8)); -break;case 35584:0<=(c=P(this,d=S(this,a,7)))&&(a=-c,0<=Q(this,d,a)&&(this.g=this.b=this.f=a<<8,this.c=(a&c)<<8));break;case 35648:0<=(c=P(this,d=S(this,a,7)))&&(a=c+(this.g>>16&1),0<=Q(this,d,a)&&(this.b=this.f=this.g=a<<8,this.c=(a&(a^c))<<8));break;case 35712:0<=(c=P(this,d=S(this,a,7)))&&(a=c-(this.g>>16&1),0<=Q(this,d,a)&&(this.b=this.f=this.g=a<<8,this.c=((a^c)&c)<<8));break;case 35776:0<=(c=U(this,a))&&(this.b=this.f=c<<8,this.g=this.c=0);break;case 35840:0<=(c=P(this,d=S(this,a,7)))&&(a=((this.g& -65536)>>8|c)>>1,0<=Q(this,d,a)&&(this.g=c<<16,this.b=this.f=a<<8,this.c=this.b^this.g>>1));break;case 35904:0<=(c=P(this,d=S(this,a,7)))&&(a=c<<1|this.g>>16&1,0<=Q(this,d,a)&&(this.g=this.b=this.f=a<<8,this.c=(a^c)<<8));break;case 35968:0<=(c=P(this,d=S(this,a,7)))&&(a=c&128|c>>1,0<=Q(this,d,a)&&(this.g=c<<16,this.b=this.f=a<<8,this.c=this.b^this.g>>1));break;case 36032:0<=(c=P(this,d=S(this,a,7)))&&(a=c<<1,0<=Q(this,d,a)&&(this.g=this.b=this.f=a<<8,this.c=(a^c)<<8));break;case 36160:a&56?0<=(f=R(this, -a,0))&&(this.j=this.i>>12&3,0<=(b=L(this,f|65536))&&(this.j=this.i>>14&3,0<=M(this,b)&&(this.b=this.f=b,this.c=0))):(e=a&7,b=6!==e||(this.i>>2&12288)===(this.i&12288)?this.a[e]:this.U[this.i>>12&3],0<=M(this,b)&&(this.b=this.f=b,this.c=0));break;case 36224:0<=(c=wb(this))&&((this.v&57344||(this.C=22),a&56)?0<=(f=R(this,a,0))&&(this.j=this.i>>12&3,0<=(d=vb(this,f|65536,4))&&(this.j=this.i>>14&3,0<=O(this,d,c)&&(this.b=this.f=c,this.c=0))):(e=a&7,6!==e||(this.i>>2&12288)===(this.i&12288)?this.a[e]= -c:this.U[this.i>>12&3]=c,this.b=this.f=c,this.c=0));break;default:switch(a&65528){case 128:0<=(b=wb(this))&&(e=a&7,this.a[7]=this.a[e],this.a[e]=b);break;case 152:this.i&49152||(this.i=this.i&63519|(a&7)<<5,this.O=1);break;case 160:case 168:a&1&&(this.g=0);a&2&&(this.c=0);a&4&&(this.f=1);a&8&&(this.b=0);break;case 176:case 184:a&1&&(this.g=65536);a&2&&(this.c=32768);a&4&&(this.f=0);a&8&&(this.b=32768);break;default:switch(a){case 0:49152&this.i?K(this,4):(this.Ja=3,sb(this),console.log("HALT at "+ -this.a[7].toString(8)));break;case 1:e=0;if(0<(a=this.u.length))for(;0>8&255;else if(e=h.data)for(a.b=Array(4*e.length),g=f=0;f>8&255,a.b[g++]=e[f]>>16&255,a.b[g++]=e[f]>>24&255;else a.b=h;a.i=h.symbols;if(!a.b.length){r("Empty ROM: "+b); -return}if(1==a.b.length){r(a.b[0]);return}}catch(k){a.A("ROM data error: "+k.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),f=0;f>>d.c].$a(f&d.g,a.b[c]&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(c=0;c>>f.c;0>>=f.c;0\nLicense: GPL version 3 or later ");this.H("Portions adapted from the PDP-11/70 Emulator v1.3 by Paul Nankervis ");for(b=0;bX){if(Y(d,this.m)){this.i=new I(this,"1.30.0","failsafe");Y(this.i)&&(Ib(this,d),a=2,Jb(this.i));J(this.i,"timestamp",ia());Kb(this.i);var f=this.b&&!this.j;if(1==a||ja("Click OK to restore the previous PDP11js machine state, or CANCEL to reset the machine.")){if(c=Hb(d)){var e=Z(d,"code"),g=Z(d,"data");e&&("ok"==e?Y(d,g):("error"==e&&"no machine state"!= -g?(this.A("Error: "+g),"unable to verify user"==g&&(na("user",""),this.c=null)):this.H(e+": "+g),Jb(d),Y(d)?(c=Hb(d),f=!0):c=!1))}f&&Gb(this,c?d:null)}else 2==a&&d.clear()}else Gb(this);delete this.m;delete this.u}f=y(this.id);for(e=0;ea[1];a=a[2];this.K=!0;this.h.B=!0;var d=this.o.power;d&&(d.textContent="Shutdown");this.a&&(Lb(this,this.a,b,c,a),this.a.ia());this.D&&(Ib(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0}; -function Ib(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.c||"",d=b.toString(),f={app:"PDP11js",ver:"1.30.0"};f.url=a.J;f.user=c;f.type="bug";f.data=d;q("http://www.pcjs.org/api/v1/report",f,!0)}} -function Mb(a,b,c){var d,f="none";if(a.f)return null;a.f--;var e=new I(a,"1.30.0"),g=new I(a,"1.30.0","validate"),h=ia();J(g,"timestamp",h);J(e,"timestamp",h);J(e,"version","1.30.0");J(e,"url",window?window.location.href:null);J(e,"browser",window?window.navigator.userAgent:"");a.a&&a.a.X&&(c&&H(a.a),d=a.a.X(b,c),"object"===typeof d&&J(e,a.a.id,d),c&&(a.a.h.B=!1,!1===d&&(f=null)));for(var h=y(a.id),k=0;kh.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDP11js$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1pdp11$2"));h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(A){h=null,a=A.message}else a="unrecognized XML: "+(255/g.exec(a)){var f=d[2];b("Loading "+f+"...");q(f,null,!0,function(e,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(e=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],l,p=/( [a-z]+=)(['"])(.*?)\2/g;l=p.exec(e);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+f);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(d[0],g);Tb(a,b,c)}})}else c(a,null)} -function Ub(a,b,c,d){function f(a){if(void 0===h){var b=g&&C(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ga(a))}function e(a){f("Error: "+a);k&&(--Qb||ua(!0));k=!1}var g,h,k=!0;Qb++;Ca[a]={};try{if(g=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],A=document.createElement("style");A.type="text/css";A.styleSheet?A.styleSheet.cssText=l:A.appendChild(document.createTextNode(l));p.appendChild(A)}c|| -(c="/versions/pdp11/1.30.0/components.xsl");l=function(d,h){h?Rb(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=h.transformNode(k);l?(g.outerHTML=l,--Qb||ua(!0)):e("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--Qb||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)?Rb(b,a,d,!0,f,l):Sb(b,null,a,d,!1,f,l)}else e("missing machine element: "+a)}catch(Vb){e(Vb.message)}return k}window.embedPDP11=function(a,b,c,d){ua(!1);return Ub(a,b,c,d)};window.enableEvents=ua;window.sendEvent=va;})(); +v.prototype={constructor:v,parent:null,toString:function(){return this.name?this.name:this.id||this.type},aa:function(a,b,c){switch(b){case "clear":return this.A[b]||(this.A[b]=c,c.onclick=function(a){return function(){a.A.print&&(a.A.print.value="")}}(this)),!0;case "print":return this.A[b]||(this.Ab=this.A[b]=c,c.value="",this.X=function(a){return function(b,c){8192>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.bb=this.P;a=new F;Ka(a,this.H);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.bb(b,-1,1)} +function Na(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.bb(c,b,1)}function Ma(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.bb(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.bb(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.tb+=k.Pa-e,k.Pa=e,!0;if(e>=k.Pa+k.tb){r=k.size-(e-l);r>h&&(r=h);k.tb=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 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={Db:[],fa:0,T:128,b:127,ac:0};this.b={data:0,wc:0,Qa:20,tc:0};this.f={Cb:0,l:0};this.g={ib:2496,O:0,w:128,jb:0,hb:0,U:0,Rb:0,R:[],Ea:[406,406,406,406],C:[12,12,12,12]};this.i={l:129,$a:0,G:0,sa:0,pa:0,wa:0,R:[],C:[40,40,40,40],Ea:[1024,1024,512,512],Zb:[157,157,29,29]};this.j={c:[8210,8208,8210,8226],C:[22,22,22,50],Da:[19,19,19,32],ub:[815,411,815,630],R:[],B:2176,Ua:0,Sa:0,$:[0,0,0,0,0,0,0,0],Z:0,S:[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],Sb:0,Tb:[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],Ub:[0,0,0,0,0,0,0,0],ka:[0,0,0,0,0,0,0,0],sb:[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,Eb: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.Yb.bind(this);b.u=this.reset.bind(this);b.bb=f}D(this)};m.Ra=function(){return this.c.Ra()};m.Wa=function(a){a=a&63727|this.c.Ra()&1808;this.c.Wa(a)}; +function Va(a){var b=a.g,c,d,f,e=b.U>>13&7;"undefined"===typeof b.R[e]&&(b.R[e]={cache:[],postProcess:a.kc,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.ib=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.hb;f=65536-b.jb&65535;Wa(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.hb;f=65536-b.jb&65535;a.rb(b.R[e],c,d,f);return}b.ib=e<<13|b.ib&8176|b.U%9&15;H(a.c,20,160,144,function(){b.w=b.w&65534|128;return!!(b.w&64)})}m.kc=function(a,b,c,d,f){var e=this.g;e.hb=d&65535;e.w=e.w&-49|d>>12&48;e.jb=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 Xa(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.lc,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.Zb[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.$a;f=65536-b.sa&65535;Wa(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.$a;f=65536-b.sa&65535;a.rb(b.R[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.$a=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 Ya(a){a=a.j;a.B=2176;a.Z=0;a.S=[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.Eb=0} +function Za(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.mc,drive:b,blocksize:256,mapped:0,maxblock:c.ub[0]*c.Da[0]*c.C[0],url:"rp"+b+".dsk"});switch(c.B&63){case 5:c.sb[b]=c.ka[b];c.B|=32896;c.S[b]|=32896;c.Ja|=1<=c.ub[0]||c.$[b]>>8>=c.Da[0]||(c.$[b]&255)>=c.C[0]){c.Ta[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.Sa;e=65536-c.Ua&65535;Wa(a,c.R[b],d,f,e);return;case 57:if(c.ka[b]>=c.ub[0]||c.$[b]>>8>=c.Da[0]||(c.$[b]&255)>=c.C[0]){c.Ta[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.Sa;e=65536-c.Ua&65535;a.rb(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.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.C[0]);d=~~(f/e.Da[0]);e.$[b.ia]=f%e.Da[0]<<8|c%e.C[0];e.sb[b.ia]=e.ka[b.ia]=d;e.Ja|=1<=b.hc-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.fc=function(){this.f.l|=128;this.f.l&64&&H(this.c,0,192,64)}; +function $a(a,b){var c=b>>13&31;31>c?a.c.ha&32&&(b=a.c.Va[c]+(b&8190)&4194302,3932160<=b&&4186112>b&&ab(898)):b|=4186112;return b} +function bb(a,b,c,d,f,e){var h=~~((e+c.qa-1)/c.qa),g=new XMLHttpRequest;2048>h&&d+2048I(this.c,a.gc?$a(this,c):c,a.cache[b][f])){a.qb(2,a,b,c,d);return}c+=2;--d}b++}a.qb(0,a,b,c,d)}; +function Wa(a,b,c,d,f){for(var e,h;0h){b.qb(2,b,c,d,f);return}b.cache[c][e]=h;d+=2;--f}c++}b.qb(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;Ya(this)}; +m.Yb=function(a,b,c){var d,f,e=this.c;switch(a&-64){case 4194240:switch(a&-2){case 4194302:d=e.Ra();if(0<=b)return a&1?b=b<<8|d&255:c&&(b=d&65280|b&255),e.Wa(b&63727|d&1808),-1;break;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.pb;else{a&1&&(b<<=8);if(d=b&65024){f=d>>9;do d+=34;while(f>>=1)}e.pb=d;e.ja=2}break;case 4194294:if(70!==e.Fa)return L(e,4);0>b?d=e.o:d=e.o=0;break;case 4194292:if(70!==e.Fa)return L(e,4);d=1;break;case 4194290:if(70!==e.Fa)return L(e, +4);d=0;break;case 4194288:if(70!==e.Fa)return L(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 L(e,4);f=a-4194272>>1;0>b?d=e.Bb[f]:(d=M(this,e.Bb[f],a,b,c),0<=d&&(e.Bb[f]=d));break;case 4194254:return a&1?e.m>>14&1?(0<=b&&(e.a[6]=b),d=e.a[6]):(0<=b&&(e.Y[3]=b),d=e.Y[3]):e.m>>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.m&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.m>>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.m&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.o|=16,L(e,4)}break;case 4194176:f=a>>1&31;d=M(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= +M(this,e.Xa,a,b,c);0<=d&&(e.Xa=d);break;case 4194172:d=e.da;d&65280&&(d=(d<<8|d>>8)&65535);break;case 4194170:e.F=e.F&62337|e.eb<<5|e.ob<<1;0>b?d=e.F:(d=M(this,e.F,a,b,c),0<=d&&(e.F=d&=62337,e.eb=d>>5&3,e.ob=d>>1&15,d&257?(f=2,e.ha&16&&(f=1),e.cb=d&1?6:4):(e.cb=0,f=4),this.b.Qa=this.b.Qa&-8|f));break;case 4194168:0>b?d=this.b.tc&65535:(d=M(this,this.b.data,a,b,c),0<=d&&(this.b.data=d));break;case 4194166:if(0<=b){if(b&=127)h.ac=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=M(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=M(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=M(this,f.l,a,b,c),0<=d&&(d&64&&!f.Cb&&(setInterval(this.fc.bind(this),25), +f.Cb=1),f.l=d&-129));break;default:return e.o|=16,L(e,4)}break;case 4194048:f=this.g;switch(a&-2){case 4194048:d=M(this,f.ib,a,b,c);0<=d&&(f.ib=d);break;case 4194050:d=M(this,f.O,a,b,c);0<=d&&(f.O=d);break;case 4194052:d=M(this,f.w,a,b,c);0<=b&&0<=d&&(f.w=d&-36993|f.w&36992,f.w&1&&Va(this));break;case 4194054:d=M(this,f.jb,a,b,c);0<=d&&(f.jb=d);break;case 4194056:d=M(this,f.hb,a,b,c);0<=d&&(f.hb=d);break;case 4194058:d=M(this,f.U,a,b,c);0<=d&&(f.U=d);break;case 4194060:break;case 4194062:d=M(this, +f.Rb,a,b,c);0<=d&&(f.Rb=d);break;default:return e.o|=16,L(e,4)}break;case 4193728:var g=this.j;f=g.Z&7;switch(a&-2){case 4193728:d=M(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?Za(this,f):192==(d&192)&&H(e,0,160,172));break;case 4193730:d=M(this,g.Ua,a,b,c);0<=d&&(g.Ua=d);break;case 4193732:d=M(this,g.Sa,a,b,c);0<=d&&(g.Sa=d&65534);break;case 4193734:d=M(this,g.$[f],a,b,c);0<=d&&(g.$[f]=d&7967);break;case 4193736:d=M(this,g.Z,a,b,c);0<=d&&(g.Z=d&63|g.Z& +65472,d&128&&Ya(this));break;case 4193738:d=g.S[f];break;case 4193740:d=g.Ta[f];break;case 4193742:d=M(this,g.Ja,a,b,c);0<=d&&(g.Ja=d&255);break;case 4193744:d=g.rc[f];break;case 4193746:d=M(this,g.Sb,a,b,c);0<=d&&(g.Sb=d);break;case 4193748:d=M(this,g.Tb[f],a,b,c);0<=d&&(g.Tb[f]=d&1023);break;case 4193750:d=8210;break;case 4193752:d=g.sc[f];break;case 4193754:d=M(this,g.Ub[f],a,b,c);0<=d&&(g.Ub[f]=d);break;case 4193756:d=M(this,g.ka[f],a,b,c);0<=d&&(g.ka[f]=d&511);break;case 4193758:g.sb[f]=g.ka[f]; +d=g.sb[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=M(this,g.va,a,b,c);0<=d&&(g.va=d&63,g.B=g.B&-769|(d&3)<<8);break;case 4193770:d=M(this,g.Eb,a,b,c);0<=d&&(g.Eb=d);break;default:return e.o|=16,L(e,4)}break;case 4192512:f=this.i;switch(a&-2){case 4192512:d=M(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||Xa(this));break;case 4192514:d=M(this,f.$a,a,b,c);0<=d&&(f.$a=d&65534); +break;case 4192516:d=M(this,f.G,a,b,c);0<=d&&(f.G=d);break;case 4192518:d=M(this,f.sa,a,b,c);0<=d&&(f.sa=d);break;case 4192520:d=M(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.o|=16,L(e,4)}break;case 4191552:switch(a&-2){case 4191566:0>b?d=e.ha:(d=M(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.cb&&(f=2,e.ha&16&&(f=1),this.b.Qa=this.b.Qa&-8|f)));break;default:return e.o|=16,L(e,4)}break;case 4191424:f=a>> +1&31;d=M(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=M(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 L(e,4);f=a>>2&31;d=e.Va[f];a&2&&(d=d>>16);d&=65535;0<=b&&(d=M(this,d,a,b,c),0<=d&&(e.Va[f]=a&2?d<<16|e.Va[f]&65535:e.Va[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.o|= +16,L(e,4);break;default:return e.o|=16,L(e,4)}c&&0<=d&&(a&1?d=d>>8:d&=255);"undefined"===typeof d&&ab(76);return d};function M(a,b,c,d,f){if(c&1){if(!f)return L(a.c,4);d=0<=d?d<<8&65280|b&255:b}else 0<=d?f&&(d=b&65280|d&255):d=b;return d}var Ua={};Ua[4194302]=[null,null,G.prototype.Ra,G.prototype.Wa];u(function(){for(var a=C(document,"pdp11","device"),b=0;b>1),this.c=new Int32Array(this.f,0,c>>2),ib(this,eb?jb:kb);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.Xb(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)&&mb(a,nb,!1),(a.v=c.v)&&ob(a,nb,!1))}function ob(a,b,c){c&&a.v||(a.kb=!a.i&&b[1]||a.D,a.vc=!a.i&&b[3]||a.I);if(c||void 0===c)a.Xb=b[1]||a.D,a.Ma=b[3]||a.I}function mb(a,b,c){c&&a.A||(a.gb=b[0]||a.s,a.jc=b[2]||a.u);if(c||void 0===c)a.P=b[0]||a.s,a.ma=b[2]||a.u}function ib(a,b){b||(b=pb);mb(a,b,void 0);ob(a,b,void 0)} +var pb=[],lb=[F.prototype.W,F.prototype.Ba,F.prototype.xa,F.prototype.Oa],nb=[F.prototype.M,F.prototype.za,F.prototype.ca,F.prototype.La];if(Ha)var kb=[F.prototype.J,F.prototype.ya,F.prototype.ba,F.prototype.Ca],jb=[F.prototype.V,F.prototype.Aa,F.prototype.na,F.prototype.Na]; +function qb(a,b){v.call(this,"CPU",a,qb);var c=a.multiplier||1;this.xb=a.cycles||b;this.ma=c;this.wb=Math.round(this.xb/1E4)/100;this.ba=this.wb*this.ma;this.h.ga=!1;this.h.Vb=!1;this.h.Za=a.autoStart;this.h.Ob=!1;this.h.mb=!1;this.Na=this.ca=0;this.Oa=a.csStart;this.ya=a.csInterval;this.za=a.csStop;this.La=[];this.Nb=this.Fb.bind(this);D(this)}y(qb);var rb=["power","reset"];m=qb.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.wb*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)}}xb(a,a.I);a.I=0;a.D=ha();a.P=0;yb(a)}function Ab(a){a.V-=a.J;a.J=0} +m.Fb=function(){if(Fa(this,!0)){if(!this.h.ga){wb(this);this.s&&this.s.start(this.D,zb(this));this.h.ga=!0;this.h.Vb=!0;this.xa&&this.xa.start();var a=this.A.run;a&&(a.textContent="Halt");this.s&&this.s.Ka(!0)}this.yb>=this.xb&&yb(this,!0);this.Ba=0;this.Ma=ha();this.P&&(a=this.Ma-this.P,a>this.Kb&&(this.D+=a,this.D>this.Ma&&(this.D=this.Ma)));try{do{for(var b=this.h.mb?1:this.lb,c=this.La.length-1;0<=c;c--){var d=this.La[c];0>d[0]||b>d[0]&&(b=d[0])}this.Wb(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;xb(this,0,!0);a=f;if(this.h.mb){var g=!1;this.Na=this.Na+this.Qb()|0;this.ca-=a;0>=this.ca&&(this.ca+=this.ya,g=!0);0<=this.za&&this.za<=zb(this)&&(this.ya=this.za=-1,ub(this),O(this),g=!0);g&&this.X(zb(this)+" cycles: checksum="+n(this.Na))}this.Aa-=f;if(0>=this.Aa){this.Aa+=this.lb;15<=++this.Lb&&(this.s&&this.s.Ka(),this.Lb=0);break}}while(this.h.ga)}catch(k){O(this);vb(this);this.s&&this.s.stop(ha(), +zb(this));Fa(this,!1);b=k.stack||k.message;this.h.error=!0;this.K(b);return}b=setTimeout;c=this.Nb;this.P=ha();d=this.Kb;this.Ba&&(d=Math.round(d*this.Ba/this.lb));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,wb(this));if(0>d||this.Md&&(this.D-=d),d=0;this.yb+=this.Ba;this.P+=d;b(c,d)}else vb(this),this.s&&this.s.stop(ha(),zb(this))};m.Wb=function(){return 0}; +function O(a){a.h.ab&&(a.h.zb=!0);Ab(a);xb(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 vb(a){a.s&&a.s.Ka(void 0)} +function Bb(a){this.bc=+a.model||1170;this.ec=a.resetAddr||0;qb.call(this,a,1E6);this.Hb=0;this.g=65536;this.b=32768;this.f=65535;this.c=32768;this.m=15;this.a=[0,0,0,0,0,0,0,this.ec];this.Ia=[0,0,0,0,0,0];this.Y=[0,0,0,0];this.memory=[];this.i=[];this.Ca=this.pb=0;this.ja=2;this.la=255;this.u=0;this.na=-1;this.o=0;this.Fa=70;this.ob=this.eb=this.cb=this.j=this.ha=this.Xa=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.Va=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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.Bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.h.complete=this.h.$b=!1}y(Bb,qb);m=Bb.prototype; +m.reset=function(){this.h.ga&&O(this);Cb(this);tb(this);this.h.error=!1;this.parent.reset.call(this)};function Cb(a){a.la=255;a.o=0;a.i=[];a.pb=0;a.F=a.da=a.Xa=a.ha=a.cb=0;a.Ha[0]=a.Ha[1]=a.Ha[3]=7;a.eb=0}m.Qb=function(){return 0}; +m.save=function(){var a=new P(this);Q(a,0,[]);Q(a,1,[this.Jb,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} +m.Wa=function(a){this.c=a<<12;this.f=~a&4;this.b=a<<14;this.g=a<<16;if((a^this.m)&2048)for(var b=this.Ia.length;0<=--b;){var c=this.a[b];this.a[b]=this.Ia[b];this.Ia[b]=c}this.j=a>>14&3;b=this.m>>14&3;this.j!=b&&(this.Y[b]=this.a[6],this.a[6]=this.Y[this.j]);this.ja=2;this.m=a};m.Ra=function(){return this.m=this.m&63728|(this.c&32768?8:0)|(this.f&65535?0:4)|(this.b&32768?2:0)|(this.g&65536?1:0)};function ab(a){console.log("panic("+a+")")} +function L(a,b){var c,d,f=0;0>a.na?a.na=a.Ra():a.j||(b=4,f=1);a.F&57344||(a.da=63222,a.Xa=b);a.j=0;0<=(c=R(a,b|65536))&&0<=(d=R(a,b+2&65535|65536))&&(a.Wa(d&53247|a.na>>2&12288),f&&(a.o|=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 Db(a,b,c){var d,f,e,h=0;if(c&a.cb){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.Va[g]+(e&8190)&4194302,3932160<=e&&4186112>e&&ab(898)):e|=4186112}}else e&=262143,253952<=e&&(e|=4186112);if(3932160>e){if(3915776<=e)return a.o|=32,L(a,4);if(e&1&&!(c&1))return a.o|=64,L(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.eb=a.j,a.ob=d;if(h){if(h&57344)return 0<=a.na&&(h|=128),a.F&57344||(a.F=a.F|h|a.eb<<5|a.ob<<1),L(a,168);a.F&61440||!(4191360>e||4194239>>c.f;c=d!=c.i?c.b[f].jc(d,b):c.b[f++].gb(d,b)|c.b[f&c.M].gb(0,b+1)<<8}else c=b;return c}function I(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++].kb(f,d&255,b),a.b[e&a.M].kb(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].gb(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].kb(b&a.i,c&255,b),c):b}function R(a,b){return J(a,Db(a,b,2))}function Eb(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 L(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.o|=4,a.a[6]=4,L(a,4);a.o|=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.o|=4,a.a[6]=4,L(a,4);a.o|=8;a.u|=4}return d} +function W(a,b,c){var d;return b&56?(0<=(d=V(a,b,c))&&(d=Db(a,d,c)),d):4194304+(b&7)}function X(a,b){var c;b&56?0<=(c=W(a,b,2))&&(c=J(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.Wb=function(a){this.h.complete=!0;this.h.$b=!1;this.h.Vb=!1;this.V=this.J=a;this.Jb&256?(Ab(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.pb&224;if(0<(a=this.i.length))for(;0b&&(b=this.i[a].ic,e=a)}b>(this.m&224)&&(0>e?L(this,160):(L(this,this.i[e].uc),this.i.splice(e,1)))}this.F&57344|| +(this.da=0,this.Xa=this.a[7]);this.u=this.m&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<=I(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=J(this, +d=W(this,a,6)))&&(a=c&~b,0<=I(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=J(this,d=W(this,a,6)))&&(a=c|b,0<=I(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=J(this,d=W(this,a,6)))&&(a=b+c,0<=I(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=J(this,d=W(this,a,6)))&&(a=c-b,0<=I(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=J(this,d=W(this,a,6)))&&(c^=this.a[a>>6&7],0<=I(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:L(this,24); +break;case 35072:L(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=J(this,d=W(this,a,6)))&&(a=c<<8|c>>8,0<=I(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<=I(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=J(this,d=W(this,a,6)))&&(a=~c,0<=I(this, +d,a)&&(this.c=this.f=a,this.g=65536,this.b=0));break;case 2688:a&56?0<=(c=J(this,d=W(this,a,6)))&&(a=c+1,0<=I(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=J(this,d=W(this,a,6)))&&(a=c-1,0<=I(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=J(this,d=W(this,a,6)))&&(a=-c,0<=I(this,d,a)&&(this.g=this.c=this.f= +a,this.b=a&c));break;case 2880:0<=(c=J(this,d=W(this,a,6)))&&(a=c+(this.g>>16&1),0<=I(this,d,a)&&(this.g=this.c=this.f=a,this.b=a&(a^c)));break;case 2944:0<=(c=J(this,d=W(this,a,6)))&&(a=c-(this.g>>16&1),0<=I(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=J(this,d=W(this,a,6)))&&(a=(this.g&65536|c)>>1,0<=I(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=J(this,d=W(this,a,6)))&&(a=c<<1|this.g>>16&1,0<=I(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=J(this,d=W(this,a,6)))&&(a=c&32768|c>>1,0<=I(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=J(this,d=W(this,a,6)))&&(a=c<<1,0<=I(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.m&61440)&&(f&=65535),this.j=this.m>>12&3,0<=(b=R(this,f))&&(this.j=this.m>>14&3,0<=S(this,b)&&(this.c= +this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.m>>2&12288)===(this.m&12288)?this.a[e]:this.Y[this.m>>12&3],0<=S(this,b)&&(this.c=this.f=b,this.b=0));break;case 3456:0<=(c=Eb(this))&&((this.F&57344||(this.da=22),a&56)?0<=(f=V(this,a,0))&&(f&=65535,this.j=this.m>>12&3,0<=(d=Db(this,f,4))&&(this.j=this.m>>14&3,0<=I(this,d,c)&&(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.m>>2&12288)===(this.m&12288)?this.a[e]=c:this.Y[this.m>>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<=I(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.m>>12&3,0<=(b=R(this,f|65536))&&(this.j=this.m>>14&3,0<=S(this,b)&&(this.c=this.f=b,this.b=0))):(e=a&7,b=6!==e||(this.m>>2&12288)===(this.m&12288)?this.a[e]:this.Y[this.m>>12&3],0<=S(this,b)&&(this.c=this.f=b,this.b=0));break;case 36224:0<=(c=Eb(this))&&((this.F&57344||(this.da=22),a&56)?0<=(f=V(this,a,0))&&(this.j=this.m>>12&3,0<=(d=Db(this,f|65536,4))&&(this.j=this.m>>14&3,0<=I(this,d,c)&&(this.c=this.f=c,this.b=0))):(e=a&7,6!==e||(this.m>>2&12288)===(this.m& +12288)?this.a[e]=c:this.Y[this.m>>12&3]=c,this.c=this.f=c,this.b=0));break;default:switch(a&65528){case 128:0<=(b=Eb(this))&&(e=a&7,this.a[7]=this.a[e],this.a[e]=b);break;case 152:this.m&49152||(this.m=this.m&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.m?(this.o|=128,L(this,4)):(this.Ca=3, +Ab(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].Xb(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;bMb){if(Ob(d,this.D)){this.j=new P(this,"1.30.0","failsafe");Ob(this.j)&&(Ub(this,d),a=2,Vb(this.j));Q(this.j,"timestamp",ia());Wb(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=Sb(d)){var e=Tb(d,"code"),h=Tb(d,"data");e&&("ok"==e?Ob(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),Vb(d),Ob(d)?(c=Sb(d),f=!0):c=!1))}f&&Rb(this,c?d:null)}else 2==a&&d.clear()}else Rb(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&&(Xb(this,this.c,b,c,a),this.c.Za());this.P&&(Ub(this,b),b.clear());!c&&this.j&&(this.j.clear(),delete this.j);this.g=0}; +function Ub(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 Yb(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;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);ec(a,b,c)}})}else c(a,null)} +function fc(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&&(--bc||ua(!0));k=!1}var h,g,k=!0;bc++;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?cc(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,--bc||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),--bc||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)?cc(b,a,d,!0,f,l):dc(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 fc(a,b,c,d)};window.enableEvents=ua;window.sendEvent=va;})();