From 234e8871ba75104c214e19274300a06d2189bc26 Mon Sep 17 00:00:00 2001 From: Jeff Date: Sun, 5 Mar 2017 10:04:18 -0800 Subject: [PATCH] Added "lsh" and "rot" commands to the Int36 command-line tool to mimic the PDP-10 opcodes and test their logic --- modules/pdp10/lib/cpuops.js | 10 +- modules/pdp10/lib/defines.js | 2 +- modules/shared/bin/int36 | 29 ++++ modules/shared/lib/int36.js | 242 ++++++++++++++++++++++++++++- versions/pdpjs/1.34.2/pdp10-dbg.js | 40 ++--- versions/pdpjs/1.34.2/pdp10.js | 30 ++-- 6 files changed, 308 insertions(+), 45 deletions(-) diff --git a/modules/pdp10/lib/cpuops.js b/modules/pdp10/lib/cpuops.js index c6bab7e14..10caa5700 100644 --- a/modules/pdp10/lib/cpuops.js +++ b/modules/pdp10/lib/cpuops.js @@ -1402,7 +1402,7 @@ PDP10.opASH = function(op, acc) /* * Convert the unsigned 18-bit value in regEA to a signed 8-bit value (+/-255). */ - var s = (this.regEA << 14) >> 24; + var s = ((this.regEA << 14) >> 14) % 256; if (s) { var w = this.readWord(acc), bitsShifted; /* @@ -1474,7 +1474,7 @@ PDP10.opROT = function(op, acc) /* * Convert the unsigned 18-bit value in regEA to a signed 8-bit value, modulo 36 (+/-35). */ - var s = ((this.regEA << 14) >> 24) % 36; + var s = ((this.regEA << 14) >> 14) % 36; if (s) { var w = this.readWord(acc); /* @@ -1523,7 +1523,7 @@ PDP10.opLSH = function(op, acc) /* * Convert the unsigned 18-bit value in regEA to a signed 8-bit value (+/-255). */ - var s = (this.regEA << 14) >> 24; + var s = ((this.regEA << 14) >> 14) % 256; if (s) { var w = this.readWord(acc); if (s > 0) { @@ -1598,7 +1598,7 @@ PDP10.opROTC = function(op, acc) /* * Convert the unsigned 18-bit value in regEA to a signed 8-bit value, modulo 72 (+/-71). */ - var s = ((this.regEA << 14) >> 24) % 72; + var s = ((this.regEA << 14) >> 14) % 72; if (s) { var wLeft = this.readWord(acc); var wRight = this.readWord((acc + 1) & 0o17); @@ -1638,7 +1638,7 @@ PDP10.opLSHC = function(op, acc) /* * Convert the unsigned 18-bit value in regEA to a signed 8-bit value (+/-255). */ - var s = (this.regEA << 14) >> 24; + var s = ((this.regEA << 14) >> 14) % 256; if (s) { var wLeft = this.readWord(acc); var wRight = this.readWord((acc + 1) & 0o17); diff --git a/modules/pdp10/lib/defines.js b/modules/pdp10/lib/defines.js index 4c53e989e..245ffd062 100644 --- a/modules/pdp10/lib/defines.js +++ b/modules/pdp10/lib/defines.js @@ -84,7 +84,7 @@ var PDP10 = { MODEL_KA10: 1001, /* - * This constant is used to mark points in the code where the physical address being returned + * ADDR_INVALID is used to mark points in the code where the physical address being returned * is invalid and should not be used. * * In a 32-bit CPU, -1 (ie, 0xffffffff) could actually be a valid address, so consider changing diff --git a/modules/shared/bin/int36 b/modules/shared/bin/int36 index 739b76123..0e6daf42e 100644 --- a/modules/shared/bin/int36 +++ b/modules/shared/bin/int36 @@ -71,10 +71,21 @@ function test(sCmd, fREPL) if (sNum2 != null) console.log(sOp + " " + dumpInt36(i36Op)); switch(sOp) { + case "get": + break; + case "set": i36Reg = new Int36(i36Op); break; + case "ext": + i36Reg.extend(i36Op); + break; + + case "red": + i36Reg.reduce(i36Op); + break; + case "add": i36Reg.add(i36Op); break; @@ -91,6 +102,18 @@ function test(sCmd, fREPL) i36Reg.div(i36Op); break; + case "ash": + i36Reg.ash(i36Op); + break; + + case "lsh": + i36Reg.lsh(i36Op); + break; + + case "rot": + i36Reg.rot(i36Op); + break; + default: console.log("unrecognized command: " + sCmd); return false; @@ -151,6 +174,12 @@ test("set 0o577777777777 0o777777777777"); test("set 0o677777777777 0o777777777777"); test("set 0o777777777777 0o777777777777"); +test("set 0o112233445566"); +test("lsh 3"); +test("lsh -3"); +test("rot 6"); +test("rot -6"); + repl.start({ prompt: "int36> ", input: process.stdin, diff --git a/modules/shared/lib/int36.js b/modules/shared/lib/int36.js index 440aaf1c1..e80aeb6da 100644 --- a/modules/shared/lib/int36.js +++ b/modules/shared/lib/int36.js @@ -500,6 +500,8 @@ class Int36 { var fNeg = false, extended; var n1 = this.value, n2 = value; + this.error = Int36.ERROR.NONE; + if (n1 > Int36.MAXPOS) { n1 = Int36.BIT36 - n1; fNeg = !fNeg; @@ -573,6 +575,8 @@ class Int36 { */ divExtended(divisor) { + this.error = Int36.ERROR.NONE; + if (!divisor) { this.error |= Int36.ERROR.DIVZERO; return; @@ -649,6 +653,236 @@ class Int36 { } } + /** + * ash(i36) + * + * @this {Int36} + * @param {Int36} i36 (18-bit value representing the number of bits to arithmetically shift left (> 0) or right (< 0)) + */ + ash(i36) + { + this.ashNum(i36.value); + } + + /** + * ashNum(num) + * + * @this {Int36} + * @param {number} num (18-bit value representing the number of bits to arithmetically shift left (> 0) or right (< 0)) + */ + ashNum(num) + { + num = Int36.validate(num); + this.error = Int36.ERROR.NONE; + /* + * Convert the unsigned 18-bit value in regEA to a signed 8-bit value (+/-255). + */ + var s = ((num << 14) >> 14) % 256; + if (s) { + if (this.extended == null) { + /* + * Simulate opASH() + */ + var w = this.value, bitsShifted; + /* + * Convert the unsigned word (w) to a signed value (i), for convenience. + */ + var i = w > Int36.MAXPOS? -(Int36.BIT36 - w) : w; + if (s > 0) { + if (s >= 35) { + i = (i < 0? Int36.BIT35 : 0); + bitsShifted = Int36.MAXPOS; + } else { + i = (i * Math.pow(2, s)) % Int36.BIT35; + /* + * bitsShifted must be set to the mask of all magnitude bits shifted out of + * the original word. Using 8-bit signed words as an example, this table shows + * the bitsShifted values that would correspond to shifting 1-7 bits left: + * + * shifts bitsShifted value calculation + * ------ ----------- ------ ----------- + * 1 0b01000000 128-64 128-Math.pow(2, 7-1) + * 2 0b01100000 128-32 128-Math.pow(2, 7-2) + * 3 0b01110000 128-16 128-Math.pow(2, 7-3) + * ... + * 7 0b01111111 128-1 128-Math.pow(2, 7-7) + */ + bitsShifted = Int36.BIT35 - Math.pow(2, 35 - s); + } + if (w <= Int36.MAXPOS) { + /* + * Since w was positive, overflow occurs ONLY if any of the bits we shifted out were 1s. + * If all those bits in the original value (w) were 0s, then adding bitsShifted to it could NOT + * produce a value > MAX_POS36. + */ + if (w + bitsShifted > Int36.MAXPOS) this.error |= Int36.ERROR.OVERFLOW; + } else { + /* + * Since w was negative, overflow occurs ONLY if any of the bits we shifted out were 0s. + * If all those bits in the original value (w) were 1s, subtracting bitsShifted from it could NOT + * produce a value <= MAX_POS36. + */ + if (w - bitsShifted <= Int36.MAXPOS) this.error |= Int36.ERROR.OVERFLOW; + } + } else { + if (s <= -35) { + i = (i < 0? -1 : 0); + } else { + i = Math.trunc(i / Math.pow(2, -s)); + } + } + w = (i < 0? i + Int36.BIT36 : i); + this.value = w; + } + else { + /* + * Simulate opASHC() + */ + console.log("ASHC unimplemented"); + } + } + } + + /** + * lsh(i36) + * + * @this {Int36} + * @param {Int36} i36 (18-bit value representing the number of bits to logically shift left (> 0) or right (< 0)) + */ + lsh(i36) + { + this.lshNum(i36.value); + } + + /** + * lshNum(num) + * + * @this {Int36} + * @param {number} num (18-bit value representing the number of bits to logically shift left (> 0) or right (< 0)) + */ + lshNum(num) + { + num = Int36.validate(num); + this.error = Int36.ERROR.NONE; + /* + * Convert the unsigned 18-bit value in regEA to a signed 8-bit value (+/-255). + */ + var s = ((num << 14) >> 14) % 256; + if (s) { + if (this.extended == null) { + var w = this.value; + if (s > 0) { + if (s >= 36) { + w = 0; + } else { + w = (w * Math.pow(2, s)) % Int36.BIT36; + } + } else { + if (s <= -36) { + w = 0; + } else { + w = Math.trunc(w / Math.pow(2, -s)); + } + } + this.value = w; + } else { + var wRight = this.value; + var wLeft = this.extended; + if (s > 0) { + if (s >= 36) { + wRight = 0; + if (s >= 72) { + wLeft = 0; + } else { + wLeft = (wRight * Math.pow(2, s - 36)) % Int36.BIT36; + } + } else { + wLeft = ((wLeft * Math.pow(2, s)) % Int36.BIT36) + Math.trunc(wRight / Math.pow(2, 36 - s)); + wRight = (wRight * Math.pow(2, s)) % Int36.BIT36; + } + } else { + if (s <= -36) { + wLeft = 0; + if (s <= -72) { + wRight = 0; + } else { + wRight = Math.trunc(wLeft / Math.pow(2, -s - 36)); + } + } else { + wRight = Math.trunc(wRight / Math.pow(2, -s)) + ((wLeft * Math.pow(2, 36 + s)) % Int36.BIT36); + wLeft = Math.trunc(wLeft / Math.pow(2, -s)); + } + } + this.value = wRight; + this.extended = wLeft; + } + } + } + + /** + * rot(i36) + * + * @this {Int36} + * @param {Int36} i36 (18-bit value representing the number of bits to logically rotate left (> 0) or right (< 0)) + */ + rot(i36) + { + this.rotNum(i36.value); + } + + /** + * rotNum(num) + * + * @this {Int36} + * @param {number} num (18-bit value representing the number of bits to logically rotate left (> 0) or right (< 0)) + */ + rotNum(num) + { + var s; + num = Int36.validate(num); + this.error = Int36.ERROR.NONE; + + if (this.extended == null) { + /* + * Convert the unsigned 18-bit value in regEA to a signed 8-bit value, modulo 36 (+/-35). + */ + s = ((num << 14) >> 14) % 36; + if (s) { + var w = this.value; + /* + * Note that a right rotation (s < 0) of s bits is equivalent to a left rotation (s > 0) of 36 + s bits. + */ + if (s < 0) s = 36 + s; + w = ((w * Math.pow(2, s)) % Int36.BIT36) + Math.trunc(w / Math.pow(2, 36 - s)); + this.value = w; + } + } + else { + /* + * Convert the unsigned 18-bit value in regEA to a signed 8-bit value, modulo 72 (+/-71). + */ + s = ((num << 14) >> 14) % 72; + if (s) { + var wRight = this.value; + var wLeft = this.extended; + var wLeftOrig = wLeft; + /* + * Note that a right rotation (s < 0) of s bits is equivalent to a left rotation (s > 0) of 72 + s bits. + */ + if (s < 0) s = 72 + s; + if (s < 36) { + wLeft = ((wLeft * Math.pow(2, s)) % Int36.BIT36) + Math.trunc(wRight / Math.pow(2, 36 - s)); + wRight = ((wRight * Math.pow(2, s)) % Int36.BIT36) + Math.trunc(wLeftOrig / Math.pow(2, 36 - s)); + } else { + wLeft = ((wRight * Math.pow(2, s - 36)) % Int36.BIT36) + Math.trunc(wLeft / Math.pow(2, 72 - s)); + wRight = ((wLeftOrig * Math.pow(2, s - 36)) % Int36.BIT36) + Math.trunc(wRight / Math.pow(2, 72 - s)); + } + this.value = wRight; + this.extended = wLeft; + } + } + } + /** * extend() * @@ -734,7 +968,6 @@ class Int36 { if (this.value) { this.value = Int36.BIT36 - this.value; } - this.error = Int36.ERROR.NONE; } /** @@ -865,14 +1098,15 @@ class Int36 { } /** - * validate(num) + * validate(num, bits) * * This ensures that any incoming (external) 36-bit values conform to our internal requirements. * * @param {number} num + * @param {number} [bits] (an alternative number of bits to restrict the value to) * @return {number} */ - static validate(num) + static validate(num, bits = 36) { /* * Although it's expected that most callers will supply unsigned 36-bit values, we're nice about @@ -882,7 +1116,7 @@ class Int36 { if (num < 0 && num >= Int36.MINNEG) { num += Int36.BIT36; } - var value = Math.trunc(Math.abs(num)) % Int36.BIT36; + var value = Math.trunc(Math.abs(num)) % Math.pow(2, bits); if (DEBUG && num !== value) { console.log("Int36.validate(" + num + " out of range, truncated to " + value + ")"); } diff --git a/versions/pdpjs/1.34.2/pdp10-dbg.js b/versions/pdpjs/1.34.2/pdp10-dbg.js index 8cfbfff96..c970df38e 100644 --- a/versions/pdpjs/1.34.2/pdp10-dbg.js +++ b/versions/pdpjs/1.34.2/pdp10-dbg.js @@ -109,10 +109,10 @@ var Sd=[Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q,Q, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},Wd,Xd,Yd,function(a,b){b&&this.j(b,this.g(this.f))},function(a,b){a=this.g(this.f);a=(a/G|0)+a%G*G;this.j(b,a)},function(a,b){this.j(b,this.f*G)},function(a,b){a=this.g(b);a=(a/G|0)+a%G*G;this.j(this.f,a)},function(a,b){a=this.g(this.f);a=(a/G|0)+a%G*G;this.j(this.f,a);b&&this.j(b,a)},function(a,b){this.j(b,Pd(this,this.g(this.f)))},function(a,b){this.j(b,this.f?Xb-this.f:0)},function(a,b){this.j(this.f,Pd(this, this.g(b)))},function(a,b){a=Pd(this,this.g(this.f));this.j(this.f,a);b&&this.j(b,a)},function(a,b){this.j(b,this.abs(this.g(this.f)))},function(a,b){this.j(b,this.f)},function(a,b){this.j(this.f,this.abs(this.g(b)))},function(a,b){a=this.abs(this.g(this.f));this.j(this.f,a);b&&this.j(b,a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, -function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a,b){var c=this.f<<14>>24;if(c){a=this.g(b);var d=a>Vb?-(E-a):a;0d?Sb:0,c=Tb):(d=d*Math.pow(2,c)%Sb,c=Sb-Math.pow(2,35-c)),a<=Vb?a+c>Vb&&(this.w|=131072):a-c<=Vb&&(this.w|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+E:d;this.j(b,a)}},function(a,b){if(a=(this.f<<14>>24)%36){var c=this.g(b);0>a&&(a=36+a);c=c*Math.pow(2, -a)%E+Math.trunc(c/Math.pow(2,36-a));this.j(b,c)}},function(a,b){if(a=this.f<<14>>24){var c=this.g(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.j(b,c)}},function(a){this.b(a)},function(a){this.b(a)},function(a,b){if(a=(this.f<<14>>24)%72){var c=this.g(b),d=this.g(b+1&15),e=c;0>a&&(a=72+a);36>a?(c=c*Math.pow(2,a)%E+Math.trunc(d/Math.pow(2,36-a)),d=d*Math.pow(2,a)%E+Math.trunc(e/Math.pow(2,36-a))):(c=d*Math.pow(2,a-36)%E+Math.trunc(c/Math.pow(2,72-a)),d=e*Math.pow(2, -a-36)%E+Math.trunc(d/Math.pow(2,72-a)));this.j(b,c);this.j(b+1&15,d)}},function(a,b){if(a=this.f<<14>>24){var c=this.g(b),d=this.g(b+1&15);0=a?(c=0,d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36))):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%E,c=Math.trunc(c/Math.pow(2,-a)));this.j(b,c);this.j(b+1&15,d)}},O,function(a,b){a=this.g(b);this.j(b,this.g(this.f));this.j(this.f,a)}, -function(a,b){a=!1;for(var c=this.g(b),d=c/G|0,c=c&H;!a;)this.j(c,this.g(d)),c==this.f&&(a=!0),d=d+1&H,c=c+1&H,this.v.K||(this.j(b,d*G+c),a||Od(this,-1),a=!0)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},O,function(a){this.b(a)},function(a,b){a=this.g(b);a+=262145;this.j(a&H,this.g(this.f));a>=E&&(a-=E);a/G|0||(this.w|=262144);this.j(b,a)},function(a,b){a=this.g(b);var c=this.g(a&H);this.j(this.f,c);this.f==b&&(a=c);a-=262145; +function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a,b){var c=(this.f<<14>>14)%256;if(c){a=this.g(b);var d=a>Vb?-(E-a):a;0d?Sb:0,c=Tb):(d=d*Math.pow(2,c)%Sb,c=Sb-Math.pow(2,35-c)),a<=Vb?a+c>Vb&&(this.w|=131072):a-c<=Vb&&(this.w|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+E:d;this.j(b,a)}},function(a,b){if(a=(this.f<<14>>14)%36){var c=this.g(b);0>a&&(a=36+a);c=c*Math.pow(2, +a)%E+Math.trunc(c/Math.pow(2,36-a));this.j(b,c)}},function(a,b){if(a=(this.f<<14>>14)%256){var c=this.g(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.j(b,c)}},function(a){this.b(a)},function(a){this.b(a)},function(a,b){if(a=(this.f<<14>>14)%72){var c=this.g(b),d=this.g(b+1&15),e=c;0>a&&(a=72+a);36>a?(c=c*Math.pow(2,a)%E+Math.trunc(d/Math.pow(2,36-a)),d=d*Math.pow(2,a)%E+Math.trunc(e/Math.pow(2,36-a))):(c=d*Math.pow(2,a-36)%E+Math.trunc(c/Math.pow(2,72-a)),d=e*Math.pow(2, +a-36)%E+Math.trunc(d/Math.pow(2,72-a)));this.j(b,c);this.j(b+1&15,d)}},function(a,b){if(a=(this.f<<14>>14)%256){var c=this.g(b),d=this.g(b+1&15);0=a?(c=0,d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36))):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%E,c=Math.trunc(c/Math.pow(2,-a)));this.j(b,c);this.j(b+1&15,d)}},O,function(a,b){a=this.g(b);this.j(b,this.g(this.f));this.j(this.f, +a)},function(a,b){a=!1;for(var c=this.g(b),d=c/G|0,c=c&H;!a;)this.j(c,this.g(d)),c==this.f&&(a=!0),d=d+1&H,c=c+1&H,this.v.K||(this.j(b,d*G+c),a||Od(this,-1),a=!0)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},O,function(a){this.b(a)},function(a,b){a=this.g(b);a+=262145;this.j(a&H,this.g(this.f));a>=E&&(a-=E);a/G|0||(this.w|=262144);this.j(b,a)},function(a,b){a=this.g(b);var c=this.g(a&H);this.j(this.f,c);this.f==b&&(a=c);a-=262145; 0>a&&(a+=E);(a/G|0)==H&&(this.w|=262144);this.j(b,a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)},function(a){this.b(a)}, @@ -134,7 +134,7 @@ g.f;0>>a.f;0f&&f>=sa&&(f+=ra);f=Math.trunc(Math.abs(f))%ra;void 0===g&&(g=e.size);for(h=d;g--&&h>>a.f;0f&&f>=sa&&(f+=ra);f=Math.trunc(Math.abs(f))%Math.pow(2,36);void 0===g&&(g=e.size);for(h=d;g--&&h=q.bb&&c<=q.xb&&(b=c-(q.bb-q.rb));b&&(a.preventDefault&&a.preventDefault(),d.Pa(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==q.tb&&(b=q.sb);d.Pa(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation(); @@ -160,7 +160,7 @@ function Z(a,b,c){var d,e;c||(c=W());var g=c.B;if(void 0!==b){b=Ie(a,b);"%"==b.c function We(a){return va(a/Qb,6)+" "+va(a%Qb,6)}function Qe(a,b){a.D=a;a.X=a.lb=536870916;a.S=null;a.O=[];b=Ge(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(b.length)for(var c in K){var d;a:if(d=void 0,Array.prototype.indexOf)d=b.indexOf(c,d);else{d=d||0;0>d&&(d+=b.length);0>d&&(d=0);for(var e=b.length;dh[0].indexOf("+"))){var m=h[0]+":";h[2]&&(m+=" "+h[2]);a.i(m)}h[3]&&(f=h[3],g=null);h=a.ba;m=b;h.B=m.B;h.Na=m.Na;h.fa=m.fa;h.ca=m.ca;a.i(Vf(a,b,f,g));e-=b.B-k;c++}}} function eg(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.i(Rf+b):(a.P&&(a.i("ended assemble at "+N(a,a.ba.B)),a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.S=null;if(Kb(a)&&0n||"z"$f&&(rd="B");if(Ng==ag[kf]+rd){jf=29248!=nc?Qa:(Qa&3)<<1|(Qa&12)<<2;A=(qd|jf<<6)*Yb;break}}if(0<= -A)break}if(0<=A)break}if(0<=A)if(gf)for(var sd=gf.split(","),nb=0;nbJ||127J||15 +f[1],a.ba);if(r){var C=f[2];if(void 0==C)a.i("begin assemble at "+N(a,r.B)),a.P=!0,M(a.F);else{f.shift();f.shift();f.shift();var aa,ff=f.join(""),A=-1,nc,Ng=C.toUpperCase(),pd;for(pd in Wf){var Pa;nc=+pd;var gf=Wf[pd];switch(nc){case 32512:Pa=Xf;break;case 32256:Pa=Yf;break;case 29248:Pa=Zf;break;default:Pa=[""]}var hf,qd;for(qd in gf){for(var jf=gf[qd],Qa=0;Qa$f&&(rd="B");if(Ng==ag[jf]+rd){hf=29248!=nc?Qa:(Qa&3)<<1|(Qa&12)<<2;A=(qd|hf<<6)*Yb;break}}if(0<= +A)break}if(0<=A)break}if(0<=A)if(ff)for(var sd=ff.split(","),nb=0;nbJ||127J||15 J||262143J||15da.length&&(a.i("note: only "+da.length+" available"),T=da.length);X-=T;0>X&&(null==da[da.length-1].B?(T=X+T,X=0):X+=da.length);var xd=[];"call"==qf&&(pb=1E5,xd=["CALL"]);for(void 0!==pf&&a.i(T+" instructions earlier:");0=da.length&&(X=0);a.sa=T;sf++;pb--}}sf||(a.i("no "+rf+"history available"),a.sa=void 0)}else{var Wa=Z(a,ca,a.ja);if(Wa){var Aa=0,vf="ds"==Ta;if(oa){if("l"==oa.charAt(0))oa=oa.substr(1)||Qg,Aa=Je(a,oa);else{var wf=Z(a,oa);wf&&(Aa=wf.B-Wa.B)}0>Aa&&(Aa=0);65536Af;Af++)yf+=String.fromCharCode((pc%64|0)+32),pc/=64}Ba&&(Ba+="\n");Ba=vf?Ba+(Ca+","):Ba+(ca+": "+Ca+(0>zf?" "+yf:""))}Ba&&a.i(Ba);a.ca=Sg}}}}break;case "e":if("else"==f[0])break;var Bf,Cf,Df=f[0],Ad=f[1];"e"==Df||"ew"==Df?(Bf=a.ya,Cf=a.eb):Ad=null;if(null==Ad)a.i("edit memory commands:"),a.i("\tew [a] [...] edit words at address a");else{var qc=Z(a,Ad,a.ja);if(qc)for(var rc=2;rc< -f.length;rc++){var Bd=V(a,f[rc]);if(void 0===Bd){a.i("unknown value: "+f[rc]);break}a.i("changing "+N(a,qc.B)+" from "+We(Bf.call(a,qc))+" to "+We(Bd));Cf.call(a,qc,Bd,1)}}break;case "g":a:{var Ef=f[1],Ug=b;if(void 0!==Ef){var Cd=Z(a,Ef);if(!Cd)break a;Ve(a,Cd,Ug);a.Da(a.b,Cd,!0)}Of(a,!0,c)}break;case "h":a.v.K?(c||a.i("halting"),a.V()):Lb(a,!0)||c||a.i("already halted");break;case "i":if("if"==f[0]){var Dd;var rb=b.substr(2),rb=Ia(rb);V(a,rb)?(c||a.i("true: "+rb),Dd=!0):(c||a.i("false: "+rb),Dd= -!1);Dd||(d=!1);break}g=!0;break;case "k":var Vg=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var Ed=0,Fd=W(),sb=W();for(a.i("stack trace for "+N(a,sb.B));10>Ed;){for(var Da=null,Wg=256;65536>sb.B>>>0;){Fd.B=a.ya(sb,2);if(null==sb.B||!Wg--)break;if(!(Fd.B&1)){for(var Xg=a,sc=Fd,Ff=null,tb=sc.B,Gf=tb,Gd=1;6>=Gd&&tb;Gd++){if(2Mf)a.i("step commands:"),a.i("\tp\tstep over instruction"),a.i("\tpr\tstep over instruction with register update");else if(a.N)a.i("step in progress");else{var Nf=W(a.u.A);a.ya(Nf);a.N?(a.Da(a.b,Nf,!0),Of(a)||(a.F&&md(a.F),a.N=0)):lg(a,Mf?"tr":"t")}break;case "r":if("reset"==b){a.F&&a.F.reset(); +a.i("\tdh [p] [n] dump n instructions from history position p");Ua.length&&a.i("dump extension commands:\n\t"+Ua)}else if("state"==ca){var ud=mg(a.F,!0);"console"==oa?console.log(ud):(a.oa&&(a.oa.value=""),ud&&a.i(ud))}else if("symbols"==ca)for(var vd=0;vdda.length&&(a.i("note: only "+da.length+" available"),T=da.length);X-=T;0>X&&(null==da[da.length-1].B?(T=X+T,X=0):X+=da.length);var xd=[];"call"==pf&&(pb=1E5,xd=["CALL"]);for(void 0!==of&&a.i(T+" instructions earlier:");0=da.length&&(X=0);a.sa=T;rf++;pb--}}rf||(a.i("no "+qf+"history available"),a.sa=void 0)}else{var Wa=Z(a,ca,a.ja);if(Wa){var Aa=0,uf="ds"==Ta;if(oa){if("l"==oa.charAt(0))oa=oa.substr(1)||Qg,Aa=Je(a,oa);else{var vf=Z(a,oa);vf&&(Aa=vf.B-Wa.B)}0>Aa&&(Aa=0);65536zf;zf++)xf+=String.fromCharCode((pc%64|0)+32),pc/=64}Ba&&(Ba+="\n");Ba=uf?Ba+(Ca+","):Ba+(ca+": "+Ca+(0>yf?" "+xf:""))}Ba&&a.i(Ba);a.ca=Sg}}}}break;case "e":if("else"==f[0])break;var Af,Bf,Cf=f[0],Ad=f[1];"e"==Cf||"ew"==Cf?(Af=a.ya,Bf=a.eb):Ad=null;if(null==Ad)a.i("edit memory commands:"),a.i("\tew [a] [...] edit words at address a");else{var qc=Z(a,Ad,a.ja);if(qc)for(var rc=2;rc< +f.length;rc++){var Bd=V(a,f[rc]);if(void 0===Bd){a.i("unknown value: "+f[rc]);break}a.i("changing "+N(a,qc.B)+" from "+We(Af.call(a,qc))+" to "+We(Bd));Bf.call(a,qc,Bd,1)}}break;case "g":a:{var Df=f[1],Ug=b;if(void 0!==Df){var Cd=Z(a,Df);if(!Cd)break a;Ve(a,Cd,Ug);a.Da(a.b,Cd,!0)}Pf(a,!0,c)}break;case "h":a.v.K?(c||a.i("halting"),a.V()):Lb(a,!0)||c||a.i("already halted");break;case "i":if("if"==f[0]){var Dd;var rb=b.substr(2),rb=Ia(rb);V(a,rb)?(c||a.i("true: "+rb),Dd=!0):(c||a.i("false: "+rb),Dd= +!1);Dd||(d=!1);break}g=!0;break;case "k":var Vg=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var Ed=0,Fd=W(),sb=W();for(a.i("stack trace for "+N(a,sb.B));10>Ed;){for(var Da=null,Wg=256;65536>sb.B>>>0;){Fd.B=a.ya(sb,2);if(null==sb.B||!Wg--)break;if(!(Fd.B&1)){for(var Xg=a,sc=Fd,Ef=null,tb=sc.B,Ff=tb,Gd=1;6>=Gd&&tb;Gd++){if(2Lf)a.i("step commands:"),a.i("\tp\tstep over instruction"),a.i("\tpr\tstep over instruction with register update");else if(a.N)a.i("step in progress");else{var Mf=W(a.u.A);a.ya(Mf);a.N?(a.Da(a.b,Mf,!0),Pf(a)||(a.F&&md(a.F),a.N=0)):lg(a,Lf?"tr":"t")}break;case "r":if("reset"==b){a.F&&a.F.reset(); break}Sf(a,f);break;case "s":a:switch(f[1]){case "base":if(f[2]){var vb=+f[2];if(8==vb||10==vb||16==vb)a.ca=vb;else{a.i("invalid base: "+vb);break}}a.i("default base: "+a.ca);break;case "cs":var wb;void 0!==f[3]&&(wb=+f[3]);switch(f[2]){case "int":a.u.ia=wb;break;case "start":a.u.va=wb;break;case "stop":a.u.ka=wb;break;default:a.i("unknown cs option");break a}void 0!==wb&&ed(a.u);a.i("checksums "+(a.u.v.Ea?"enabled":"disabled"));break;case "sp":void 0!==f[2]&&(jd(a.u,+f[2])||a.i("warning: using 1x multiplier, previous target not reached")); a.i("target speed: "+(a.u.aa.toFixed(2)+"Mhz")+" ("+a.u.ba+"x)");break;default:if(f[1]){a.i("unknown option: "+f[1]);break}case "?":a.i("debugger options:"),a.i("\tbase #\t\tset default base to #"),a.i("\tcs int #\tset checksum cycle interval to #"),a.i("\tcs start #\tset checksum cycle start count to #"),a.i("\tcs stop #\tset checksum cycle stop count to #"),a.i("\tsp #\t\tset speed multiplier to #")}break;case "t":lg(a,f[0],f[1]);break;case "u":Tf(a,f[1],f[2],8);break;case "v":if("var"==f[0]){ig(a, -b.substr(3))||(d=!1);break}if("ver"==f[0]){a.i((Pb||"PDP10")+" version 1.34.2 ("+a.u.hb+",RELEASE)");a.i(window?window.navigator.userAgent:"");break}g=!0;break;case "?":if(f[1]){kg(a,b.substr(1));break}var Hd="commands:",Id;for(Id in ng)Hd+="\n"+Ha(Id,9)+ng[Id];Qd(a)||(Hd+="\nnote: history disabled if no exec breakpoints");a.i(Hd);break;default:g=!0}g&&(a.i("unknown command: "+b),d=!1)}}catch(Pf){a.i("debugger error: "+(Pf.stack||Pf.message)),d=!1}return d} +b.substr(3))||(d=!1);break}if("ver"==f[0]){a.i((Pb||"PDP10")+" version 1.34.2 ("+a.u.hb+",RELEASE)");a.i(window?window.navigator.userAgent:"");break}g=!0;break;case "?":if(f[1]){kg(a,b.substr(1));break}var Hd="commands:",Id;for(Id in ng)Hd+="\n"+Ha(Id,9)+ng[Id];Qd(a)||(Hd+="\nnote: history disabled if no exec breakpoints");a.i(Hd);break;default:g=!0}g&&(a.i("unknown command: "+b),d=!1)}}catch(Of){a.i("debugger error: "+(Of.stack||Of.message)),d=!1}return d} function hd(a,b,c){b=Ge(a,b,c);for(var d in b)if(!eg(a,b[+d]))return!1;return!0} var ng={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory","g [#]":"go [to #]",h:"halt","if":"eval expression","int [#]":"request interrupt",k:"stack trace",ln:"list nearest symbol(s)",m:"messages",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble","var":"assign variable",ver:"print version"},$f=20,ag=".WORD HLL HLLZ HLLO HLLE HRL HRLZ HRLO HRLE HRR HRRZ HRRO HRRE HLR HLRZ HLRO HLRE MOVE MOVS MOVN MOVM EXCH BLT PUSH POP LDB DPB IBP ILDB IDPB SETZ SETO SETA SETCA SETM SETCM AND ANDCA ANDCM ANDCB IOR ORCA ORCM ORCB XOR EQV LSH LSHC ROT ROTC ADD SUB MUL IMUL DIV IDIV ASH ASHC FSC FADR FSBR FMPR FDVR DFN UFA FAD FSB FMP FDV AOBJP AOBJN CAI CA JUMP SKIP AOJ AOS SOJ SOS TR TL TD TS XCT JFFO JFCL JSR JSP JRST JSA JRA PUSHJ POPJ BLKI DATAI BLKO DATAO CONO CONI CONSZ CONSO UUO".split(" "), Ye=0,Ze=1,$e=2,af=3,bf=4,cf=5,df=6,ef=7,Xe="PC RA EA C0 C1 OV ND PD".split(" "),og={},Wf=(og[28672]={0:101},og[32704]={5632:64,5696:63,5760:58,5824:27,5888:28,5952:25,6016:29,6080:26,10240:56,10304:48,10368:46,10432:84,10496:57,10560:49,10624:47,10752:21,10816:22,10880:69,10944:70,11008:88,11072:85,11136:83,11264:91,11328:23,11392:24,11456:92,11520:86,11584:87,11648:89,11712:90},og[32512]={6144:65,6400:59,6656:66,6912:60,7168:67,7424:61,7680:68,7936:62,8192:17,8448:18,8704:19,8960:$f,9216:53,9472:52, 9728:55,9984:54,11776:50,12032:51,16384:30,16640:36,16896:37,17152:34,17408:38,17664:32,17920:44,18176:40,18432:39,18688:45,18944:33,19200:41,19456:35,19712:42,19968:43,20224:31,20480:1,20736:5,20992:2,21248:6,21504:3,21760:7,22016:4,22272:8,22528:9,22784:13,23040:10,23296:14,23552:11,23808:15,24064:12,24320:16},og[32256]={12288:71,12800:72,13312:73,13824:74,14336:75,14848:76,15360:77,15872:78},og[29248]={24576:79,24640:80,25088:81,25152:82},og[28700]={28672:93,28676:94,28680:95,28684:96,28688:97, -28692:98,28696:99,28700:100},og),Xf=["","I","M","S"],Yf=" L E LE A GE N G".split(" "),Zf="N NE NA NN Z ZE ZA ZN C CE CA CN O OE OA ON".split(" "),ff=1E3,Rf=">> ";eb(function(){for(var a=z(document,y,"debugger"),b=0;b> ";eb(function(){for(var a=z(document,y,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;b>24;if(c){a=this.c(b);var d=a>N?-(J-a):a;0d?Ya:0,c=Za):(d=d*Math.pow(2,c)%Ya,c=Ya-Math.pow(2,35-c)),a<=N?a+c>N&&(this.i|=131072):a-c<=N&&(this.i|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+J:d;this.f(b,a)}},function(a,b){if(a=(this.b<<14>>24)%36){var c=this.c(b);0>a&&(a=36+a);c=c*Math.pow(2,a)%J+ -Math.trunc(c/Math.pow(2,36-a));this.f(b,c)}},function(a,b){if(a=this.b<<14>>24){var c=this.c(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.f(b,c)}},function(a){this.a(a)},function(a){this.a(a)},function(a,b){if(a=(this.b<<14>>24)%72){var c=this.c(b),d=this.c(b+1&15),e=c;0>a&&(a=72+a);36>a?(c=c*Math.pow(2,a)%J+Math.trunc(d/Math.pow(2,36-a)),d=d*Math.pow(2,a)%J+Math.trunc(e/Math.pow(2,36-a))):(c=d*Math.pow(2,a-36)%J+Math.trunc(c/Math.pow(2,72-a)),d=e*Math.pow(2,a-36)% -J+Math.trunc(d/Math.pow(2,72-a)));this.f(b,c);this.f(b+1&15,d)}},function(a,b){if(a=this.b<<14>>24){var c=this.c(b),d=this.c(b+1&15);0=a?(c=0,d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36))):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%J,c=Math.trunc(c/Math.pow(2,-a)));this.f(b,c);this.f(b+1&15,d)}},T,function(a,b){a=this.c(b);this.f(b,this.c(this.b));this.f(this.b,a)},function(a, -b){a=!1;for(var c=this.c(b),d=c/L|0,c=c&M;!a;)this.f(c,this.c(d)),c==this.b&&(a=!0),d=d+1&M,c=c+1&M,this.g.A||(this.f(b,d*L+c),a||gc(this),a=!0)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},T,function(a){this.a(a)},function(a,b){a=this.c(b);a+=262145;this.f(a&M,this.c(this.b));a>=J&&(a-=J);a/L|0||(this.i|=262144);this.f(b,a)},function(a,b){a=this.c(b);var c=this.c(a&M);this.f(this.b,c);this.b==b&&(a=c);a-=262145;0>a&&(a+=J);(a/ -L|0)==M&&(this.i|=262144);this.f(b,a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, +function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a,b){var c=(this.b<<14>>14)%256;if(c){a=this.c(b);var d=a>N?-(J-a):a;0d?Ya:0,c=Za):(d=d*Math.pow(2,c)%Ya,c=Ya-Math.pow(2,35-c)),a<=N?a+c>N&&(this.i|=131072):a-c<=N&&(this.i|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+J:d;this.f(b,a)}},function(a,b){if(a=(this.b<<14>>14)%36){var c=this.c(b);0>a&&(a=36+a);c=c*Math.pow(2, +a)%J+Math.trunc(c/Math.pow(2,36-a));this.f(b,c)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.c(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.f(b,c)}},function(a){this.a(a)},function(a){this.a(a)},function(a,b){if(a=(this.b<<14>>14)%72){var c=this.c(b),d=this.c(b+1&15),e=c;0>a&&(a=72+a);36>a?(c=c*Math.pow(2,a)%J+Math.trunc(d/Math.pow(2,36-a)),d=d*Math.pow(2,a)%J+Math.trunc(e/Math.pow(2,36-a))):(c=d*Math.pow(2,a-36)%J+Math.trunc(c/Math.pow(2,72-a)),d=e*Math.pow(2, +a-36)%J+Math.trunc(d/Math.pow(2,72-a)));this.f(b,c);this.f(b+1&15,d)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.c(b),d=this.c(b+1&15);0=a?(c=0,d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36))):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%J,c=Math.trunc(c/Math.pow(2,-a)));this.f(b,c);this.f(b+1&15,d)}},T,function(a,b){a=this.c(b);this.f(b,this.c(this.b));this.f(this.b, +a)},function(a,b){a=!1;for(var c=this.c(b),d=c/L|0,c=c&M;!a;)this.f(c,this.c(d)),c==this.b&&(a=!0),d=d+1&M,c=c+1&M,this.g.A||(this.f(b,d*L+c),a||gc(this),a=!0)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},T,function(a){this.a(a)},function(a,b){a=this.c(b);a+=262145;this.f(a&M,this.c(this.b));a>=J&&(a-=J);a/L|0||(this.i|=262144);this.f(b,a)},function(a,b){a=this.c(b);var c=this.c(a&M);this.f(this.b,c);this.b==b&&(a=c);a-=262145; +0>a&&(a+=J);(a/L|0)==M&&(this.i|=262144);this.f(b,a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, -function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},pc,pc,function(){this.f(this.b,0)},function(a,b){this.f(this.b,this.f(b,0))},function(a,b){this.f(b,Y(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Y(this.c(b),this.b))},function(a,b){this.f(this.b,Y(this.c(b),this.c(this.b)))}, -function(a,b){this.f(this.b,this.f(b,Y(this.c(b),this.c(this.b))))},function(a,b){this.f(b,Y(K-this.c(b),this.c(this.b)))},function(a,b){this.f(b,Y(K-this.c(b),this.b))},function(a,b){this.f(this.b,Y(K-this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Y(K-this.c(b),this.c(this.b))))},mc,nc,Jc,mc,function(a,b){this.f(b,Y(this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Y(this.c(b),K-this.b))},function(a,b){this.f(this.b,Y(this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b, -this.f(b,Y(this.c(b),K-this.c(this.b))))},Jc,Jc,oc,oc,function(a,b){this.f(b,Kc(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Kc(this.c(b),this.b))},function(a,b){this.f(this.b,Kc(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Kc(this.c(b),this.c(this.b))))},function(a,b){this.f(b,Z(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Z(this.c(b),this.b))},function(a,b){this.f(this.b,Z(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(this.c(b),this.c(this.b))))}, -function(a,b){this.f(b,Y(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Y(K-this.c(b),K-this.b))},function(a,b){this.f(this.b,Y(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Y(K-this.c(b),K-this.c(this.b))))},function(a,b){this.f(b,Lc(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Lc(this.c(b),this.b))},function(a,b){this.f(this.b,Lc(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Lc(this.c(b),this.c(this.b))))},qc,qc,function(a,b){this.f(this.b, -K-this.c(b))},function(a,b){this.f(this.b,this.f(b,K-this.c(b)))},function(a,b){this.f(b,Z(K-this.c(b),this.c(this.b)))},function(a,b){this.f(b,Z(K-this.c(b),this.b))},function(a,b){this.f(this.b,Z(K-this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(K-this.c(b),this.c(this.b))))},function(a,b){this.f(b,K-this.c(this.b))},function(a,b){this.f(b,K-this.b)},function(){this.f(this.b,K-this.c(this.b))},function(a,b){this.f(this.b,this.f(b,K-this.c(this.b)))},function(a,b){this.f(b,Z(this.c(b), -K-this.c(this.b)))},function(a,b){this.f(b,Z(this.c(b),K-this.b))},function(a,b){this.f(this.b,Z(this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(this.c(b),K-this.c(this.b))))},function(a,b){this.f(b,Z(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Z(K-this.c(b),K-this.b))},function(a,b){this.f(this.b,Z(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(K-this.c(b),K-this.c(this.b))))},rc,rc,function(){this.f(this.b,K)},function(a,b){this.f(this.b,this.f(b, -K))},sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, +function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},pc,pc,function(){this.f(this.b,0)},function(a,b){this.f(this.b,this.f(b,0))},function(a,b){this.f(b,Y(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Y(this.c(b),this.b))},function(a,b){this.f(this.b, +Y(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Y(this.c(b),this.c(this.b))))},function(a,b){this.f(b,Y(K-this.c(b),this.c(this.b)))},function(a,b){this.f(b,Y(K-this.c(b),this.b))},function(a,b){this.f(this.b,Y(K-this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Y(K-this.c(b),this.c(this.b))))},mc,nc,Jc,mc,function(a,b){this.f(b,Y(this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Y(this.c(b),K-this.b))},function(a,b){this.f(this.b,Y(this.c(b),K-this.c(this.b)))}, +function(a,b){this.f(this.b,this.f(b,Y(this.c(b),K-this.c(this.b))))},Jc,Jc,oc,oc,function(a,b){this.f(b,Kc(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Kc(this.c(b),this.b))},function(a,b){this.f(this.b,Kc(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Kc(this.c(b),this.c(this.b))))},function(a,b){this.f(b,Z(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Z(this.c(b),this.b))},function(a,b){this.f(this.b,Z(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b, +Z(this.c(b),this.c(this.b))))},function(a,b){this.f(b,Y(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Y(K-this.c(b),K-this.b))},function(a,b){this.f(this.b,Y(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Y(K-this.c(b),K-this.c(this.b))))},function(a,b){this.f(b,Lc(this.c(b),this.c(this.b)))},function(a,b){this.f(b,Lc(this.c(b),this.b))},function(a,b){this.f(this.b,Lc(this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Lc(this.c(b),this.c(this.b))))},qc, +qc,function(a,b){this.f(this.b,K-this.c(b))},function(a,b){this.f(this.b,this.f(b,K-this.c(b)))},function(a,b){this.f(b,Z(K-this.c(b),this.c(this.b)))},function(a,b){this.f(b,Z(K-this.c(b),this.b))},function(a,b){this.f(this.b,Z(K-this.c(b),this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(K-this.c(b),this.c(this.b))))},function(a,b){this.f(b,K-this.c(this.b))},function(a,b){this.f(b,K-this.b)},function(){this.f(this.b,K-this.c(this.b))},function(a,b){this.f(this.b,this.f(b,K-this.c(this.b)))}, +function(a,b){this.f(b,Z(this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Z(this.c(b),K-this.b))},function(a,b){this.f(this.b,Z(this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(this.c(b),K-this.c(this.b))))},function(a,b){this.f(b,Z(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(b,Z(K-this.c(b),K-this.b))},function(a,b){this.f(this.b,Z(K-this.c(b),K-this.c(this.b)))},function(a,b){this.f(this.b,this.f(b,Z(K-this.c(b),K-this.c(this.b))))},rc,rc,function(){this.f(this.b, +K)},function(a,b){this.f(this.b,this.f(b,K))},sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)}, -function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X],Ic=[function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a,b){switch(b){case 0:a=this.c(this.b);a&8&&(this.i&=-131073);a&131072&&(this.i&=-262145);break;default:this.a(a)}},function(a,b){switch(b){case 0:a= -0;this.i&131072&&(a|=8);this.i&262144&&(a|=65536);this.f(this.b,a);break;default:this.a(a)}},function(a){this.a(a)},function(a){this.a(a)}]; +function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X],Ic=[function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a){this.a(a)},function(a,b){switch(b){case 0:a=this.c(this.b);a&8&&(this.i&=-131073);a&131072&&(this.i&=-262145); +break;default:this.a(a)}},function(a,b){switch(b){case 0:a=0;this.i&131072&&(a|=8);this.i&262144&&(a|=65536);this.f(this.b,a);break;default:this.a(a)}},function(a){this.a(a)},function(a){this.a(a)}]; function Mc(a){y.call(this,"ROM",a);this.O=this.a=null;this.l=+a.addr;this.i=+a.size;this.b=a.alias;"string"==typeof this.b&&(this.b=eval(this.b));this.j=a.file;this.o=ma(this.j);if(this.j){a=this.j;var b=na(this.o);"json"!=b&&"hex"!=b&&(a=pa()+"/api/v1/dump?file="+this.j+"&format=bytes&decimal=true");var c=this;t(a,null,!0,function(a,b,f){f?(c.F("Unable to load ROM resource (error "+f+": "+a+")"),c.j=null):(Ka(c.pa,a,b),(a=va(a,b))?(c.a=a.H,c.O=a.O):c.j=null);Nc(c)})}}n(Mc,y); Mc.prototype.Z=function(a,b,c,d){this.s=b;this.h=c;this.v=d;Nc(this)};Mc.prototype.V=function(){this.O&&(this.v&&this.v.a(this.id,this.l,this.i,this.O),delete this.O);return!0};Mc.prototype.R=function(){return!0}; function Nc(a){if(!Ua(a)){if(a.j){if(!a.a||!a.s)return;a.i||(a.i=a.a.length);if(a.a.length!=a.i){var b="ROM size ("+r(a.a.length,8,!0)+") does not match specified size ("+r(a.i,8,!0)+")";a.g.error=!0;a.F(b)}else{b=a.l;if(Db(a.s,b,a.i,Lb)){var c;for(c=0;c>>f.b;0>>=f.b;0>>a.b;0g&&g>=ja&&(g+=ia);g=Math.trunc(Math.abs(g))%ia;void 0===f&&(f=e.size);for(h=d;f--&&h>>a.b;0g&&g>=ja&&(g+=ia);g=Math.trunc(Math.abs(g))%Math.pow(2,36);void 0===f&&(f=e.size);for(h=d;f--&&h=q.La&&c<=q.$a&&(b=c-(q.La-q.Ta));b&&(a.preventDefault&&a.preventDefault(),d.xa(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==q.Va&&(b=q.Ua);d.xa(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation();