From 40b6b584f6cceed33a0c586add2d2b8e5741ca5e Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 9 Mar 2017 15:47:01 -0800 Subject: [PATCH 1/6] Updated PDP-10 file list --- modules/pdp10/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/pdp10/README.md b/modules/pdp10/README.md index f451d98c4..b750b082b 100644 --- a/modules/pdp10/README.md +++ b/modules/pdp10/README.md @@ -18,6 +18,7 @@ The module is currently comprised of the following components, as listed in [pac * [bus.js](/modules/pdp10/lib/bus.js) * [computer.js](/modules/pdp10/lib/computer.js) * [cpu.js](/modules/pdp10/lib/cpu.js) +* [cpuop.js](/modules/pdp10/lib/cpuop.js) * [cpustate.js](/modules/pdp10/lib/cpustate.js) * [debugger.js](/modules/pdp10/lib/debugger.js) * [defines.js](/modules/pdp10/lib/defines.js) From 3a9cd5cf0424c831d000d66398b303ae58769441 Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 9 Mar 2017 17:49:54 -0800 Subject: [PATCH 2/6] Code cleanup --- docs/pcx86/examples/pcx86-dbg.js | 2 +- docs/pcx86/examples/pcx86.js | 2 +- modules/htmlout/lib/htmlout.js | 1 - modules/pdp10/lib/computer.js | 1 - modules/pdp10/lib/cpuops.js | 2 +- modules/pdp10/lib/debugger.js | 1 - modules/pdp10/lib/defines.js | 2 ++ modules/pdp11/lib/computer.js | 1 - modules/pdp11/lib/cpuops.js | 6 ------ modules/pdp11/lib/cpustate.js | 4 ---- modules/pdp11/lib/debugger.js | 1 - modules/pdp11/lib/disk.js | 2 -- modules/shared/lib/sticky.js | 1 - modules/shared/lib/strlib.js | 4 ++-- versions/c1pjs/1.34.2/c1p-dbg.js | 2 +- versions/c1pjs/1.34.2/c1p.js | 2 +- versions/pc8080/1.34.2/pc8080-dbg.js | 2 +- versions/pc8080/1.34.2/pc8080.js | 2 +- versions/pcx86/1.34.2/pcx86-dbg.js | 2 +- versions/pcx86/1.34.2/pcx86.js | 2 +- versions/pdpjs/1.34.2/pdp10-dbg.js | 2 +- versions/pdpjs/1.34.2/pdp10.js | 2 +- versions/pdpjs/1.34.2/pdp11-dbg.js | 2 +- versions/pdpjs/1.34.2/pdp11.js | 2 +- 24 files changed, 17 insertions(+), 33 deletions(-) diff --git a/docs/pcx86/examples/pcx86-dbg.js b/docs/pcx86/examples/pcx86-dbg.js index fa9d87a28..bc85f637f 100644 --- a/docs/pcx86/examples/pcx86-dbg.js +++ b/docs/pcx86/examples/pcx86-dbg.js @@ -51,7 +51,7 @@ var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 y:121,z:122,"{":123,"|":124,"}":125,"~":126,Mp:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var na={};na[n["1"]]=n["!"];na[n["2"]]=n["@"];na[n["3"]]=n["#"];na[n["4"]]=n.$;na[n["5"]]=n["%"];na[n["6"]]=n["^"];na[n["7"]]=n["&"];na[n["8"]]=n["*"];na[n["9"]]=n["("];na[n["0"]]=n[")"];na[186]=n[":"];na[187]=n["+"];na[188]=n["<"];na[189]=n._;na[190]=n[">"]; na[191]=n["?"];na[192]=n["~"];na[219]=n["{"];na[220]=n["|"];na[221]=n["}"];na[222]=n['"'];na[173]=n._;na[61]=n["+"];na[59]=n[":"]; function oa(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function pa(a,b,c,d){var e="";isNaN(a)?a=null:null!=a&&(0>a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} function qa(a,b){var c,d="";b?32>=1,f--;return d}function ra(a,b,c){var d="";if(!b||4>=8;return(c?"0b":"")+d}function sa(a,b,c){b?12"']/g,function(a){return Aa[a]})} function Ba(a,b,c){return c?(" "+a).slice(-b):(a+" ").slice(0,b)}function Ca(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} diff --git a/docs/pcx86/examples/pcx86.js b/docs/pcx86/examples/pcx86.js index c7306e27f..3ad34739f 100644 --- a/docs/pcx86/examples/pcx86.js +++ b/docs/pcx86/examples/pcx86.js @@ -51,7 +51,7 @@ var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 y:121,z:122,"{":123,"|":124,"}":125,"~":126,po:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var p={};p[n["1"]]=n["!"];p[n["2"]]=n["@"];p[n["3"]]=n["#"];p[n["4"]]=n.$;p[n["5"]]=n["%"];p[n["6"]]=n["^"];p[n["7"]]=n["&"];p[n["8"]]=n["*"];p[n["9"]]=n["("];p[n["0"]]=n[")"];p[186]=n[":"];p[187]=n["+"];p[188]=n["<"];p[189]=n._;p[190]=n[">"];p[191]=n["?"]; p[192]=n["~"];p[219]=n["{"];p[220]=n["|"];p[221]=n["}"];p[222]=n['"'];p[173]=n._;p[61]=n["+"];p[59]=n[":"]; function na(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(16,b)),0>a||a>=Math.pow(16,b))&&(a=null);if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function oa(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),a>=Math.pow(16,b)&&(b=Math.ceil(Math.log(a)/Math.log(16))));if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} function pa(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0"']/g,function(a){return ta[a]})}function ua(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} var ta={"&":"&","<":"<",">":">",'"':""","'":"'"},va={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; function wa(){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 xa(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;var f=a[e],g=arguments[d++],c=c&~f.qg|g<>a.shift}var za=[31,28,31,30,31,30,31,31,30,31,30,31],Aa=Date.now||function(){return+new Date}; diff --git a/modules/htmlout/lib/htmlout.js b/modules/htmlout/lib/htmlout.js index 9c79e296b..1fdf317e5 100644 --- a/modules/htmlout/lib/htmlout.js +++ b/modules/htmlout/lib/htmlout.js @@ -881,7 +881,6 @@ HTMLOut.prototype.findTokens = function(reTokens) aParms.push(aMatch[1]); } } - //noinspection JSUnresolvedFunction fnToken.call(this, sToken, sIndent, aParms); } } diff --git a/modules/pdp10/lib/computer.js b/modules/pdp10/lib/computer.js index b2e0072f3..35522115f 100644 --- a/modules/pdp10/lib/computer.js +++ b/modules/pdp10/lib/computer.js @@ -418,7 +418,6 @@ class ComputerPDP10 extends Component { } } if (DEBUG && this.messageEnabled()) this.printMessage("ComputerPDP10.wait(ready)"); - //noinspection JSUnresolvedFunction fn.call(this, parms); } diff --git a/modules/pdp10/lib/cpuops.js b/modules/pdp10/lib/cpuops.js index 598179ce9..d6303187e 100644 --- a/modules/pdp10/lib/cpuops.js +++ b/modules/pdp10/lib/cpuops.js @@ -2341,7 +2341,7 @@ PDP10.opPUSHJ = function(op, acc) PDP10.opPUSH = function(op, acc) { var p = this.readWord(acc); - if (!SIMH) { + if (!PDP10.SIMH) { /* * This is the behavior that is clearly documented by DEC. */ diff --git a/modules/pdp10/lib/debugger.js b/modules/pdp10/lib/debugger.js index 1181a30cc..0405b4034 100644 --- a/modules/pdp10/lib/debugger.js +++ b/modules/pdp10/lib/debugger.js @@ -2812,7 +2812,6 @@ class DebuggerPDP10 extends Debugger { if (w === undefined) break; w = this.validateWord(w); this.println("changing " + this.toStrAddr(dbgAddr) + " from " + this.toStrWord(fnGet.call(this, dbgAddr)) + " to " + this.toStrWord(w)); - //noinspection JSUnresolvedFunction fnSet.call(this, dbgAddr, w, 1); } } diff --git a/modules/pdp10/lib/defines.js b/modules/pdp10/lib/defines.js index 276fb86fc..1e90a6b7c 100644 --- a/modules/pdp10/lib/defines.js +++ b/modules/pdp10/lib/defines.js @@ -275,11 +275,13 @@ var PDP10 = { PDP10.APPCLASS = APPCLASS; PDP10.APPNAME = APPNAME; PDP10.DEBUGGER = DEBUGGER; +PDP10.SIMH = SIMH; if (NODE) { global.APPCLASS = APPCLASS; global.APPNAME = APPNAME; global.DEBUGGER = DEBUGGER; + global.SIMH = SIMH; global.PDP10 = PDP10; module.exports = PDP10; } diff --git a/modules/pdp11/lib/computer.js b/modules/pdp11/lib/computer.js index 32ca6d7fb..3160adeb4 100644 --- a/modules/pdp11/lib/computer.js +++ b/modules/pdp11/lib/computer.js @@ -422,7 +422,6 @@ class ComputerPDP11 extends Component { } } if (DEBUG && this.messageEnabled()) this.printMessage("ComputerPDP11.wait(ready)"); - //noinspection JSUnresolvedFunction fn.call(this, parms); } diff --git a/modules/pdp11/lib/cpuops.js b/modules/pdp11/lib/cpuops.js index eb7951fc9..983fd8d51 100644 --- a/modules/pdp11/lib/cpuops.js +++ b/modules/pdp11/lib/cpuops.js @@ -1352,7 +1352,6 @@ PDP11.opMFPI = function(opCode) */ PDP11.opMFPS = function(opCode) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); }; @@ -1375,7 +1374,6 @@ PDP11.opMFPS = function(opCode) */ PDP11.opMFPT = function(opCode) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); }; @@ -1471,7 +1469,6 @@ PDP11.opMTPI = function(opCode) */ PDP11.opMTPS = function(opCode) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); }; @@ -1668,7 +1665,6 @@ PDP11.opRTI = function(opCode) PDP11.opRTS = function(opCode) { if (opCode & 0x08) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); return; } @@ -1813,7 +1809,6 @@ PDP11.opSOB = function(opCode) PDP11.opSPL = function(opCode) { if (!(opCode & 0x08) || this.model < PDP11.MODEL_1145) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); return; } @@ -2415,7 +2410,6 @@ PDP11.op8Xnn_1140 = function(opCode) PDP11.op8DXn_1140 = function(opCode) { if (this.model < PDP11.MODEL_1145) { - //noinspection JSUnresolvedFunction PDP11.opUndefined.call(this, opCode); return; } diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index 1017c7d25..4bdc6b89d 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -2901,11 +2901,9 @@ class CPUStatePDP11 extends CPUPDP11 { data = (data < 0? (this.regsGen[-data-1] & 0xff): data); this.regsGen[reg] = (this.regsGen[reg] & ~writeFlags) | (((data << 24) >> 24) & writeFlags); } - //noinspection JSUnresolvedFunction fnFlags.call(this, data << 8); } else { var addr = this.getAddr(mode, reg, PDP11.ACCESS.WRITE_BYTE); - //noinspection JSUnresolvedFunction fnFlags.call(this, (data = data < 0? (this.regsGen[-data-1] & 0xff) : data) << 8); this.setByte(addr, data); if (addr & 1) this.nStepCycles--; @@ -2931,11 +2929,9 @@ class CPUStatePDP11 extends CPUPDP11 { if (!mode) { this.regsGen[reg] = (data = data < 0? this.regsGen[-data-1] : data); - //noinspection JSUnresolvedFunction fnFlags.call(this, data); } else { var addr = this.getAddr(mode, reg, PDP11.ACCESS.WRITE_WORD); - //noinspection JSUnresolvedFunction fnFlags.call(this, (data = data < 0? this.regsGen[-data-1] : data)); this.setWord(addr, data); } diff --git a/modules/pdp11/lib/debugger.js b/modules/pdp11/lib/debugger.js index 75121475d..a9dc5887f 100644 --- a/modules/pdp11/lib/debugger.js +++ b/modules/pdp11/lib/debugger.js @@ -3008,7 +3008,6 @@ class DebuggerPDP11 extends Debugger { this.println("warning: " + Str.toHex(vNew) + " exceeds " + size + "-byte value"); } this.println("changing " + this.toStrAddr(dbgAddr) + (this.messageEnabled(MessagesPDP11.BUS)? "" : (" from " + this.toStrBase(fnGet.call(this, dbgAddr), size << 3))) + " to " + this.toStrBase(vNew, size << 3)); - //noinspection JSUnresolvedFunction fnSet.call(this, dbgAddr, vNew, size); } } diff --git a/modules/pdp11/lib/disk.js b/modules/pdp11/lib/disk.js index 265cf9a68..0f80fa19c 100644 --- a/modules/pdp11/lib/disk.js +++ b/modules/pdp11/lib/disk.js @@ -371,7 +371,6 @@ class DiskPDP11 extends Component { } if (this.fnNotify) { - //noinspection JSUnresolvedFunction this.fnNotify.call(this.controller, this.drive, disk, this.sDiskName, this.sDiskPath); this.fnNotify = null; } @@ -591,7 +590,6 @@ class DiskPDP11 extends Component { } if (this.fnNotify) { - //noinspection JSUnresolvedFunction this.fnNotify.call(this.controllerNotify, this.drive, disk, this.sDiskName, this.sDiskPath); this.fnNotify = null; } diff --git a/modules/shared/lib/sticky.js b/modules/shared/lib/sticky.js index 718817a5d..ba58bade8 100644 --- a/modules/shared/lib/sticky.js +++ b/modules/shared/lib/sticky.js @@ -127,7 +127,6 @@ function commandMachine(control, fSingle, idMachine, sComponent, sCommand, sValu if (exports) { var fnCommand = exports[sCommand]; if (fnCommand) { - //noinspection JSUnresolvedFunction if (fnCommand.call(component, sValue)) { if (fSingle) control.disabled = true; return true; diff --git a/modules/shared/lib/strlib.js b/modules/shared/lib/strlib.js index d20da5a6f..e8e122965 100644 --- a/modules/shared/lib/strlib.js +++ b/modules/shared/lib/strlib.js @@ -182,8 +182,8 @@ class Str { if (n < 0) { n += Math.pow(radix, cch); } - if (n < 0 || n >= Math.pow(radix, cch)) { - n = null; + if (n >= Math.pow(radix, cch)) { + cch = Math.ceil(Math.log(n) / Math.log(radix)); } } if (n == null) { diff --git a/versions/c1pjs/1.34.2/c1p-dbg.js b/versions/c1pjs/1.34.2/c1p-dbg.js index 3cab6b316..8efd850aa 100644 --- a/versions/c1pjs/1.34.2/c1p-dbg.js +++ b/versions/c1pjs/1.34.2/c1p-dbg.js @@ -22,7 +22,7 @@ var f;function p(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]} for(var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},q="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this,ba=["Math","trunc"],ca=0;caa?-b:b};ga!=fa&&null!=ga&&aa(q,ea,{configurable:!0,writable:!0,value:ga}); -function t(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),0>a||a>=Math.pow(16,b))&&(a=null);if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}function u(a){return t(a,2,!0)}function v(a){return t(a,4,!0)} +function t(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),a>=Math.pow(16,b)&&(b=Math.ceil(Math.log(a)/Math.log(16))));if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}function u(a){return t(a,2,!0)}function v(a){return t(a,4,!0)} function ha(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0"']/g,function(a){return ka[a]})}var ka={"&":"&","<":"<",">":">",'"':""","'":"'"},la=Date.now||function(){return+new Date}; function w(a,b){var c=!0,c=void 0===c?!1:c,d=0,e=null;if("object"==typeof resources&&(e=resources[a]))b&&b(a,e,d);else if(c&&"function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{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:")||(d=g.status||-1),b&&b(a,e,d))});g.open("GET", a,c);g.send();c||(e=g.responseText,200!=g.status&&(d=g.status||-1),b&&b(a,e,d))}}function x(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function ma(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0a?-b:b};fa!=ea&&null!=fa&&aa(r,da,{configurable:!0,writable:!0,value:fa}); -function u(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),0>a||a>=Math.pow(16,b))&&(a=null);if(null==a)for(;0=f?48:55),d=String.fromCharCode(f)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}function ga(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0a&&-1a&&(a+=Math.pow(16,b)),a>=Math.pow(16,b)&&(b=Math.ceil(Math.log(a)/Math.log(16))));if(null==a)for(;0=f?48:55),d=String.fromCharCode(f)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}function ga(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0"']/g,function(a){return ja[a]})}var ja={"&":"&","<":"<",">":">",'"':""","'":"'"},ka=Date.now||function(){return+new Date}; function v(a,b){var c=!0,c=void 0===c?!1:c,d=0,f=null;if("object"==typeof resources&&(f=resources[a]))b&&b(a,f,d);else if(c&&"function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(d=g.status||-1),b&&b(a,f,d))});g.open("GET", a,c);g.send();c||(f=g.responseText,200!=g.status&&(d=g.status||-1),b&&b(a,f,d))}}function w(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function la(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){y.init.push(a)} diff --git a/versions/pc8080/1.34.2/pc8080-dbg.js b/versions/pc8080/1.34.2/pc8080-dbg.js index 46d790636..b701f0ea6 100644 --- a/versions/pc8080/1.34.2/pc8080-dbg.js +++ b/versions/pc8080/1.34.2/pc8080-dbg.js @@ -35,7 +35,7 @@ var ha=ea[ea.length-1],ia=da[ha],ka=ia?ia:function(a){a=Number(a);if(isNaN(a)||I var m={Be:0,Ee:1,Fe:2,Ge:3,He:4,Ie:5,Je:6,Ke:7,Le:8,Me:9,Ne:10,Oe:11,Pe:12,Qe:13,Re:14,Se:15,Te:16,Ue:17,Ve:18,We:19,Xe:20,Ye:21,Ze:22,$e:23,af:24,bf:25,cf:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,ab:65,Ub:66,Vb:67,Fb:68,E:69,Yb:70,Zb:71,$b:72,ac:73,bc:74,cc:75,Hb:76,gc:77,hc:78,lc:79,mc:80,Q:81,nc:82,pc:83,qc:84,rc:85,tc:86,uc:87, wc:88,xc:89,wb:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,yc:97,ud:98,xd:99,d:100,e:101,Bd:102,Dd:103,Ed:104,Fd:105,Od:106,k:107,Pd:108,Rd:109,n:110,Sd:111,p:112,q:113,r:114,oe:115,t:116,pe:117,qe:118,re:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,df:127},la={59:186,61:187,173:189,224:91}; function ma(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function pa(a,b,c){b?12a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function pa(a,b,c){b?12"']/g,function(a){return xa[a]})} function ya(a,b){return(a+" ").slice(0,b)}function Aa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var xa={"&":"&","<":"<",">":">",'"':""","'":"'"},Ca={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; function Da(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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())} diff --git a/versions/pc8080/1.34.2/pc8080.js b/versions/pc8080/1.34.2/pc8080.js index ce25c95f5..3727dc8fe 100644 --- a/versions/pc8080/1.34.2/pc8080.js +++ b/versions/pc8080/1.34.2/pc8080.js @@ -35,7 +35,7 @@ var ga=ca[ca.length-1],ha=ba[ga],ia=ha?ha:function(a){a=Number(a);if(isNaN(a)||I var n={Yd:0,ae:1,be:2,ce:3,de:4,ee:5,fe:6,ge:7,he:8,ie:9,je:10,ke:11,le:12,me:13,ne:14,oe:15,pe:16,qe:17,re:18,se:19,te:20,ue:21,ve:22,we:23,xe:24,ye:25,ze:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Ia:65,sb:66,tb:67,kb:68,E:69,wb:70,xb:71,yb:72,zb:73,Ab:74,Bb:75,lb:76,Fb:77,Gb:78,Jb:79,Kb:80,Q:81,Lb:82,Nb:83,Ob:84,Pb:85,Rb:86,Sb:87, Ub:88,Vb:89,$a:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Wb:97,Rc:98,Tc:99,d:100,e:101,Xc:102,Yc:103,Zc:104,$c:105,jd:106,k:107,kd:108,ld:109,n:110,md:111,p:112,q:113,r:114,Kd:115,t:116,Ld:117,Md:118,Nd:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,Ae:127},ja={59:186,61:187,173:189,224:91}; function ka(a){var b=16,c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(16,b)),0>a||a>=Math.pow(16,b))&&(a=null);if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function p(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),a>=Math.pow(16,b)&&(b=Math.ceil(Math.log(a)/Math.log(16))));if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} function la(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0"']/g,function(a){return qa[a]})}function ra(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} var qa={"&":"&","<":"<",">":">",'"':""","'":"'"},sa={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; function ta(){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())} diff --git a/versions/pcx86/1.34.2/pcx86-dbg.js b/versions/pcx86/1.34.2/pcx86-dbg.js index fa9d87a28..bc85f637f 100644 --- a/versions/pcx86/1.34.2/pcx86-dbg.js +++ b/versions/pcx86/1.34.2/pcx86-dbg.js @@ -51,7 +51,7 @@ var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 y:121,z:122,"{":123,"|":124,"}":125,"~":126,Mp:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var na={};na[n["1"]]=n["!"];na[n["2"]]=n["@"];na[n["3"]]=n["#"];na[n["4"]]=n.$;na[n["5"]]=n["%"];na[n["6"]]=n["^"];na[n["7"]]=n["&"];na[n["8"]]=n["*"];na[n["9"]]=n["("];na[n["0"]]=n[")"];na[186]=n[":"];na[187]=n["+"];na[188]=n["<"];na[189]=n._;na[190]=n[">"]; na[191]=n["?"];na[192]=n["~"];na[219]=n["{"];na[220]=n["|"];na[221]=n["}"];na[222]=n['"'];na[173]=n._;na[61]=n["+"];na[59]=n[":"]; function oa(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function pa(a,b,c,d){var e="";isNaN(a)?a=null:null!=a&&(0>a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} function qa(a,b){var c,d="";b?32>=1,f--;return d}function ra(a,b,c){var d="";if(!b||4>=8;return(c?"0b":"")+d}function sa(a,b,c){b?12"']/g,function(a){return Aa[a]})} function Ba(a,b,c){return c?(" "+a).slice(-b):(a+" ").slice(0,b)}function Ca(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} diff --git a/versions/pcx86/1.34.2/pcx86.js b/versions/pcx86/1.34.2/pcx86.js index c7306e27f..3ad34739f 100644 --- a/versions/pcx86/1.34.2/pcx86.js +++ b/versions/pcx86/1.34.2/pcx86.js @@ -51,7 +51,7 @@ var la={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 y:121,z:122,"{":123,"|":124,"}":125,"~":126,po:127},ma={};ma[173]=n["-"];ma[186]=n[";"];ma[187]=n["="];ma[189]=n["-"];ma[188]=n[","];ma[190]=n["."];ma[191]=n["/"];ma[192]=n["`"];ma[219]=n["["];ma[220]=n["\\"];ma[221]=n["]"];ma[222]=n["'"];var p={};p[n["1"]]=n["!"];p[n["2"]]=n["@"];p[n["3"]]=n["#"];p[n["4"]]=n.$;p[n["5"]]=n["%"];p[n["6"]]=n["^"];p[n["7"]]=n["&"];p[n["8"]]=n["*"];p[n["9"]]=n["("];p[n["0"]]=n[")"];p[186]=n[":"];p[187]=n["+"];p[188]=n["<"];p[189]=n._;p[190]=n[">"];p[191]=n["?"]; p[192]=n["~"];p[219]=n["{"];p[220]=n["|"];p[221]=n["}"];p[222]=n['"'];p[173]=n._;p[61]=n["+"];p[59]=n[":"]; function na(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(16,b)),0>a||a>=Math.pow(16,b))&&(a=null);if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function oa(a,b,c){b?9a&&-1a&&(a+=Math.pow(16,b)),a>=Math.pow(16,b)&&(b=Math.ceil(Math.log(a)/Math.log(16))));if(null==a)for(;0=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d} function pa(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0"']/g,function(a){return ta[a]})}function ua(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")} var ta={"&":"&","<":"<",">":">",'"':""","'":"'"},va={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; function wa(){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 xa(a,b){var c=0,d=1,e;for(e in a){if(d>=arguments.length)break;var f=a[e],g=arguments[d++],c=c&~f.qg|g<>a.shift}var za=[31,28,31,30,31,30,31,31,30,31,30,31],Aa=Date.now||function(){return+new Date}; diff --git a/versions/pdpjs/1.34.2/pdp10-dbg.js b/versions/pdpjs/1.34.2/pdp10-dbg.js index fa5d1fa46..5f8fa711e 100644 --- a/versions/pdpjs/1.34.2/pdp10-dbg.js +++ b/versions/pdpjs/1.34.2/pdp10-dbg.js @@ -33,7 +33,7 @@ ra("Math.trunc",function(a){return a?a:function(a){a=Number(a);if(isNaN(a)||Infi var sa={ec:0,xb:1,gc:2,hc:3,ic:4,jc:5,kc:6,lc:7,lb:8,mc:9,yb:10,nc:11,oc:12,zb:13,pc:14,qc:15,rc:16,sc:17,tc:18,uc:19,vc:20,wc:21,xc:22,yc:23,zc:24,Ac:25,Bc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,kb:65,dc:66,fc:67,Cc:68,E:69,Dc:70,Ec:71,Fc:72,Gc:73,Hc:74,Ic:75,Jc:76,Kc:77,Lc:78,Mc:79,Nc:80,Q:81,Oc:82,Pc:83,Qc:84,Rc:85,Sc:86,Tc:87, Uc:88,Vc:89,Bb:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Wc:97,Xc:98,Yc:99,d:100,e:101,Zc:102,$c:103,ad:104,bd:105,cd:106,k:107,dd:108,ed:109,n:110,fd:111,p:112,q:113,r:114,gd:115,t:116,jd:117,kd:118,ld:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,Ab:127}; function ta(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function va(a,b,c){b?12a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function va(a,b,c){b?12"']/g,function(a){return Da[a]})} function Ea(a,b){return(a+" ").slice(0,b)}function Fa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Da={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ga(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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())} diff --git a/versions/pdpjs/1.34.2/pdp10.js b/versions/pdpjs/1.34.2/pdp10.js index 735269b14..35393785d 100644 --- a/versions/pdpjs/1.34.2/pdp10.js +++ b/versions/pdpjs/1.34.2/pdp10.js @@ -32,7 +32,7 @@ function l(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.protot ia("Math.trunc",function(a){return a?a:function(a){a=Number(a);if(isNaN(a)||Infinity===a||-Infinity===a||!a)return a;var b=Math.floor(Math.abs(a));return 0>a?-b:b}});ia("Math.log2",function(a){return a?a:function(a){return Math.log(a)/Math.LN2}}); var n={Gb:0,Za:1,Ib:2,Jb:3,Kb:4,Lb:5,Mb:6,Nb:7,Ta:8,Ob:9,$a:10,Pb:11,Qb:12,ab:13,Rb:14,Sb:15,Tb:16,Ub:17,Vb:18,Wb:19,Xb:20,Yb:21,Zb:22,$b:23,ac:24,bc:25,cc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Sa:65,Fb:66,Hb:67,dc:68,E:69,ec:70,fc:71,gc:72,hc:73,ic:74,jc:75,kc:76,lc:77,mc:78,nc:79,oc:80,Q:81,pc:82,qc:83,rc:84,sc:85,tc:86,uc:87, vc:88,wc:89,cb:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,xc:97,yc:98,zc:99,d:100,e:101,Ac:102,Bc:103,Cc:104,Dc:105,Ec:106,k:107,Fc:108,Gc:109,n:110,Hc:111,p:112,q:113,r:114,Ic:115,t:116,Jc:117,Kc:118,Lc:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,bb:127}; -function ja(a,b,c,d){var e="";isNaN(a)?a=null:null!=a&&(0>a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function ka(a,b){b?12a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function ka(a,b){b?12"']/g,function(a){return ra[a]})}function sa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var ra={"&":"&","<":"<",">":">",'"':""","'":"'"}; function ta(){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 p(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a, diff --git a/versions/pdpjs/1.34.2/pdp11-dbg.js b/versions/pdpjs/1.34.2/pdp11-dbg.js index 48f0bcfe6..26b65789b 100644 --- a/versions/pdpjs/1.34.2/pdp11-dbg.js +++ b/versions/pdpjs/1.34.2/pdp11-dbg.js @@ -42,7 +42,7 @@ var ka={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 "(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,Kd:65,wi:66,Ci:67,cj:68,E:69,ij:70,lj:71,xj:72,zj:73,Aj:74,Bj:75,Cj:76,Fj:77,Hj:78,Nj:79,Qj:80,Q:81,Sj:82,Vj:83,dk:84,fk:85,hk:86,ik:87,mk:88,nk:89,xf:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,pk:97,rk:98,uk:99,d:100,e:101,vk:102,wk:103,xk:104,yk:105,Ck:106,k:107,Dk:108,Ek:109,n:110,Fk:111,p:112,q:113,r:114,Gk:115,t:116,Jk:117,Kk:118,Lk:119,x:120, y:121,z:122,"{":123,"|":124,"}":125,"~":126,cc:127}; function ma(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} +2==e&&d.match(/^-?[01]+$/):d.match(/^-?[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f)}return c}function na(a,b,c,d){var e="";isNaN(a)?a=null:null!=a&&(0>a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e} function pa(a,b,c){var d="";b?32>=1,f--;return d}function u(a,b,c){b?12"']/g,function(a){return xa[a]})}function ya(a,b){return(a+" ").slice(0,b)} function za(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var xa={"&":"&","<":"<",">":">",'"':""","'":"'"},Aa={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; diff --git a/versions/pdpjs/1.34.2/pdp11.js b/versions/pdpjs/1.34.2/pdp11.js index c71290b12..50af54e31 100644 --- a/versions/pdpjs/1.34.2/pdp11.js +++ b/versions/pdpjs/1.34.2/pdp11.js @@ -42,7 +42,7 @@ var ka={163840:[40,1,8,,254],184320:[40,1,9,,252],327680:[40,2,8,,255],368640:[4 "(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,jd:65,Lh:66,Rh:67,si:68,E:69,yi:70,Bi:71,Ni:72,Pi:73,Qi:74,Ri:75,Si:76,Vi:77,Xi:78,cj:79,fj:80,Q:81,hj:82,kj:83,tj:84,vj:85,xj:86,yj:87,Cj:88,Dj:89,Ke:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Ej:97,Gj:98,Jj:99,d:100,e:101,Kj:102,Lj:103,Mj:104,Nj:105,Rj:106,k:107,Sj:108,Tj:109,n:110,Uj:111,p:112,q:113,r:114,Vj:115,t:116,Xj:117,Yj:118,Zj:119,x:120, y:121,z:122,"{":123,"|":124,"}":125,"~":126,Cb:127}; function na(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),0>a||a>=Math.pow(b,c))&&(a=null);if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function pa(a,b){b?12a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function pa(a,b){b?12"']/g,function(a){return va[a]})} function wa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var va={"&":"&","<":"<",">":">",'"':""","'":"'"},xa={0:"NUL",1:"SOH",2:"STX",3:"ETX",4:"EOT",5:"ENQ",6:"ACK",7:"BEL",8:"BS",9:"TAB",10:"LF",11:"VT",12:"FF",13:"CR",14:"SO",15:"SI",16:"DLE",17:"XON",18:"DC2",19:"XOFF",20:"DC4",21:"NAK",22:"SYN",23:"ETB",24:"CAN",25:"EM",26:"SUB",27:"ESC",28:"FS",29:"GS",30:"RS",31:"US"}; function ya(){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())} From fcee8a283861bc15c48c1cc339ffb19595a50fd5 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 10 Mar 2017 10:28:32 -0800 Subject: [PATCH 3/6] Added support for future PDP-10 MACRO-10 assembler --- modules/pdp10/lib/cpuops.js | 2 +- modules/pdp10/lib/debugger.js | 40 +++ modules/pdp10/lib/macro10.js | 92 ++++++ modules/shared/lib/weblib.js | 11 +- package.json | 1 + versions/pdpjs/1.34.2/pdp10-dbg.js | 443 +++++++++++++++-------------- versions/pdpjs/1.34.2/pdp10.js | 1 + 7 files changed, 366 insertions(+), 224 deletions(-) create mode 100644 modules/pdp10/lib/macro10.js diff --git a/modules/pdp10/lib/cpuops.js b/modules/pdp10/lib/cpuops.js index d6303187e..66477af71 100644 --- a/modules/pdp10/lib/cpuops.js +++ b/modules/pdp10/lib/cpuops.js @@ -6325,7 +6325,7 @@ PDP10.merge72 = function(dst, ext) /* * Let's assert that the sign bits of both halves match. */ - Component.assert(sign == (dst - (dst % PDP10.INT_LIMIT)), "sign mismatch"); + this.assert(sign == (dst - (dst % PDP10.INT_LIMIT)), "sign mismatch"); /* * Compute value without the sign bit and add the low bit of extended in its place. diff --git a/modules/pdp10/lib/debugger.js b/modules/pdp10/lib/debugger.js index 0405b4034..1ce610709 100644 --- a/modules/pdp10/lib/debugger.js +++ b/modules/pdp10/lib/debugger.js @@ -40,6 +40,7 @@ if (NODE) { var BusPDP10 = require("./bus"); var MemoryPDP10 = require("./memory"); var MessagesPDP10 = require("./messages"); + var Macro10 = require("./macro10"); } /** @@ -77,6 +78,7 @@ class DebuggerPDP10 extends Debugger { * The DebuggerPDP10 component is an optional component that implements a variety of user * commands for controlling the CPU, dumping and editing memory, etc. * + * @this {DebuggerPDP10} * @param {Object} parmsDbg */ constructor(parmsDbg) @@ -174,6 +176,13 @@ class DebuggerPDP10 extends Debugger { this.controlDebug = null; this.panel = null; + /** + * This records any active Macro10 assembler object. + * + * @type {Macro10|null} + */ + this.macro10 = null; + /* * Make it easier to access DebuggerPDP10 commands from an external REPL (eg, the WebStorm * "live" console window); eg: @@ -2430,11 +2439,23 @@ class DebuggerPDP10 extends Debugger { return dbgAddr; } + /** + * loadAssembly(macro10, addrLoad) + * + * @this {DebuggerPDP10} + * @param {Macro10} macro10 + * @param {number|null} addrLoad + */ + loadAssembly(macro10, addrLoad) + { + } + /** * returnSymbol(iTable, iOffset, aSymbol) * * Helper function for findSymbol(). * + * @this {DebuggerPDP10} * @param {number} iTable * @param {number} iOffset * @param {Array} aSymbol is updated with the specified symbol, if it exists @@ -2517,6 +2538,25 @@ class DebuggerPDP10 extends Debugger { return; } + if (sOpCode.indexOf(':') >= 0) { + var dbg = this; + if (this.macro10) { + dbg.println("assembly already in progress"); + } + else { + var addrLoad = dbgAddr.addr; + this.macro10 = new Macro10(sOpCode, addrLoad, dbg, function(macro10, sURL, nErrorCode) { + if (!nErrorCode) { + dbg.loadAssembly(macro10, addrLoad); + } else { + dbg.println("error assembling " + sURL + ": (" + nErrorCode + ")"); + } + dbg.macro10 = null; + }); + } + return; + } + asArgs.shift(); asArgs.shift(); asArgs.shift(); diff --git a/modules/pdp10/lib/macro10.js b/modules/pdp10/lib/macro10.js new file mode 100644 index 000000000..7b39b5aa7 --- /dev/null +++ b/modules/pdp10/lib/macro10.js @@ -0,0 +1,92 @@ +/** + * @fileoverview My homage to MACRO-10: a work-alike assembler for the PDP-10 + * @author Jeff Parsons + * @copyright © Jeff Parsons 2012-2017 + * + * This file is part of PCjs, a computer emulation software project at . + * + * PCjs is free software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * PCjs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with PCjs. If not, + * see . + * + * You are required to include the above copyright notice in every modified copy of this work + * and to display that copyright notice when the software starts running; see COPYRIGHT in + * . + * + * Some PCjs files also attempt to load external resource files, such as character-image files, + * ROM files, and disk image files. Those external resource files are not considered part of PCjs + * for purposes of the GNU General Public License, and the author does not claim any copyright + * as to their contents. + */ + +"use strict"; + +if (NODE) { + var Str = require("../../shared/lib/strlib"); + var Web = require("../../shared/lib/weblib"); + var Debugger = require("../../shared/lib/debugger"); + var PDP10 = require("./defines"); + var DebuggerPDP10 = require("./debugger"); +} + +/** + * @class Macro10 + */ +class Macro10 { + /** + * Macro10(sURL, nAddr, dbg, done) + * + * The done() callback is called after the resource has been loaded and parsed, with an error code + * indicating overall success or failure. The caller must use other methods to obtain further results. + * + * The callback is passed three parameters: + * + * done(macro10, sURL, nErrorCode) + * + * If nErrorCode is zero, the assembly process completed successfully. + * + * For access to basic services (eg, println()), we rely on the caller. This is NOT an extension of + * Component, so those services are NOT part of this class. + * + * @this {Macro10} + * @param {string} sURL (the URL of the resource to be assembled) + * @param {number|null} nAddr (the absolute address to assemble the code at, if any) + * @param {DebuggerPDP10} dbg (used to provide services like println() to the Macro10 class) + * @param {function(Macro10,string,number)} done + */ + constructor(sURL, nAddr, dbg, done) + { + this.sURL = sURL; + this.nAddr = nAddr; + this.dbg = dbg; + this.done = done; + var macro10 = this; + Web.getResource(sURL, null, true, function(sURL, sResource, nErrorCode) { + if (!nErrorCode) { + nErrorCode = macro10.parse(sResource); + } + macro10.done(macro10, sURL, nErrorCode); + }); + } + + /** + * parse(sResource) + * + * Begin the assembly process. + * + * @this {Macro10} + * @param {string} sResource + * @return {number} + */ + parse(sResource) { + this.dbg.println("resource length: " + sResource.length); + return 999; + } +} diff --git a/modules/shared/lib/weblib.js b/modules/shared/lib/weblib.js index 66c1cb18a..efb90ce62 100644 --- a/modules/shared/lib/weblib.js +++ b/modules/shared/lib/weblib.js @@ -149,7 +149,14 @@ class Web { * * Request the specified resource (sURL), and once the request is complete, notify done(). * - * Also, if dataPost is set to a string, that string can be used to control the response format; + * If fAsync is true, a done() callback should ALWAYS be supplied; otherwise, you'll have no + * idea when the request is complete or what the response was. done() is passed three parameters: + * + * done(sURL, sResource, nErrorCode) + * + * If nErrorCode is zero, sResource should contain the requested data; otherwise, an error occurred. + * + * If dataPost is set to a string, that string can be used to control the response format; * by default, the response format is plain text, but you can specify "bytes" to request arbitrary * binary data, which should come back as a string of bytes. * @@ -157,8 +164,6 @@ class Web { * Instead, we should implement supported response types ("text" and "arraybuffer", at a minimum) * by setting xmlHTTP.responseType to one of those values before calling xmlHTTP.send(). * - * ES6 ALERT: Default parameters. - * * @param {string} sURL * @param {string|Object|null} [dataPost] for a POST request (default is a GET request) * @param {boolean} [fAsync] is true for an asynchronous request diff --git a/package.json b/package.json index 839213cd6..8abfde2e3 100644 --- a/package.json +++ b/package.json @@ -196,6 +196,7 @@ "./modules/pdp10/lib/rom.js", "./modules/pdp10/lib/ram.js", "./modules/pdp10/lib/serial.js", + "./modules/pdp10/lib/macro10.js", "./modules/shared/lib/debugger.js", "./modules/pdp10/lib/debugger.js", "./modules/pdp10/lib/computer.js", diff --git a/versions/pdpjs/1.34.2/pdp10-dbg.js b/versions/pdpjs/1.34.2/pdp10-dbg.js index 5f8fa711e..1842b2062 100644 --- a/versions/pdpjs/1.34.2/pdp10-dbg.js +++ b/versions/pdpjs/1.34.2/pdp10-dbg.js @@ -23,236 +23,239 @@ http://pcjs.org/modules/pdp10/lib/cpustate.js (C) Jeff Parsons 2012-2017 http://pcjs.org/modules/pdp10/lib/cpuops.js (C) Jeff Parsons 2012-2017 http://pcjs.org/modules/pdp10/lib/serial.js (C) Jeff Parsons 2012-2017 + http://pcjs.org/modules/pdp10/lib/macro10.js (C) Jeff Parsons 2012-2017 http://pcjs.org/modules/shared/lib/debugger.js (C) Jeff Parsons 2012-2017 http://pcjs.org/modules/pdp10/lib/debugger.js (C) Jeff Parsons 2012-2017 */ -var l,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},ca="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this;function da(){da=function(){};ca.Symbol||(ca.Symbol=ea)}var ga=0;function ea(a){return"jscomp_symbol_"+(a||"")+ga++} -function ha(){da();var a=ca.Symbol.iterator;a||(a=ca.Symbol.iterator=ca.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ia(this)}});ha=function(){}}function ia(a){var b=0;return ka(function(){return ba?-b:b}});ra("Math.log2",function(a){return a?a:function(a){return Math.log(a)/Math.LN2}}); -var sa={ec:0,xb:1,gc:2,hc:3,ic:4,jc:5,kc:6,lc:7,lb:8,mc:9,yb:10,nc:11,oc:12,zb:13,pc:14,qc:15,rc:16,sc:17,tc:18,uc:19,vc:20,wc:21,xc:22,yc:23,zc:24,Ac:25,Bc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,kb:65,dc:66,fc:67,Cc:68,E:69,Dc:70,Ec:71,Fc:72,Gc:73,Hc:74,Ic:75,Jc:76,Kc:77,Lc:78,Mc:79,Nc:80,Q:81,Oc:82,Pc:83,Qc:84,Rc:85,Sc:86,Tc:87, +var l,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},ba="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this;function ea(){ea=function(){};ba.Symbol||(ba.Symbol=fa)}var ga=0;function fa(a){return"jscomp_symbol_"+(a||"")+ga++} +function ia(){ea();var a=ba.Symbol.iterator;a||(a=ba.Symbol.iterator=ba.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ja(this)}});ia=function(){}}function ja(a){var b=0;return ka(function(){return ba?-b:b}});pa("Math.log2",function(a){return a?a:function(a){return Math.log(a)/Math.LN2}}); +var qa={ec:0,xb:1,gc:2,hc:3,ic:4,jc:5,kc:6,lc:7,lb:8,mc:9,yb:10,nc:11,oc:12,zb:13,pc:14,qc:15,rc:16,sc:17,tc:18,uc:19,vc:20,wc:21,xc:22,yc:23,zc:24,Ac:25,Bc:26," ":32,"!":33,'"':34,"#":35,$:36,"%":37,"&":38,"'":39,"(":40,")":41,"*":42,"+":43,",":44,"-":45,".":46,"/":47,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,":":58,";":59,"<":60,"=":61,">":62,"?":63,"@":64,kb:65,dc:66,fc:67,Cc:68,E:69,Dc:70,Ec:71,Fc:72,Gc:73,Hc:74,Ic:75,Jc:76,Kc:77,Lc:78,Mc:79,Nc:80,Q:81,Oc:82,Pc:83,Qc:84,Rc:85,Sc:86,Tc:87, Uc:88,Vc:89,Bb:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Wc:97,Xc:98,Yc:99,d:100,e:101,Zc:102,$c:103,ad:104,bd:105,cd:106,k:107,dd:108,ed:109,n:110,fd:111,p:112,q:113,r:114,gd:115,t:116,jd:117,kd:118,ld:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,Ab:127}; -function ta(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function va(a,b,c){b?12"']/g,function(a){return Da[a]})} -function Ea(a,b){return(a+" ").slice(0,b)}function Fa(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Da={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ga(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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 Ia(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a, +function ra(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function ta(a,b,c){b?12"']/g,function(a){return Ba[a]})} +function Ca(a,b){return(a+" ").slice(0,b)}function Da(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Ba={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ea(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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 Ga(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a, f,e))});if(b&&"object"==typeof b){var k="",n;for(n in b)b.hasOwnProperty(n)&&(k&&(k+="&"),k+=n+"="+encodeURIComponent(b[n]));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||(f=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,f,e),g=[f,e]);return g} -function Ja(a,b){var c,d={Y:null,U:null,sa:null,ra:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,f,g;if("<"==b.substr(0,1))throw Error(b);g=0>b.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.sa=g.load;d.ra=g.exec;if(e=g.bytes)d.Y=e;else if(e=g.words)for(d.Y=Array(2*e.length),f=c=0;c>8&255;else if(e=g.longs)for(d.Y=Array(4*e.length),f=c=0;c>8&255,d.Y[f++]=e[c]>>16&255,d.Y[f++]=e[c]>>24&255;else(e=g.data)?d.Da=e:d.Y=g;d.Y&&(d.Y.length?1==d.Y.length&&(q(d.Y[0]),d=null):(q("Empty resource: "+a),d=null));d.U=g.symbols}catch(h){q("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;ca?this.Pa=this.id:(this.Qa=this.id.substr(0,a),this.Pa=this.id.substr(a+1));this.A={ready:!1,Ia:!1,cb:!1,V:!1,error:!1};this.Ta=null;this.A.error=!1;this.X=c||0;this.D=this.v=this.H=this.G=this.ta=null;pb.push(this)}function qb(a,b,c){rb[a]&&b&&(rb[a][b]=c)}function sb(){return Date.now()||+new Date} -function q(a){window&&window.alert(a)}function tb(a){var b=!1;window&&(b=window.confirm(a));return b}function ub(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;bb.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.sa=g.load;d.ra=g.exec;if(e=g.bytes)d.Y=e;else if(e=g.words)for(d.Y=Array(2*e.length),f=c=0;c>8&255;else if(e=g.longs)for(d.Y=Array(4*e.length),f=c=0;c>8&255,d.Y[f++]=e[c]>>16&255,d.Y[f++]=e[c]>>24&255;else(e=g.data)?d.Ea=e:d.Y=g;d.Y&&(d.Y.length?1==d.Y.length&&(r(d.Y[0]),d=null):(r("Empty resource: "+a),d=null));d.U=g.symbols}catch(h){r("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;ca?this.Pa=this.id:(this.Qa=this.id.substr(0,a),this.Pa=this.id.substr(a+1));this.A={ready:!1,Ia:!1,cb:!1,V:!1,error:!1};this.Ta=null;this.A.error=!1;this.X=c||0;this.D=this.v=this.H=this.G=this.ta=null;jb.push(this)}function kb(a,b,c){lb[a]&&b&&(lb[a][b]=c)}function mb(){return Date.now()||+new Date} +function r(a){window&&window.alert(a)}function nb(a){var b=!1;window&&(b=window.confirm(a));return b}function ob(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;ba;a++)this.b["S"+a]=[0,0,!1,!1,this.Ob,a];this.D=this.v=this.H=this.G=null;this.exports={hold:this.Gb,toggle:this.Zb,reset:this.Vb, -set:this.Yb};Qb(this)}la(fc,r);l=fc.prototype;l.reset=function(a){this.stop();a&&hc(this,this.w=0)}; -l.ja=function(a,b,c,d){if(this.G&&this.G.ja(a,b,c,d)||this.v&&this.v.ja(a,b,c,d)||this.D&&this.D.ja(a,b,c,d))return!0;switch(b){case "PC":return this.J[b]=c,this.M++,!0;default:return"led"==a||"rled"==a?(this.J[b]=c,this.B[b]=d?1:0,this.M++,!0):"switch"==a?(void 0===this.b[b]&&(this.b[b]=[d?1:0,d?1:0]),this.J[b]=c,a=c.parentElement||c,a=a.parentElement||a,a.onmousedown=function(a,b){return function(){ic(a,b)}}(this,b),a.onmouseup=a.onmouseout=function(a,b){return function(){jc(a,b)}}(this,b),a.ontouchstart= -function(a,b){return function(c){ic(a,b);c.preventDefault()}}(this,b),a.ontouchend=function(a,b){return function(){jc(a,b)}}(this,b),!0):r.prototype.ja.call(this,a,b,c,d)}};l.Ba=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;kc(this);lc(this)};l.ua=function(a,b){if(!b)if(this.T&&mc(),!a)this.reset(!0);else if(!this.restore(a))return!1;return!0};l.ia=function(a){return a?this.save():!0};l.save=function(){var a=new E(this);a.set(0,[this.i,this.w,this.u]);return a.data()}; -l.restore=function(a){if(a=a[0])nc(this,this.i=a[0]),hc(this,this.w=a[1]),oc(this,a[2]);return!0};l.Vb=function(){for(var a in this.b){var b=this.b[a];b[1]=b[0]}lc(this);return!0};function pc(a,b,c){if(a=a.J[b])a.style.backgroundColor=c?"#ff0000":"#000000"}function kc(a,b){for(var c in a.B)pc(a,c,null!=b?b:a.B[c])}function qc(a,b,c){if(a=a.J[b])a.style.marginTop=c?"0px":"20px",a.style.backgroundColor=c?"#00ff00":"#228B22"}function lc(a){for(var b in a.b)qc(a,b,a.b[b][1])} -l.Gb=function(a,b,c){if(ic(this,b)){if(c){var d=this;setTimeout(function(){jc(d,b);a&&a()},+c);return!1}jc(this,b)}return!0};l.Yb=function(a,b){if("SR"==a)return oc(this,ta(b,8));var c=this.b[a];return c?(c[1]=+b?1:0,qc(this,a,c[1]),!0):!1};l.Zb=function(a){return ic(this,a)?(jc(this,a),!0):!1};function ic(a,b){var c=a.b[b];return c?(qc(a,b,c[1]=1-c[1]),c[3]=!0,c[4]&&c[4].call(a,c[1],c[5]),b!=rc&&(a.P=b==sc,a.R=b==tc),!0):!1} -function jc(a,b){var c=a.b[b];c&&(c[2]&&c[3]&&(qc(a,b,c[1]=c[0]),c[4]&&c[4].call(a,c[1],c[5])),c[3]=!1)}l.Pb=function(a){a||this.v.A.L||(F(this.v,this.i),this.b[uc]&&this.b[uc][1]&&vc(this.v))};l.Qb=function(){};l.Kb=function(a){a||this.v.W()}; -l.Ib=function(a){if(!a&&!this.v.A.L)if(this.b[uc]&&this.b[uc][1])vc(this.v);else{if((a=this.D)&&!Rb(a,!0))Sb(a,!0),wc(a,0,null),Sb(a,!1);else try{var b=this.v.Ma(1);0c;c++){var d=a,e="A"+c,f=b&1<c;c++){var d=a,e="D"+c,f=b&1<b;b++)a.b["S"+b][1]=a.u&1<d.length){for(var e=0,f=Array(4096),g=0;g>>a.i;0f&&(n=f);if(h&&h.size){if(h.type==d){if(e+f<=h.C)return h.Ka+=h.C-e,h.C=e,!0;if(e>=h.C+h.Ka){n=h.size-(e-k);n>f&&(n=f);h.Ka=e-h.C+n;e=k+16384;f-=n;g++;continue}}return Pc(Qc,e,f)}e=new Lc(a,e,n,16384,d);Mc(e,a.D,h);a.b[g++]=e;e=k+16384;f-=n}return 0>=f?(a.status("Added "+(c>>10)+"Kb "+Rc[d]+" at "+va(b)),!0):Pc(Sc,b,c)} -function Cc(a,b){var c=a.b[(b&a.u)>>>a.i];a.w++;b=c.D(b&16383,b);a.w--;return b}function Bc(a,b,c){var d=a.b[(b&a.u)>>>a.i];a.w++;d.w(c,b&16383,b);a.w--}function Nc(a){for(var b=0,c=[],d=0;d=a.la&&(a.la+=a.ka,c=!0);0<=a.ma&&a.ma<=md(a)&&(a.ka=a.ma=-1,id(a),a.W(),c=!0);c&&a.j(md(a)+" cycles: checksum="+m(a.za))}} -l.ja=function(a,b,c){var d=this;switch(b){case "power":case "reset":return this.J[b]=c,!0;case "run":return this.J[b]=c,c.onclick=function(){var a;if(a=d.G)if(a=d.G,a.A.V)a=!0;else{var b=null,c,h=ub(a.id);for(c=0;ca.aa/a.ba?b=1:d=!0;a.ea=b;b=a.Ya*a.ea;if(a.ba!=b){a.ba=b;b=a.ba.toFixed(2)+"Mhz";var e=a.J.setSpeed;e&&(e.textContent=b);a.j("target speed: "+b)}c&&a.G&&qd(a.G)}yc(a,a.N);a.N=0;a.M=sb();a.P=0;od(a);return d}function rd(a,b){for(var c=a.O.length-1;0<=c;c--){var d=a.O[c];0>d[0]||b>d[0]&&(b=d[0])}return b}function sd(a){for(var b=[],c=0;cd[0]||(d[0]-=b,0>=d[0]&&(d[0]=-1,d[1]()))}}function td(a,b){var c=a.R-=a.S;a.S=0;b&&(a.R=0);return c} -l.Wb=function(){if(this.A.L){this.Ra>=this.$a&&od(this,!0);this.na=0;this.ya=sb();if(this.P){var a=this.ya-this.P;a>this.Za&&(this.M+=a,this.M>this.ya&&(this.M=this.ya))}try{do{var b=rd(this,this.A.Fa?1:this.Ga);try{this.Ma(b)}catch(e){if("number"!=typeof e)throw e;}b=td(this,!0);this.na+=b;this.N+=b;zc(this,b);xc(this,b);this.fa-=b;if(0>=this.fa){this.fa+=this.Ga;++this.ab>=ud&&(this.G&&G(this.G,void 0),this.ab=0);break}}while(this.A.L)}catch(e){this.W();this.G&&this.G.stop(sb(),md(this));Nb(this, -e.stack||e.message);return}if(this.A.L){a=setTimeout;b=this.rb;this.P=sb();var c=this.Za;this.na&&(c=Math.round(c*this.na/this.Ga));var c=c-(this.P-this.ya),d=this.P-this.M;d&&(this.aa=Math.round(this.N/(10*d))/100,864E5<=d&&(this.T=0,nd(this)));if(0>c||this.aac&&(this.M-=c),c=0;this.Ra+=this.na;this.P+=c;a(b,c)}}}; -function vc(a,b){if(!Ob(a))if(a.A.L)a.j(a.toString()+" busy");else{nd(a);a.A.L=!0;a.A.Wa=!0;var c=a.J.run;c&&(c.textContent="Halt");a.G&&(b&&qd(a.G,!0),a.G.start(a.M,md(a)));a.D||a.status("Started");setTimeout(a.rb,0)}}l.Ma=function(){return 0};l.W=function(a){var b=!1;if(this.A.L){td(this);yc(this,this.N);this.N=0;this.A.L=!1;if(b=this.J.run)b.textContent="Run";this.G&&this.G.stop(sb(),md(this));b=!0;this.D||this.status("Stopped")}this.A.complete=a;return b};var pd=30,ud=15,fd=["power","reset"]; -function vd(a){var b=+a.model||1001;ed.call(this,a,1E6);this.qb=b;this.Oa=+a.addrReset||0;this.Cb=wd.bind(this);this.w=I.bind(this);this.wa=null;this.nb=[];this.A.complete=!1}la(vd,ed);l=vd.prototype;l.reset=function(){this.status("Model "+this.qb);this.A.L&&this.W();this.b=this.K=this.Ha=0;this.i=this.xa=this.Oa;this.I=this.qa=-1;this.F=this.u=0;this.bb=[0,0];this.oa=[0,0];this.ga=[0,0];this.pa=[0,0];this.va=this.i;this.B=0;this.f=this.Sb;this.g=this.cc;this.wa=null;hd(this);this.A.error=!1;ed.prototype.reset.call(this)}; -l.vb=function(){return 0};l.save=function(){var a=new E(this);a.set(0,[this.b,this.K,this.Ha,this.i,this.qa,this.I,this.u,this.B,this.xa,this.va,this.Oa]);a.set(1,[]);a.set(2,[this.T,this.ea,this.A.Z]);a.set(3,xd(this));a.set(4,sd(this));return a.data()}; -l.restore=function(a){var b;b=a[0];ha();da();ha();var c=b[Symbol.iterator];b=c?c.call(b):ia(b);this.b=b.next().value;this.K=b.next().value;this.Ha=b.next().value;this.i=b.next().value;this.qa=b.next().value;this.I=b.next().value;this.u=b.next().value;this.B=b.next().value;this.xa=b.next().value;this.va=b.next().value;this.Oa=b.next().value;b=a[2];this.T=b[0];nd(this,b[1]);this.A.Z=b[2];b=a[3];for(c=b.length-1;0<=c;c--){var d;a:{for(d=0;d>>b.i].f(a&16383,a)};l.cc=function(a,b){var c=this.H;a=this.va=a;c.b[(a&c.u)>>>c.i].g(b,a&16383,a);return b}; -l.Ma=function(a){this.A.complete=!0;var b=this.D?zd(this.D)?1:this.A.Wa?-1:0:0,c=a?this.A.Wa?0:1:-1;this.A.Wa=!1;this.R=this.S=a;this.B=this.B&-5|(b?4:0);do{if(this.B){if(this.B&4){if(Ad(this.D,this.i,c)){this.W();break}++b||(this.B&=-5);c||c++}if(a=this.B&11)this.B&2?this.wa||(this.B&=-3):this.B&1&&this.B++,a=!1;if(a){if(this.B&4&&Ad(this.D,this.i,c)){this.W();break}if(0>c)break}}this.B&=15;this.K&4194304?this.K=this.f(this.b):0<=this.qa?(this.K=this.Ha=this.f(this.qa),this.qa=-1):(this.K=this.Ha= -this.f(this.xa=this.i),this.i=(this.i+1)%Xb);this.K&=8388607;this.b=this.K&262143;if(a=this.K>>18&15)this.b=this.b+this.f(a)&Wb;a=this.K&4194304?-1:this.Ha/cc|0;0<=a&&this.Cb(a)}while(0>4].call(this,a,a&15)}function M(a){this.w(a)} -function Cd(){var a=0,b=this.f(this.b),c=b/dc&63,d=b>>24&63,c=c-d;0>c&&(a++,c=36-d,0>c&&(c=64-d));b=c*dc+(d<<24)+(b&16777215);a&&(b=(b+a)%C);this.g(this.b,b)}function Dd(a,b){a=this.f(this.b);if(0>this.I)this.I=a,this.K=this.b|4194304;else{var c=this.I/dc&63,d=this.I>>24&63;a=32>=c+d?(a>>c&(1<>>0:Math.trunc(a/Math.pow(2,c))%Math.pow(2,d);this.g(b,a);this.I=-1}} -function Ed(a,b){a=this.f(this.b);if(0>this.I)this.I=a,this.K=this.b|4194304;else{var c=this.I/dc&63,d=this.I>>24&63;b=this.f(b)%Math.pow(2,d)*Math.pow(2,c)%C;a=a-a%Math.pow(2,c+d)+b+a%Math.pow(2,c);this.g(this.b,a);this.I=-1}}function Fd(a,b){this.g(b,this.f(this.b))}function Gd(a,b){this.g(b,this.b)}function Hd(a,b){this.g(this.b,this.f(b))}function ce(a,b){this.g(b,0)}function de(a,b){this.g(b,B-this.f(b))}function ee(a,b){this.g(b,B)} -function fe(a,b){var c=this.f(this.b),d=this.f(b);this.g(b,ge(a,d,c)+(c-(c&x)))}function he(a,b){var c=this.f(b);this.g(b,ge(a,c,0))}function ie(a,b){b=this.f(b);var c=this.f(this.b);this.g(this.b,ge(a,c,b)+(b-(b&x)))}function je(a,b){var c=this.f(this.b),d=c;if(a&=384)switch(d-=d&x,a){case 256:d+=x;break;case 384:d+=c>z?x:0}c=d;this.g(this.b,c);b&&this.g(b,c)}function ke(a,b){var c=(this.f(this.b)&x)*y,d=this.f(b);this.g(b,ge(a,d,c)+c)} -function le(a,b){var c=this.b*y,d=this.f(b);this.g(b,ge(a,d,c)+c)}function me(a,b){b=(this.f(b)&x)*y;var c=this.f(this.b);this.g(this.b,ge(a,c,b)+b)}function ne(a,b){var c=this.f(this.b),d=(c&x)*y,c=ge(a,c,d)+d;this.g(this.b,c);b&&this.g(b,c)}function oe(a,b){var c=this.f(this.b)&x,d=this.f(b);this.g(b,pe(a,d,c)+c)}function qe(a,b){var c=this.f(b);this.g(b,pe(a,c,this.b)+this.b)}function re(a,b){b=this.f(b)&x;var c=this.f(this.b);this.g(this.b,pe(a,c,b)+b)} -function se(a,b){var c=this.f(this.b),d=c;if(a&=384)switch(d&=x,a){case 256:d+=x*y;break;case 384:d+=c>Yb?x*y:0}c=d;this.g(this.b,c);b&&this.g(b,c)}function te(a,b){var c=this.f(this.b)/y|0,d=this.f(b);this.g(b,pe(a,d,c)+c)}function ue(a,b){var c=this.f(b);this.g(b,pe(a,c,0))}function ve(a,b){b=this.f(b)/y|0;var c=this.f(this.b);this.g(this.b,pe(a,c,b)+b)}function we(a,b){var c=this.f(this.b),d=c/y|0,c=pe(a,c,d)+d;this.g(this.b,c);b&&this.g(b,c)}function N(a){xe[a&7].call(this,a,a>>3&127)} -function ye(){}function ze(){}function I(a){this.j("undefined opcode: "+va(a));yd(this,-1);this.W()}function Ae(a){a>z&&(a!=A?a=$b-a:this.u|=163840);return a}function O(a,b){var c=(a+b)%C;Be.call(this,a,b,c);return c} -function Ce(a,b,c){var d=!1,e=!1,f=b-b%A;a=a%A+b*A%C;b=this.F=f+Math.trunc(b/2);c>z&&(c=C-c,d=!d);b>z&&(a?(b=B-b,a=C-a):b&&(b=C-b),e=!0,d=!d);if(b>=c)return this.u|=131104,-1;f=this.bb;f[0]=0;f[1]=0;f=this.oa;f[0]=1;f[1]=0;f=this.ga;f[0]=c;f[1]=0;c=this.pa;c[0]=a;for(c[1]=b;0b[0]&&(b[0]+=C,b[1]--),Ee(this.bb,this.oa),Fe(this.pa)))break;Ge(this.ga);Ge(this.oa)}while(!Fe(this.oa)); -a=this.bb[0];this.F=this.pa[0];d&&a&&(a=C-a);e&&this.F&&(this.F=C-this.F);return a} -function He(a,b,c){var d=a,e=b;b=!1;var f;d>z&&(d=C-d,b=!b);e>z&&(e=C-e,b=!b);if(dz)&&(f!=B||a<=z)&&(this.u|=131072),a;c=a;b=f;a=b-b%A;b=2*b%C+Math.trunc(c/A);c=a+c%A;d=b-b%A;a!=d&&(b=a+(b-d),this.u|=131072);this.F=c;return b} -function Ie(a){a?a==A?this.u|=163840:a=$b-a:this.u|=98304;return a}function P(a,b){var c=a-b;0>c&&(c+=C);Be.call(this,c,b,a);return c}function Be(a,b,c){a=Math.trunc(a/Zb);b=Math.trunc(b/Zb);c=Math.trunc(c/Zb);var d=a^(a^b)&(b^c);this.u=this.u|(d&2?65536:0)|(d&1?32768:0)|((a^c)&(b^c)&2?131072:0)}function Q(a,b){return((a/D|0)&(b/D|0))*D+((a&b)>>>0)}function S(a,b){return Q(a,(~(b/D|0)&15)*D+(~b>>>0))}function Je(a,b){return(a>>0)}function T(a,b){return(a/D|0|b/D|0)*D+((a|b)>>>0)}function U(a){return a>>0)}function X(a){return(a/y|0)+(a&x)*y}function pe(a,b,c){switch(a&384){case 0:b-=b&x;break;case 128:b=0;break;case 256:b=x*y;break;case 384:b=c>Yb?x*y:0}return b}function ge(a,b,c){switch(a&384){case 0:b&=x;break;case 128:b=0;break;case 256:b=x;break;case 384:b=c>z?x:0}return b} -function Ee(a,b){a[0]+=b[0];a[1]+=b[1];a[0]>=C&&(a[0]%=C,a[1]++)}function De(a,b){var c=a[1]-b[1];c||(c=a[0]-b[0]);return c}function Ge(a){a[1]%2&&(a[0]+=C);a[0]=Math.trunc(a[0]/2);a[1]=Math.trunc(a[1]/2)}function Fe(a){return!a[0]&&!a[1]} -var Bd=[M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},Cd,function(a,b){0>this.I&&Cd.call(this);Dd.call(this,0,b)},Dd,function(a,b){0>this.I&&Cd.call(this);Ed.call(this,0,b)},Ed,function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)}, +function Zb(a,b){u.call(this,"Panel",a,512);this.K=this.M=0;this.T=b;this.i=this.I=this.u=this.w=0;this.N=this.O=-1;this.P=this.R=this.F=!1;this.S=$b;this.B={};this.b={START:[1,1,!0,!1,this.Pb],STEP:[1,1,!1,!1,this.Qb],ENABLE:[1,1,!1,!1,this.Kb],CONT:[1,1,!0,!1,this.Ib],DEP:[0,0,!0,!1,this.Jb],EXAM:[1,1,!0,!1,this.Lb],LOAD:[1,1,!0,!1,this.Nb],TEST:[0,0,!0,!1,this.Mb]};for(a=0;22>a;a++)this.b["S"+a]=[0,0,!1,!1,this.Ob,a];this.D=this.v=this.H=this.G=null;this.exports={hold:this.Gb,toggle:this.Zb,reset:this.Vb, +set:this.Yb};Jb(this)}m(Zb,u);l=Zb.prototype;l.reset=function(a){this.stop();a&&ac(this,this.w=0)}; +l.ja=function(a,b,c,d){if(this.G&&this.G.ja(a,b,c,d)||this.v&&this.v.ja(a,b,c,d)||this.D&&this.D.ja(a,b,c,d))return!0;switch(b){case "PC":return this.J[b]=c,this.M++,!0;default:return"led"==a||"rled"==a?(this.J[b]=c,this.B[b]=d?1:0,this.M++,!0):"switch"==a?(void 0===this.b[b]&&(this.b[b]=[d?1:0,d?1:0]),this.J[b]=c,a=c.parentElement||c,a=a.parentElement||a,a.onmousedown=function(a,b){return function(){bc(a,b)}}(this,b),a.onmouseup=a.onmouseout=function(a,b){return function(){cc(a,b)}}(this,b),a.ontouchstart= +function(a,b){return function(c){bc(a,b);c.preventDefault()}}(this,b),a.ontouchend=function(a,b){return function(){cc(a,b)}}(this,b),!0):u.prototype.ja.call(this,a,b,c,d)}};l.Ca=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;dc(this);ec(this)};l.ua=function(a,b){if(!b)if(this.T&&fc(),!a)this.reset(!0);else if(!this.restore(a))return!1;return!0};l.ia=function(a){return a?this.save():!0};l.save=function(){var a=new G(this);a.set(0,[this.i,this.w,this.u]);return a.data()}; +l.restore=function(a){if(a=a[0])gc(this,this.i=a[0]),ac(this,this.w=a[1]),hc(this,a[2]);return!0};l.Vb=function(){for(var a in this.b){var b=this.b[a];b[1]=b[0]}ec(this);return!0};function ic(a,b,c){if(a=a.J[b])a.style.backgroundColor=c?"#ff0000":"#000000"}function dc(a,b){for(var c in a.B)ic(a,c,null!=b?b:a.B[c])}function jc(a,b,c){if(a=a.J[b])a.style.marginTop=c?"0px":"20px",a.style.backgroundColor=c?"#00ff00":"#228B22"}function ec(a){for(var b in a.b)jc(a,b,a.b[b][1])} +l.Gb=function(a,b,c){if(bc(this,b)){if(c){var d=this;setTimeout(function(){cc(d,b);a&&a()},+c);return!1}cc(this,b)}return!0};l.Yb=function(a,b){if("SR"==a)return hc(this,ra(b,8));var c=this.b[a];return c?(c[1]=+b?1:0,jc(this,a,c[1]),!0):!1};l.Zb=function(a){return bc(this,a)?(cc(this,a),!0):!1};function bc(a,b){var c=a.b[b];return c?(jc(a,b,c[1]=1-c[1]),c[3]=!0,c[4]&&c[4].call(a,c[1],c[5]),b!=kc&&(a.P=b==lc,a.R=b==mc),!0):!1} +function cc(a,b){var c=a.b[b];c&&(c[2]&&c[3]&&(jc(a,b,c[1]=c[0]),c[4]&&c[4].call(a,c[1],c[5])),c[3]=!1)}l.Pb=function(a){a||this.v.A.L||(H(this.v,this.i),this.b[nc]&&this.b[nc][1]&&oc(this.v))};l.Qb=function(){};l.Kb=function(a){a||this.v.W()}; +l.Ib=function(a){if(!a&&!this.v.A.L)if(this.b[nc]&&this.b[nc][1])oc(this.v);else{if((a=this.D)&&!Kb(a,!0))Lb(a,!0),pc(a,0,null),Lb(a,!1);else try{var b=this.v.Ma(1);0c;c++){var d=a,e="A"+c,f=b&1<c;c++){var d=a,e="D"+c,f=b&1<b;b++)a.b["S"+b][1]=a.u&1<d.length){for(var e=0,f=Array(4096),g=0;g>>a.i;0f&&(n=f);if(h&&h.size){if(h.type==d){if(e+f<=h.C)return h.Ka+=h.C-e,h.C=e,!0;if(e>=h.C+h.Ka){n=h.size-(e-k);n>f&&(n=f);h.Ka=e-h.C+n;e=k+16384;f-=n;g++;continue}}return Fc(Gc,e,f)}e=new Bc(a,e,n,16384,d);Cc(e,a.D,h);a.b[g++]=e;e=k+16384;f-=n}return 0>=f?(a.status("Added "+(c>>10)+"Kb "+Hc[d]+" at "+ta(b)),!0):Fc(Ic,b,c)} +function zc(a,b){var c=a.b[(b&a.u)>>>a.i];a.w++;b=c.D(b&16383,b);a.w--;return b}function uc(a,b,c){var d=a.b[(b&a.u)>>>a.i];a.w++;d.w(c,b&16383,b);a.w--}function Dc(a){for(var b=0,c=[],d=0;d=a.la&&(a.la+=a.ka,c=!0);0<=a.ma&&a.ma<=cd(a)&&(a.ka=a.ma=-1,Zc(a),a.W(),c=!0);c&&a.j(cd(a)+" cycles: checksum="+q(a.za))}} +l.ja=function(a,b,c){var d=this;switch(b){case "power":case "reset":return this.J[b]=c,!0;case "run":return this.J[b]=c,c.onclick=function(){var a;if(a=d.G)if(a=d.G,a.A.V)a=!0;else{var b=null,c,h=ob(a.id);for(c=0;ca.aa/a.ba?b=1:d=!0;a.ea=b;b=a.Ya*a.ea;if(a.ba!=b){a.ba=b;b=a.ba.toFixed(2)+"Mhz";var e=a.J.setSpeed;e&&(e.textContent=b);a.j("target speed: "+b)}c&&a.G&&gd(a.G)}rc(a,a.N);a.N=0;a.M=mb();a.P=0;ed(a);return d}function hd(a,b){for(var c=a.O.length-1;0<=c;c--){var d=a.O[c];0>d[0]||b>d[0]&&(b=d[0])}return b}function id(a){for(var b=[],c=0;cd[0]||(d[0]-=b,0>=d[0]&&(d[0]=-1,d[1]()))}}function jd(a,b){var c=a.R-=a.S;a.S=0;b&&(a.R=0);return c} +l.Wb=function(){if(this.A.L){this.Ra>=this.$a&&ed(this,!0);this.na=0;this.ya=mb();if(this.P){var a=this.ya-this.P;a>this.Za&&(this.M+=a,this.M>this.ya&&(this.M=this.ya))}try{do{var b=hd(this,this.A.Ga?1:this.Ba);try{this.Ma(b)}catch(e){if("number"!=typeof e)throw e;}b=jd(this,!0);this.na+=b;this.N+=b;sc(this,b);qc(this,b);this.fa-=b;if(0>=this.fa){this.fa+=this.Ba;++this.ab>=kd&&(this.G&&I(this.G,void 0),this.ab=0);break}}while(this.A.L)}catch(e){this.W();this.G&&this.G.stop(mb(),cd(this));Gb(this, +e.stack||e.message);return}if(this.A.L){a=setTimeout;b=this.rb;this.P=mb();var c=this.Za;this.na&&(c=Math.round(c*this.na/this.Ba));var c=c-(this.P-this.ya),d=this.P-this.M;d&&(this.aa=Math.round(this.N/(10*d))/100,864E5<=d&&(this.T=0,dd(this)));if(0>c||this.aac&&(this.M-=c),c=0;this.Ra+=this.na;this.P+=c;a(b,c)}}}; +function oc(a,b){if(!Hb(a))if(a.A.L)a.j(a.toString()+" busy");else{dd(a);a.A.L=!0;a.A.Wa=!0;var c=a.J.run;c&&(c.textContent="Halt");a.G&&(b&&gd(a.G,!0),a.G.start(a.M,cd(a)));a.D||a.status("Started");setTimeout(a.rb,0)}}l.Ma=function(){return 0};l.W=function(a){var b=!1;if(this.A.L){jd(this);rc(this,this.N);this.N=0;this.A.L=!1;if(b=this.J.run)b.textContent="Run";this.G&&this.G.stop(mb(),cd(this));b=!0;this.D||this.status("Stopped")}this.A.complete=a;return b};var fd=30,kd=15,Wc=["power","reset"]; +function ld(a){var b=+a.model||1001;Vc.call(this,a,1E6);this.qb=b;this.Oa=+a.addrReset||0;this.Cb=md.bind(this);this.w=L.bind(this);this.wa=null;this.nb=[];this.A.complete=!1}m(ld,Vc);l=ld.prototype;l.reset=function(){this.status("Model "+this.qb);this.A.L&&this.W();this.b=this.K=this.Ha=0;this.i=this.xa=this.Oa;this.I=this.qa=-1;this.F=this.u=0;this.bb=[0,0];this.oa=[0,0];this.ga=[0,0];this.pa=[0,0];this.va=this.i;this.B=0;this.f=this.Sb;this.g=this.cc;this.wa=null;Yc(this);this.A.error=!1;Vc.prototype.reset.call(this)}; +l.vb=function(){return 0};l.save=function(){var a=new G(this);a.set(0,[this.b,this.K,this.Ha,this.i,this.qa,this.I,this.u,this.B,this.xa,this.va,this.Oa]);a.set(1,[]);a.set(2,[this.T,this.ea,this.A.Z]);a.set(3,nd(this));a.set(4,id(this));return a.data()}; +l.restore=function(a){var b;b=a[0];ia();ea();ia();var c=b[Symbol.iterator];b=c?c.call(b):ja(b);this.b=b.next().value;this.K=b.next().value;this.Ha=b.next().value;this.i=b.next().value;this.qa=b.next().value;this.I=b.next().value;this.u=b.next().value;this.B=b.next().value;this.xa=b.next().value;this.va=b.next().value;this.Oa=b.next().value;b=a[2];this.T=b[0];dd(this,b[1]);this.A.Z=b[2];b=a[3];for(c=b.length-1;0<=c;c--){var d;a:{for(d=0;d>>b.i].f(a&16383,a)};l.cc=function(a,b){var c=this.H;a=this.va=a;c.b[(a&c.u)>>>c.i].g(b,a&16383,a);return b}; +l.Ma=function(a){this.A.complete=!0;var b=this.D?pd(this.D)?1:this.A.Wa?-1:0:0,c=a?this.A.Wa?0:1:-1;this.A.Wa=!1;this.R=this.S=a;this.B=this.B&-5|(b?4:0);do{if(this.B){if(this.B&4){if(qd(this.D,this.i,c)){this.W();break}++b||(this.B&=-5);c||c++}if(a=this.B&11)this.B&2?this.wa||(this.B&=-3):this.B&1&&this.B++,a=!1;if(a){if(this.B&4&&qd(this.D,this.i,c)){this.W();break}if(0>c)break}}this.B&=15;this.K&4194304?this.K=this.f(this.b):0<=this.qa?(this.K=this.Ha=this.f(this.qa),this.qa=-1):(this.K=this.Ha= +this.f(this.xa=this.i),this.i=(this.i+1)%Qb);this.K&=8388607;this.b=this.K&262143;if(a=this.K>>18&15)this.b=this.b+this.f(a)&Pb;a=this.K&4194304?-1:this.Ha/Wb|0;0<=a&&this.Cb(a)}while(0>4].call(this,a,a&15)}function M(a){this.w(a)} +function sd(){var a=0,b=this.f(this.b),c=b/Xb&63,d=b>>24&63,c=c-d;0>c&&(a++,c=36-d,0>c&&(c=64-d));b=c*Xb+(d<<24)+(b&16777215);a&&(b=(b+a)%E);this.g(this.b,b)}function td(a,b){a=this.f(this.b);if(0>this.I)this.I=a,this.K=this.b|4194304;else{var c=this.I/Xb&63,d=this.I>>24&63;a=32>=c+d?(a>>c&(1<>>0:Math.trunc(a/Math.pow(2,c))%Math.pow(2,d);this.g(b,a);this.I=-1}} +function ud(a,b){a=this.f(this.b);if(0>this.I)this.I=a,this.K=this.b|4194304;else{var c=this.I/Xb&63,d=this.I>>24&63;b=this.f(b)%Math.pow(2,d)*Math.pow(2,c)%E;a=a-a%Math.pow(2,c+d)+b+a%Math.pow(2,c);this.g(this.b,a);this.I=-1}}function vd(a,b){this.g(b,this.f(this.b))}function wd(a,b){this.g(b,this.b)}function Nd(a,b){this.g(this.b,this.f(b))}function Od(a,b){this.g(b,0)}function Pd(a,b){this.g(b,D-this.f(b))}function Qd(a,b){this.g(b,D)} +function Rd(a,b){var c=this.f(this.b),d=this.f(b);this.g(b,Sd(a,d,c)+(c-(c&y)))}function Td(a,b){var c=this.f(b);this.g(b,Sd(a,c,0))}function Ud(a,b){b=this.f(b);var c=this.f(this.b);this.g(this.b,Sd(a,c,b)+(b-(b&y)))}function Vd(a,b){var c=this.f(this.b),d=c;if(a&=384)switch(d-=d&y,a){case 256:d+=y;break;case 384:d+=c>A?y:0}c=d;this.g(this.b,c);b&&this.g(b,c)}function Wd(a,b){var c=(this.f(this.b)&y)*z,d=this.f(b);this.g(b,Sd(a,d,c)+c)} +function Xd(a,b){var c=this.b*z,d=this.f(b);this.g(b,Sd(a,d,c)+c)}function Yd(a,b){b=(this.f(b)&y)*z;var c=this.f(this.b);this.g(this.b,Sd(a,c,b)+b)}function Zd(a,b){var c=this.f(this.b),d=(c&y)*z,c=Sd(a,c,d)+d;this.g(this.b,c);b&&this.g(b,c)}function $d(a,b){var c=this.f(this.b)&y,d=this.f(b);this.g(b,ae(a,d,c)+c)}function be(a,b){var c=this.f(b);this.g(b,ae(a,c,this.b)+this.b)}function ce(a,b){b=this.f(b)&y;var c=this.f(this.b);this.g(this.b,ae(a,c,b)+b)} +function de(a,b){var c=this.f(this.b),d=c;if(a&=384)switch(d&=y,a){case 256:d+=y*z;break;case 384:d+=c>Rb?y*z:0}c=d;this.g(this.b,c);b&&this.g(b,c)}function ee(a,b){var c=this.f(this.b)/z|0,d=this.f(b);this.g(b,ae(a,d,c)+c)}function fe(a,b){var c=this.f(b);this.g(b,ae(a,c,0))}function ge(a,b){b=this.f(b)/z|0;var c=this.f(this.b);this.g(this.b,ae(a,c,b)+b)}function he(a,b){var c=this.f(this.b),d=c/z|0,c=ae(a,c,d)+d;this.g(this.b,c);b&&this.g(b,c)}function N(a){ie[a&7].call(this,a,a>>3&127)} +function je(){}function ke(){}function L(a){this.j("undefined opcode: "+ta(a));od(this,-1);this.W()}function le(a){a>A&&(a!=B?a=Tb-a:this.u|=163840);return a}function O(a,b){var c=(a+b)%E;me.call(this,a,b,c);return c} +function ne(a,b,c){var d=!1,e=!1,f=b-b%B;a=a%B+b*B%E;b=this.F=f+Math.trunc(b/2);c>A&&(c=E-c,d=!d);b>A&&(a?(b=D-b,a=E-a):b&&(b=E-b),e=!0,d=!d);if(b>=c)return this.u|=131104,-1;f=this.bb;f[0]=0;f[1]=0;f=this.oa;f[0]=1;f[1]=0;f=this.ga;f[0]=c;f[1]=0;c=this.pa;c[0]=a;for(c[1]=b;0b[0]&&(b[0]+=E,b[1]--),pe(this.bb,this.oa),qe(this.pa)))break;re(this.ga);re(this.oa)}while(!qe(this.oa)); +a=this.bb[0];this.F=this.pa[0];d&&a&&(a=E-a);e&&this.F&&(this.F=E-this.F);return a} +function se(a,b,c){var d=a,e=b;b=!1;var f;d>A&&(d=E-d,b=!b);e>A&&(e=E-e,b=!b);if(dA)&&(f!=D||a<=A)&&(this.u|=131072),a;c=a;b=f;a=b-b%B;b=2*b%E+Math.trunc(c/B);c=a+c%B;d=b-b%B;a!=d&&(b=a+(b-d),this.u|=131072);this.F=c;return b} +function te(a){a?a==B?this.u|=163840:a=Tb-a:this.u|=98304;return a}function P(a,b){var c=a-b;0>c&&(c+=E);me.call(this,c,b,a);return c}function me(a,b,c){a=Math.trunc(a/Sb);b=Math.trunc(b/Sb);c=Math.trunc(c/Sb);var d=a^(a^b)&(b^c);this.u=this.u|(d&2?65536:0)|(d&1?32768:0)|((a^c)&(b^c)&2?131072:0)}function Q(a,b){return((a/F|0)&(b/F|0))*F+((a&b)>>>0)}function R(a,b){return Q(a,(~(b/F|0)&15)*F+(~b>>>0))}function S(a,b){return(a>>0)}function T(a,b){return(a/F|0|b/F|0)*F+((a|b)>>>0)}function U(a){return a>>0)}function W(a){return(a/z|0)+(a&y)*z}function ae(a,b,c){switch(a&384){case 0:b-=b&y;break;case 128:b=0;break;case 256:b=y*z;break;case 384:b=c>Rb?y*z:0}return b}function Sd(a,b,c){switch(a&384){case 0:b&=y;break;case 128:b=0;break;case 256:b=y;break;case 384:b=c>A?y:0}return b} +function pe(a,b){a[0]+=b[0];a[1]+=b[1];a[0]>=E&&(a[0]%=E,a[1]++)}function oe(a,b){var c=a[1]-b[1];c||(c=a[0]-b[0]);return c}function re(a){a[1]%2&&(a[0]+=E);a[0]=Math.trunc(a[0]/2);a[1]=Math.trunc(a[1]/2)}function qe(a){return!a[0]&&!a[1]} +var rd=[M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,M,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},sd,function(a,b){0>this.I&&sd.call(this);td.call(this,0,b)},td,function(a,b){0>this.I&&sd.call(this);ud.call(this,0,b)},ud,function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)}, function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)}, -function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},Fd,Gd,Hd,function(a,b){b&&this.g(b,this.f(this.b))},function(a,b){a=this.f(this.b);a=(a/y|0)+(a&x)*y;this.g(b,a)},function(a,b){this.g(b,this.b*y)},function(a,b){a=this.f(b);a=(a/y|0)+(a&x)*y;this.g(this.b,a)},function(a,b){a=this.f(this.b);a=(a/y|0)+(a&x)*y;this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,Ie.call(this,this.f(this.b)))},function(a,b){this.g(b,Ie.call(this,this.b))},function(a,b){this.g(this.b, -Ie.call(this,this.f(b)))},function(a,b){a=Ie.call(this,this.f(this.b));this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,Ae.call(this,this.f(this.b)))},function(a,b){this.g(b,this.b)},function(a,b){this.g(this.b,Ae.call(this,this.f(b)))},function(a,b){a=Ae.call(this,this.f(this.b));this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,He.call(this,this.f(b),this.f(this.b),!0))},function(a,b){this.g(b,He.call(this,this.f(b),this.b,!0))},function(a,b){this.g(this.b,He.call(this,this.f(b),this.f(this.b), -!0))},function(a,b){this.g(this.b,this.g(b,He.call(this,this.f(b),this.f(this.b),!0)))},function(a,b){this.g(b,He.call(this,this.f(b),this.f(this.b)));this.g(b+1&15,this.F)},function(a,b){this.g(b,He.call(this,this.f(b),this.b));this.g(b+1&15,this.F)},function(a,b){this.g(this.b,He.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,He.call(this,this.f(b),this.f(this.b))));this.g(b+1&15,this.F)},function(a,b){a=Ce.call(this,this.f(b),0,this.f(this.b));0>a||(this.g(b,a),this.g(b+ -1&15,this.F))},function(a,b){a=Ce.call(this,this.f(b),0,this.b);0>a||(this.g(b,a),this.g(b+1&15,this.F))},function(a,b){a=Ce.call(this,this.f(b),0,this.f(this.b));0>a||this.g(this.b,a)},function(a,b){a=Ce.call(this,this.f(b),0,this.f(this.b));0>a||this.g(this.b,a)},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=Ce.call(this,c,a,this.f(this.b));0>c||(this.g(b,c),this.g(b+1&15,this.F))},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=Ce.call(this,c,a,this.b);0>c||(this.g(b,c),this.g(b+1&15,this.F))}, -function(a,b){a=this.f(b);b=this.f(b+1&15);b=Ce.call(this,b,a,this.f(this.b));0>b||this.g(this.b,b)},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=Ce.call(this,c,a,this.f(this.b));0>c||(this.g(b,this.g(this.b,c)),this.g(b+1&15,this.F))},function(a,b){var c=(this.b<<14>>14)%256;if(c){a=this.f(b);var d=a>z?-(C-a):a;0d?A:0,c=z):(d=d*Math.pow(2,c)%A,c=A-Math.pow(2,35-c)),a<=z?a+c>z&&(this.u|=131072):a-c<=z&&(this.u|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+C:d; -this.g(b,a)}},function(a,b){if(a=(this.b<<14>>14)%36){var c=this.f(b);0>a&&(a=36+a);c=c*Math.pow(2,a)%C+Math.trunc(c/Math.pow(2,36-a));this.g(b,c)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.f(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.g(b,c)}},function(a,b){a=0;var c=this.f(b);if(c){for(;c>14)%256){var c,d=this.f(b),e=this.f(b+1&15);if(0z&& -dz&&ez&&(this.u|=131072):e-c<=z&&(this.u|=131072);e=0;f>z&&(d+=A,e+=A)}else d=d*Math.pow(2,a)%A+Math.trunc(e%A/Math.pow(2,35-a)),e=e*Math.pow(2,a)%A,c=A-Math.pow(2,35-a),f<=z?f+c>z&&(this.u|=131072):(f-c<=z&&(this.u|=131072),d+=A,e+=A)}else-36>=a?(e=-72>=a?d>z?B:0:Math.trunc(d%A/Math.pow(2,-a-35)),d<=z?d=0:(d=B,e+=A)):(c=d>z?C-Math.pow(2,36+a):0,e=Math.trunc(e%A/Math.pow(2,-a))+ -d%A*Math.pow(2,35+a)%A,d=Math.trunc(d/Math.pow(2,-a))+c,d>z&&(e+=A));this.g(b,d);this.g(b+1&15,e)}},function(a,b){if(a=(this.b<<14>>14)%72){var c=this.f(b),d=this.f(b+1&15),e=c;0>a&&(a=72+a);36>a?(c=c*Math.pow(2,a)%C+Math.trunc(d/Math.pow(2,36-a)),d=d*Math.pow(2,a)%C+Math.trunc(e/Math.pow(2,36-a))):(c=d*Math.pow(2,a-36)%C+Math.trunc(c/Math.pow(2,72-a)),d=e*Math.pow(2,a-36)%C+Math.trunc(d/Math.pow(2,72-a)));this.g(b,c);this.g(b+1&15,d)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.f(b),d=this.f(b+ -1&15);0=a?(d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36)),c=0):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%C,c=Math.trunc(c/Math.pow(2,-a)));this.g(b,c);this.g(b+1&15,d)}},I,function(a,b){a=this.f(b);this.g(b,this.f(this.b));this.g(this.b,a)},function(a,b){a=!1;for(var c=this.f(b),d=c/y|0,c=c&x;!a;)this.g(c,this.f(d)),c==this.b&&(a=!0),d=d+1&x,c=c+1&x,this.A.L||(this.g(b,d* -y+c),a||yd(this,-1),a=!0)},function(a,b){a=(this.f(b)+262145)%B;this.g(b,a);a=A&&F(this,this.b)},function(a){this.w(a)},function(a,b){a=b<<14;this.u&a&&(this.u&=~a,F(this,this.b))},function(){this.qa=this.b},I,function(a){this.w(a)},function(a,b){a=this.f(b);a+=262145;this.g(a&x,this.f(this.b));a>=C&&(a-=C);a/y|0||(this.u|=262144);this.g(b,a)},function(a,b){a=this.f(b);var c=this.f(a&x);this.g(this.b,c);this.b==b&&(a=c);a-=262145; -0>a&&(a+=C);(a/y|0)==x&&(this.u|=262144);this.g(b,a)},function(a){this.w(a)},function(){this.g(this.b,(this.u&x)*y+this.i);F(this,this.b+1)},function(a,b){this.g(b,(this.u&x)*y+this.i);F(this,this.b)},function(a){this.w(a)},function(a){this.w(a)},function(a,b){this.g(b,O.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(b,O.call(this,this.f(b),this.b))},function(a,b){this.g(this.b,O.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,O.call(this,this.f(b),this.f(this.b))))}, -function(a,b){this.g(b,P.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(b,P.call(this,this.f(b),this.b))},function(a,b){this.g(this.b,P.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,P.call(this,this.f(b),this.f(this.b))))},ye,function(a,b){0>Je(this.f(b),this.b)&&F(this,this.i+1)},function(a,b){Je(this.f(b),this.b)||F(this,this.i+1)},function(a,b){0>=Je(this.f(b),this.b)&&F(this,this.i+1)},function(){F(this,this.i+1)},function(a,b){0<=Je(this.f(b),this.b)&& -F(this,this.i+1)},function(a,b){Je(this.f(b),this.b)&&F(this,this.i+1)},function(a,b){0Je(this.f(b),this.f(this.b))&&F(this,this.i+1)},function(a,b){Je(this.f(b),this.f(this.b))||F(this,this.i+1)},function(a,b){0>=Je(this.f(b),this.f(this.b))&&F(this,this.i+1)},function(){F(this,this.i+1)},function(a,b){0<=Je(this.f(b),this.f(this.b))&&F(this,this.i+1)},function(a,b){Je(this.f(b),this.f(this.b))&&F(this,this.i+1)},function(a,b){0U(this.f(b))&&F(this,this.b)},function(a,b){U(this.f(b))||F(this,this.b)},function(a,b){0>=U(this.f(b))&&F(this,this.b)},function(){F(this,this.b)},function(a,b){0<=U(this.f(b))&&F(this,this.b)},function(a,b){U(this.f(b))&&F(this,this.b)},function(a,b){0U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);U(a)||F(this,this.i+ -1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);0>=U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){F(this,this.i+1);b&&this.g(b,this.f(this.b))},function(a,b){a=this.f(this.b);0<=U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);0U(a)&&F(this,this.b)},function(a, -b){a=this.g(b,O.call(this,this.f(b),1));U(a)||F(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0>=U(a)&&F(this,this.b)},function(a,b){this.g(b,O.call(this,this.f(b),1));F(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0<=U(a)&&F(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));U(a)&&F(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));U(a)||F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0>=U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0<=U(a)&&F(this,this.i+1);b&&this.g(b,a)}, -function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0U(a)&&F(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));U(a)||F(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0>=U(a)&&F(this,this.b)},function(a,b){this.g(b,P.call(this, -this.f(b),1));F(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0<=U(a)&&F(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));U(a)&&F(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));U(a)||F(this, -this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0>=U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0<=U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));U(a)&&F(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0>>f.i;0>>= -f.i;0>>a.i;0g&&g>=-A&&(g+=C);for(var g=Math.trunc(Math.abs(g))%C,h=d;f--&&h=sa.kb&&c<=sa.Bb&&(b=c-(sa.kb-sa.xb));b&&(a.preventDefault&&a.preventDefault(),d.Ua(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==sa.zb&&(b=sa.yb);d.Ua(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation(); -a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ua(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.Ba=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;Qb(this)}; -l.wb=function(a){if(!this.b){var b=gd(this.G,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Fa(c[0]);if(d!=this.Pa)return;c=Fa(c[1]);if(this.b=vb(c)){var e=this.b.exports;if(e){var f=e.connect;f&&f.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Qa+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.ua=function(a,b){if(!b)if(this.wb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0}; -l.ia=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new E(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ua=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;da.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Fa(b.substring(c,f))),c=f+1}}return a} -function Ve(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break; +function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},function(a){this.w(a)},vd,wd,Nd,function(a,b){b&&this.g(b,this.f(this.b))},function(a,b){a=this.f(this.b);a=(a/z|0)+(a&y)*z;this.g(b,a)},function(a,b){this.g(b,this.b*z)},function(a,b){a=this.f(b);a=(a/z|0)+(a&y)*z;this.g(this.b,a)},function(a,b){a=this.f(this.b);a=(a/z|0)+(a&y)*z;this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,te.call(this,this.f(this.b)))},function(a,b){this.g(b,te.call(this,this.b))},function(a,b){this.g(this.b, +te.call(this,this.f(b)))},function(a,b){a=te.call(this,this.f(this.b));this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,le.call(this,this.f(this.b)))},function(a,b){this.g(b,this.b)},function(a,b){this.g(this.b,le.call(this,this.f(b)))},function(a,b){a=le.call(this,this.f(this.b));this.g(this.b,a);b&&this.g(b,a)},function(a,b){this.g(b,se.call(this,this.f(b),this.f(this.b),!0))},function(a,b){this.g(b,se.call(this,this.f(b),this.b,!0))},function(a,b){this.g(this.b,se.call(this,this.f(b),this.f(this.b), +!0))},function(a,b){this.g(this.b,this.g(b,se.call(this,this.f(b),this.f(this.b),!0)))},function(a,b){this.g(b,se.call(this,this.f(b),this.f(this.b)));this.g(b+1&15,this.F)},function(a,b){this.g(b,se.call(this,this.f(b),this.b));this.g(b+1&15,this.F)},function(a,b){this.g(this.b,se.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,se.call(this,this.f(b),this.f(this.b))));this.g(b+1&15,this.F)},function(a,b){a=ne.call(this,this.f(b),0,this.f(this.b));0>a||(this.g(b,a),this.g(b+ +1&15,this.F))},function(a,b){a=ne.call(this,this.f(b),0,this.b);0>a||(this.g(b,a),this.g(b+1&15,this.F))},function(a,b){a=ne.call(this,this.f(b),0,this.f(this.b));0>a||this.g(this.b,a)},function(a,b){a=ne.call(this,this.f(b),0,this.f(this.b));0>a||this.g(this.b,a)},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=ne.call(this,c,a,this.f(this.b));0>c||(this.g(b,c),this.g(b+1&15,this.F))},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=ne.call(this,c,a,this.b);0>c||(this.g(b,c),this.g(b+1&15,this.F))}, +function(a,b){a=this.f(b);b=this.f(b+1&15);b=ne.call(this,b,a,this.f(this.b));0>b||this.g(this.b,b)},function(a,b){a=this.f(b);var c=this.f(b+1&15),c=ne.call(this,c,a,this.f(this.b));0>c||(this.g(b,this.g(this.b,c)),this.g(b+1&15,this.F))},function(a,b){var c=(this.b<<14>>14)%256;if(c){a=this.f(b);var d=a>A?-(E-a):a;0d?B:0,c=A):(d=d*Math.pow(2,c)%B,c=B-Math.pow(2,35-c)),a<=A?a+c>A&&(this.u|=131072):a-c<=A&&(this.u|=131072)):d=-35>=c?0>d?-1:0:Math.trunc(d/Math.pow(2,-c));a=0>d?d+E:d; +this.g(b,a)}},function(a,b){if(a=(this.b<<14>>14)%36){var c=this.f(b);0>a&&(a=36+a);c=c*Math.pow(2,a)%E+Math.trunc(c/Math.pow(2,36-a));this.g(b,c)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.f(b),c=0=a?0:Math.trunc(c/Math.pow(2,-a));this.g(b,c)}},function(a,b){a=0;var c=this.f(b);if(c){for(;c>14)%256){var c,d=this.f(b),e=this.f(b+1&15);if(0A&& +dA&&eA&&(this.u|=131072):e-c<=A&&(this.u|=131072);e=0;f>A&&(d+=B,e+=B)}else d=d*Math.pow(2,a)%B+Math.trunc(e%B/Math.pow(2,35-a)),e=e*Math.pow(2,a)%B,c=B-Math.pow(2,35-a),f<=A?f+c>A&&(this.u|=131072):(f-c<=A&&(this.u|=131072),d+=B,e+=B)}else-36>=a?(e=-72>=a?d>A?D:0:Math.trunc(d%B/Math.pow(2,-a-35)),d<=A?d=0:(d=D,e+=B)):(c=d>A?E-Math.pow(2,36+a):0,e=Math.trunc(e%B/Math.pow(2,-a))+ +d%B*Math.pow(2,35+a)%B,d=Math.trunc(d/Math.pow(2,-a))+c,d>A&&(e+=B));this.g(b,d);this.g(b+1&15,e)}},function(a,b){if(a=(this.b<<14>>14)%72){var c=this.f(b),d=this.f(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.g(b,c);this.g(b+1&15,d)}},function(a,b){if(a=(this.b<<14>>14)%256){var c=this.f(b),d=this.f(b+ +1&15);0=a?(d=-72>=a?0:Math.trunc(c/Math.pow(2,-a-36)),c=0):(d=Math.trunc(d/Math.pow(2,-a))+c*Math.pow(2,36+a)%E,c=Math.trunc(c/Math.pow(2,-a)));this.g(b,c);this.g(b+1&15,d)}},L,function(a,b){a=this.f(b);this.g(b,this.f(this.b));this.g(this.b,a)},function(a,b){a=!1;for(var c=this.f(b),d=c/z|0,c=c&y;!a;)this.g(c,this.f(d)),c==this.b&&(a=!0),d=d+1&y,c=c+1&y,this.A.L||(this.g(b,d* +z+c),a||od(this,-1),a=!0)},function(a,b){a=(this.f(b)+262145)%D;this.g(b,a);a=B&&H(this,this.b)},function(a){this.w(a)},function(a,b){a=b<<14;this.u&a&&(this.u&=~a,H(this,this.b))},function(){this.qa=this.b},L,function(a){this.w(a)},function(a,b){a=this.f(b);a+=262145;this.g(a&y,this.f(this.b));a>=E&&(a-=E);a/z|0||(this.u|=262144);this.g(b,a)},function(a,b){a=this.f(b);var c=this.f(a&y);this.g(this.b,c);this.b==b&&(a=c);a-=262145; +0>a&&(a+=E);(a/z|0)==y&&(this.u|=262144);this.g(b,a)},function(a){this.w(a)},function(){this.g(this.b,(this.u&y)*z+this.i);H(this,this.b+1)},function(a,b){this.g(b,(this.u&y)*z+this.i);H(this,this.b)},function(a){this.w(a)},function(a){this.w(a)},function(a,b){this.g(b,O.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(b,O.call(this,this.f(b),this.b))},function(a,b){this.g(this.b,O.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,O.call(this,this.f(b),this.f(this.b))))}, +function(a,b){this.g(b,P.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(b,P.call(this,this.f(b),this.b))},function(a,b){this.g(this.b,P.call(this,this.f(b),this.f(this.b)))},function(a,b){this.g(this.b,this.g(b,P.call(this,this.f(b),this.f(this.b))))},je,function(a,b){0>S(this.f(b),this.b)&&H(this,this.i+1)},function(a,b){S(this.f(b),this.b)||H(this,this.i+1)},function(a,b){0>=S(this.f(b),this.b)&&H(this,this.i+1)},function(){H(this,this.i+1)},function(a,b){0<=S(this.f(b),this.b)&&H(this, +this.i+1)},function(a,b){S(this.f(b),this.b)&&H(this,this.i+1)},function(a,b){0S(this.f(b),this.f(this.b))&&H(this,this.i+1)},function(a,b){S(this.f(b),this.f(this.b))||H(this,this.i+1)},function(a,b){0>=S(this.f(b),this.f(this.b))&&H(this,this.i+1)},function(){H(this,this.i+1)},function(a,b){0<=S(this.f(b),this.f(this.b))&&H(this,this.i+1)},function(a,b){S(this.f(b),this.f(this.b))&&H(this,this.i+1)},function(a,b){0U(this.f(b))&&H(this,this.b)},function(a,b){U(this.f(b))||H(this,this.b)},function(a,b){0>=U(this.f(b))&&H(this,this.b)},function(){H(this,this.b)},function(a,b){0<=U(this.f(b))&&H(this,this.b)},function(a,b){U(this.f(b))&&H(this,this.b)},function(a,b){0U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);U(a)||H(this,this.i+1);b&&this.g(b, +a)},function(a,b){a=this.f(this.b);0>=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){H(this,this.i+1);b&&this.g(b,this.f(this.b))},function(a,b){a=this.f(this.b);0<=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.f(this.b);0U(a)&&H(this,this.b)},function(a,b){a=this.g(b, +O.call(this,this.f(b),1));U(a)||H(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0>=U(a)&&H(this,this.b)},function(a,b){this.g(b,O.call(this,this.f(b),1));H(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0<=U(a)&&H(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));U(a)&&H(this,this.b)},function(a,b){a=this.g(b,O.call(this,this.f(b),1));0U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));U(a)||H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0>=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0<=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a, +b){a=this.g(this.b,O.call(this,this.f(this.b),1));U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,O.call(this,this.f(this.b),1));0U(a)&&H(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));U(a)||H(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0>=U(a)&&H(this,this.b)},function(a,b){this.g(b,P.call(this,this.f(b), +1));H(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0<=U(a)&&H(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));U(a)&&H(this,this.b)},function(a,b){a=this.g(b,P.call(this,this.f(b),1));0U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));U(a)||H(this,this.i+ +1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0>=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0<=U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));U(a)&&H(this,this.i+1);b&&this.g(b,a)},function(a,b){a=this.g(this.b,P.call(this,this.f(this.b),1));0>>f.i;0>>= +f.i;0>>a.i;0g&&g>=-B&&(g+=E);for(var g=Math.trunc(Math.abs(g))%E,h=d;f--&&h=qa.kb&&c<=qa.Bb&&(b=c-(qa.kb-qa.xb));b&&(a.preventDefault&&a.preventDefault(),d.Ua(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==qa.zb&&(b=qa.yb);d.Ua(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation(); +a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ua(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.Ca=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;Jb(this)}; +l.wb=function(a){if(!this.b){var b=Xc(this.G,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Da(c[0]);if(d!=this.Pa)return;c=Da(c[1]);if(this.b=pb(c)){var e=this.b.exports;if(e){var f=e.connect;f&&f.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Qa+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.ua=function(a,b){if(!b)if(this.wb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0}; +l.ia=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new G(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ua=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;da.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Da(b.substring(c,f))),c=f+1}}return a} +function Ge(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break; case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0} -function We(a,b,c){var d;if(b){b=Xe(a,b);for(var e=0,f=!1,g=b,h=[],k=[],n=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1,ma--;g=w+g;d>>=8}d=m(c,0,!0)+" "+c+". "+va(c,0,!0)+" "+("0b"+g);32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'")}a.j((null!=b?b+": ":"")+d);return e} -function af(a,b){if(b)return $e(a,b,a.T[b]);var c=0;for(b in a.T)$e(a,b,a.T[b]),c++;return 0>2:0)}0>c?c=b.replace(/^0+([0-9A-F]+)$/i,"$1"):c=b;return c}var Ze={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; -function bf(a){Te.call(this,a);this.xa=!1;this.la=!0;this.va=18;this.wa=Y();this.K=Y(0);this.ga=Y(0);this.ba=Y(0);this.F=[];this.b=this.M=this.I=[];cf(this);this.R=this.ka=0;this.i=[];this.oa=void 0;df(this);this.D=this;this.ma={};this.X=this.sb=0;this.S=null;this.O=[];ef(this,a.messages);this.qa=a.commands;this.N=0;this.Aa=this.pa=null;this.B=this.za=this.ya=this.fa=this.na=0;this.ea=this.aa=null;var b=this;window?void 0===window[u]&&(window[u]=function(a){return ld(b,a)}):void 0===global[u]&&(global[u]= -function(a){return ld(b,a)})}la(bf,Te);function ff(a){a=a&&a.C;null==a&&(a=-1);return a}function Y(a,b,c){return{C:void 0===a?null:a,Sa:void 0===b?!1:b,ha:!1,ca:c}}function gf(a,b,c,d){a.C=b;a.Sa=c||!1;a.ha=!1;a.ca=d}function hf(a){return[a.C,a.Sa,a.ha,a.ca,a.Va]}function jf(a,b){var c=Y(b[0],b[1],b[2]);c.ha=b[3];b[4]&&(c.ob=Ue(a,c.Va=b[4]));return c}l=bf.prototype; -l.Ba=function(a,b,c,d){this.H=b;this.G=a;this.v=c;this.ea=a.u;this.va=b.F;(a=gd(a,"messages"))&&ef(this,a);kf(this,function(a){a:{var b=d.H.b,c=a[0],e=a=0,k=b.length;if(c){a=ff(lf(d,c,d.ga));if(-1===a){d.j("invalid address: "+c);break a}e=a>>>d.H.i;k=1}d.j("blockid physical blockaddr used size type");d.j("-------- --------- --------- ------ ------ ----");for(var c=-1,n=0;k--;){var p=b[e];p.type==c?n++||d.j("..."):(c=p.type,n=Rc[c],p&&d.j(m(p.id,8)+" %"+m(e<a&&a>=-A&&(a+=C);return Math.trunc(Math.abs(a))%Math.pow(2,void 0===b?36:b)}function Z(a,b){return H(a,b.C)}function of(a){return va(a/Xb,6)+" "+va(a%Xb,6)} -function ef(a,b){a.D=a;a.X=a.sb=536870916;a.S=null;a.O=[];b=Ue(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(b.length)for(var c in ec){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;d>23&&a.v.xa==b&&(b=yd(a.v,1)));if(0d&&(d=a.v.f(b)),0<=d&&(gf(a.i[a.R],b),++a.R==a.i.length&&(a.R=0)));return!1} -function Ff(a,b,c,d){var e=Y(b.C),f=a.Ca(b,1),g,h,k,n=0,p=f/ac|0,w;for(w in Gf)if(g=Gf[w][p&w]){h=+w;p>>=6;switch(h){case 32512:k=Hf;n=p&3;break;case 32256:k=ng;n=p&7;break;case 29248:k=pg,n=(p&48)>>2|(p&6)>>1}break}k=k&&k[n]||"";"S"==k&&g>qg&&(k="B");k=rg[g||0]+k;if(g){if(28700==h)n=f/bc&127,h=H(a,n,-1);else if(n=f>>23&15,h=H(a,n,-1),g==sg&&(g=tg[n]))k=rg[g],h="";k=Ea(k,8)+(h?h+",":"");f&4194304&&(k+="@");k+=H(a,f&262143,-1);(f=f>>18&15)&&(k+="("+H(a,f,-1)+")")}else k=Ea(k,8)+of(f);f=k;g="";h=Z(a, -e)+":";if(-1!==e.C&&-1!==b.C){do if(k=a.Ca(e,1),g+=" "+of(k),null==e.C)break;while(e.C!=b.C)}h+=Ea(g,16)+f;c&&(h=Ea(h,48)+";"+(c||""),h=a.v.A.Fa?h+("cycles="+md(a.v).toString()+" cs="+m(a.v.za)):h+(null!=d?"="+d.toString():""));return h}function cf(a){var b,c;a.b=["bp"];if(a.M)for(b=1;b>>d.i],!1)}a.M=["br"];if(a.I)for(b=1;b>>d.i],!0);a.I=["bw"];a.na=0;a.ka=0} -l.Ea=function(a,b,c){var d=!0;c||ug(this,a,b,!1,!0);if(a!=this.b){var e=ff(b);if(-1===e)this.j("invalid address: "+Z(this,b)),d=!1;else{var f=this.H;f.b[e>>>f.i].Ea(e&16383,a==this.I)}}d&&(a.push(b),c?b.ha=!0:(vg(this,a,a.length-1,"set"),df(this)));return d};function ug(a,b,c,d,e){var f=!1;c=ff(c);for(var g=1;g>>d.i],b==a.I));h.ha||df(a);break}}return f} -function wg(a,b){for(var c=1;cd;d++){!d||d&3||(c+="\n");var e=a,f=va(d,2);gf(e.wa,d);f+="="+H(e,e.Ca(e.wa),36)+" ";c+=f}if(b){b="";for(d=0;d=tf?1:d==rf?23:18)+" "),b+=e;c+="\n"+b}return c}l.tb=function(a,b){return a[0]>b[0]?1:a[0]>>0,g],w=Ga(p,k,a.tb);0>w&&p.splice(-(w+1),0,k)}n&&(h.a=n.replace(/''/g,'"'))}a.F.push({hd:b,C:c,Hb:d,U:e,pb:f})}function zg(a,b,c){var d=[],e=ff(b)>>>0;for(b=0;b>>0,h=f.Hb;if(e>=g&&eb){a.j("unknown register: "+f);return}var f=0,h=a.v;switch(b){case qf:F(h, -g);gf(a.K,h.i);break;case tf:f=65536;break;case uf:f=32768;break;case vf:f=131072;break;case wf:f=32;break;case xf:f=262144}f&&(h.u=g?h.u|f:h.u&~f);G(a.G);a.j("updated registers:")}}a.j(yg(a,e));c&&(gf(a.K,d.i),Df(a,Z(a,a.K)))}}function Dg(a,b){b=Fa(b);var c=b.match(/^(['"])(.*?)\1$/);c?1h[0].indexOf("+"))){var n=h[0]+":";h[2]&&(n+=" "+h[2]);a.j(n)}h[3]&&(g=h[3],f=null);h=a.ba;n=b;h.C=n.C;h.Sa=n.Sa;h.ha=n.ha;h.ca=n.ca;a.j(Ff(a,b,g,f));e-=b.C-k;c++}}} -function xg(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.j(Bf+b):(a.P&&(a.j("ended assemble at "+Z(a,a.ba)),a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.S=null;if(Pb(a)&&0p||"z"qg&&(Ld="B");if(Id== -rg[Bb]+Ld){Kf=29248!=Ec?cb:(cb&3)<<1|(cb&12)<<2;J=(Kd|Kf<<6)*ac;break}}if(0<=J)break}if(0<=J)break}if(0<=J)if(Dc)for(var Md=Dc.split(","),db=0;dbR||127R||15R||262143R||15oa.length&&(a.j("note: only "+oa.length+" available"),fa=oa.length);ja-=fa;0>ja&&(null==oa[oa.length-1].C?(fa=ja+fa,ja=0):ja+=oa.length);var Rd=[];"call"==Qf&&(Db=1E5,Rd=["CALL"]);for(void 0!== -Pf&&a.j(fa+" instructions earlier:");0=oa.length&&(ja=0);a.oa=fa;Sf++;Db--}}Sf||(a.j("no "+Rf+"history available"),a.oa=void 0)}else{var jb=lf(a,na,a.ga);if(jb){var La=0,Vf="ds"==gb;if(Ba){if("l"==Ba.charAt(0))Ba=Ba.substr(1)||hh,La=Ye(a,Ba);else{var Wf=lf(a,Ba);Wf&&(La=Wf.C-jb.C)}0>La&&(La=0);65536$f;$f++)Yf+=String.fromCharCode((Gc%64|0)+32),Gc/=64}Ma&&(Ma+="\n");Ma=Vf?Ma+(Na+","):Ma+(na+": "+Na+(0>Zf?" "+Yf:""))}Ma&&a.j(Ma);a.ca=jh}}}}break;case "e":if("else"==g[0])break;var ag,bg,cg=g[0],Ud=g[1];"e"==cg||"ew"==cg?(ag=a.Ca,bg=a.mb):Ud=null; -if(null==Ud)a.j("edit memory commands:"),a.j("\tew [a] [...] edit words at address a");else{var Hc=lf(a,Ud,a.ga);if(Hc)for(var Vd=2;VdYd;){for(var Oa=null,nh=256;65536>Hb.C>>>0;){Zd.C=a.Ca(Hb,2);if(null==Hb.C||!nh--)break;if(!(Zd.C&1)){for(var oh=a,Ic=Zd,eg=null,Ib=Ic.C,fg=Ib,$d=1;6>=$d&&Ib;$d++){if(2< -$d){Ic.C=Ib;var Jc=Ff(oh,Ic);if(0<=Jc.indexOf("JSR")){var gg=Jc.indexOf(" ");if(Ib+(Jc.indexOf(" ",gg+1)-gg-1)/2==fg){eg=Jc;break}}}Ib-=2}Ic.C=fg;if(Oa=eg)break}}if(!Oa||null==Oa)break;var hg=null;if("ks"==mh){var ig=Oa.match(/[0-9A-F]+$/);ig&&(hg=Cg(a,ig[0]))}Oa=Ea(Oa,50)+" ;"+(hg||"stack="+Z(a,Hb));a.j(Oa);Yd++}Yd||a.j("no return addresses found")}break;case "l":if("ln"==g[0]){Cg(a,g[1],!0);break}f=!0;break;case "m":a:{var pa,qa=null,L=g[1];"?"==L&&(L=void 0);if(void 0!==L){var Ca=0;if("all"== -L)Ca=1879046143,L=null;else if("on"==L)qa=!0,L=null;else if("off"==L)qa=!1,L=null;else{"keys"==L&&(L="key");"kbd"==L&&(L="keyboard");for(pa in ec)if(L==pa){Ca=ec[pa];qa=!!(a.X&Ca);break}if(!Ca){a.j("unknown message category: "+L);break a}}if(Ca)if("on"==g[2])a.X|=Ca,qa=!0;else if("off"==g[2]&&(a.X&=~Ca,qa=!1,1073741824==Ca)){for(var jg=1E3<=a.O.length?a.O.length-1E3:0;jglg)a.j("step commands:"),a.j("\tp\tstep over instruction"),a.j("\tpr\tstep over instruction with register update");else if(a.N)a.j("step in progress"); -else{var mg=Y(a.v.i);a.Ca(mg);a.N?(a.Ea(a.b,mg,!0),zf(a)||(a.G&&qd(a.G),a.N=0)):Eg(a,lg?"tr":"t")}break;case "r":if("reset"==b){a.G&&a.G.reset();break}Cf(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Kb=+g[2];if(8==Kb||10==Kb||16==Kb)a.ca=Kb;else{a.j("invalid base: "+Kb);break}}a.j("default base: "+a.ca);break;case "cs":var Lb;void 0!==g[3]&&(Lb=+g[3]);switch(g[2]){case "int":a.v.ka=Lb;break;case "start":a.v.Aa=Lb;break;case "stop":a.v.ma=Lb;break;default:a.j("unknown cs option");break a}void 0!== -Lb&&id(a.v);a.j("checksums "+(a.v.A.Fa?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(nd(a.v,+g[2])||a.j("warning: using 1x multiplier, previous target not reached"));a.j("target speed: "+(a.v.ba.toFixed(2)+"Mhz")+" ("+a.v.ea+"x)");break;default:if(g[1]){a.j("unknown option: "+g[1]);break}case "?":a.j("debugger options:"),a.j("\tbase #\t\tset default base to #"),a.j("\tcs int #\tset checksum cycle interval to #"),a.j("\tcs start #\tset checksum cycle start count to #"),a.j("\tcs stop #\tset checksum cycle stop count to #"), -a.j("\tsp #\t\tset speed multiplier to #")}break;case "t":Eg(a,g[0],g[1]);break;case "u":Df(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Bg(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.j((Vb||"PDP10")+" version 1.34.2 ("+a.v.qb+",RELEASE)");a.j(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){Dg(a,b.substr(1));break}var ae="commands:",be;for(be in Gg)ae+="\n"+Ea(be,9)+Gg[be];zd(a)||(ae+="\nnote: history disabled if no exec breakpoints");a.j(ae);break;default:f=!0}f&&(a.j("unknown command: "+ -b),d=!1)}}catch(og){a.j("Debugger "+(og.stack||og.message)),d=!1}return d}function ld(a,b,c){b=Ue(a,b,c);for(var d in b)if(!xg(a,b[+d]))return!1;return!0} -var Gg={"?":"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"},qg=20,sg=85,rg=".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 CAM 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 JOV JCRY0 JCRY1 JCRY JFOV".split(" "), -qf=0,rf=1,sf=2,tf=3,uf=4,vf=5,wf=6,xf=7,pf="PC RA EA C0 C1 OV ND PD".split(" "),Hg={},Gf=(Hg[28672]={0:101},Hg[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:sg,11136:83,11264:91,11328:23,11392:24,11456:92,11520:86,11584:87,11648:89,11712:90},Hg[32512]={6144:65,6400:59,6656:66,6912:60,7168:67,7424:61,7680:68,7936:62,8192:17,8448:18,8704:19,8960:qg,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},Hg[32256]={12288:71,12800:72,13312:73,13824:74,14336:75,14848:76,15360:77,15872:78},Hg[29248]={24576:79,24640:80,25088:81,25152:82},Hg[28700]={28672:93,28676:94,28680:95,28684:96,28688:97, -28692:98,28696:99,28700:100},Hg),Hf=["","I","M","S"],ng=" L E LE A GE N G".split(" "),pg="N NE NA NN Z ZE ZA ZN C CE CA CN O OE OA ON".split(" "),tg={8:102,4:103,2:104,6:105,1:106},yf=1E3,Bf=">> ";Za(function(){for(var a=v(document,u,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;bLg){if(Mg(d,this.M)){this.B=new E(this,"1.34.2",Vg);Mg(this.B)&&(Wg(this,d),a=Xg,Yg(this.B));this.B.set(Sg,Ha());Zg(this.B);var e=this.b&&!this.K;if(a==Tg||tb("Click OK to restore the previous "+Vb+" machine state, or CANCEL to reset the machine.")){if(c=Rg(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?Mg(d,g):("error"==f&&"no machine state"!= -g?(this.da("Error: "+g),"unable to verify user"==g&&(Sa($g,""),this.i=null)):this.j(f+": "+g),Yg(d),Mg(d)?(c=Rg(d),e=!0):c=!1))}e&&Pg(this,c?d:null)}else a==Xg&&d.clear()}else Pg(this);delete this.M;delete this.I}e=ub(this.id);for(f=0;fa[1];a=a[2];this.S=!0;this.A.V=!0;var d=this.J.power;d&&(d.textContent="Shutdown");this.v&&(ah(this,this.v,b,c,a),G(this,-2),this.v.Z());this.P&&(Wg(this,b),b.clear());!c&&this.B&&(this.B.clear(),delete this.B);this.w=0}; -function Wg(a,b){if(tb("There may be a problem with your "+Vb+" machine.\n\nTo help us diagnose it, click OK to send this "+Vb+" machine state to http://www.pcjs.org.")){var c=a.ba;a=a.i||"";b=b.toString();var d={};d.app=Vb;d.ver="1.34.2";d.url=c;d.user=a;d.type="bug";d.data=b;Ia("http://www.pcjs.org/api/v1/report",d,!0)}} -function Fg(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new E(a,"1.34.2"),g=new E(a,"1.34.2",Qg),h=Ha();g.set(Sg,h);f.set(Sg,h);f.set(bh,"1.34.2");f.set(ch,window?window.location.href:null);f.set(dh,window?window.navigator.userAgent:"");a.v&&a.v.ia&&(c&&(b&&(a.v.A.Z=a.v.A.L),a.v.W()),d=a.v.ia(b,c),"object"===typeof d&&f.set(a.v.id,d),c&&(a.v.A.V=!1,!1===d&&(e=null)));for(var h=ub(a.id),k=0;k=d||30<=(c.Xa+=d))&&(e.textContent=c.A.L?c.aa.toFixed(2)+"Mhz":"Stopped",c.Xa=0)}if(a.u&&(a=a.u,b=b||0,a.M)){c=a.v.A.L;d=!!(a.v.B&8);if(0>=b||60<=(a.K+=b)){e=a.v.i;if(a.J.PC){var f=a.D&&a.D.ca||8,e=e||0,e=8==f?va(e,void 0):m(e,void 0);a.J.PC.textContent!=e&&(a.J.PC.textContent=e)}a.K=0}-1>b?a.i=a.v.i:0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), -a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$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 e=d[2];b("Loading "+e+"...");Ia(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],n,p=/( [a-z]+=)(['"])(.*?)\2/g;n=p.exec(f);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/, -"");a=a.replace(d[0],g);xh(a,b,c)}})}else c(a,null)} -function yh(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&v(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Aa(a))}function g(a){f("Error: "+a);n&&(--uh||lb(!0));n=!1}var h,k,n=!0;uh++;rb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var w=document.head||document.getElementsByTagName("head")[0],K=document.createElement("style");K.type="text/css";K.styleSheet?K.styleSheet.cssText=p:K.appendChild(document.createTextNode(p));w.appendChild(K)}d|| -(p=a,"pdp"==a.substr(0,3)&&(p="pdpjs"),d="/versions/"+p+"/1.34.2/components.xsl");p=function(e,k){k?vh(d,null,a,null,!1,f,function(a,e){e?(qb(b,d,a),f("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--uh||lb(!0)):g("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--uh|| -lb(!0)):g("invalid machine element: "+b):g("transformToFragment failed")):g("unable to transform XML: unsupported browser")):g(a)}):g(e)};"<"!=c.charAt(0)?vh(c,b,a,e,!0,f,p):wh(c,null,b,a,e,!1,f,p)}else g("missing machine element: "+b)}catch(ma){g(ma.message)}return n}window.embedPDP10=function(a,b,c,d){lb(!1);return yh("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){lb(!1);return yh("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return wb(b,a+".machine")}; -window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!zb[a]){for(var c=!0,d=zb,e=a,f=b.length,g=[],h=[],k="",n=null,p=0;p=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1,ca--;g=t+g;d>>=8}d=q(c,0,!0)+" "+c+". "+ta(c,0,!0)+" "+("0b"+g);32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'")}a.j((null!=b?b+": ":"")+d);return e} +function Me(a,b){if(b)return Le(a,b,a.T[b]);var c=0;for(b in a.T)Le(a,b,a.T[b]),c++;return 0>2:0)}0>c?c=b.replace(/^0+([0-9A-F]+)$/i,"$1"):c=b;return c}var Ke={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9}; +function Ne(a){Ee.call(this,a);this.ya=!1;this.la=!0;this.wa=18;this.xa=X();this.K=X(0);this.ga=X(0);this.ba=X(0);this.F=[];this.b=this.M=this.I=[];Oe(this);this.R=this.ka=0;this.i=[];this.pa=void 0;Pe(this);this.D=this;this.ma={};this.X=this.sb=0;this.S=null;this.O=[];Qe(this,a.messages);this.va=a.commands;this.N=0;this.Ba=this.qa=null;this.B=this.Aa=this.za=this.fa=this.oa=0;this.na=this.ea=this.aa=null;var b=this;window?void 0===window[w]&&(window[w]=function(a){return bd(b,a)}):void 0===global[w]&& +(global[w]=function(a){return bd(b,a)})}m(Ne,Ee);function Re(a){a=a&&a.C;null==a&&(a=-1);return a}function X(a,b,c){return{C:void 0===a?null:a,Sa:void 0===b?!1:b,ha:!1,ca:c}}function Se(a,b,c,d){a.C=b;a.Sa=c||!1;a.ha=!1;a.ca=d}function Te(a){return[a.C,a.Sa,a.ha,a.ca,a.Va]}function Ue(a,b){var c=X(b[0],b[1],b[2]);c.ha=b[3];b[4]&&(c.ob=Fe(a,c.Va=b[4]));return c}l=Ne.prototype; +l.Ca=function(a,b,c,d){this.H=b;this.G=a;this.v=c;this.ea=a.u;this.wa=b.F;(a=Xc(a,"messages"))&&Qe(this,a);Ve(this,function(a){a:{var b=d.H.b,c=a[0],e=a=0,k=b.length;if(c){a=Re(We(d,c,d.ga));if(-1===a){d.j("invalid address: "+c);break a}e=a>>>d.H.i;k=1}d.j("blockid physical blockaddr used size type");d.j("-------- --------- --------- ------ ------ ----");for(var c=-1,n=0;k--;){var p=b[e];p.type==c?n++||d.j("..."):(c=p.type,n=Hc[c],p&&d.j(q(p.id,8)+" %"+q(e<a&&a>=-B&&(a+=E);return Math.trunc(Math.abs(a))%Math.pow(2,void 0===b?36:b)}function Z(a,b){return J(a,b.C)}function Ze(a){return ta(a/Qb,6)+" "+ta(a%Qb,6)} +function Qe(a,b){a.D=a;a.X=a.sb=536870916;a.S=null;a.O=[];b=Fe(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(b.length)for(var c in Yb){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;d>23&&a.v.xa==b&&(b=od(a.v,1)));if(0d&&(d=a.v.f(b)),0<=d&&(Se(a.i[a.R],b),++a.R==a.i.length&&(a.R=0)));return!1} +function qf(a,b,c,d){var e=X(b.C),f=a.Da(b,1),g,h,k,n=0,p=f/Ub|0,t;for(t in rf)if(g=rf[t][p&t]){h=+t;p>>=6;switch(h){case 32512:k=Vf;n=p&3;break;case 32256:k=Xf;n=p&7;break;case 29248:k=Yf,n=(p&48)>>2|(p&6)>>1}break}k=k&&k[n]||"";"S"==k&&g>Zf&&(k="B");k=$f[g||0]+k;if(g){if(28700==h)n=f/Vb&127,h=J(a,n,-1);else if(n=f>>23&15,h=J(a,n,-1),g==ag&&(g=bg[n]))k=$f[g],h="";k=Ca(k,8)+(h?h+",":"");f&4194304&&(k+="@");k+=J(a,f&262143,-1);(f=f>>18&15)&&(k+="("+J(a,f,-1)+")")}else k=Ca(k,8)+Ze(f);f=k;g="";h=Z(a, +e)+":";if(-1!==e.C&&-1!==b.C){do if(k=a.Da(e,1),g+=" "+Ze(k),null==e.C)break;while(e.C!=b.C)}h+=Ca(g,16)+f;c&&(h=Ca(h,48)+";"+(c||""),h=a.v.A.Ga?h+("cycles="+cd(a.v).toString()+" cs="+q(a.v.za)):h+(null!=d?"="+d.toString():""));return h} +function cg(a,b,c,d){var e=-1,f,g,h=b.toUpperCase(),k;for(k in bg)if(g=bg[k],h==$f[g]){h=$f[ag];c=J(a,+k)+","+c;break}for(var n in rf){f=+n;var p=rf[n];switch(f){case 32512:k=Vf;break;case 32256:k=Xf;break;case 29248:k=Yf;break;default:k=[""]}for(var t in p){g=p[t];for(var C=0;CZf&&(ca="B");if(h==$f[g]+ca){e=29248!=f?C:(C&3)<<1|(C&12)<<2;e=(t|e<<6)*Ub;break}}if(0<=e)break}if(0<=e)break}if(0<=e)if(c)for(b=c.split(","),c=0;ct||127t||15t||262143t||15>>d.i],!1)}a.M=["br"];if(a.I)for(b=1;b>>d.i],!0);a.I=["bw"];a.oa=0;a.ka=0} +l.Fa=function(a,b,c){var d=!0;c||dg(this,a,b,!1,!0);if(a!=this.b){var e=Re(b);if(-1===e)this.j("invalid address: "+Z(this,b)),d=!1;else{var f=this.H;f.b[e>>>f.i].Fa(e&16383,a==this.I)}}d&&(a.push(b),c?b.ha=!0:(eg(this,a,a.length-1,"set"),Pe(this)));return d};function dg(a,b,c,d,e){var f=!1;c=Re(c);for(var g=1;g>>d.i],b==a.I));h.ha||Pe(a);break}}return f} +function fg(a,b){for(var c=1;cd;d++){!d||d&3||(c+="\n");var e=a,f=ta(d,2);Se(e.xa,d);f+="="+J(e,e.Da(e.xa),36)+" ";c+=f}if(b){b="";for(d=0;d<$e.length;d++)(e=$e[d]||"")&&(e+="="+J(a,a.hb(d),d>=df?1:d==bf?23:18)+" "),b+=e;c+="\n"+b}return c}l.tb=function(a,b){return a[0]>b[0]?1:a[0]>>0,g],t=Ea(p,k,a.tb);0>t&&p.splice(-(t+1),0,k)}n&&(h.a=n.replace(/''/g,'"'))}a.F.push({hd:b,C:c,Hb:d,U:e,pb:f})}function ig(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b>>0,h=f.Hb;if(e>=g&&eb){a.j("unknown register: "+f);return}var f=0,h=a.v;switch(b){case af:H(h, +g);Se(a.K,h.i);break;case df:f=65536;break;case ef:f=32768;break;case ff:f=131072;break;case gf:f=32;break;case hf:f=262144}f&&(h.u=g?h.u|f:h.u&~f);I(a.G);a.j("updated registers:")}}a.j(hg(a,e));c&&(Se(a.K,d.i),of(a,Z(a,a.K)))}}function ng(a,b){b=Da(b);var c=b.match(/^(['"])(.*?)\1$/);c?1h[0].indexOf("+"))){var n=h[0]+":";h[2]&&(n+=" "+h[2]);a.j(n)}h[3]&&(g=h[3],f=null);h=a.ba;n=b;h.C=n.C;h.Sa=n.Sa;h.ha=n.ha;h.ca=n.ca;a.j(qf(a,b,g,f));e-=b.C-k;c++}}} +function gg(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.j(mf+b):(a.P&&(a.j("ended assemble at "+Z(a,a.ba)),a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.S=null;if(Ib(a)&&0p||"z"ma.length&&(a.j("note: only "+ma.length+" available"),da=ma.length);ha-=da;0>ha&&(null==ma[ma.length-1].C?(da=ha+da,ha=0):ha+=ma.length);var Bd= +[];"call"==xf&&(vb=1E5,Bd=["CALL"]);for(void 0!==wf&&a.j(da+" instructions earlier:");0=ma.length&&(ha=0);a.pa=da;zf++;vb--}}zf||(a.j("no "+yf+"history available"),a.pa=void 0)}else{var cb=We(a,la,a.ga);if(cb){var Ia=0,Cf="ds"==$a;if(ya){if("l"==ya.charAt(0))ya=ya.substr(1)||Qg,Ia=Je(a,ya);else{var Df=We(a,ya);Df&& +(Ia=Df.C-cb.C)}0>Ia&&(Ia=0);65536Hf;Hf++)Ff+=String.fromCharCode((vc%64|0)+32),vc/=64}Ja&&(Ja+="\n");Ja=Cf?Ja+(Ka+","):Ja+(la+": "+Ka+(0>Gf?" "+Ff:""))}Ja&&a.j(Ja);a.ca=Sg}}}}break;case "e":if("else"==g[0])break;var If,Jf,Kf= +g[0],Ed=g[1];"e"==Kf||"ew"==Kf?(If=a.Da,Jf=a.mb):Ed=null;if(null==Ed)a.j("edit memory commands:"),a.j("\tew [a] [...] edit words at address a");else{var wc=We(a,Ed,a.ga);if(wc)for(var Fd=2;FdId;){for(var La=null,Wg=256;65536>zb.C>>>0;){Jd.C=a.Da(zb,2);if(null==zb.C||!Wg--)break;if(!(Jd.C&1)){for(var Xg= +a,xc=Jd,Mf=null,Ab=xc.C,Nf=Ab,Kd=1;6>=Kd&&Ab;Kd++){if(2Tf)a.j("step commands:"),a.j("\tp\tstep over instruction"),a.j("\tpr\tstep over instruction with register update"); +else if(a.N)a.j("step in progress");else{var Uf=X(a.v.i);a.Da(Uf);a.N?(a.Fa(a.b,Uf,!0),kf(a)||(a.G&&gd(a.G),a.N=0)):og(a,Tf?"tr":"t")}break;case "r":if("reset"==b){a.G&&a.G.reset();break}nf(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Cb=+g[2];if(8==Cb||10==Cb||16==Cb)a.ca=Cb;else{a.j("invalid base: "+Cb);break}}a.j("default base: "+a.ca);break;case "cs":var Db;void 0!==g[3]&&(Db=+g[3]);switch(g[2]){case "int":a.v.ka=Db;break;case "start":a.v.Aa=Db;break;case "stop":a.v.ma=Db;break; +default:a.j("unknown cs option");break a}void 0!==Db&&Zc(a.v);a.j("checksums "+(a.v.A.Ga?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(dd(a.v,+g[2])||a.j("warning: using 1x multiplier, previous target not reached"));a.j("target speed: "+(a.v.ba.toFixed(2)+"Mhz")+" ("+a.v.ea+"x)");break;default:if(g[1]){a.j("unknown option: "+g[1]);break}case "?":a.j("debugger options:"),a.j("\tbase #\t\tset default base to #"),a.j("\tcs int #\tset checksum cycle interval to #"),a.j("\tcs start #\tset checksum cycle start count to #"), +a.j("\tcs stop #\tset checksum cycle stop count to #"),a.j("\tsp #\t\tset speed multiplier to #")}break;case "t":og(a,g[0],g[1]);break;case "u":of(a,g[1],g[2],8);break;case "v":if("var"==g[0]){lg(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.j((Ob||"PDP10")+" version 1.34.2 ("+a.v.qb+",RELEASE)");a.j(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){ng(a,b.substr(1));break}var Ld="commands:",Md;for(Md in qg)Ld+="\n"+Ca(Md,9)+qg[Md];pd(a)||(Ld+="\nnote: history disabled if no exec breakpoints"); +a.j(Ld);break;default:f=!0}f&&(a.j("unknown command: "+b),d=!1)}}catch(Wf){a.j("Debugger "+(Wf.stack||Wf.message)),d=!1}return d}function bd(a,b,c){b=Fe(a,b,c);for(var d in b)if(!gg(a,b[+d]))return!1;return!0} +var qg={"?":"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"},Zf=20,ag=85,$f=".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 CAM 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 JOV JCRY0 JCRY1 JCRY JFOV".split(" "), +af=0,bf=1,cf=2,df=3,ef=4,ff=5,gf=6,hf=7,$e="PC RA EA C0 C1 OV ND PD".split(" "),rg={},rf=(rg[28672]={0:101},rg[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:ag,11136:83,11264:91,11328:23,11392:24,11456:92,11520:86,11584:87,11648:89,11712:90},rg[32512]={6144:65,6400:59,6656:66,6912:60,7168:67,7424:61,7680:68,7936:62,8192:17,8448:18,8704:19,8960:Zf,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},rg[32256]={12288:71,12800:72,13312:73,13824:74,14336:75,14848:76,15360:77,15872:78},rg[29248]={24576:79,24640:80,25088:81,25152:82},rg[28700]={28672:93,28676:94,28680:95,28684:96,28688:97, +28692:98,28696:99,28700:100},rg),Vf=["","I","M","S"],Xf=" L E LE A GE N G".split(" "),Yf="N NE NA NN Z ZE ZA ZN C CE CA CN O OE OA ON".split(" "),bg={8:102,4:103,2:104,6:105,1:106},jf=1E3,mf=">> ";Xa(function(){for(var a=x(document,w,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;bvg){if(wg(d,this.M)){this.B=new G(this,"1.34.2",Fg);wg(this.B)&&(Gg(this,d),a=Hg,Ig(this.B));this.B.set(Cg,Fa());Jg(this.B);var e=this.b&&!this.K;if(a==Dg||nb("Click OK to restore the previous "+Ob+" machine state, or CANCEL to reset the machine.")){if(c=Bg(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?wg(d,g):("error"==f&&"no machine state"!= +g?(this.da("Error: "+g),"unable to verify user"==g&&(Qa(Kg,""),this.i=null)):this.j(f+": "+g),Ig(d),wg(d)?(c=Bg(d),e=!0):c=!1))}e&&zg(this,c?d:null)}else a==Hg&&d.clear()}else zg(this);delete this.M;delete this.I}e=ob(this.id);for(f=0;fa[1];a=a[2];this.S=!0;this.A.V=!0;var d=this.J.power;d&&(d.textContent="Shutdown");this.v&&(Lg(this,this.v,b,c,a),I(this,-2),this.v.Z());this.P&&(Gg(this,b),b.clear());!c&&this.B&&(this.B.clear(),delete this.B);this.w=0}; +function Gg(a,b){if(nb("There may be a problem with your "+Ob+" machine.\n\nTo help us diagnose it, click OK to send this "+Ob+" machine state to http://www.pcjs.org.")){var c=a.ba;a=a.i||"";b=b.toString();var d={};d.app=Ob;d.ver="1.34.2";d.url=c;d.user=a;d.type="bug";d.data=b;Ga("http://www.pcjs.org/api/v1/report",d,!0)}} +function pg(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new G(a,"1.34.2"),g=new G(a,"1.34.2",Ag),h=Fa();g.set(Cg,h);f.set(Cg,h);f.set(Mg,"1.34.2");f.set(Ng,window?window.location.href:null);f.set(Og,window?window.navigator.userAgent:"");a.v&&a.v.ia&&(c&&(b&&(a.v.A.Z=a.v.A.L),a.v.W()),d=a.v.ia(b,c),"object"===typeof d&&f.set(a.v.id,d),c&&(a.v.A.V=!1,!1===d&&(e=null)));for(var h=ob(a.id),k=0;k=d||30<=(c.Xa+=d))&&(e.textContent=c.A.L?c.aa.toFixed(2)+"Mhz":"Stopped",c.Xa=0)}if(a.u&&(a=a.u,b=b||0,a.M)){c=a.v.A.L;d=!!(a.v.B&8);if(0>=b||60<=(a.K+=b)){e=a.v.i;if(a.J.PC){var f=a.D&&a.D.ca||8,e=e||0,e=8==f?ta(e,void 0):q(e,void 0);a.J.PC.textContent!=e&&(a.J.PC.textContent=e)}a.K=0}-1>b?a.i=a.v.i:0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"), +a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$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(t){g=null,a=t.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ga(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],n,p=/( [a-z]+=)(['"])(.*?)\2/g;n=p.exec(f);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/, +"");a=a.replace(d[0],g);fh(a,b,c)}})}else c(a,null)} +function gh(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&x(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Aa(a))}function g(a){f("Error: "+a);n&&(--ch||fb(!0));n=!1}var h,k,n=!0;ch++;lb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var t=document.head||document.getElementsByTagName("head")[0],C=document.createElement("style");C.type="text/css";C.styleSheet?C.styleSheet.cssText=p:C.appendChild(document.createTextNode(p));t.appendChild(C)}d|| +(p=a,"pdp"==a.substr(0,3)&&(p="pdpjs"),d="/versions/"+p+"/1.34.2/components.xsl");p=function(e,k){k?dh(d,null,a,null,!1,f,function(a,e){e?(kb(b,d,a),f("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--ch||fb(!0)):g("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--ch|| +fb(!0)):g("invalid machine element: "+b):g("transformToFragment failed")):g("unable to transform XML: unsupported browser")):g(a)}):g(e)};"<"!=c.charAt(0)?dh(c,b,a,e,!0,f,p):eh(c,null,b,a,e,!1,f,p)}else g("missing machine element: "+b)}catch(ca){g(ca.message)}return n}window.embedPDP10=function(a,b,c,d){fb(!1);return gh("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){fb(!1);return gh("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return qb(b,a+".machine")}; +window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!tb[a]){for(var c=!0,d=tb,e=a,f=b.length,g=[],h=[],k="",n=null,p=0;p Date: Fri, 10 Mar 2017 11:22:51 -0800 Subject: [PATCH 4/6] Updated PDP-10 README files --- apps/pdp10/README.md | 3 +- apps/pdp10/tapes/README.md | 12 + apps/pdp10/tapes/diags/README.md | 12 + apps/pdp10/tapes/diags/klad/README.md | 17 + apps/pdp10/tapes/diags/klad/dakad/README.md | 2068 +++++++++++++++++++ modules/pdp10/lib/debugger.js | 1 + modules/pdp10/lib/macro10.js | 28 +- pubs/dec/pdp10/README.md | 12 +- versions/pdpjs/1.34.2/pdp10-dbg.js | 85 +- 9 files changed, 2187 insertions(+), 51 deletions(-) create mode 100644 apps/pdp10/tapes/README.md create mode 100644 apps/pdp10/tapes/diags/README.md create mode 100644 apps/pdp10/tapes/diags/klad/README.md create mode 100644 apps/pdp10/tapes/diags/klad/dakad/README.md diff --git a/apps/pdp10/README.md b/apps/pdp10/README.md index e8e7bce25..074a95d3b 100644 --- a/apps/pdp10/README.md +++ b/apps/pdp10/README.md @@ -7,6 +7,7 @@ permalink: /apps/pdp10/ PDP-10 Software --------------- -PCjs provides the following PDP-10 tests: +PCjs provides the following PDP-10 software: - [PDP-10 Opcode Tests](tests/) +- [PDP-10 Tape Software](tapes/) diff --git a/apps/pdp10/tapes/README.md b/apps/pdp10/tapes/README.md new file mode 100644 index 000000000..bc3edbe49 --- /dev/null +++ b/apps/pdp10/tapes/README.md @@ -0,0 +1,12 @@ +--- +layout: page +title: PDP-10 Tape Software +permalink: /apps/pdp10/tapes/ +--- + +PDP-10 Tape Software +-------------------- + +PCjs provides the following PDP-10 tape software: + +[PDP-10 Diagnostic Tapes](diags/) diff --git a/apps/pdp10/tapes/diags/README.md b/apps/pdp10/tapes/diags/README.md new file mode 100644 index 000000000..6dd39297a --- /dev/null +++ b/apps/pdp10/tapes/diags/README.md @@ -0,0 +1,12 @@ +--- +layout: page +title: PDP-10 Diagnostic Tapes +permalink: /apps/pdp10/tapes/diags/ +--- + +PDP-10 Diagnostic Tapes +----------------------- + +PCjs provides the following PDP-10 diagnostic tapes: + +[PDP-10 KLAD Diagnostic Tapes](klad/) diff --git a/apps/pdp10/tapes/diags/klad/README.md b/apps/pdp10/tapes/diags/klad/README.md new file mode 100644 index 000000000..c77993b2f --- /dev/null +++ b/apps/pdp10/tapes/diags/klad/README.md @@ -0,0 +1,17 @@ +--- +layout: page +title: PDP-10 KLAD Diagnostic Tapes +permalink: /apps/pdp10/tapes/diags/klad/ +--- + +PDP-10 KLAD Diagnostic Tapes +---------------------------- + +We have archived selected files from [PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html), +including: + +- [KA10 BASIC INSTRUCTION DIAGNOSTIC (MAINDEC-10-DAKAD-B-D)](dakad/) + +The Debugger command `a 100 http://archive.pcjs.org/apps/pdp10/tapes/diags/klad/dakadm.mac.html` can be used to test the +new [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) work-alike assembler being added to +the PDP-10 Emulator. diff --git a/apps/pdp10/tapes/diags/klad/dakad/README.md b/apps/pdp10/tapes/diags/klad/dakad/README.md new file mode 100644 index 000000000..4cc1c92d8 --- /dev/null +++ b/apps/pdp10/tapes/diags/klad/dakad/README.md @@ -0,0 +1,2068 @@ +--- +layout: page +title: PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC +permalink: /apps/pdp10/tapes/diags/klad/dakad/ +--- + +PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC +---------------------------------------- + +The **PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC** (MAINDEC-10-DAKAD-B-D), as extracted from the +[original file](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakaam.mac.html), is shown below. + +``` +SUBTTL DIAGNOSTIC PARAMETERS + +;ACCUMULATOR ASSIGNMENTS + +;CONTROL WORDS + +AROV=400000 ;ARITHMETIC OVERFLOW +CRY0=200000 ;CARRY 0 +CRY1=100000 ;CARRY 1 +FOV=40000 ;FLOATING OVERFLOW +BIS=20000 ;BYTE INTERRUPT +USERF=10000 ;USER MODE FLAG +EXIOT=4000 ;USER PRIV I/O FLAG +FXU=100 ;FLOATING UNDERFLOW +DCK=40 ;DIVIDE CHECK + + +;MACROS + +; STOP - USED FOR SCOPE LOOP, IF INSTRUCTION FAILS, CHANGE (JUMPA .+1) +; TO A (JUMPA X) TO CYCLE ON FAILING INSTRUCTION + +DEFINE STOP (A)< + HALT .+1 ;TEST FAILED IF PROGRAM HALTS HERE + JUMPA .+1 ;IF TEST FAILS, CHANGE THIS INSTRUCTION (JUMPA .+1) + ;TO JUMPA X(X IS THE ADDRESS OF THE FIRST + ;INSTRUCTION IN THE SUBTEST) TO LOOP ON ERROR + ;AND CHANGE HALT INSTRUCTION TO JUMPA .+1> + +; SFLAG - USED TO CLEAR ALL FLAGS THEN TO SET REQUESTED FLAG + +DEFINE SFLAG (A)< + MOVSI 1,A + JFCL 17,.+1 ;RESET ALL FLAGS + JRST 2,.+1(1) ;SET A FLAG> +SUBTTL DIAGNOSTIC SECTION + +START: SETZM USER# ;CLEAR USER CONTROL WORD + JSP 0,.+1 ;GET FLAGS + TLNE USERF ;IN USER MODE? + SETOM USER ;YES, SET USER CONTROL WORD + SKIPN MONFLG ;SPECIAL USER MODE? + SETZM USER ;YES, CLEAR USER CONTROL WORD + SKIPN USER + JRST C00 + SKIPL MONCTL + TTCALL 3,PGMNAM ;MENTION OUR NAME + JRST STARTA + +PGMNAM: ASCIZ/ +PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC (4) [DAKAD] +/ + +;BASIC INSTRUCTION TEST (3) +;THE TEST IS DESIGNED FOR INITIAL DEBUGGING OF +;PROCESSOR HARDWARE AND TO DETECT (SOLID) FAILURES +;IN THE FIELD. + +STARTA: JRST .+1 +C00: +;TESTING BEGINS HERE + +;IF ANY LOADING PROBLEMS OCCUR, START PROGRAM HERE. + +;NOTE: AN "*" IN THE COMMENT FIELD OF AN INSTRUCTION INDICATES THAT +; IT IS THE TESTED INSTRUCTION. + +SUBTTL TEST OF AC HARDWARE AND INDEX REGISTERS + +;********** + +;THIS TEST VERIFIES THAT AC1 IS ACCESSABLE +;IN THIS CASE, AC1 IS PRELOADED WITH 1. +;C(AC1) IS THEN CHECKED FOR A1. THIS TEST PASSES IF C(AC1)=1. +;IF THIS TEST FAILS, THE AC HARDWARE IS PROBABLY FAULTY + +C100: SETZ ;CLEAR AC0 + MOVEI 1,1 ;PRELOAD AC1 WITH 1 + CAIE 1,1 ;PASS IF C(AC1)=1 + STOP + +;********** + +;THIS TEST VERIFIES THAT AC2 IS ACCESSABLE. +;IN THIS CASE, AC2 IS PRELOADED WITH 2. +;C(AC2) IS THEN CHECKED FOR 2. THIS TEST PASSES IF C(AC2)=2. +;IF THIS TEST FAILS, THE AC HARDWARE IS PROBABLY FAULTY + +C200: MOVEI 2,2 ;PRELOAD AC2 WITH 2 + CAIE 2,2 ;PASS IF C(AC2)=2 + STOP + +;********** +;THIS TEST VERIFIES THAT AC4 IS ACCESSABLE. +;IN THIS CASE, AC4 IS PRELOADED WITH 4. +;C(AC4) IS THEN CHECKED FOR 4. THIS TEST PASSES IF C(AC4)=4. +;IF THIS TEST FAILS, THE AC HARDWARE IS PROBABLY FAULTY + +C300: MOVEI 4,4 ;PRELOAD AC4 WITH 4 + CAIE 4,4 ;PASS IF C(AC4)=4 + STOP + +;********** + +;THIS TEST VERIFIES THAT AC10 IS ACCESSABLE. +;IN THIS CASE, AC10 IS PRELOADED WITH 10. +;C(AC10) IS THEN CHECKED FOR 10. THIS TEST PASSES IF C(AC10)=10. +;IF THIS TEST FAILS, THE AC HARDWARE IS PROBABLY FAULTY + +C400: MOVEI 10,10 ;PRELOAD AC10 WITH 10 + CAIE 10,10 ;PASS IF C(AC10)=10 + STOP + +;********** +SN=500 + ZZ=-1 + +;THIS TEST VERIFIES THAT ALL ACS EXIST +;FIRST, EACH AC IS PRELOADED WITH ITS OWN ADDRESS; +;THEN, THE CONTENTS OF EACH AC IS CHECKED FOR ITS ADDRESS. +;IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS + +C500: REPEAT ^D16, +< ZZ=ZZ+1 + MOVEI ZZ,ZZ ;PRELOAD EACH AC WITH ITS ADDR> +PAGE + ZZ=20 + + REPEAT ^D16,< +;THIS TEST VERIFIES THAT ALL ACS EXIST. +;FIRST, EACH AC IS PRELOADED WITH ITS OWN ADDRESS; +;THEN, THE CONTENTS OF EACH AC IS CHECKED FOR ITS ADDRESS. +;IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS + +SN=SN+1 + ZZ=ZZ-1 + CAIE ZZ,ZZ ;CHECK THAT EACH AC CONTAINS ITS OWN ADDRESS + STOP + ;IN CASE OF FAILURE, LOOP TO C500 ADDRESS + +;********** +> +SN=600 + ZZ=0 + +;THIS TEST VERIFIES THAT AN ADDRESS WITHIN THE AC RANGE MAY BE ACCESSED AS +;EITHER AN AC OR A MEMORY LOCATION AND THAT EITHER REFERENCE REFERS TO THE +;SAME HARDWARE. EACH AC IS PRELOADED WITH ITS ADDRESS; THEN THE CONTENTS OF EACH +;AC IS CHECKED FOR ITS ADDRESS. IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS. + +C600: REPEAT ^D15, +< ZZ=ZZ+1 + MOVEI ZZ ;PRELOAD EACH AC WITH ITS ADDRESS + MOVEM ZZ ;BY REFERENCING EACH AC AS MEMORY.> + + ZZ=20 + + REPEAT ^D15,< +;THIS TEST VERIFIES THAT AN ADDRESS WITHIN THE AC RANGE MAY BE ACCESSED AS +;EITHER AN AC OR A MEMORY LOCATION AND THAT EITHER REFERENCE REFERS TO THE +;SAME HARDWARE. EACH AC IS PRELOADED WITH ITS ADDRESS +;THEN THE CONTENTS OF EACH AC IS CHECKED FOR ITS ADDRESS. +;IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS. + +SN=SN+1 + ZZ=ZZ-1 + CAIE ZZ,ZZ ;CHECK THAT EACH AC CONTAINS ITS OWN ADDRESS + STOP + ;IN CASE OF FAILURE, LOOP TO C600 ADDRESS + +;********** +> +SN=700 + ZZ=0 + +C700: REPEAT ^D15,< +;THIS TEST VERIFIES THAT THE INDEX REGISTERS ARE ACCESSABLE. +;FIRST, AN INDEX REGISTER IS PRELOADED WITH ITS ADDRESS; THEN, +;IT IS REFERENCED AS AN INDEX REGISTER. IF IT CONTAINS ITS ADDRESS, THIS TEST PASSES. +;THIS TEST IS REPEATED 15 TIMES IN ORDER TO TEST EACH INDEX REGISTER. + +SN=SN+1 + ZZ=ZZ+1 + MOVEI ZZ,ZZ ;PRELOAD INDEX REGISTER WITH ITS ADDRESS + CAIE ZZ,(ZZ) ;PASS IF INDEX REGISTER CONTAINS ITS ADDRESS + STOP + +;********** +> +SN=1000 + ZZ=0 + +C1000: REPEAT ^D15,< +;THIS TEST VERIFIES THAT ALL INDEX REGISTERS INDEX CORRECTLY. +;FIRST, BOTH HALVES OF THE INDEX REGISTER ARE PRELOADED WITH ITS ADDRESS. +;THEN, THE INDEX REGISTER IS REFERENCED. IT IS THEN CHECKED FOR ITS ADDRESS IN BOTH HALVES. +;IF IT CONTAINS ITS ADDRESS IN BOTH HALVES THIS TEST PASSES. +;THIS TEST IS REPEATED 15 TIMES IN ORDER TO TEST EACH INDEX REGISTER + +SN=SN+1 + ZZ=ZZ+1 + MOVEI ZZ,ZZ ;PRELOAD BOTH HALVES OF INDEX REG WITH ITS ADDRESS + HRLI ZZ,ZZ ;PASS IF INDEX REGISTER CONTAINS ITS ADDRESS + CAME ZZ,(ZZ) ;IN BOTH HALVES + STOP + +;********** +> +SUBTTL TEST OF INDEX REGISTER ADDRESSING + +;********** + +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH A 0, +;THE FINAL RESULT IN AC3 SHOULD BE 0. IF C(AC3)=0, THIS TEST PASSES. + +C1100: SETOM 3 ;PRELOAD AC3 WITH -1,,1 + SETZM 1 ;PRELOAD AC1 WITH 0 + MOVEI 2,1 ;SETUP INDEX REGISTER 2 WITH 1 + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + SKIPE 3 ;TEST INDEXING + STOP + +;********** + +SN=1200 + ZZ=0 + +C1200: REPEAT ^D18,< +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH A +;FLOATING 1. THE FINAL RESULT IN AC3 SHOULD BE A FLOATING 1. +;IF C(AC3)=A FLOATING 1, THIS TEST PASSES. + +SN=SN+1 + ZZ=ZZ+ZZ + IFE ZZ,<ZZ=1> + SETOM 3 ;PRELOAD AC3 WITH -1,,-1 + MOVEI 1,ZZ ;PRELOAD AC1 WITH FLOATING 1 + MOVEI 2,1 ;SETUP INDEX REGISTER + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + CAIE 3,ZZ ;TEST INDEXING + STOP + +;********** +> +SN=1300 + ZZ=0 + +C1300: REPEAT ^D18,< +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH A +;FLOATING 1, THE FINAL RESULT IN AC3 SHOULD BE A FLOATING 1. +;IF C(AC3)=A FLOATING 1, THIS TEST PASSES. + +SN=SN+1 + ZZ=ZZ+ZZ + IFE ZZ,<ZZ=1> + SETOM 3 ;PRELOAD AC3 WITH -1,,-1 + MOVSI 1,ZZ ;PRELOAD AC1 WITH FLOATING 1 + MOVEI 2,1 ;SETUP INDEX REGISTER + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + CAME 3,[ZZ,,0] ;TEST INDEXING + STOP + +;********** +> +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH -1,,-1, +;THE FINAL RESULT IN AC3 SHOULD BE -1,,-1. IF C(AC3)=-1,,-1, THIS TEST PASSES. + +C1400: SETZM 3 ;PRELOAD AC3 WITH 0 + SETOM 1 ;PRELOAD AC1 WITH -1,,-1 + MOVEI 2,1 ;SETUP INDEX REGISTER + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + CAME 3,[-1,,-1] ;TEST INDEXING + STOP + +;********** + +SN=1500 + ZZ=0 + +C1500: REPEAT ^D18,< +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH A +;FLOATING 0, THE FINAL RESULT IN AC3 SHOULD BE A FLOATING 0. +;IF C(AC3)=A FLOATING 0, THIS TEST PASSES. + +SN=SN+1 + ZZ=<ZZ+ZZ+1>&777777 + IFE <ZZ-1>,<ZZ=777776> + SETZM 3 ;PRELOAD AC3 WITH 0 + HRROI 1,ZZ ;PRELOAD AC1 WITH FLOATING 0 + MOVEI 2,1 ;SETUP INDEX REGISTER + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + CAME 3,[-1,,ZZ] ;TEST INDEXING + STOP + +;********** +> +SN=1600 + ZZ=0 + +C1600: REPEAT ^D18,< +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED. THE MOVE INSTRUCTION +;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3. +;SINCE INDEX REGISTER 2 WAS PRELOADED WITH A 1 AND AC1 WAS PRELOADED WITH A +;FLOATING 0, THE FINAL RESULT IN AC3 SHOULD BE A FLOATING 0. +;IF C(AC3)=A FLOATING 0, THIS TEST PASSES. + +SN=SN+1 + ZZ=<ZZ+ZZ+1>&777777 + IFE <ZZ-1>,<ZZ=777776> + SETZM 3 ;PRELOAD AC3 WITH 0 + HRLOI 1,ZZ ;PRELOAD AC1 WITH FLOATING 0 + MOVEI 2,1 ;SETUP INDEX REGISTER + MOVE 3,(2) ;*FWT FROM INDEXED LOCATION + CAME 3,[ZZ,,-1] ;TEST INDEXING + STOP + +;********** +> +;VERIFY INDEXING WHERE 'E' IS NON-ZERO + +SN=1700 + ZZ=-1 + XX=-10 + +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, THE INDEX REG IS SET-UP WITH MOVEI ZZ+1,ZZ-XX, +;WHERE ZZ+1 IS THE INDEX REG. THE AC IS PRELOADED WITH ITS OWN ADDRESS, 0,,ZZ. +;CAIE IS USED TO TEST THE INDEXING OPERATION. +;IF THE RESULT IN C(AC)=XX+C(ZZ+1 - RIGHT), THIS TEST PASSES. +;XX+C(ZZ+1 - RIGHT) SHOULD = ZZ. + +C1700: REPEAT ^D15, +<SN=SN+1 + ZZ=ZZ+1 + XX=XX+3 + MOVEI ZZ+1,ZZ-XX ;SETUP INDEX REGISTER + MOVEI ZZ,ZZ ;PRELOAD AC WITH 0,,ZZ + CAIE ZZ,XX(ZZ+1) ;*TEST INDEXING + STOP + +;********** +> +PAGE +SN=2000 + ZZ=-1 + XX=-20 + +;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY. +;IN THIS TEST, THE INDEX REG IS SET-UP WITH MOVEI ZZ+1,ZZ-XX, +;WHERE ZZ+1 IS THE INDEX REG. INDEXING IS TESTED BY LOADING +;THE AC VIA MOVEI ZZ,XX(ZZ+1), WHERE XX+C(ZZ+1)=ZZ. +;IF THE RESULT IN THE AC EQUALS 0,,ZZ, THIS TEST PASSES. + +C2000: REPEAT ^D15, +<SN=SN+1 + ZZ=ZZ+1 + XX=XX+5 + MOVEI ZZ+1,ZZ-XX ;SETUP INDEX REGISTER + MOVEI ZZ,XX(ZZ+1) ;*TEST INDEXING + CAIE ZZ,ZZ ;PASS IF C(AC)=0,,ADDRESS OF AC + STOP + +;********** +> +SUBTTL TEST OF EXCH INSTRUCTION + +;********** + +;THIS TEST VERIFIES THAT EXCH MOVES C(E) INTO AC AND +;MOVES C(AC) INTO E. +;IN THIS CASE, AC=E=0 AND C(AC)=C(E). HENCE, THE FINAL RESULT +;IN AC0 SHOULD BE 0. IF C(AC)=0, THE TEST PASSES. + +C2100: SETZ ;PRELOAD AC,E WITH 0 + EXCH ;*EXCH SHOULD PLACE 0 INTO AC0 + SKIPE ;PASS IF C(AC0)=0 + STOP + +;********** + +;THIS TEST VERIFIES THAT EXCH MOVES C(E) INTO AC AND +;MOVES C(AC) INTO E. +;IN THIS CASE, AC=E=-1,,-1 AND C(AC)=C(E). HENCE, THE FINAL RESULT +;IN AC0 SHOULD BE -1,,-1. IF C(AC)=-1,,-1, THE TEST PASSES. + +C2200: SETO ;PRELOAD AC,E WITH -1,,-1 + EXCH ;*EXCH SHOULD PLACE -1,,-1 INTO AC0 + CAME [-1] ;PASS IF C(AC0)=-1,,-1 + STOP + +;********** +;THIS TEST VERIFIES THAT EXCH MOVES C(E) INTO AC AND +;MOVES C(AC) INTO E. +;IN THIS CASE, C(AC)=-1,,0 AND C(E)=0,,-1. HENCE, THE FINAL RESULT +;IN THE AC SHOULD BE 0,,-1 AND THE RESULT IN E SHOULD BE -1,,0, +;IF THESE RESULTS OCCUR, THE TEST PASSES. + +C2400: MOVSI -1 ;PRELOAD AC WITH -1,,0 + MOVEI 1,-1 ;PRELOAD E WITH 0,,-1 + EXCH 1 ;*EXCH SHOULD PLACE 0,,-1 INTO THE AC AND -1,,0 INTO E + CAME 1,[-1,,0] ;PASS IF C(E)=-1,,0 + STOP +C2410: CAME 0,[0,,-1] ;PASS IF C(AC)=0,,-1 + STOP + +;********** + +;THIS TEST VERIFIES THAT EXCH MOVES C(E) INTO AC AND +;MOVES C(AC) INTO E. +;IN THIS CASE, C(AC)=0,,-1 AND C(E)=-1,,0. HENCE, THE FINAL RESULT +;IN THE AC SHOULD BE -1,,0 AND THE RESULT IN E SHOULD BE 0,,-1. +;IF THESE RESULTS OCCUR, THE TEST PASSES. + +C2700: MOVEI -1 ;PRELOAD AC WITH 0,,-1 + MOVSI 1,-1 ;PRELOAD E WITH -1,,0 + EXCH 1 ;*EXCH SHOULD PLACE -1,,0 INTO THE AC AND 0,,-1 INTO E + CAIE 1,-1 ;PASS IF C(E)=0,,-1 + STOP +C2710: CAME ,[XWD -1,0] ;PASS IF C(AC)=-1,,0 + STOP + +;********** +;THIS TEST IS A RELIABILITY CHECK OF EXCH. +;FIRST, AC, E ARE PRELOADED WITH 252525,,252525. THERE, EXCH IS +;EXECUTED 7 TIMES. THE AC IS THEN CHECKED FOR 252525,,252525. +;IF C(AC)=C(E)=252525,,252525, THIS TEST PASSES. +;IN THIS TEST AC=E=AC0 + +C3000: MOVE [252525252525] ;PRELOAD AC,E WITH 252525,,252525 + REPEAT 7, +< EXCH ;*EXCH SHOULD PLACE 252525,,252525 INTO AC0> + CAME [252525252525] ;PASS IF C(AC0)=252525,,252525 + STOP + +;********** +PAGE +;THIS TEST VERIFIES THAT EXCH MOVES C(AC) INTO E AND C(E) INTO THE AC. +;IN THIS CASE, C(AC)=0 AND C(E)=-1,,-1. EXCH IS EXECUTED 7 TIMES; THEN, +;THE AC IS CHECKED FOR -1,,-1 AND E IS CHECKED FOR 0. IF EITHER OF THESE +;RESULTS ARE NOT FOUND, THIS TEST FAILS. + +C3100: SETZ ;PRELOAD AC WITH 0 + SETO 1,0 ;PRELOAD E WITH -1,,-1 + REPEAT 7, +< EXCH 1 ;*EXCH SHOULD EXCHANGE C(AC) AND C(E)> + CAME [-1] ;PASS IF C(AC)=-1,,-1 + STOP +C3110: CAME 1,[0] ;PASS IF C(E)=0 + STOP + +;********** +SUBTTL TEST OF MOVEM INSTRUCTION + +;THIS TEST VERIFIES THAT MOVEM PLACES C(AC) INTO E AND DOES NOT MODIFY C(AC) +;IN THIS CASE, C(AC)=-1,,-1 AND C(E)=0. HENCE, THE RESULT IN AC AND E SHOULD +;BE -1,,-1. IF C(AC) AND C(E)=-1,,-1, THIS TEST PASSES + +C3200: SETO ;PRELOAD AC WITH -1,,-1 + SETZ 1,0 ;PRELOAD E WITH 0 + MOVEM 1 ;*MOVEM SHOULD PLACE -1,,-1 INTO E + CAME 1,[-1] ;PASS IF C(E)=-1,,-1 + STOP +C3210: CAME 0,[-1] ;PASS IF C(AC)=-1,,-1 + STOP + +;********** +SUBTTL TEST OF JFCL INSTRUCTION AND ARITHMETIC FLAGS + +;********** + +;THIS TEST VERIFIES THAT JFCL 17,.+1 ALWAYS RETURNS TO THE NEXT SEQUENTIAL INSTRUCTION +;IF JFCL SKIPS THE NEXT INSTRUCTION, THIS TEST FAILS + +C3300: MOVE [HALT .+3] ;THIS INSTRUCTION SHOULD NOT AFFECT THE TEST + JFCL 17,.+1 ;*JFCL SHOULD RETURN TO NEXT SEQUENTIAL INSTRUCTION + CAIA ;SKIP HALT INSTRUCTION IF JFCL PASSES + STOP + +;********** + +;THIS TEST VERIFIES THAT JFCL 17,.+1 ALWAYS CLEARS THE CRY0 FLAG. +;ADDI IS USED TO SET CRY0. THEN, JFCL 17,.+1 IS EXECUTED TO CLEAR CRY0. +;JFCL 4,.+2 IS EXECUTED TO DETERMINE WHETHER CRY0 WAS RESET BY THE PREVIOUS JFCL. +;THIS TEST FAILS IF JFCL 17,.+1 DID NOT CLEAR CRY0 + +C3400: MOVE [-1] ;PRELOAD AC WITH -1,,-1 + ADDI 1 ;SET CRY0 FLAG + JFCL 17,.+1 ;*CLEAR ARITHMETIC FLAGS + JFCL 4,.+2 ;PASS IF CRY0 WAS RESET BY PREVIOUS INSTRUCTION + SKIPA ;SKIP HALT IF CRY0 WAS CLEARED + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 17,.+1 ALWAYS CLEARS THE CRY1 FLAG. +;ADDI IS USED TO SET CRY1. THEN, JFCL 17,.+1 IS EXECUTED TO CLEAR CRY1. +;JFCL 4,.+2 IS EXECUTED TO DETERMINE WHETHER CRY1 WAS RESET BY THE PREVIOUS JFCL. +;THIS TEST FAILS IF JFCL 17,.+1 DID NOT CLEAR CRY1 + +C3500: MOVE [-1] ;PRELOAD AC WITH -1,,-1 + ADDI 1 ;SET CRY1 FLAG + JFCL 17,.+1 ;*CLEAR ARITHMETIC FLAGS + JFCL 2,.+2 ;PASS IF CRY1 WAS RESET BY PREVIOUS INSTRUCTION + SKIPA ;SKIP HALT IF CRY1 WAS CLEARED + STOP + +;********** + +;THIS TEST VERIFIES THAT JFCL 17,.+1 ALWAYS CLEARS THE AROV FLAG. +;ADDI IS USED TO SET AROV. THEN, JFCL 17,.+1 IS EXECUTED TO CLEAR AROV. +;JFCL 4,.+2 IS EXECUTED TO DETERMINE WHETHER AROV WAS RESET BY THE PREVIOUS JFCL. +;THIS TEST FAILS IF JFCL 17,.+1 DID NOT CLEAR AROV + +C3600: MOVSI 400000 ;PRELOAD AC WITH -1,,-1 + ADD [XWD 400000,0] ;SET AROV FLAG + JFCL 17,.+1 ;*CLEAR ARITHMETIC FLAGS + JFCL 10,.+2 ;PASS IF AROV WAS RESET BY PREVIOUS INSTRUCTION + SKIPA ;SKIP HALT IF AROV WAS CLEARED + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 0, IS A NO-OP. +;IN THIS TEST, ADD IS USED TO SET CRY0. THEN JFCL 0,.+2 IS EXECUTED. +;IF JFCL 0,.+2 DOES NOT SKIP THE NEXT INSTRUCTION, THIS TEST PASSES + +C3700: MOVSI 400000 ;PRELOAD AC WITH MOST NEGATIVE NUMBER + ADD [-1] ;SET CRY0 FLAG + JFCL .+2 ;*JFCL SHOULD RETURN TO NEXT SEQUENTIAL INSTRUCTION + SKIPA ;PASS IF JFCL DID NOT SKIP + STOP + +;********** + +;THIS TEST VERIFIES THAT JFCL 0, IS A NO-OP. +;IN THIS TEST, ADD IS USED TO SET CRY1. THEN JFCL 0,.+2 IS EXECUTED. +;IF JFCL 0,.+2 DOES NOT SKIP THE NEXT INSTRUCTION, THIS TEST PASSES + +C4000: MOVSI 200000 ;PRELOAD AC WITH MOST NEGATIVE NUMBER + ADD [XWD 200000,0] ;SET CRY1 FLAG + JFCL .+2 ;*JFCL SHOULD RETURN TO NEXT SEQUENTIAL INSTRUCTION + SKIPA ;PASS IF JFCL DID NOT SKIP + STOP + +;********** +;THIS TEST VERIFIES THAT ADDI HAS THE ABILITY TO SET AN ARITHMETIC FLAG AND +;THAT 'JFCL 17,.+2' JUMPS WHENEVER ANY ARITHMETIC FLAG IS SET. +;IN THIS TEST, ADDI SHOULD SET CRY0 AND CRY1. THEN, JFCL SHOULD SKIP +;BECAUSE A FLAG WAS SET BY ADDI +;IF THIS TEST FAILS, ADDI COULD HAVE FAILED TO SET A FLAG OR +;JFCL COULD HAVE FAILED TO JUMP WHEN A FLAG WAS SET + +C4100: MOVE [-1] ;PRELOAD AC WITH ALL ONES + ADDI 1 ;*ADDI SHOULD SET CRY0/1 FLAGS + JFCL 17,.+2 ;*JFCL SHOULD JUMP BECAUSE FLAGS ARE SET + STOP + +;********** + +;THIS TEST VERIFIES THAT CAI DOES NOT CLEAR ANY ARITHMETIC FLAGS. +;FIRST, CRY0 AND CRY1 ARE SET BY ADDI; THEN CAI IS EXECUTED. +;JFCL SHOULD JUMP BECAUSE FLAGS ARE SET. IF JFCL DOES NOT JUMP, +;THE FLAGS WERE CLEARED BY CAI. HENCE, CAI FAILED + +C4200: MOVE [-1] ;PRELOAD AC WITH -1,,-1 + ADDI 1 ;SET CYR0/1 FLAGS + CAI 17,17 ;*CAI SHOULD NOT CLEAR FLAGS + JFCL 17,.+2 ;PASS IF CAI CLEARED FLAGS + STOP + +;********** +;THIS TEST VERIFIES THAT ADDI HAS THE ABILITY TO SET AN ARITHMETIC FLAG AND +;THAT 'JFCL 17,.+2' JUMPS WHENEVER ANY ARITHMETIC FLAG IS SET. +;IN THIS TEST, ADDI SHOULD SET CRY0 AND CRY1. THEN JFCL SHOULD SKIP +;BECAUSE A FLAG WAS SET BY ADDI +;IF THIS TEST FAILS, ADDI COULD HAVE FAILED TO SET A FLAG OR +;JFCL COULD HAVE FAILED TO JUMP WHEN A FLAG WAS SET + +C4300: MOVE [-1] ;PRELOAD AC WITH ALL ONES + ADDI 1 ;*ADDI SHOULD SET CRY1 FLAGS + JFCL 2,.+2 ;*JFCL SHOULD JUMP BECAUSE CRY1 FLAG IS SET + STOP + +;********** + +;THIS TEST VERIFIES THAT ADDI HAS THE ABILITY TO SET AN ARITHMETIC FLAG AND +;THAT 'JFCL 17,.+2' JUMPS WHENEVER ANY ARITHMETIC FLAG IS SET. +;IN THIS TEST, ADDI SHOULD SET CRY0 AND CRY1. THEN, JFCL SHOULD SKIP +;BECAUSE A FLAG WAS SET BY ADDI +;IF THIS TEST FAILS, ADDI COULD HAVE FAILED TO SET A FLAG OR +;JFCL COULD HAVE FAILED TO JUMP WHEN A FLAG WAS SET + +C4400: MOVE [-1] ;PRELOAD AC WITH ALL ONES + ADDI 1 ;*ADDI SHOULD SET CRY0 FLAG + JFCL 4,.+2 ;*JFCL SHOULD JUMP BECAUSE CRY0 FLAG IS SET + STOP + +;********** +;THIS TEST VERIFIES THAT ADDI HAS THE ABILITY TO SET AN ARITHMETIC FLAG AND +;THAT 'JFCL 17,.+2' JUMPS WHENEVER ANY ARITHMETIC FLAG IS SET. +;BECAUSE A FLAG WAS SET BY ADD +;IF THIS TEST FAILS, ADDI COULD HAVE FAILED TO SET A FLAG OR +;JFCL COULD HAVE FAILED TO JUMP WHEN A FLAG WAS SET + +C4500: MOVSI 400000 ;PRELOAD AC WITH ALL ONES + ADD [XWD 400000,0] ;*ADD SHOULD SET AROV FLAG + JFCL 10,.+2 ;*JFCL SHOULD JUMP BECAUSE AROV FLAG IS SET + STOP + +;********** + +;THIS TEST VERIFIES THAT JFCL 17,.+1 ALWAYS CLEARS THE FLOATING OVERFLOW FLAG (FOV). +;FIRST JFCL 17,.+1 IS EXECUTED TO CLEAR FOV. THEN, JFCL 1,.+2 IS EXECUTED TO DETERMINE +;WHETHER FOV WAS CLEARED. IF FOV WAS CLEAR, THIS TEST PASSES + +C4600: JFCL 17,.+1 ;*CLEAR ARITHMETIC FLAGS + JFCL 1,.+2 ;PASS IF FOV WAS CLEARED + SKIPA ;SKIP HALT IF TEST PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 13, DOES NOT RESET CRY0. +;FIRST CRY0 AND CRY1 ARE SET BY ADDI; THEN, JFCL 13,.+2 IS EXECUTED +;TO CLEAR ALL ARITHMETIC FLAGS EXCEPT CRY0. +;THIS TEST PASSES IF JFCL 13,.+1 DID NOT RESET CRY0. + +C4700: MOVE [-1] ;RELOAD AC WITH -1,,-1 + ADDI 1 ;SET CRY0/1 + JFCL 13,.+1 ;*JFCL 13, SHOULD NOT RESET CRY0 + JFCL 4,.+2 ;FAIL IF CRY 0 WAS RESET + STOP + +;********** + +;THIS TEST VERIFIES THAT JFCL 15, DOES NOT RESET CRY1. +;FIRST CRY0 AND CRY1 ARE SET BY ADDI; THEN, JFCL15,.+2 IS EXECUTED +;TO CLEAR ALL ARITHMETIC FLAGS EXCEPT CRY1. +;THIS TEST PASSES IF JFCL 15,.+1 DID NOT RESET CRY1. + +C5000: MOVE [-1] ;PRELOAD AC WITH -1,,-1 + ADDI 1 ;SET CRY0/1 + JFCL 15,.+1 ;*JFCL15, SHOULD NOT RESET CRY0 + JFCL 2,.+2 ;FAIL IF CRY1 WAS RESET + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 17, DOES NOT RESET AROV. +;FIRST AROV IS SET BY ADD; THEN, JFCL 17,.+2 IS EXECUTED +;TO CLEAR ALL ARITHMETIC FLAGS EXCEPT AROV. +;THIS TEST PASSES IF JFCL 17,.+1 DID NOT RESET AROV. + +C5100: MOVSI 400000 ;PRELOAD AC WITH -1,,-1 + ADD [XWD 400000,0] ;SET AROV + JFCL 7,.+1 ;*JFCL 17, SHOULD NOT RESET AROV + JFCL 10,.+2 ;FAIL IF AROV WAS RESET + STOP + +;********** + +;THIS TEST VERIFIES THAT ADD OF 0 TO 0 WILL NOT SET AROV. +;FIRST, ALL FLAGS ARE RESET, THEN 0 IS ADDED TO 0 VIA ADD. +;AROV IS THEN CHECKED. IF AROV IS SET, THIS TEST FAILS. + +C5200: JFCL 17,.+1 ;RESET ARITHMETIC FLAGS + SETZ ;PRELOAD AC,E WITH 0 + ADD ;*ADD SHOULD NOT SET AROV + JFCL 10,.+2 ;PASS IF AROV WAS RESET + SKIPA ;SKIP HALT IF ADD PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT ADD OF 0 TO 0 WILL NOT SET CRY0. +;FIRST, ALL FLAGS ARE RESET, THEN 0 IS ADDED TO 0 VIA ADD. +;CRY0 IS THEN CHECKED. IF CRY0 IS SET, THIS TEST FAILS. + + +C5300: SETZ ;RESET ARITHMETIC FLAGS + JFCL 17,.+1 ;PRELOAD AC,E WITH 0 + ADD ;*ADD SHOULD NOT SET CRY0 + JFCL 4,.+2 ;PASS IF CRY0 WAS RESET + SKIPA ;SKIP HALT IF ADD PASSED + STOP + +;********** + +;THIS TEST VERIFIES THAT ADD OF 0 TO 0 WILL NOT SET CRY1. +;FIRST, ALL FLAGS ARE RESET, THEN 0 IS ADDED TO 0 VIA ADD. +;CRY1 IS THEN CHECKED. IF CRY1 IS SET, THIS TEST FAILS. + +C5400: SETZ ;RESET ARITHMETIC FLAGS + JFCL 17,.+1 ;PRELOAD AC,E WITH 0 + ADD ;*ADD SHOULD NOT SET CRY1 + JFCL 2,.+2 ;PASS IF CRY1 WAS RESET + SKIPA ;SKIP HALT IF ADD PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT THE 30X AND THE 31X INSTRUCTION GROUPS DO NOT AFFECT +;THE ARITHMETIC FLAGS. FIRST, THE FLAGS ARE CLEARED AND AC0 IS CLEARED; THEN, CAI +;AND CAM ARE EXECUTED. THE FLAGS ARE THEN CHECKED. IF ANY OF THE FLAGS ARE SET, +;THIS TEST FAILS AND CAI OR CAM IS CONSIDERED TO HAVE ERRONEOUSLY SET THE FLAGS + +C5500: JFCL 17,.+1 ;CLEAR ALL FLAGS + SETZ ;CLEAR AC,0 + CAI ;*CAI SHOULD NOT SET ANY ARITHMETIC FLAG + CAM [-1] ;*CAM SHOULD NOT SET ANY ARITHMETIC FLAG + JFCL 17,.+2 ;FAIL IF ANY FLAG WAS SET + SKIPA ;SKIP HALT IF TEST PASSED + STOP + +;********** + +;THIS TEST VERIFIES THAT THE BOOLEAN INSTRUCTION GROUPS DO NOT AFFECT +;THE ARITHMETIC FLAGS. FIRST THE FLAGS ARE CLEARED AND AC0 IS CLEARED; THEN, XOR [0] +;AND XOR [-1] ARE EXECUTED. THE FLAGS ARE THEN CHECKED. IF ANY OF THE FLAGS ARE SET, +;THIS TEST FAILS AND XOR IS CONSIDERED TO HAVE ERRONEOUSLY SET THE FLAGS + +C5600: JFCL 17,.+1 ;CLEAR ALL FLAGS + SETO ;CLEAR AC,0 + XOR [0] ;*XOR SHOULD NOT SET ANY ARITHMETIC FLAG + XOR [-1] ;*XOR SHOULD NOT SET ANY ARITHMETIC FLAG + JFCL 17,.+2 ;FAIL IF ANY FLAG WAS SET + SKIPA ;SKIP HALT IF TEST PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT THE AOBJX INSTRUCTION GROUP DOES DO NOT AFFECT +;THE ARITHMETIC FLAGS. FIRST THE FLAGS ARE CLEARED AND AC0 IS CLEARED; THEN, AOBJN +;AND AOBJP ARE EXECUTED. THE FLAGS ARE THEN CHECKED. IF ANY OF THE FLAGS ARE SET, +;THIS TEST FAILS AND AOBJN OR AOBJP IS CONSIDERED TO HAVE ERRONEOUSLY SET THE FLAGS + +C5700: SETO ;CLEAR ALL FLAGS + JFCL 17,.+1 ;CLEAR AC,0 + AOBJN .+1 ;*AOBJN SHOULD NOT SET ANY ARITHMETIC ARITHMETIC + AOBJP .+1 ;*AOBJP SHOULD NOT SET ANY ARITHMETIC FLAG + JFCL 17,.+2 ;FAIL IF ANY FLAG WAS SET + SKIPA ;SKIP HALT IF TST PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT SKIP DOES NOT AFFECT THE FLAGS. +;FIRST, THE ARITHMETIC FLAGS ARE CLEARED; THEN, SKIP IS EXECUTED. +;IF SKIP SETS AROV, CRYO, CRY1 OR FOV, THIS TEST FAILS. + +C5701: JFCL 17,.+1 ;CLEAR ALL FLAGS + SKIP 0,[-1] ;*SKIP SHOULD NOT SET ANY FLAGS + JFCL 17,.+2 ;FAIL IF ANY FLAG IS SET + SKIPA ;PASS IF NO FLAG IS SET + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMP DOES NOT AFFECT THE FLAGS. +;FIRST, THE ARITHMETIC FLAGS ARE CLEARED; THEN, JUMP IS EXECUTED. +;IF JUMP SETS AROV, CRYO, CRY1 OR FOV, THIS TEST FAILS. + +C5702: JFCL 17,.+1 ;CLEAR ALL FLAGS + JUMP 0,[-1] ;*JUMP SHOULD NOT SET ANY FLAGS + JFCL 17,.+2 ;FAIL IF ANY FLAG IS SET + SKIPA ;PASS IF NO FLAG IS SET + STOP + +;********** +SUBTTL TEST OF JRST INSTRUCTION AND ARITHMETIC FLAGS + +;********** + +;THIS TEST VERIFIES THAT 'JRST, 0' DOES NOT SET ANY FLAGS. +;FIRST THE ARITHMETIC FLAGS ARE RESET; THEN, 'JRST 0,.+1' IS EXECUTED +;THE AROV,CRY0 AND CRY1 FLAGS ARE THEN CHECKED. IF ANY +;OF THESE FLAGS ARE SET, THIS TEST FAILS + +C6000: JFCL 17,.+1 ;RESET ALL FLAGS + JRST .+1 ;*JRST SHOULD NOT SET ANY FLAGS + JFCL 16,.+2 ;PASS IF NO FLAGS ARE SET + SKIPA ;SKIP HALT IF JRST PASSES + STOP + +;********** + +;THIS TEST VERIFIES THAT 'MOVE 2,2' DOES NOT SET ANY FLAGS. +;FIRST, THE ARITHMETIC FLAGS ARE RESET; THEN, 'MOVE 2,2' IS EXECUTED. +;THE FOV,AROV,CRY0 AND CRY1 FLAGS ARE THEN CHECKED. IF ANY +;OF THESE FLAGS ARE SET, THIS TEST FAILS + +C6100: JFCL 17,.+1 ;RESET ALL FLAGS + MOVE 2,2 ;*MOVE SHOULD NOT SET ANY FLAGS + JFCL 17,.+2 ;PASS IF NO FLAGS ARE SET + SKIPA ;SKIP HALT IF MOVE PASSED + STOP + +;********** +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 SPECIFIES THE CRY0 FLAG. +;FIRST, ALL FLAGS ARE RESET; THEN AC1 IS SET TO SPECIFY CRY0. +;NEXT, JRST 2,.+1(1) IS EXECUTED TO SET CRY0. CRY0 IS THEN CHECKED. IF +;CRY0 IS SET, THIS TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6200: JFCL 17,.+1 ;CLEAR ALL FLAGS + SFLAG CRY0 ;SET CRY0 FLAG + JFCL 4,.+2 ;PASS IF CRY0 IS SET + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 CONTAIN 0. HENCE, JRST 2,.+1(1) +;SHOULD RESET THE ARITHMETIC FLAGS. FIRST, THE CRY0/1, FLAGS ARE SET BY ADDI; +;THEN THE FLAGS SHOULD BE CLEARED BY JRST 2,.+1. IF CRY1 WAS CLEARED, THE +;TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6300: MOVE [-1] ;PRELOAD AC0 WITH -1,,-1 + ADDI 1 ;SET CRY0/1 FLAGS + SFLAG 0 ;RESET ALL ARITHMETIC FLAGS + JFCL 2,.+2 ;PASS IF CRY1 IS RESET + SKIPA ;SKIP HALT INSTRUCTION IF TEST PASSED + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 CONTAIN 0. HENCE, JRST 2,.+1(1) +;SHOULD RESET THE ARITHMETIC FLAGS. FIRST, THE CRY0/1, FLAGS ARE SET BY ADD +;THEN THE FLAGS SHOULD BE CLEARED BY JRST 2,.+1. IF AROV WAS CLEARED, THE +;TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6400: MOVSI 400000 ;PRELOAD AC0 WITH -1,,-1 + ADD [-1] ;SET CRY0 AND AROV FLAGS + SFLAG 0 ;RESET ALL ARITHMETIC FLAGS + JFCL 10,.+2 ;PASS IF AROV IS RESET + SKIPA ;SKIP HALT INSTRUCTION IF TEST PASSED + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 SPECIFIES THE AROV FLAG. +;FIRST, ALL FLAGS ARE RESET; THEN AC1 SET TO SPECIFY AROV. +;NEXT, JRST 2,.+1(1) IS EXECUTED TO SET AROV. AROV IS THEN CHECKED. IF +;AROV IS SET, THIS TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6500: SFLAG AROV ;SET AROV FLAG + JFCL 10,.+2 ;PASS IF AROV WAS SET + STOP + +;********** +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 SPECIFIES THE CRY1 FLAG. +;FIRST, ALL FLAGS ARE RESET; THEN AC1 SET TO SPECIFY CRY1. +;NEXT, JRST 2,.+1(1) IS EXECUTED TO SET CRY1. CRY1 IS THEN CHECKED. IF +;CRY1 IS SET, THIS TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6600: SFLAG CRY1 ;SET CRY1 FLAG + JFCL 2,.+2 ;PASS IF CRY1 WAS SET + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 SPECIFIES THE FOV FLAG. +;FIRST, ALL FLAGS ARE RESET; THEN AC1 SET TO SPECIFY FOV. +;NEXT, JRST 2,.+1(1) IS EXECUTED TO SET FOV. FOV IS THEN CHECKED. IF +;FOV IS SET, THIS TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C6700: SFLAG FOV ;SET FOV FLAG + JFCL 1,.+2 ;PASS IF FOV WAS SET + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 0, SHOULD NEVER JUMP. +;FIRST, FOV IS SET VIA JRST2, ;THEN JFCL 0, +;IS EXECUTED. IF JFCL 0, DOES NOT SKIP, THIS TEST PASSES + +C7000: SFLAG FOV ;SET FOV FLAG + JFCL ,.+2 ;*JFCL SHOULD NOT JUMP + SKIPA ;PASS IF JFCL DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 CONTAINS 0. HENCE, JRST 2,.+1(1) +;SHOULD RESET THE ARITHMETIC FLAGS. FIRST, THE CRY0, FLAG IS SET BY JRST 2,.+1(1) +;WITH C(AC1)=CRY0. THEN, THE FLAGS SHOULD BE CLEARED BY JRST 2,.+1 WITH C(AC1)=0. +;IF CRY0 WAS CLEARED, THE TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C7100: SFLAG CRY0 ;SET CRY0 FLAGS + SETZ 1, ;SETUP MASK TO CLEAR ARITHMETIC FLAGS + JRST 2,.+1(1) ;*RESET ARITHMETIC FLAGS + JFCL 4,.+2 ;PASS IF CRY0 FLAG WAS RESET + SKIPA ;SKIP HALT INSTRUCTION IF TEST PSSED + STOP + +;********** +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 CONTAINS 0. HENCE, JRST 2,.+1(1) +;SHOULD RESET THE ARITHMETIC FLAGS. FIRST, THE FOV, FLAG IS SET BY JRST 2,.+1(1) +;WITH C(AC1)=FOV. THEN, THE FLAGS SHOULD BE CLEARED BY JRST 2,.+1 WITH C(AC1)=0. +;IF FOV WAS CLEARED, THE TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C7200: SFLAG FOV ;SET FOV FLAG + SETZ 1, ;SETUP MASK TO CLEAR ARITHMETIC FLAGS, + JRST 2,.+1(1) ;*RESET ARITHMETIC FLAGS + JFCL 1,.+2 ;PASS IF FOV FLAG WAS RESET + SKIPA ;SKIP HALT INSTRUCTION IF TEST PSSED + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2,.+1(1) WILL SET THE ARITHMETIC FLAG +;SPECIFIED IN AC1. IN THIS CASE, AC1 CONTAINS 0. HENCE, JRST 2,.+1(1) +;SHOULD RESET THE ARITHMETIC FLAGS. FIRST, THE ARITHMETIC FLAGS ARE RESET BY +;JFCL 17,.+1. THEN, THE FLAGS SHOULD BE CLEARED BY JRST 2,.+1. +;IF ALL THE ARITHMETIC FLAGS WERE CLEARED, +;THE TEST PASSES. OTHERWISE, JRST 2,.+1 IS FAULTY + +C7300: JFCL 17,.+1 ;CLEAR FLAGS + SETZ 1, ;SETUP MASK TO CLEAR ARITMETIC FLAGS + JRST 2,.+1(1) ;*RESET ARITHMETIC FLAGS + JFCL 17,.+2 ;PASS IF ALL FLAGS ARE RESET + SKIPA ;SKIP HALT INSTRUCTION IF TEST PASSED + STOP + +;********** +SUBTTL TEST OF JSP INSTRUCTION + +;********** + +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS AND PC IN THE AC. +;IN THIS CASE, THE FLAGS ARE RESET; THEN, JSP IS EXECUTED. THE AC IS THEN +;CHECKED FOR ITS CONTENTS NON-ZERO. IF C(AC)=0, IT INDICATES +;THAT NEITHER THE FLAGS NOR THE PC WAS SAVED. HENCE, THIS TEST FAILS. + +C7400: SETZB 1 ;CLEAR AC AND SETUP MASK TO RESET FLAGS + JRST 2,.+1(1) ;RESET FLAGS + JSP .+1 ;*JSP SHOULD STORE FLAGS AND PC IN THE AC + SKIPN ;PASS IF C(AC) IS NON-ZERO + STOP ;IT DID NOT STORE ANY FLAGS OR PC + +;********** + +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE PC IN THE RIGHT HALF OF THE AC. +;IN THIS CASE, THE AC IS CLEARED, THEN, JSP IS EXECUTED. THE RIGHT HALF OF +;THE AC IS THEN CHECKED FOR ITS CONTENTS NON-ZERO. IF C(AC RIGHT HALF) +;IS NON-ZERO, IT INDICATED THAT THE PC WAS SAVED; AND THIS TEST PASSES. + +C7500: SETZ ;CLEAN AC + JSP .+1 ;*JSP SHOULD STORE THE PC IN THE AC + TRNN -1 ;PASS IF C(AC) IN NON-ZERO + STOP + +;********** +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS IN THE LEFT HALF OF THE AC. +;FIST, THE AC IS CLEARED; THEN, SOME FLAGS ARE SET AND JSP IS EXECUTED. +;THE LEFT HALF OF THE AC IS CHECKED FOR ITS CONTENTS NON-ZERO TO DETERMINE +;WHETHER THE FLAGS WERE SAVED. IF C(AC-LEFT) IS NON-ZERO, THIS TEST PASSES + +C7600: SETZM 0 ;CLEAR AC + MOVSI 1,740000 ;SET UP MASK TO SET FLAGS + JRST 2,.+1(1) ;SET SOME ARITHMETIC FLAGS + JSP .+1 ;*JSP SHOULD STORE FLAGS IN THE AC + TLNN -1 ;PASS IF C(AC) IS NON-ZERO + STOP + +;********** + +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS IN THE LEFT HALF OF THE AC. +;FIRST, THE AC IS CLEARED; THEN, THE AROV FLAG IS SET AND JSP IS EXECUTED. +;THEN, THE AROV FLAG BIT OF +;THE LEFT HALF OF THE AC IS CHECKED FOR ITS CONTENTS NON-ZERO TO DETERMINE +;WHETHER THE AROV FLAG WAS SAVED. IF THE AROV FLAG BIT OF THE AC IS SET, THIS TEST PASSES + +C7700: SETZM 0 ;CLEAR THE AC + SFLAG AROV ;SET AROV FLAG + JSP .+1 ;*JSP SHOULD SAVE THE FLAGS IN THE AC-LEFT + TLNN AROV ;PASS IF AROV WAS SAVED + STOP + +;********** +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS IN THE LEFT HALF OF THE AC. +;FIRST, THE AC IS CLEARED; THEN, THE CRY0 FLAG IS SET AND JSP IS EXECUTED. +;THEN, THE CRY0 FLAG BIT OF +;THE LEFT HALF OF THE AC IS CHECKED FOR ITS CONTENTS NON-ZERO TO DETERMINE +;WHETHER THE CRY0 FLAG WAS SAVED. IF THE CRY0 FLAG BIT OF THE AC IS SET, THIS TEST PASSES + +C10000: SETZM 0 ;CLEAR THE AC + SFLAG CRY0 ;SET CRY0 FLAG + JSP .+1 ;*JSP SHOULD SAVE THE FLAGS IN THE AC-LEFT + TLNN CRY0 ;PASS IF CRY0 WAS SAVED + STOP + +;********** + +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS IN THE LEFT HALF OF THE AC. +;FIRST, THE AC IS CLEARED; THEN, THE CRY1 FLAG IS SET AND JSP IS EXECUTED. +;THEN, THE CRY1 FLAG BIT OF +;THE LEFT HALF OF THE AC IS CHECKED FOR ITS CONTENTS NON-ZERO TO DETERMINE +;WHETHER THE FLAG WAS SAVED. IF THE CRY1 FLAG BIT OF THE AC IS SET, THIS TEST PASSES + +C10100: SETZ ;CLEAR AC + SFLAG CRY1 ;SET CRY1 FLAG + JSP .+1 ;*JSP SHOULD SAVE THE FLAGS IN THE AC-LEFT + TLNN CRY1 ;PASS IF AROV WAS SAVED + STOP + +;********** +;THIS TEST VERIFIES THAT JSP ALWAYS STORES THE FLAGS IN THE LEFT HALF OF THE AC. +;FRIST, THE AC IS CLEARED; THEN, THE FOV FLAG IS SET AND JSP IS EXECUTED. +;THEN, THE FOV FLAG BIT OF THE LEFT HALF OF THE AC IS CHECKED FOR +;ITS CONTENTS NON-ZERO TO DETERMINE WHETHER THE FOV FLAG WAS SAVED. +;IF THE FOV FLAG BIT OF THE AC IS SET, THIS TEST PASSES + +C10200: SETZ ;CLEAR THE AC + SFLAG FOV ;SET FOV FLAG + JSP .+1 ;*JSP SHOULD SAVE THE FLAGS IN THE AC-LEFT + TLNN FOV ;PASS IF FOV WAS SAVED + STOP + +;********** + +;THIS TEST VERIFIES THAT JSP WILL STORE ONLY FLAGS THAT EXIST. +;I.E. RESET FLAGS WILL NOT BE SET IN THE AC. ONLY FLAGS THAT ARE +;CLEARABLE BY JRSTF WILL BE CHECKED HERE. FIRST ALL CLEARABLE +;FLAGS ARE RESET BY JRSTF; THEN JSP IS EXECUTED. THE AC IS THEN CHECKED. +;IF ANY CLEARABLE FLAGS ARE SET IN THE AC, THIS TEST FAILS. + +C10300: SFLAG 0 ;CLEAR ALL CLEARABLE FLAGS + JSP .+1 ;*JSP SHOULD NOT STORE CLEARABLE FALGS + TLNE 761777 ;FAIL IF ANY CLEARABLE FLAG IS SET + STOP + +;********** +;THIS TEST VERIFIES THAT JSP ALWAYS JUMPS. +;IN THIS TEST, JSP .+2 IS EXECUTED. IF JSP JUMPS, THE TEST PASSES; +;OTHERWISE, THIS TEST HALTS + +C10400: JSP .+2 ;*JSP SHOULD ALWAYS JUMP + STOP + +;********** +SUBTTL TEST JRST INSTRUCTION + +;********** + +;THIS TEST VERIFIES THAT JRST ALWAYS JUMPS. +;IN THIS TEST, JRST .+2 IS EXECUTED. IF JRST JUMPS, THE TEST PASSES; +;OTHERWISE, THIS TEST HALTS + +C10500: JRST .+2 ;*JRST 0, SHOULD ALWAYS JUMP + STOP + +;********** +SUBTTL TEST OF AOBJX INSTRUCTIONS + +;********** + +;THIS TEST VERIFIES THAT AOBJN ALWAYS ADDS 1 TO BOTH HALVES OF THE AC. +;FIRST, THE AC IS CLEARED; THEN, AOBJN IS EXECUTED AND THE AC IS CHECKED +;FOR 1,,1. IF C(AC)=1,,1, THIS TEST PASSES. + +C11200: SETZ ;CLEAR THE AC + AOBJN .+1 ;*AOBJN SHOULD ADD 1 TO BOTH HALVES OF THE AC + CAME [XWD 1,1] ;PASS IF C(AC)=1,,1 + STOP + +;********** + +;THIS TEST VERIFIES THAT AOBJP ALWAYS ADDS 1 TO BOTH HALVES OF THE AC. +;FIRST, THE AC IS CLEARED; THEN AOBJP IS EXECUTED AND THE AC IS CHECKED +;FOR 1,,1. IF C(AC)=1,,1, THIS TEST PASSES. + +C11300: MOVE [XWD 377777,377777] ;PRELOAD AC WITH 377777,,377777 + AOBJP .+1 ;*AOBJP SHOULD ADD, TO BOTH HALVES OF THE AC + CAME [XWD 400000,400000] ;PASS IF C(AC)=400000,400000 + STOP + +;********** +;THIS TEST VERIFIES THAT AOBJN WILL NOT JUMP WHEN C(AC) IS POSITIVE +;FIRST, THE AC IS CLEARED; AND AOBJN IS EXECUTED. AOBJN SHOULD NOT JUMP +;BECAUSE C(AC) IS POSITIVE. IF AOBJN JUMPS, THIS TEST FAILS + +C11400: SETZ ;CLEAR THE AC + AOBJN .+2 ;*AOBJN SHOULD NOT JUMP WHEN C(AC) IS POSITIVE + SKIPA ;PASS IF AOBJN DOES NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT AOBJP WILL JUMP WHEN C(AC) IS POSITIVE +;FIRST, THE AC IS CLEARED; AND AOBJP IS EXECUTED. AOBJP SHOULD JUMP +;BECAUSE C(AC) IS POSITIVE. IF AOBJP DOES NOT JUMP, THIS TEST FAILS + +C11500: SETZ ;CLEAR THE AC + AOBJP .+2 ;*AOBJP SHOULD JUMP BECAUSE C(AC) IS POSITIVE + STOP + +;********** +;THIS TEST VERIFIES THAT AOBJN WILL JUMP WHEN C(AC) IS NEGATIVE +;FIRST, THE AC IS PRELOADED WITH 400000,,0; AND AOBJN IS EXECUTED. AOBJN SHOULD JUMP +;BECAUSE C(AC) IS NEGATIVE. IF AOBJN DOES NOT JUMP, THIS TEST FAILS + +C11600: MOVE [XWD 400000,400000] ;PRELOAD AC WITH 400000,,400000 + AOBJN .+2 ;*AOBJN SHOULD JUMP BECAUSE C(AC) IS NEGATIVE + STOP + +;********** + +;THIS TEST VERIFIES THAT AOBJP WILL NOT JUMP WHEN C(AC) IS NEGATIVE. FIRST, +;THE AC IS PRELOADED WITH 400000,,0; AND AOBJP IS EXECUTED. AOBJP SHOULD NOT JUMP +;BECAUSE C(AC) IS NEGATIVE. IF AOBJP JUMPS, THIS TEST FAILS + +C11700: MOVE [XWD 400000,400000] ;PRELOAD AC WITH 400000,,400000 + AOBJP .+2 ;*AOBJP SHOULD NOT JUMP BECAUSE C(AC) IS NEGATIVE + SKIPA ;PASS IF AOBJP DOES NOT JUMP + STOP + +;********** +;THIS TEST VERIFIES THAT THERE IS A CARRY FROM BIT 18 TO BIT 17 OF THE AC ON AOBJN. +;THE AC IS PRELOADED WITH -1,,-1; THEN AOBJN IS EXECUTED. AOBJN SHOULD ADD ONE +;TO BOTH HALVES OF THE AC, GENERATING A CARRY FROM BIT 18 TO BIT 17. IF A +;CARRY WAS GENERATED, THIS TEST PASSES + +C12000: SETO ;PRELOAD AC WITH -1,, -1 + AOBJN .+1 ;*AOBJN SHOULD GENERATE A CARRY FROM BIT 18 TO 17 + CAME [1,,0] ;PASS IF C(AC)=1,,0 (CARRY WAS GENERATED) + STOP + +;********** +SUBTTL TEST SETTING OF ARITHMETIC FLAGS VIA MOVNX AND MOVMX + +;THIS TEST VERIFIES THAT MOVNI SETS CRY0 AND CRY1 FLAGS ONLY WHEN THE DATA IS 0. +;FIRST, THE ARITHMETIC FLAGS ARE RESET; THEN, MOVNI IS EXECUTED WITH DATA OF ZEROS. +;THE ARITHMETIC FLAGS ARE CHECKED. +; CRY0/1 ARE SET AND AROV AND FOV RESET, THIS TEST PASSES. + +C12100: JFCL 17,.+1 ;CLEAR FLAGS + MOVNI 0 ;* MOVNI 0 SHOULD SET CRY0/1 + JCRY0 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY1 .+2 ;PASS IF CRY1 IS SET + STOP + JOV .+2 ;PASS IF AROV RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV RESET + SKIPA + STOP + +;********** + +;THIS TEST VERIFIES THAT MOVN WILL NOT SET ARITHMETIC FLAGS WHEN THE DATA IS -1,,-1. +;FIRST, THE FLAGS ARE RESET; THEN, MOVN [-1,,-1] IS EXECUTED. +;THE ARITHMETIC FLAGS ARE CHECKED. +;IF ANY ARITHMETIC FLAG IS SET, THIS TEST FAILS. + +C12200: JFCL 17,.+1 ;CLEAR FLAGS + MOVN [-1] ;*MOVN [-1,,-1] SHOULD SET ARITHMETIC FLAGS + JFCL 17,.+2 ;FAIL IF AN ARITHMETIC FLAG IS SET + SKIPA ;SKIP HALT INSTRUCTION IF MOVN PASSED. + STOP + +;********** +;THIS TEST VERIFIES THAT MOVN WILL SET THE AROV AND +;CRY1 FLAGS ONLY WHEN THE DATA IS 400000,,0 +;FIRST, THE FLAGS ARE RESET; THEN, MOVN [400000,,0] IS EXECUTED. +;THE ARITHMETIC FLAGS ARE CHECKED. +;IF AROV AND CRY1 ARE SET AND CRY0 AND FOV ARE RESET, THIS TEST PASSES. + +C12300: JFCL 17,.+1 ;CLEAR ARITHMETIC FLAGS + MOVN [XWD 400000,0] ;*MOVN [400000,,0] SHOULD SET AROV AND CRY1 ONLY + JOV .+2 ;PASS IF AROV IS SET + STOP + JCRY1 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY0 .+2 ;PASS IF CRY0 IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** + +;THIS TEST VERIFIES THAT MOVM WILL SET THE AROV AND +;CRY1 FLAGS ONLY WHEN THE DATA IS 400000,,0 +;FIRST, THE FLAGS ARE RESET; THEN, MOVM [400000,,0] IS EXECUTED. +;THE ARITHMETIC FLAGS ARE CHECKED. +;IF AROV AND CRY1 ARE SET AND CRY0 AND FOV ARE RESET, THIS TEST PASSES. + +C12301: JFCL 17,.+1 ;CLEAR ARITHMETIC FLAGS + MOVM [XWD 400000,0] ;*MOVM [400000,,0] SHOULD SET AROV AND CRY1 ONLY + JOV .+2 ;PASS IF AROV IS SET + STOP + JCRY1 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY0 .+2 ;PASS IF CRY0 IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** +SUBTTL TEST OF AOS AND SOS INSTRUCTIONS + +;********** + +;THIS TEST VERIFIES THAT AOS ADDS 1 TO MEMORY AND DOES NOT SKIP. +;FIRST, E IS CLEARED; THEN, AOS IS EXECUTED. NEXT E IS CHECKED FOR 1. +;IF C(E) IS NOT 1 OR AOS SKIPPED, THIS TEST FAILS + +C12600: SETZ ;CLEAR E + AOS ;*AOS SHOULD ADD 1 TO C(E) AND NOT SKIP + CAIE 1 ;PASS IF C(E)=0,,1 ANDAOS DID NOT SKIP + STOP + +;********** + +;THIS TEST VERIFIES THAT AOS ADDS 1 TO MEMORY AND DOES NOT SKIP. +;FIRST, E IS PRELOADED WITH -1,,-1; THEN, AOS IS EXECUTED. NEXT E IS CHECKED FOR 0. +;IF C(E) IS NOT 0 OR AOS SKIPPED, THIS TEST FAILS + +C12700: SETO ;PRELOAD E WITH -1,,-1 + AOS ;*AOS SHOULD ADD 1 TO C(E) AND NOT SKIP + CAIE ;PASS IF C(E)=0,,0 AND AOS DID NOT SKIP + STOP + +;********** +;THIS TEST VERIFIES THAT SOS SUBTRACTS 1 FROM MEMORY AND DOES NOT SKIP. +;FIRST, E IS CLEARED; THEN, SOS IS EXECUTED. NEXT E IS CHECKED FOR -1,,-1. +;IF C(E) IS NOT -1,,-1 OR SOS SKIPPED, THIS TEST FAILS + +C13100: SETZ ;CLEAR E + SOS ;*SOS SHOULD SUBTRACT 1 FROM C(E) AND NOT SKIP + CAME [-1] ;PASS IF C(E)=-1,,-1 AND SOS DID NOT SKIP + STOP + +;********** + +;THIS TEST VERIFIES THAT SOS SUBTRACTS 1 FROM MEMORY AND DOES NOT SKIP. +;FIRST, E IS PRELOADED WITH A; THEN, SOS IS EXECUTED. NEXT E IS CHECKED FOR 0. +;IF C(E) IS NOT 0 OR SOS SKIPPED, THIS TEST FAILS + +C13200: MOVEI 1 ;PRELOAD E WITH 1 + SOS ;*SOS SHOULD SUBTRACT 1 FROM C(E) AND DID NOT SKIP + CAIE 0 ;PASS IF C(E)=0 AND SOS DID NOT SKIP + STOP + +;********** +;THIS TEST VERIFIES THAT SOS SETS CRY0/1 FLAGS IF C(E) IS A NON-ZERO NUMBER OTHER +;THAN 400000,,0. IN THIS CASE, C(E)=1. FIRST THE FLAGS ARE RESET; THEN +;SOS IS EXECUTED. THE FLAGS ARE CHECKED. IF CRY0 AND CRY1 ARE SET +;AND AROV AND FOV ARE RESET, THIS TEST PASSES. + +C13300: JFCL 17,.+1 ;RESET ARITHMETIC FLAGS + MOVEI 1 ;PRELOAD E WITH 1 + SOS ;*SOS SHOULD SET CRY0/1 + JCRY0 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY1 .+2 ;PASS IF CRY1 IS SET + STOP + JOV .+2 ;PASS IF AROV IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** + +;THIS TEST VERIFIES THAT AOS SETS CRY0 AND CRY1 FLAG IF C(E) IS -1,,-1 +;FIRST THE FLAGS ARE RESET; THEN +;AOS IS EXECUTED. THE FLAGS ARE CHECKED. +;IF CRY0 AND CRY1 ARE SET AND AROV AND FOV ARE RESET, THIS TEST PASSES. + +C13400: JFCL 17,.+1 ;RESET ARITHMETIC FLAGS + SETO ;PRELOAD E WITH 1 + AOS ;*AOS SHOULD SET CRY0 AND CRY1 + JCRY0 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY1 .+2 ;PASS IF CRY1 IS SET + STOP + JOV .+2 ;PASS IF AROV IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** +SUBTTL TEST OF INTERACTION OF JFCL, JRST, AND JSP WITH ARITHMETIC FLAGS + +;********** + +;THIS TEST VERIFIES THAT JFCL 1, WILL ALWAYS CLEAR FOV FLAG. +;FIRST, FOV IS SET VIA JRST 2, ;THEN JFCL 1,.+1 IS EXECUTED TO CLEAR FOV. +;IF FOV WAS CLEARED, THIS TEST PASSES. + +C13600: SFLAG FOV ;SET FOV FLAG + JFCL 1,.+1 ;*JFCL SHOULD RESET FOV + JFCL 1,.+2 ;PASS IF FOV IS RESET + SKIPA ;SKIP HALT IF JFCL 1,.+1 PASSED + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2, CAN SET FXU AND JSP CAN SAVE FXU IN THE AC. +;FIRST, FXU IS SET VIA JRST 2, ;THEN, JSP IS EXECUTED. THE AC IS CHECKED +;FOR FXU. IF FXU IS SET, THIS TEST PASSES; OTHERWISE, EITHER JRST 2, OR JSP FAILED. + +C13700: SFLAG FXU ;*SET FXU FLAG + JSP .+1 ;*STORE FXU FLAG IN AC + TLNN FXU ;PASS IF FXU IS SET IN THE AC + STOP + +;********** +;THIS TEST VERIFIES THAT JRST 2, CAN RESET FXU AND JSP CAN SAVE FXU IN THE AC. +;FIRST, FXU IS SET; THEN, FXU IS RESET VIA JRST 2,. NEXT, JSP IS EXECUTED; AND +;THE AC IS CHECKED FOR FXU RESET. IF FXU IS RESET IN THE AC, THIS TEST PASSES; +;OTHERWISE, JRST 2, FAILED TO CLEAR FXU OR JSP STORED FXU INCORECTLY. + +C14000: SFLAG FXU ;SET FXU FLAG + SFLAG ;*RESET FXU FLAG + JSP .+1 ;*STORE FXU FLAG IN THE AC + TLNE FXU ;PASS IF FXU IS RESET IN THE AC + STOP + +;********** + +;THIS TEST VERIFIES THAT JRST 2, CAN SET DCK AND JSP CAN SAVE DCK IN THE AC. +;FIRST, DCK IS SET VIA JRST 2, ;THEN JSP IS EXECUTED. THE AC IS CHECKED +;FOR DCK. IF DCK IS SET, THIS TEST PASSES, OTHERWISE JRST 2, OR JSP FAILED. + +C14100: SFLAG DCK ;*SET DCK FLAG + JSP .+1 ;*STORE FXU FLAG IN AC + TLNN DCK ;PASS IF FXU IS SET IN THE AC + STOP + +;********** +;THIS TEST VERIFIES THAT JRST 2, CAN RESET DCK AND JSP CAN SAVE DCK IN THE AC. +;FIRST, FXU IS SET; THEN, DCK IS RESET VIA JRST 2,. NEXT, JSP IS EXPECTED; AND +;THE AC IS CHECKED FOR DCK RESET. IF DCK IS RESET IN THE AC, THIS TEST PASSES; +;OTHERWISE, JRST 2, FAILED TO CLEAR DCK OR JSP STORED DCK INCORRECTLY. + +C14200: SFLAG DCK ;SET DCK FLAG + SFLAG ;*RESET DCK FLAG + JSP .+1 ;*STORE DCK FLAG IN THE AC + TLNE DCK ;PASS IF DCK IS RESET IN THE AC + STOP + +;********** +SUBTTL TEST OF JUMPX INSTRUCTIONS + +;********** + +;THIS TEST VERIFIES THAT JUMPL IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS NEGATIVE. IN THIS TEST, THE AC CONTAINS -1,,-1. HENCE, +;JUMPL SHOULD JUMP. IF JUMPL JUMPS, THIS TEST PASSES. + +C14500: SETO ;PRELOAD AC WITH -1,,-1 + JUMPL .+2 ;*JUMPL SHOULD JUMP BECAUSE C(AC) IS NEGATIVE + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMPL IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS NEGATIVE. IN THIS TEST, THE AC CONTAINS 0. HENCE, +;JUMPL SHOULD NOT JUMP. IF JUMPL DOES NOT JUMP, THIS TEST PASSES. + +C14600: SETZ ;PRELOAD AC WITH 0 + JUMPL .+2 ;*JUMPL SHOULD NOT JUMP + SKIPA ;PASS IF JUMPL DOES NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMPE IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC)=0. IN THIS TEST, THE AC CONTAINS 0. HENCE, +;JUMPE SHOULD JUMP. IF JUMPE JUMPS, THIS TEST PASSES. + +C14700: SETZ ;PRELOAD AC WITH 0 + JUMPE .+2 ;*JUMPE SHOULD JUMP + STOP + +;********** +;THIS TEST VERIFIES THAT JUMPN IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS NON-ZERO. IN THIS TEST, THE AC CONTAINS 1. HENCE, +;JUMPN SHOULD JUMP. IF JUMPN JUMPS, THIS TEST PASSES. + +C15000: MOVEI 1 ;PRELOAD AC WITH 1 + JUMPN .+2 ;*JUMPN SHOULD JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMPE IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC)=0. IN THIS TEST, THE AC CONTAINS 2. HENCE, +;JUMPL SHOULD NOT JUMP. IF JUMPE DOES NOT JUMP, THIS TEST PASSES. + +C15100: MOVEI 2 ;PRELOAD AC WITH 2 + JUMPE .+2 ;*JUMPE SHOULD NOT JUMP + SKIPA ;PASS IF JUMPE DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMPN IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS NON-ZERO. IN THIS TEST, THE AC CONTAINS 0. HENCE, +;JUMPN SHOULD NOT JUMP. IF JUMPN DOES NOT JUMP, THIS TEST PASSES. + +C15200: SETZ ;PRELOAD AC WITH 0 + JUMPN .+2 ;*JUMPN SHOULD NOT JUMP + SKIPA ;PASS IF JUMPN DID NOT JUMP + STOP + +;********** +;THIS TEST VERIFIES THAT JUMPG IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS GREATER THAN 0. IN THIS TEST, THE AC CONTAINS 1. HENCE, +;JUMPG SHOULD JUMP. IF JUMPG JUMPS, THIS TEST PASSES. + +C15300: MOVEI 1 ;PRELOAD AC WITH 1 + JUMPG .+2 ;*JUMPG SHOULD JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT JUMPG IS DATA DEPENDENT. IT WILL JUMP IF AND ONLY IF +;C(AC) IS GREATER THAN 0. IN THIS TEST, THE AC CONTAINS -1,,0. HENCE, +;JUMPG SHOULD NOT JUMP. IF JUMPG DOES NOT JUMP, THIS TEST PASSES. + +C15400: MOVSI -1 ;PRELOAD AC WITH -1,,0 + JUMPG .+2 ;*JUMPG SHOULD NOT JUMP + SKIPA ;PASS IF JUMPG DID NOT JUMP + STOP + +;********** +SUBTTL TEST OF AOJ AND SOJ INSTRUCTIONS + +;********** + +;THIS TEST VERIFIES THAT AOJ ADDS 1 TO THE AC AND DOES NOT JUMP. +;FIRST, THE AC IS PRELOADED WITH 0; THEN, AOJ IS EXECUTED. NEXT, THE +;AC IS CHECKED FOR 1. IF C(AC) IS NOT 1 OR AOJ SKIPPED, THIS TEST FAILS. + +C15500: SETZ ;PRELOAD AC WITH 0 + AOJ .+2 ;*AOJ SHOULD ADD 1 TO THE AC AND NOT JUMP + CAIE 1 ;PASS IF C(AC)=1 AND AOJ DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT AOJ ADDS 1 TO THE AC AND DOES NOT JUMP. +;FIRST, THE AC IS PRELOADED WITH -1,,-1; THEN, AOJ IS EXECUTED. NEXT, THE +;AC IS CHECKED FOR 0. IF C(AC) IS NOT 0 OR AOJ SKIPPED, THIS TEST FAILS. + +C15600: SETO ;PRELOAD AC WITH 0 + AOJ .+2 ;*AOJ SHOULD ADD 1 TO THE AC AND NOT JUMP + CAIE 0 ;PASS IF C(AC)=1 AND AOJ DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT SOJ SUBTRACTS 1 FROM THE AC AND DOES NOT JUMP. +;FIRST, THE AC IS PRELOADED WITH 0; THEN, SOJ IS EXECUTED. NEXT, THE +;AC IS CHECKED FOR -1,,-1. IF C(AC) IS NOT -1,,-1 OR SOJ SKIPPED, THIS TEST FAILS. + +C15700: SETZ ;PRELOAD AC WITH 0 + SOJ .+2 ;*SOJ SHOULD SUBTRACT 1 FROM THE AC AND NOT JUMP + CAME [-1] ;PASS IF C(AC)=-1,,-1 AND SOJ DID NOT JUMP + STOP + +;********** +;THIS TEST VERIFIES THAT SOJ SUBTRACTS 1 FROM THE AC AND DOES NOT JUMP. +;FIRST, THE AC IS PRELOADED WITH -1,,-1; THEN, SOJ IS EXECUTED. NEXT, THE +;AC IS CHECKED FOR -1,,-2. IF C(AC) IS NOT -1,,-2 OR SOJ SKIPPED, THIS TEST FAILS. + +C16000: SETO ;PRELOAD AC WITH -1,,-1 + SOJ .+2 ;*SOJ SHOULD SUBTRACT 1 FROM THE AC AND NOT JUMP + CAME [-2] ;PASS IF C(AC)=-1,,-2 AND SOJ DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT SOJ SUBTRACTS 1 FROM THE AC AND DOES NOT JUMP. +;FIRST, THE AC IS PRELOADED WITH 0,,1; THEN, SOJ IS EXECUTED. NEXT, THE +;AC IS CHECKED FOR 0. IF C(AC) IS NOT 0 OR SOJ SKIPPED, THIS TEST FAILS. + +C16100: MOVEI 1 ;PRELOAD AC WITH 1 + SOJ .+2 ;*SOJ SHOULD SUBTRACT 1 FROM THE AC AND NOT JUMP + CAIE 0 ;PASS IF C(AC)=0 AND SOJ DID NOT JUMP + STOP + +;********** +;THIS TEST VERIFIES THAT SOJ AC, FOLLOWED BY AOJ AC, HAS NO NET EFFECT ON C(AC). +;IN THIS CASE, THE AC IS PRELOADED WITH 0; THEN, SOJ AC, FOLLOWED BY AOJ. +;AC, IS REPEATED 7 TIMES. THE AC IS THEN CHECKED FOR ITS ORIGINAL CONTENTS, 0. +;IF C(AC)=0, THIS TEST PASSES; OTHERWISE AOJ OR SOJ FAILED. + +C16200: AC=17 + SETZ AC, ;PRELOAD AC WITH 0 + REPEAT ^D10,< + SOJ AC,. ;*SOJ SHOULD SUBTRACT 1 FROM THE AC + AOJ AC,. ;*AOJ SHOULD ADD 1 TO THE AC> + SKIPE AC ;PASS IF C(AC) IS UNCHANGED. I.E. C(AC)=0 + STOP + +;********** +;THIS TEST VERIFIES THAT SOJ SETS CRY0/1 FLAGS IF C(E) IS A NON-ZERO NUMBER OTHER +;THAN 400000,,0. IN THIS CASE, C(E)=1. FIRST THE FLAGS ARE RESET; THEN +;SOJ IS EXECUTED. THE FLAGS ARE CHECKED. IF CRY0 AND CRY1 ARE SET +;AND AROV AND FOV ARE RESET, THIS TEST PASSES. + +C16201: JFCL 17,.+1 ;RESET ARITHMETIC FLAGS + MOVEI 1 ;PRELOAD E WITH 1 + SOJ ;*SOJ SHOULD SET CRY0/1 + JCRY0 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY1 .+2 ;PASS IF CRY1 IS SET + STOP + JOV .+2 ;PASS IF AROV IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** + +;THIS TEST VERIFIES THAT AOJ SETS CRY0 AND CRY1 FLAG IF C(E) IS -1,,-1 +;FIRST THE FLAGS ARE RESET; THEN +;AOJ IS EXECUTED. THE FLAGS ARE CHECKED. +;IF CRY0 AND CRY1 ARE SET AND AROV AND FOV ARE RESET, THIS TEST PASSES. + +C16202: JFCL 17,.+1 ;RESET ARITHMETIC FLAGS + SETO ;PRELOAD E WITH 1 + AOJ ;*AOJ SHOULD SET CRY0 AND CRY1 + JCRY0 .+2 ;PASS IF CRY0 IS SET + STOP + JCRY1 .+2 ;PASS IF CRY1 IS SET + STOP + JOV .+2 ;PASS IF AROV IS RESET + SKIPA + STOP + JFOV .+2 ;PASS IF FOV IS RESET + SKIPA + STOP + +;********** +SUBTTL TEST OF MEMORY, BOTH AND SELF MODE INSTRUCTIONS + +;********** + +;THIS TEST VERIFIES THAT ADDM DOES NOT MODIFY C(AC) +;BOTH AC AND E ARE PRELOADED WITH -1,,-1. THEN ADDM IS EXECUTED. +;THIS TEST PASSES IF C(AC) ARE UNCHANGED + +C16400: SETOB 1 ;PRELOAD AC, E WITH -1,,-1 + ADDM 1 ;*ADDM SHOULD NOT AFFECT C(AC) + CAME [-1] ;PASS IF C(AC) IS UNMODIFIED BY ADDM + STOP + +;********** + +;THIS TEST VERIFIES THAT HRREM DOES NOT MODIFY C(AC) +;THE AC IS PRELOADED WITH 0,,-1. THEN HRRM IS EXECUTED. +;THIS TEST PASSES IF C(AC) ARE UNCHANGED + +C16500: MOVEI -1 ;PRELOAD AC WITH 0,,-1 + HRREM 1 ;*HRRM SHOULD NOT AFFECT C(AC) + CAIE -1 ;PASS IF C(AC) IS UNMODIFIED BY HRRM + STOP + +;********** +;THIS TEST VERIFIES THAT MOVSM DOES NOT MODIFY C(AC) +;THE AC IS PRELOADED WITH 0,,-1. THEN MOVSM IS EXECUTED. +;THIS TEST PASSES IF C(AC) ARE UNCHANGED + +C16600: MOVEI -1 ;PRELOAD AC WITH 0,,-1 + MOVSM 1 ;*MOVSM SHOULD NOT AFFECT C(AC) + CAIE -1 ;PASS IF C(AC) IS UNMODIFIED BY MOVSM + STOP + +;********** + +;THIS TEST VERIFIES THAT XORM DOES NOT MODIFY C(AC) +;BOTH AC AND E ARE PRELOADED WITH -1,,-1. THEN XORM IS EXECUTED. +;THIS TEST PASSES IF C(AC) ARE UNCHANGED + +C16700: SETOB 1 ;PRELOAD AC, E WITH -1,,-1 + XORM 1 ;*XORM SHOULD NOT AFFECT C(AC) + CAME [-1] ;PASS IF C(AC) IS UNMODIFIED BY XORM + STOP + +;********** +;THIS TEST VERIFIES THAT ADDB ADDS C(AC) TO C(E) AND PLACES THE +;RESULT IN BOTH AC AND E. IN THIS TEST, BOTH AC AND E ARE PRELOADED +;WITH -1,,-1, THEN, ADDB IS EXECUTED. C(AC) IS THEN COMPARED TO C(E); +;AND C(AC) IS THEN COMPARED TO -2. IF BOTH OF THESE COMPARISONS SUCCEED, THIS +;TEST PASSES; OTHERWISE, ADDB FAILED + +C17000: SETOB 1 ;PRELOAD AC, E WITH -1,,-1 + ADDB 1 ;*ADDB SHOULD ADD C(AC) TO C(E) AND PLACE RESULT + ;INTO BOTH AC AND E + CAME 1 ;PASS IF C(AC)=C(E) + STOP + CAME [-2] ;PASS IF C(AC)=-2 + STOP + +;********** + +;THIS TEST VERIFIES THAT ADDM ADDS C(AC) TO C(E) AND PLACES THE RESULT IN E +;IN THIS CASE, AC, E ARE BOTH PRELOADED WITH -1; THEN, ADDM IS EXECUTED. +;E IS THEN CHECKED FOR -2. IF C(E)=-2, THIS TEST PASSES; OTHERWISE, ADDM FAILED + +C17100: SETOB 1 ;PRELOAD AC, E WITH -1,,-1 + ADDM 1 ;*ADDM SHOULD ADD C(AC) TO C(E) + CAME 1,[-2] ;PASS IF C(E)=-2 + STOP + +;********** +;THIS TEST VERIFIES THAT HLLOS PLACES ONES ON THE RIGHT HALF OF E +;BUT DOES NOT AFFECT THE LEFT HALF OF E. IN THIS CASE, +;E IS PRELOADED WITH 0; THE, HLLOS IS EXECUTED. THE RESULT +;IN E SHOULD BE 0,,-1. IF C(E)=0,,-1, THIS TEST PASSES + +C17200: SETZM 1 ;PRELOAD E WITH 0 + HLLOS 1 ;*HLLOS SHOULD PLACE 0,,-1 INTO E + CAIE 1,-1 ;PASS IF C(E)=0,,-1 + STOP + +;********** + +;THIS TEST VERIFIES THAT MOVSS SWAPS BOTHS HALVES OF E AND +;PLACES THE RESULT IN E. IN THIS CASE, E IS PRELOADED WITH +;-1,,0; THEN, MOVSS IS EXECUTED. THE RESULT IN E SHOULD BE 0,,-1. +;IF C(E)=0,,-1, THIS TEST PASSES + +C17300: MOVSI 1,-1 ;PRELOAD E WITH -1,,0 + MOVSS 1 ;*MOVSS SHOULD PLACE 0,,-1 INTO E + CAIE 1,-1 ;PASS IF C(E)=0,,-1 + STOP + +;********** +;THIS TEST VERIFIES THAT AOS ADDS ONE TO MEMORY BUT DOES NOT SKIP +;FIRST, E IS PRELOADED WITH -1,-1; THEN, AOS IS EXECUTED. NEXT, E IS CHECKED FOR 0. +;IF C(E) IS NOT 0 OR AOS SKIPPED, THIS TEST FAILS + +C17400: SETOB 1 ;PRELOAD E WITH -1,,-1 + AOS 1 ;*AOS SHOULD ADD TO C(E) AND NOT SKIP + CAIE 1,0 ;PASS IF C(E)=0,,0 AND AOS DID NOT SKIP + STOP + +;********** + +;THIS TEST VERIFIES THAT HRLM PLACES C(AC-RIGHT) INTO E-LEFT AND DOES +;NOT MODIFY E-RIGHT. IN THIS CASE, AC IS PRELOADED WITH 0 AND E IS PRELOADED +;WITH -1,,-1. THEN, HRLM IS EXECUTED. E IS THEN CHECKED FOR 0,,-1. IF +;C(E)=0,,-1, THIS TEST PASSES + +C17500: SETZ ;PRELOAD AC WITH 0 + SETO 1, ;PRELOAD E WITH -1,,-1 + HRLM 1 ;*HRLM SHOULD PLACE 0,,-1 INTO E + CAIE 1,-1 ;PASS IF C(E)=0,,-1 + STOP + +;********** +;THIS TEST VERIFIES THAT HRRS DOES NOT MODIFY E +;E IS PRELOADED WITH 0 AND AC IS PRELOADED WITH -1,,-1. +;HRRS IS EXECUTED; THEN E IS CHECKED. IF C(E) DOES +;NOT CHANGE, THIS TEST PASSES + +C17600: SETO ;PRELOAD AC WITH -1,,-1 + SETZ 1, ;PRELOAD E WITH 0,,0 + HRRS 1 ;*HRRS SHOULD PLACE 0,,0 INTO E + SKIPE 1 + STOP + +;********** + +;THIS TEST VERIFIES THAT HRRZM PLACES C(AC-RIGHT) INTO E-RIGHT AND PLACES +;ZEROS INTO E-LEFT. IN THIS CASE, AC=E=AC1 AND C(AC)=C(E)=-1,,0. HRRZM +;IS EXECUTED AND AC1 IS CHECKED FOR 0. IF AC1=0, THIS TEST PASSES. + +C17700: SETO ;PRELOAD AC0 WITH -1,,-1 + MOVSI 1,-1 ;PRELOAD AC1 WITH -1,,0 + HRRZM 1,1 ;*HRRZM SHOULD PLACE 0 INTO AC1 + SKIPE 1 ;PASS IF C(AC1)=0 + STOP + +;********** +;THIS TEST VERIFIES THAT JFCL 17,.+1 NEVER JUMPS AND DOES NOT MODIFY C(AC0). +;FIRST, AC0 IS PRELOADED; THEN, JFCL IS EXECUTED. IF AC0 IS MODIFIED +;OR JFCL SKIPS, THIS TEST FAILS + +C20000: SETZ ;CLEAR AC0 + JFCL 17,.+1 ;*JFCL SHOULD NOT JUMP OR MODIFY C(AC0). + SKIPE ;PASS IF C(AC0)=0 AND JFCL DID NOT JUMP + STOP + +;********** + +;THIS TEST VERIFIES THAT XORM PERFORMS THE LOGICAL EXCLUSIVE OR FUNCTION +;BETWEEN C(AC) AND C(E) AND PLACES THE RESULT INTO E +;IN THIS CASE, AC AND E ARE PRELOADED WITH -1,,-1; THEN, XORM IS +;EXECUTED. IF THE RESULT IN E IS 0, THE TEST PASSES + +C20100: SETOB 1 ;PRELOAD AC,E WITH -1,,-1 + XORM 1 ;*XORM SHOULD PLACE 0 INTO E + CAIE 1,0 ;PASS IF C(E)=0 + STOP + +;********** +;THIS TEST VERIFIES THAT SETZB PLACES ZEROS INTO BOTH AC AND E. +;AFTER SETZB IS EXECUTED, BOTH AC AND E ARE CHECKED +;FOR 0. IF EITHER AC OR E CONTAINS ANY ONES, THIS TEST FAILS + +C20200: SETZB 1 ;*SETZB SHOULD PLACE ZEROES IN BOTH AC AND E + CAMN [0] ;FAIL IF C(AC) IS NON-ZERO + CAME 1 ;FAIL IF C(E) IS NON-ZERO + STOP + +;********** + +;THIS TEST VERIFIES THAT SETAB PLACES C(AC) INTO BOTH AC AND E. +;FIRST, AC IS PRELOADED WITH -1,,-1 AND E IS PRELOADED WITH 0; +;THEN, SETAB IS EXECUTED. BOTH AC AND E ARE CHECKED FOR -1,,-1 +;IF EITHER AC OR E CONTAIN ANY ZEROS, THIS TEST FAILS. + +C20300: SETZ 1, ;PRELOAD E WITH 0 + SETO ;PRELOAD AC WITH -1,,-1 + SETAB 1 ;*SETAB SHOULD PLACE -1,,-1 INTO BOTH AC AND E + CAMN [-1] ;FAIL IF C(AC) IS NOT -1,-1 + CAME 1 ;FAIL IF C(E) IS NOT -1,,-1 + STOP + +;********** +SUBTTL XCT INSTRUCTION - BASIC TESTS + +;********** + +;THIS TEST VERIFIES THAT XCT WILL EXECUTE THE INSTRUCTION SPECIFIED BY C(E) +;IN THIS CASE, C(E) SPECIFIES A MOVEI INSTRUCTION +;AFTER EXECUTING MOVEI, CONTROL SHOULD RETURN TO +;THE NEXT SEQUENTIAL INSTRUCTION FOLLOWING XCT. +;THIS TEST PASSES IF CONTROL RETURNS TO THE NEXT SEQUENTIAL INSTRUCTION FOLLOWING XCT + +C20400: SETZB 1 ;CLEAR AC0 AND AC1 + XCT [MOVEI 1,.+2] ;*XCT SHOULD RETURN CONTROL TO NEXT INSTRUCTION + SKIPA + STOP + +;********** + +;THIS TEST VERIFIES THAT XCT WILL EXECUTE THE INSTRUCTION SPECIFIED BY C(E) +;IN THIS CASE, C(E) SPECIFIES A MOVEI INSTRUCTION. +;AFTER EXECUTING MOVEI, THE AC SPECIFIED BY MOVEI IS CHECKED FOR +;0,,1 (THE EXPECTED RESULT). IF C(AC)=0,,1, THIS TEST PASSES + +C20500: SETZB 1 ;CLEAR AC + XCT [MOVEI 1,1] ;*XCT OF MOVEI SHOULD PLACE 1 IN THE AC + CAIE 1,1 ;PASS IF C(AC)=1 + STOP + +;********** +;THIS TEST VERIFIES THAT A NEST OF XCT INSTRUCTIONS WILL EXECUTE +;THE INSTRUCTION SPECIFIED BY THE MOST NESTED XCT AND RETURN CONTROL TO +;THE NEXT SEQUENTIAL INSTRUCTION FOLLOWING THE FIRST XCT. +;IN THIS CASE, THE EXECUTED INSTRUCTION IS MOVEI. AFTER EXECUTING THE MOVEI, +;C(AC) IS CHECKED FOR 0,,-1 (THE EXPECTED RESULT). IF C(AC)=0,,-1, THIS TEST PASSES + +C20600: SETZB 1 ;CLEAR AC + XCT [XCT[XCT[XCT[XCT[MOVEI 1,-1]]]]] ;*NESTED XCT OF MOVEI + ;SHOULD PLACE 0,,-1 INTO AC + CAIE 1,-1 ;PASS IF C(AC)=0,,-1 + STOP + +;********** + +;THIS TEST VERIFIES THAT XCT WILL NOT MODIFY AN AC WHICH IS NOT SPECIFIED BY THE +;EXECUTED INSTRUCTION. IN THIS CASE, AC0 IS CLEARED AND THEN CHECKED FOR ZERO AFTER +;THE XCT INSTRUCTION IS EXECUTED. AC0 SHOULD NOT BE MODIFIED. + +C20700: SETZB 1 ;CLEAR AC0,AC1 + XCT [MOVE 1,[-1]] ;*XCT SHOULD NOT MODIFY AC0 + SKIPE ;PASS IF AC0 WAS NOT MODIFIED + STOP + +;********** +;THIS TEST VERIFIES THAT XCT OF SKIPA SHOULD RETURN CONTROL TO THE +;SECOND SEQUENTIAL INSTRUCTION FOLLOWING XCT + +C21000: XCT [SKIPA] ;XCT OF SKIPA SHOULD RETURN CONTROL TO .+2 + STOP + +;********** +SUBTTL INDIRECT ADDRESSING - BASIC TESTS + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN BOTH E AND @E +;ARE WITHIN THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A MOVE. +;AFTER MOVE IS EXECUTED, C(AC) IS CHECKED FOR 0, +;THE INITIAL CONTENTS OF THE INDIRECT ADDRESS + +C21100: SETOM 1 ;PRELOAD AC WITH -1,,-1 + MOVEI 7,3 ;SETUP DIRECT ADDRESS WITH INDIRECT ADDRESS + SETZM 3 ;PRELOAD INDIRECT ADDRESS WITH 0 + MOVE 1,@7 ;*FWT FROM INDIRECT ADDRESSS SHOULD + ;PLACE 0 INTO THE AC + SKIPE 1 ;PASS IF C(AC)=0 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN BOTH E AND @E +;ARE WITHIN THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A MOVE. +;AFTER MOVE IS EXECUTED, C(AC) IS CHECKED FOR -1,,-1, +;THE INITIAL CONTENTS OF THE INDIRECT ADDRESS + +C21200: SETZM 1 ;PRELOAD AC WITH -1,,-1 + MOVEI 7,3 ;SETUP DIRECT ADDRESS WITH INDIRECT ADDRESS + SETOM 3 ;PRELOAD INDIRECT ADDRESS WITH -1,,-1 + MOVE 1,@7 ;*FWT FROM INDIRECT ADDRESS SHOULD + ;PLACE -1,,-1 INTO THE AC + CAME 1,[-1,,-1] ;PASS IF C(AC)=-1,,-1 + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN BOTH E AND @E +;ARE WITHIN THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A MOVE. +;AFTER MOVE IS EXECUTED, C(AC) IS CHECKED FOR 707070,,707070, +;THE INITIAL CONTENTS OF THE INDIRECT ADDRESS + +C21300: SETZM 1 ;PRELOAD AC WITH 0 + MOVEI 7,3 ;SETUP DIRECT ADDRESS WITH INDIRECT ADDRESS + MOVE 3,[707070,,707070] ;PRELOAD INDIRECT ADDRESS WITH 707070,,707070 + MOVE 1,@7 ;*FWT FROM INDIRECT ADDRESS SHOULD + ;PLACE 707070,,707070 INTO THE AC + CAME 1,[707070,,707070] ;PASS IF C(AC)=707070,,707070 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN E IS WITHIN THE AC RANGE +;AND @E IS BEYOND THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A MOVE. +;AFTER MOVE IS EXECUTED, C(AC) IS CHECKED FOR 707070,,707070, +;THE INITIAL CONTENTS OF THE INDIRECT ADDRESS + +C21400: JRST .+2 + XWD 707070,707070 ;INDIRECT ADDRESS AND ITS DATA + SETZM 1 ;PRELOAD AC WITH 0 + MOVEI 7,C21400+1 ;SETUP DIRECT ADDRESS WITH INDIRECT ADDRESS + MOVE 1,@7 ;*FWT FROM INDIRECT ADDRESS SHOULD + ;PLACE 707070,,707070 INTO AC + CAME 1,C21400+1 ;PASS IF C(AC)=707070,,707070 + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN BOTH E AND @E +;ARE BEYOND THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A MOVE. +;AFTER MOVE IS EXECUTED, C(AC) IS CHECKED FOR 202020,,202020, +;THE INITIAL CONTENTS OF THE INDIRECT ADDRESS + +C21500: JRST .+3 + .+1 ;DIRECT ADDRESS AND ITS DATA + XWD 202020,202020 ;INDIRECT ADDRESS AND ITS DATA + SETZM 1 ;PRELOAD AC WITH 0 + MOVE 1,@C21500+1 ;*FWT FROM INDIRECT ADDRESS SHOULD + ;PLACE 202020,,202020 INTO AC + CAME 1,C21500+2 ;PASS IF C(AC)=202020,,202020 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN BOTH E AND @E +;ARE BEYOND THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A CAME. + +C21600: JRST .+3 + .+1 ;DIRECT ADDRESS AND ITS DATA + XWD 272727,272727 ;INDIRECT ADDRESS AND ITS DATA + MOVE 1,C21600+2 ;PRELOAD AC + CAME 1,@C21600+1 ;*CAME OF DATA FROM INDIRECT ADDRESS - NON-AC RANGE + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING WORKS WHEN E IS WITHIN THE AC RANGE +;AND @E IS BEYOND THE AC RANGE. +;THE INSTRUCTION SPECIFYING INDIRECT ADDRESSING IS A CAME. + +C21700: JRST .+2 + XWD 252525,252525 ;INDIRECT ADDRESS AND ITS DATA + MOVEI 7,C21700+1 ;SETUP DIRECT ADDRESS WITH INDIRECT ADDRESS + MOVE 1,C21700+1 ;SETUP AC + CAME 1,@7 ;*CAME IF DATA FROM INDIRECT ADDRESS - AC RANGE + STOP + +;********** +SUBTTL TEST INDIRECT ADDRESSING WITH INDEXING + +;SETUP INDEX REGISTERS + + MOVEI 1,-4 + MOVEI 3,2 + MOVEI 4,10 + MOVEI 5,1 + MOVEI 6,5 + MOVEI 7,7 + MOVEI 10,4 + MOVEI 11,-6 + MOVEI 12,5 + MOVEI 13,2 + + JRST C22000 ;RESUME TEST + +;INDIRECT ADDRESSING/INDEXING TEST TABLE + +;;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; + +;DO NOT MODIFY THIS TABLE OR TESTS C21700 THRU C22600 INDEPENDENTLY ! + +;;;;;;;;;; ;;;;;;;;;; ;;;;;;;;;; + +E217: E217A(3) +E220: @E220A +E220B: 220220,,220220 +E217A: @E221A ;E221-4 +E221B: 221221,,221221 +E222A: 217217,,217217 ;E217A+2 +E220A: E220B +E221: E221 +E221A: E221B +E222: E221 +E223A: 223223,,223223 +E224A: E224A(4) ;E223-6 + 222222,,222222 ;E222A+7 +E225: E225 + E222A(7) ;E222+5 + @E225A ;E225+2 +E225B: 225225,,225225 +E223: E223 +E225A: E225B + 224224,,224224 ;E224A+10 +E226B: 226226,,226226 + E223A ;E223+4 +E226A: @E226A(5) ;E223+5 + E226B ;E226A+1 +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E217 IS TESTED WHERE C(E217)=E217A(3) AND C(3)=0,,2. +;HENCE, THE RESULT IN THE AC SHOULD BE C(E217A+2)=217217,,217217 + +C22000: SETOM 2 ;INITIALIZE AC + MOVE 2,@E217 ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E217A+2 ;PASS IF C(AC)=217217,,217217 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E220 IS TESTED WHERE C(E220)=@E220A AND C(E220A)=E220B. +;HENCE, THE RESULT IN THE AC SHOULD BE C(E220B)=220220,,220220 + +C22100: SETZM 2 ;INITIALIZE AC + MOVE 2,@E220 ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E220B ;PASS IF C(AC)=220220,,220220 + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE,E221(1) 2,@E217 IS TESTED WHERE C(1)=-4 AND E221-4=E217A +;HENCE, THE RESULT IN THE AC SHOULD BE C(E217A)=@E221A=20,,E221A + +C22200: SETOM 2 ;INITIALIZE AC + MOVE 2,E221(1) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E217A ;PASS IF C(AC)=@E221A=20,,E221A + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,E222(6) IS TESTED WHERE C(6)=5 +;HENCE, THE RESULT IN THE AC SHOULD BE C(E222+5)=E222A(7)=7,,E222A + +C22300: SETZM 2 ;INITIALIZE AC + MOVE 2,E222(6) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E222+5 ;PASS IF C(AC)=E222A(7)=7,,E222A + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E223(10) IS TESTED WHERE C(10)=4 AND C(E223+4)=E223A +;HENCE, THE RESULT IN THE AC SHOULD BE C(E223A)=223223,,223223 + +C22400: SETOM 2 ;INITIALIZE AC + MOVE 2,@E223(10) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E223A ;PASS IF C(AC)=223223,,223223 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E223(11) IS TESTED WHERE C(11)=-6, C(E223-6)=E224A(4) AND C(4)=10 +;HENCE, THE RESULT IN THE AC SHOULD BE C(E224A+10)=224224,,224224 + +C22500: SETZM 2 ;INITIALIZE AC + MOVE 2,@E223(11) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E224A+10 ;PASS IF C(AC)=224224,,224224 + STOP + +;********** +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E225(13) IS TESTED WHERE C(13)=2, C(E225+2)=@E225A +;AND C(E225A)=E225B +;HENCE, THE RESULT IN THE AC SHOULD BE C(E225B)=225225,,225225 + +C22600: SETOM 2 ;INITIALIZE AC + MOVE 2,@E225(13) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E225B ;PASS IF C(AC)=225225,,225225 + STOP + +;********** + +;THIS TEST VERIFIES THAT INDIRECT ADDRESSING IN COMBINATION WITH INDEXING FUNCTIONS CORRECTLY. +;IN THIS CASE, MOVE 2,@E223(12) IS TESTED WHERE C(12)=5, C(E223+5)=@E226A(5), +;C(5)=1 AND C(E226A+1)=E226B +;HENCE, THE RESULT IN THE AC SHOULD BE C(E226B)=226226,,226226 + +C22700: SETZM 2 ;INITIALIZE AC + MOVE 2,@E223(12) ;TEST INDIRECT ADDRESSING WITH INDEXING + CAME 2,E226B ;PASS IF C(AC)=226226,,226226 + STOP + +;********** + + JRST BEGEND +``` diff --git a/modules/pdp10/lib/debugger.js b/modules/pdp10/lib/debugger.js index 1ce610709..3d2716b44 100644 --- a/modules/pdp10/lib/debugger.js +++ b/modules/pdp10/lib/debugger.js @@ -2448,6 +2448,7 @@ class DebuggerPDP10 extends Debugger { */ loadAssembly(macro10, addrLoad) { + this.println("loadAssembly()"); } /** diff --git a/modules/pdp10/lib/macro10.js b/modules/pdp10/lib/macro10.js index 7b39b5aa7..ea7ed4d6d 100644 --- a/modules/pdp10/lib/macro10.js +++ b/modules/pdp10/lib/macro10.js @@ -70,23 +70,41 @@ class Macro10 { var macro10 = this; Web.getResource(sURL, null, true, function(sURL, sResource, nErrorCode) { if (!nErrorCode) { - nErrorCode = macro10.parse(sResource); + nErrorCode = macro10.parse(sURL, sResource); } macro10.done(macro10, sURL, nErrorCode); }); } /** - * parse(sResource) + * parse(sURL, sResource) * * Begin the assembly process. * * @this {Macro10} + * @param {string} sURL * @param {string} sResource * @return {number} */ - parse(sResource) { - this.dbg.println("resource length: " + sResource.length); - return 999; + parse(sURL, sResource) + { + var match, re; + var sText = sResource; + if (Str.endsWith(sURL, ".html")) { + /* + * We want to parse ONLY text between
...
tags. + */ + sText = ""; + re = /
([\s\S]*?)<\/pre>/gi;
+            while (match = re.exec(sResource)) {
+                sText += match[1];
+            }
+        }
+        var i;
+        var asLines = sText.split(/\r?\n/);
+        for (i = 0; i < asLines.length; i++) {
+            //this.dbg.println(asLines[i]);
+        }
+        return 0;
     }
 }
diff --git a/pubs/dec/pdp10/README.md b/pubs/dec/pdp10/README.md
index ca2bc9c64..5ad4d1759 100644
--- a/pubs/dec/pdp10/README.md
+++ b/pubs/dec/pdp10/README.md
@@ -4,11 +4,19 @@ title: DEC PDP-10 Publications and Papers
 permalink: /pubs/dec/pdp10/
 ---
 
-PDP-10 Hardware Publications
-----------------------------
+PDP-10 Publications
+-------------------
 
 This page summarizes PDP-10 documentation that was useful in creating [PDPjs](/docs/pdpjs/).  In most cases,
 these documents came from the PDF Document Archive at [bitsavers.org](http://bitsavers.org),  in the [/pdf/dec/pdp10/](http://bitsavers.org/pdf/dec/pdp10/)
 directory.  If a PDF was not searchable, it was "OCR'ed" before being archived below. 
 
+PDP-10 Hardware Publications
+----------------------------
+
 - [PDP-10 System Reference Manual (1968)](http://archive.pcjs.org/pubs/dec/pdp10/ka10/DEC-10-HGAA-D_PDP-10_System_Reference_Manual_May1968.pdf) [[Original PDF](http://bitsavers.trailing-edge.com/pdf/dec/pdp10/KA10/DEC-10-HGAA-D_PDP-10_System_Reference_Manual_May1968.pdf)]
+
+PDP-10 Software Publications
+----------------------------
+
+- [MACRO-10 Assembler Programmer's Reference Manual (April 1972)](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) [[Original PDF](http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp10/TOPS10/1973_Assembly_Language_Handbook/02_1973AsmRef_macro.pdf)]
diff --git a/versions/pdpjs/1.34.2/pdp10-dbg.js b/versions/pdpjs/1.34.2/pdp10-dbg.js
index 1842b2062..a2fa3afd7 100644
--- a/versions/pdpjs/1.34.2/pdp10-dbg.js
+++ b/versions/pdpjs/1.34.2/pdp10-dbg.js
@@ -35,14 +35,13 @@ var qa={ec:0,xb:1,gc:2,hc:3,ic:4,jc:5,kc:6,lc:7,lb:8,mc:9,yb:10,nc:11,oc:12,zb:1
 Uc:88,Vc:89,Bb:90,"[":91,"\\":92,"]":93,"^":94,_:95,"`":96,Wc:97,Xc:98,Yc:99,d:100,e:101,Zc:102,$c:103,ad:104,bd:105,cd:106,k:107,dd:108,ed:109,n:110,fd:111,p:112,q:113,r:114,gd:115,t:116,jd:117,kd:118,ld:119,x:120,y:121,z:122,"{":123,"|":124,"}":125,"~":126,Ab:127};
 function ra(a,b){var c;if(a){b||(b=10);var d=a.charAt(0),e=0a&&-1a&&(a+=Math.pow(b,c)),a>=Math.pow(b,c)&&(c=Math.ceil(Math.log(a)/Math.log(b))));if(null==a)for(;0=f?48:55),e=String.fromCharCode(f)+e;a=Math.trunc(a/b)}return(void 0===d?"":d)+e}function ta(a,b,c){b?12"']/g,function(a){return Ba[a]})}
-function Ca(a,b){return(a+"                                        ").slice(0,b)}function Da(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Ba={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ea(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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 Ga(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a,
+function q(a,b,c){b?9"']/g,function(a){return Aa[a]})}function Ba(a,b){return(a+"                                        ").slice(0,b)}
+function Ca(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}var Aa={"&":"&","<":"<",">":">",'"':""","'":"'"};function Da(a,b,c){var d=0,e=a.length,f=0;for(c||(c=function(a,b){return a>b?1:a>1,h;h=c(b,a[g]);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 Fa(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),g;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(f=h.responseText,200==h.status||!h.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(e=h.status||-1),d&&d(a,
 f,e))});if(b&&"object"==typeof b){var k="",n;for(n in b)b.hasOwnProperty(n)&&(k&&(k+="&"),k+=n+"="+encodeURIComponent(b[n]));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||(f=h.responseText,200!=h.status&&(e=h.status||-1),d&&d(a,f,e),g=[f,e]);return g}
-function Ma(a,b){var c,d={Y:null,U:null,sa:null,ra:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,f,g;if("<"==b.substr(0,1))throw Error(b);g=0>b.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.sa=g.load;d.ra=g.exec;if(e=g.bytes)d.Y=e;else if(e=g.words)for(d.Y=Array(2*e.length),f=c=0;c>8&255;else if(e=g.longs)for(d.Y=Array(4*e.length),f=c=0;cb.indexOf("0x")&&0>b.indexOf("0o")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.sa=g.load;d.ra=g.exec;if(e=g.bytes)d.Y=e;else if(e=g.words)for(d.Y=Array(2*e.length),f=c=0;c>8&255;else if(e=g.longs)for(d.Y=Array(4*e.length),f=c=0;c>8&255,d.Y[f++]=e[c]>>16&255,d.Y[f++]=e[c]>>24&255;else(e=g.data)?d.Ea=e:d.Y=g;d.Y&&(d.Y.length?1==d.Y.length&&(r(d.Y[0]),d=null):(r("Empty resource: "+a),d=null));d.U=g.symbols}catch(h){r("Resource data error ("+a+"): "+h.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c>>f.i;0>>=
 f.i;0>>a.i;0g&&g>=-B&&(g+=E);for(var g=Math.trunc(Math.abs(g))%E,h=d;f--&&h=qa.kb&&c<=qa.Bb&&(b=c-(qa.kb-qa.xb));b&&(a.preventDefault&&a.preventDefault(),d.Ua(b));return!0},c.onkeypress=function(a){a=a||window.event;if(!a.metaKey){var b=a.which||a.keyCode;a.altKey&&b==qa.zb&&(b=qa.yb);d.Ua(b);a.preventDefault&&a.preventDefault()}return!0},c.onpaste=function(a){a.stopPropagation&&a.stopPropagation();
 a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ua(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.Ca=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;Jb(this)};
-l.wb=function(a){if(!this.b){var b=Xc(this.G,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Da(c[0]);if(d!=this.Pa)return;c=Da(c[1]);if(this.b=pb(c)){var e=this.b.exports;if(e){var f=e.connect;f&&f.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Qa+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.ua=function(a,b){if(!b)if(this.wb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0};
+l.wb=function(a){if(!this.b){var b=Xc(this.G,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Ca(c[0]);if(d!=this.Pa)return;c=Ca(c[1]);if(this.b=pb(c)){var e=this.b.exports;if(e){var f=e.connect;f&&f.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Qa+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.ua=function(a,b){if(!b)if(this.wb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0};
 l.ia=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new G(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ua=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;da.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Da(b.substring(c,f))),c=f+1}}return a}
+Xa(function(){for(var a=x(document,w,"serial"),b=0;b([\s\S]*?)<\/pre>/gi;f=d.exec(b);)e+=f[1];f=e.split(/\r?\n/);for(b=0;ba.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Ca(b.substring(c,f))),c=f+1}}return a}
 function Ge(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
 case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
-function He(a,b,c){var d;if(b){b=Ie(a,b);for(var e=0,f=!1,g=b,h=[],k=[],n=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e>=1,ca--;g=t+g;d>>=8}d=q(c,0,!0)+" "+c+". "+ta(c,0,!0)+" "+("0b"+g);32<=c&&127>c&&(d+=" '"+String.fromCharCode(c)+"'")}a.j((null!=b?b+": ":"")+d);return e}
@@ -188,74 +187,74 @@ function lf(a,b){var c;(c=!a.v||!Ib(a.v))||(c=a.v,c.A.V?c=!0:(c.j(c.toString()+"
 l.save=function(){var a=new G(this);a.set(0,Te(this.K));a.set(1,Te(this.ga));a.set(2,Te(this.ba));a.set(3,[this.u,this.P,this.X]);a.set(4,this.F);return a.data()};l.restore=function(a){var b=0;void 0!==a[3]&&(this.K=Ue(this,a[b++]),this.ga=Ue(this,a[b++]),this.ba=Ue(this,a[b++]),this.u=a[b][0],"string"==typeof this.u&&(this.u=[this.u]),this.P=a[b][1],this.X|=a[b][2]);a[4]&&(this.F=a[4]);return!0};l.start=function(a,b){this.N||this.j("running");this.A.L=!0;this.za=a;this.Aa=b};
 l.stop=function(a,b){if(this.A.L){this.A.L=!1;this.B=b-this.Aa;if(!this.N){b="stopped";if(this.B){a-=this.za;var c=0>23&&a.v.xa==b&&(b=od(a.v,1)));if(0d&&(d=a.v.f(b)),0<=d&&(Se(a.i[a.R],b),++a.R==a.i.length&&(a.R=0)));return!1}
-function qf(a,b,c,d){var e=X(b.C),f=a.Da(b,1),g,h,k,n=0,p=f/Ub|0,t;for(t in rf)if(g=rf[t][p&t]){h=+t;p>>=6;switch(h){case 32512:k=Vf;n=p&3;break;case 32256:k=Xf;n=p&7;break;case 29248:k=Yf,n=(p&48)>>2|(p&6)>>1}break}k=k&&k[n]||"";"S"==k&&g>Zf&&(k="B");k=$f[g||0]+k;if(g){if(28700==h)n=f/Vb&127,h=J(a,n,-1);else if(n=f>>23&15,h=J(a,n,-1),g==ag&&(g=bg[n]))k=$f[g],h="";k=Ca(k,8)+(h?h+",":"");f&4194304&&(k+="@");k+=J(a,f&262143,-1);(f=f>>18&15)&&(k+="("+J(a,f,-1)+")")}else k=Ca(k,8)+Ze(f);f=k;g="";h=Z(a,
-e)+":";if(-1!==e.C&&-1!==b.C){do if(k=a.Da(e,1),g+=" "+Ze(k),null==e.C)break;while(e.C!=b.C)}h+=Ca(g,16)+f;c&&(h=Ca(h,48)+";"+(c||""),h=a.v.A.Ga?h+("cycles="+cd(a.v).toString()+" cs="+q(a.v.za)):h+(null!=d?"="+d.toString():""));return h}
-function cg(a,b,c,d){var e=-1,f,g,h=b.toUpperCase(),k;for(k in bg)if(g=bg[k],h==$f[g]){h=$f[ag];c=J(a,+k)+","+c;break}for(var n in rf){f=+n;var p=rf[n];switch(f){case 32512:k=Vf;break;case 32256:k=Xf;break;case 29248:k=Yf;break;default:k=[""]}for(var t in p){g=p[t];for(var C=0;CZf&&(ca="B");if(h==$f[g]+ca){e=29248!=f?C:(C&3)<<1|(C&12)<<2;e=(t|e<<6)*Ub;break}}if(0<=e)break}if(0<=e)break}if(0<=e)if(c)for(b=c.split(","),c=0;c>=6;switch(h){case 32512:k=sf;n=p&3;break;case 32256:k=Wf;n=p&7;break;case 29248:k=Yf,n=(p&48)>>2|(p&6)>>1}break}k=k&&k[n]||"";"S"==k&&g>Zf&&(k="B");k=$f[g||0]+k;if(g){if(28700==h)n=f/Vb&127,h=J(a,n,-1);else if(n=f>>23&15,h=J(a,n,-1),g==ag&&(g=bg[n]))k=$f[g],h="";k=Ba(k,8)+(h?h+",":"");f&4194304&&(k+="@");k+=J(a,f&262143,-1);(f=f>>18&15)&&(k+="("+J(a,f,-1)+")")}else k=Ba(k,8)+Ze(f);f=k;g="";h=Z(a,
+e)+":";if(-1!==e.C&&-1!==b.C){do if(k=a.Da(e,1),g+=" "+Ze(k),null==e.C)break;while(e.C!=b.C)}h+=Ba(g,16)+f;c&&(h=Ba(h,48)+";"+(c||""),h=a.v.A.Ga?h+("cycles="+cd(a.v).toString()+" cs="+q(a.v.za)):h+(null!=d?"="+d.toString():""));return h}
+function cg(a,b,c,d){var e=-1,f,g,h=b.toUpperCase(),k;for(k in bg)if(g=bg[k],h==$f[g]){h=$f[ag];c=J(a,+k)+","+c;break}for(var n in rf){f=+n;var p=rf[n];switch(f){case 32512:k=sf;break;case 32256:k=Wf;break;case 29248:k=Yf;break;default:k=[""]}for(var t in p){g=p[t];for(var C=0;CZf&&(ca="B");if(h==$f[g]+ca){e=29248!=f?C:(C&3)<<1|(C&12)<<2;e=(t|e<<6)*Ub;break}}if(0<=e)break}if(0<=e)break}if(0<=e)if(c)for(b=c.split(","),c=0;ct||127t||15t||262143t||15>>d.i],!1)}a.M=["br"];if(a.I)for(b=1;b>>d.i],!0);a.I=["bw"];a.oa=0;a.ka=0}
 l.Fa=function(a,b,c){var d=!0;c||dg(this,a,b,!1,!0);if(a!=this.b){var e=Re(b);if(-1===e)this.j("invalid address: "+Z(this,b)),d=!1;else{var f=this.H;f.b[e>>>f.i].Fa(e&16383,a==this.I)}}d&&(a.push(b),c?b.ha=!0:(eg(this,a,a.length-1,"set"),Pe(this)));return d};function dg(a,b,c,d,e){var f=!1;c=Re(c);for(var g=1;g>>d.i],b==a.I));h.ha||Pe(a);break}}return f}
 function fg(a,b){for(var c=1;cd;d++){!d||d&3||(c+="\n");var e=a,f=ta(d,2);Se(e.xa,d);f+="="+J(e,e.Da(e.xa),36)+" ";c+=f}if(b){b="";for(d=0;d<$e.length;d++)(e=$e[d]||"")&&(e+="="+J(a,a.hb(d),d>=df?1:d==bf?23:18)+" "),b+=e;c+="\n"+b}return c}l.tb=function(a,b){return a[0]>b[0]?1:a[0]>>0,g],t=Ea(p,k,a.tb);0>t&&p.splice(-(t+1),0,k)}n&&(h.a=n.replace(/''/g,'"'))}a.F.push({hd:b,C:c,Hb:d,U:e,pb:f})}function ig(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b>>0,h=f.Hb;if(e>=g&&e>>0,g],t=Da(p,k,a.tb);0>t&&p.splice(-(t+1),0,k)}n&&(h.a=n.replace(/''/g,'"'))}a.F.push({hd:b,C:c,Hb:d,U:e,pb:f})}function ig(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b>>0,h=f.Hb;if(e>=g&&eb){a.j("unknown register: "+f);return}var f=0,h=a.v;switch(b){case af:H(h,
-g);Se(a.K,h.i);break;case df:f=65536;break;case ef:f=32768;break;case ff:f=131072;break;case gf:f=32;break;case hf:f=262144}f&&(h.u=g?h.u|f:h.u&~f);I(a.G);a.j("updated registers:")}}a.j(hg(a,e));c&&(Se(a.K,d.i),of(a,Z(a,a.K)))}}function ng(a,b){b=Da(b);var c=b.match(/^(['"])(.*?)\1$/);c?1h[0].indexOf("+"))){var n=h[0]+":";h[2]&&(n+=" "+h[2]);a.j(n)}h[3]&&(g=h[3],f=null);h=a.ba;n=b;h.C=n.C;h.Sa=n.Sa;h.ha=n.ha;h.ca=n.ca;a.j(qf(a,b,g,f));e-=b.C-k;c++}}}
 function gg(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.j(mf+b):(a.P&&(a.j("ended assemble at "+Z(a,a.ba)),a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.S=null;if(Ib(a)&&0p||"z"ma.length&&(a.j("note: only "+ma.length+" available"),da=ma.length);ha-=da;0>ha&&(null==ma[ma.length-1].C?(da=ha+da,ha=0):ha+=ma.length);var Bd=
-[];"call"==xf&&(vb=1E5,Bd=["CALL"]);for(void 0!==wf&&a.j(da+" instructions earlier:");0=ma.length&&(ha=0);a.pa=da;zf++;vb--}}zf||(a.j("no "+yf+"history available"),a.pa=void 0)}else{var cb=We(a,la,a.ga);if(cb){var Ia=0,Cf="ds"==$a;if(ya){if("l"==ya.charAt(0))ya=ya.substr(1)||Qg,Ia=Je(a,ya);else{var Df=We(a,ya);Df&&
-(Ia=Df.C-cb.C)}0>Ia&&(Ia=0);65536Hf;Hf++)Ff+=String.fromCharCode((vc%64|0)+32),vc/=64}Ja&&(Ja+="\n");Ja=Cf?Ja+(Ka+","):Ja+(la+": "+Ka+(0>Gf?" "+Ff:""))}Ja&&a.j(Ja);a.ca=Sg}}}}break;case "e":if("else"==g[0])break;var If,Jf,Kf=
-g[0],Ed=g[1];"e"==Kf||"ew"==Kf?(If=a.Da,Jf=a.mb):Ed=null;if(null==Ed)a.j("edit memory commands:"),a.j("\tew [a] [...]  edit words at address a");else{var wc=We(a,Ed,a.ga);if(wc)for(var Fd=2;FdId;){for(var La=null,Wg=256;65536>zb.C>>>0;){Jd.C=a.Da(zb,2);if(null==zb.C||!Wg--)break;if(!(Jd.C&1)){for(var Xg=
-a,xc=Jd,Mf=null,Ab=xc.C,Nf=Ab,Kd=1;6>=Kd&&Ab;Kd++){if(2Tf)a.j("step commands:"),a.j("\tp\tstep over instruction"),a.j("\tpr\tstep over instruction with register update");
-else if(a.N)a.j("step in progress");else{var Uf=X(a.v.i);a.Da(Uf);a.N?(a.Fa(a.b,Uf,!0),kf(a)||(a.G&&gd(a.G),a.N=0)):og(a,Tf?"tr":"t")}break;case "r":if("reset"==b){a.G&&a.G.reset();break}nf(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Cb=+g[2];if(8==Cb||10==Cb||16==Cb)a.ca=Cb;else{a.j("invalid base: "+Cb);break}}a.j("default base: "+a.ca);break;case "cs":var Db;void 0!==g[3]&&(Db=+g[3]);switch(g[2]){case "int":a.v.ka=Db;break;case "start":a.v.Aa=Db;break;case "stop":a.v.ma=Db;break;
+Za);ab+=",state,symbols";a.j("dump memory commands:");a.j("\tdw [a] [n]    dump n words at address a");a.j("\tds [a] [n]    dump n words at address a as JSON");a.j("\tdh [p] [n]    dump n instructions from history position p");ab.length&&a.j("dump extension commands:\n\t"+ab)}else if("state"==la){var yd=pg(a.G,!0);"console"==ya?console.log(yd):(a.ta&&(a.ta.value=""),yd&&a.j(yd))}else if("symbols"==la)for(var zd=0;zdma.length&&(a.j("note: only "+ma.length+" available"),da=ma.length);ha-=da;0>ha&&(null==ma[ma.length-1].C?(da=ha+da,ha=0):ha+=ma.length);var Bd=
+[];"call"==yf&&(vb=1E5,Bd=["CALL"]);for(void 0!==xf&&a.j(da+" instructions earlier:");0=ma.length&&(ha=0);a.pa=da;Af++;vb--}}Af||(a.j("no "+zf+"history available"),a.pa=void 0)}else{var cb=We(a,la,a.ga);if(cb){var Ia=0,Df="ds"==$a;if(ya){if("l"==ya.charAt(0))ya=ya.substr(1)||Qg,Ia=Je(a,ya);else{var Ef=We(a,ya);Ef&&
+(Ia=Ef.C-cb.C)}0>Ia&&(Ia=0);65536If;If++)Gf+=String.fromCharCode((vc%64|0)+32),vc/=64}Ja&&(Ja+="\n");Ja=Df?Ja+(Ka+","):Ja+(la+": "+Ka+(0>Hf?" "+Gf:""))}Ja&&a.j(Ja);a.ca=Sg}}}}break;case "e":if("else"==g[0])break;var Jf,Kf,Lf=
+g[0],Ed=g[1];"e"==Lf||"ew"==Lf?(Jf=a.Da,Kf=a.mb):Ed=null;if(null==Ed)a.j("edit memory commands:"),a.j("\tew [a] [...]  edit words at address a");else{var wc=We(a,Ed,a.ga);if(wc)for(var Fd=2;FdId;){for(var La=null,Wg=256;65536>zb.C>>>0;){Jd.C=a.Da(zb,2);if(null==zb.C||!Wg--)break;if(!(Jd.C&1)){for(var Xg=
+a,xc=Jd,Nf=null,Ab=xc.C,Of=Ab,Kd=1;6>=Kd&&Ab;Kd++){if(2Uf)a.j("step commands:"),a.j("\tp\tstep over instruction"),a.j("\tpr\tstep over instruction with register update");
+else if(a.N)a.j("step in progress");else{var Vf=X(a.v.i);a.Da(Vf);a.N?(a.Fa(a.b,Vf,!0),kf(a)||(a.G&&gd(a.G),a.N=0)):og(a,Uf?"tr":"t")}break;case "r":if("reset"==b){a.G&&a.G.reset();break}nf(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Cb=+g[2];if(8==Cb||10==Cb||16==Cb)a.ca=Cb;else{a.j("invalid base: "+Cb);break}}a.j("default base: "+a.ca);break;case "cs":var Db;void 0!==g[3]&&(Db=+g[3]);switch(g[2]){case "int":a.v.ka=Db;break;case "start":a.v.Aa=Db;break;case "stop":a.v.ma=Db;break;
 default:a.j("unknown cs option");break a}void 0!==Db&&Zc(a.v);a.j("checksums "+(a.v.A.Ga?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(dd(a.v,+g[2])||a.j("warning: using 1x multiplier, previous target not reached"));a.j("target speed: "+(a.v.ba.toFixed(2)+"Mhz")+" ("+a.v.ea+"x)");break;default:if(g[1]){a.j("unknown option: "+g[1]);break}case "?":a.j("debugger options:"),a.j("\tbase #\t\tset default base to #"),a.j("\tcs int #\tset checksum cycle interval to #"),a.j("\tcs start #\tset checksum cycle start count to #"),
-a.j("\tcs stop #\tset checksum cycle stop count to #"),a.j("\tsp #\t\tset speed multiplier to #")}break;case "t":og(a,g[0],g[1]);break;case "u":of(a,g[1],g[2],8);break;case "v":if("var"==g[0]){lg(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.j((Ob||"PDP10")+" version 1.34.2 ("+a.v.qb+",RELEASE)");a.j(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){ng(a,b.substr(1));break}var Ld="commands:",Md;for(Md in qg)Ld+="\n"+Ca(Md,9)+qg[Md];pd(a)||(Ld+="\nnote: history disabled if no exec breakpoints");
-a.j(Ld);break;default:f=!0}f&&(a.j("unknown command: "+b),d=!1)}}catch(Wf){a.j("Debugger "+(Wf.stack||Wf.message)),d=!1}return d}function bd(a,b,c){b=Fe(a,b,c);for(var d in b)if(!gg(a,b[+d]))return!1;return!0}
+a.j("\tcs stop #\tset checksum cycle stop count to #"),a.j("\tsp #\t\tset speed multiplier to #")}break;case "t":og(a,g[0],g[1]);break;case "u":of(a,g[1],g[2],8);break;case "v":if("var"==g[0]){lg(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.j((Ob||"PDP10")+" version 1.34.2 ("+a.v.qb+",RELEASE)");a.j(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){ng(a,b.substr(1));break}var Ld="commands:",Md;for(Md in qg)Ld+="\n"+Ba(Md,9)+qg[Md];pd(a)||(Ld+="\nnote: history disabled if no exec breakpoints");
+a.j(Ld);break;default:f=!0}f&&(a.j("unknown command: "+b),d=!1)}}catch(Xf){a.j("Debugger "+(Xf.stack||Xf.message)),d=!1}return d}function bd(a,b,c){b=Fe(a,b,c);for(var d in b)if(!gg(a,b[+d]))return!1;return!0}
 var qg={"?":"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"},Zf=20,ag=85,$f=".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 CAM 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 JOV JCRY0 JCRY1 JCRY JFOV".split(" "),
 af=0,bf=1,cf=2,df=3,ef=4,ff=5,gf=6,hf=7,$e="PC RA EA C0 C1 OV ND PD".split(" "),rg={},rf=(rg[28672]={0:101},rg[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:ag,11136:83,11264:91,11328:23,11392:24,11456:92,11520:86,11584:87,11648:89,11712:90},rg[32512]={6144:65,6400:59,6656:66,6912:60,7168:67,7424:61,7680:68,7936:62,8192:17,8448:18,8704:19,8960:Zf,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},rg[32256]={12288:71,12800:72,13312:73,13824:74,14336:75,14848:76,15360:77,15872:78},rg[29248]={24576:79,24640:80,25088:81,25152:82},rg[28700]={28672:93,28676:94,28680:95,28684:96,28688:97,
-28692:98,28696:99,28700:100},rg),Vf=["","I","M","S"],Xf=" L E LE A GE N G".split(" "),Yf="N NE NA NN Z ZE ZA ZN C CE CA CN O OE OA ON".split(" "),bg={8:102,4:103,2:104,6:105,1:106},jf=1E3,mf=">> ";Xa(function(){for(var a=x(document,w,"debugger"),b=0;b> ";Xa(function(){for(var a=x(document,w,"debugger"),b=0;b\nLicense: GPL version 3 or later ");for(b=0;bvg){if(wg(d,this.M)){this.B=new G(this,"1.34.2",Fg);wg(this.B)&&(Gg(this,d),a=Hg,Ig(this.B));this.B.set(Cg,Fa());Jg(this.B);var e=this.b&&!this.K;if(a==Dg||nb("Click OK to restore the previous "+Ob+" machine state, or CANCEL to reset the machine.")){if(c=Bg(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?wg(d,g):("error"==f&&"no machine state"!=
+l.Ja=function(a){void 0===a&&(a=this.b||(this.M?Dg:vg));if(!this.w){this.w++;var b=!1,c=!1;this.P=!1;var d=this.I||new G(this,"1.34.2");if(a==Eg)b=!0;else if(a>vg){if(wg(d,this.M)){this.B=new G(this,"1.34.2",Fg);wg(this.B)&&(Gg(this,d),a=Hg,Ig(this.B));this.B.set(Cg,Ea());Jg(this.B);var e=this.b&&!this.K;if(a==Dg||nb("Click OK to restore the previous "+Ob+" machine state, or CANCEL to reset the machine.")){if(c=Bg(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?wg(d,g):("error"==f&&"no machine state"!=
 g?(this.da("Error: "+g),"unable to verify user"==g&&(Qa(Kg,""),this.i=null)):this.j(f+": "+g),Ig(d),wg(d)?(c=Bg(d),e=!0):c=!1))}e&&zg(this,c?d:null)}else a==Hg&&d.clear()}else zg(this);delete this.M;delete this.I}e=ob(this.id);for(f=0;fa[1];a=a[2];this.S=!0;this.A.V=!0;var d=this.J.power;d&&(d.textContent="Shutdown");this.v&&(Lg(this,this.v,b,c,a),I(this,-2),this.v.Z());this.P&&(Gg(this,b),b.clear());!c&&this.B&&(this.B.clear(),delete this.B);this.w=0};
-function Gg(a,b){if(nb("There may be a problem with your "+Ob+" machine.\n\nTo help us diagnose it, click OK to send this "+Ob+" machine state to http://www.pcjs.org.")){var c=a.ba;a=a.i||"";b=b.toString();var d={};d.app=Ob;d.ver="1.34.2";d.url=c;d.user=a;d.type="bug";d.data=b;Ga("http://www.pcjs.org/api/v1/report",d,!0)}}
-function pg(a,b,c){var d,e="none";if(a.w)return null;a.w--;var f=new G(a,"1.34.2"),g=new G(a,"1.34.2",Ag),h=Fa();g.set(Cg,h);f.set(Cg,h);f.set(Mg,"1.34.2");f.set(Ng,window?window.location.href:null);f.set(Og,window?window.navigator.userAgent:"");a.v&&a.v.ia&&(c&&(b&&(a.v.A.Z=a.v.A.L),a.v.W()),d=a.v.ia(b,c),"object"===typeof d&&f.set(a.v.id,d),c&&(a.v.A.V=!1,!1===d&&(e=null)));for(var h=ob(a.id),k=0;k=d||30<=(c.Xa+=d))&&(e.textContent=c.A.L?c.aa.toFixed(2)+"Mhz":"Stopped",c.Xa=0)}if(a.u&&(a=a.u,b=b||0,a.M)){c=a.v.A.L;d=!!(a.v.B&8);if(0>=b||60<=(a.K+=b)){e=a.v.i;if(a.J.PC){var f=a.D&&a.D.ca||8,e=e||0,e=8==f?ta(e,void 0):q(e,void 0);a.J.PC.textContent!=e&&(a.J.PC.textContent=e)}a.K=0}-1>b?a.i=a.v.i:0g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),e?"}"==e.slice(-1)?(e=e.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(e?" parms='"+e+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1PDPjs$2"),
 a=a.replace(/().*?(<\/xsl:variable>)/,"$1"+d+"$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(t){g=null,a=t.message}else a="unrecognized XML: "+(255/g.exec(a)){var e=d[2];b("Loading "+e+"...");Ga(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],n,p=/( [a-z]+=)(['"])(.*?)\2/g;n=p.exec(f);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
+function fh(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");Fa(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],n,p=/( [a-z]+=)(['"])(.*?)\2/g;n=p.exec(f);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
 "");a=a.replace(d[0],g);fh(a,b,c)}})}else c(a,null)}
-function gh(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&x(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=Aa(a))}function g(a){f("Error: "+a);n&&(--ch||fb(!0));n=!1}var h,k,n=!0;ch++;lb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var t=document.head||document.getElementsByTagName("head")[0],C=document.createElement("style");C.type="text/css";C.styleSheet?C.styleSheet.cssText=p:C.appendChild(document.createTextNode(p));t.appendChild(C)}d||
+function gh(a,b,c,d,e){function f(a){if(void 0===k){var b=h&&x(h,"machine-warning");k=b&&b[0]||h}k&&(k.innerHTML=xa(a))}function g(a){f("Error: "+a);n&&(--ch||fb(!0));n=!1}var h,k,n=!0;ch++;lb[b]={};try{if(h=document.getElementById(b)){var p;if("object"==typeof resources&&(p=resources.css)){var t=document.head||document.getElementsByTagName("head")[0],C=document.createElement("style");C.type="text/css";C.styleSheet?C.styleSheet.cssText=p:C.appendChild(document.createTextNode(p));t.appendChild(C)}d||
 (p=a,"pdp"==a.substr(0,3)&&(p="pdpjs"),d="/versions/"+p+"/1.34.2/components.xsl");p=function(e,k){k?dh(d,null,a,null,!1,f,function(a,e){e?(kb(b,d,a),f("Processing "+c+"..."),window.ActiveXObject||"ActiveXObject"in window?(e=k.transformNode(e))?(h.outerHTML=e,--ch||fb(!0)):g("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(a=new XSLTProcessor,a.importStylesheet(e),(e=a.transformToFragment(k,document))?h.parentNode?(h.parentNode.replaceChild(e,h),--ch||
 fb(!0)):g("invalid machine element: "+b):g("transformToFragment failed")):g("unable to transform XML: unsupported browser")):g(a)}):g(e)};"<"!=c.charAt(0)?dh(c,b,a,e,!0,f,p):eh(c,null,b,a,e,!1,f,p)}else g("missing machine element: "+b)}catch(ca){g(ca.message)}return n}window.embedPDP10=function(a,b,c,d){fb(!1);return gh("pdp10",a,b,c,d)};window.embedPDP11=function(a,b,c,d){fb(!1);return gh("pdp11",a,b,c,d)};window.findMachineComponent=function(a,b){return qb(b,a+".machine")};
 window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!tb[a]){for(var c=!0,d=tb,e=a,f=b.length,g=[],h=[],k="",n=null,p=0;p
Date: Fri, 10 Mar 2017 15:42:12 -0800
Subject: [PATCH 5/6] Started work on MACRO-10 parsing

---
 apps/README.md                              |   2 +-
 apps/pdp10/tapes/diags/klad/README.md       |   4 -
 apps/pdp10/tapes/diags/klad/dakad/README.md |  80 ++++++++-------
 modules/pdp10/lib/macro10.js                | 108 +++++++++++++++++---
 4 files changed, 137 insertions(+), 57 deletions(-)

diff --git a/apps/README.md b/apps/README.md
index dce8a53e3..6aca0570c 100644
--- a/apps/README.md
+++ b/apps/README.md
@@ -13,7 +13,7 @@ PCjs has archived selected software for the following machines:
 
 * [IBM PC](pcx86/)
 * [Challenger 1P](c1p/)
-* DEC [PDP-10](pdp10/) and [PDP-11](pdp11/)
+* [PDP-10](pdp10/) and [PDP-11](pdp11/)
 
 PCjs also includes a small collection of disk images in the [Disk Libraries](/disks/):
 
diff --git a/apps/pdp10/tapes/diags/klad/README.md b/apps/pdp10/tapes/diags/klad/README.md
index c77993b2f..ef0b752f7 100644
--- a/apps/pdp10/tapes/diags/klad/README.md
+++ b/apps/pdp10/tapes/diags/klad/README.md
@@ -11,7 +11,3 @@ We have archived selected files from [PDP-10 KLAD Diagnostics Sources](http://pd
 including:
 
 - [KA10 BASIC INSTRUCTION DIAGNOSTIC (MAINDEC-10-DAKAD-B-D)](dakad/)
-
-The Debugger command `a 100 http://archive.pcjs.org/apps/pdp10/tapes/diags/klad/dakadm.mac.html` can be used to test the
-new [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) work-alike assembler being added to
-the PDP-10 Emulator. 
diff --git a/apps/pdp10/tapes/diags/klad/dakad/README.md b/apps/pdp10/tapes/diags/klad/dakad/README.md
index 4cc1c92d8..70bb8100c 100644
--- a/apps/pdp10/tapes/diags/klad/dakad/README.md
+++ b/apps/pdp10/tapes/diags/klad/dakad/README.md
@@ -10,6 +10,10 @@ PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC
 The **PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC** (MAINDEC-10-DAKAD-B-D), as extracted from the
 [original file](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakaam.mac.html), is shown below.
 
+The Debugger command `a 100 http://archive.pcjs.org/apps/pdp10/tapes/diags/klad/dakadm.mac.html` can be used to test the
+new [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) work-alike assembler being added to
+the PDP-10 Emulator.
+ 
 ```
 SUBTTL	DIAGNOSTIC PARAMETERS
 
@@ -33,19 +37,19 @@ DCK=40			;DIVIDE CHECK
 ; STOP - USED FOR SCOPE LOOP, IF INSTRUCTION FAILS, CHANGE (JUMPA .+1)
 ;	 TO A (JUMPA X) TO CYCLE ON FAILING INSTRUCTION
 
-DEFINE	STOP	(A)<
+DEFINE	STOP	(A)<
 	HALT	.+1		;TEST FAILED IF PROGRAM HALTS HERE
 	JUMPA	.+1		;IF TEST FAILS, CHANGE THIS INSTRUCTION (JUMPA .+1)
 				;TO JUMPA X(X IS THE ADDRESS OF THE FIRST
 				;INSTRUCTION IN THE SUBTEST) TO LOOP ON ERROR
-				;AND CHANGE HALT INSTRUCTION TO JUMPA .+1>
+				;AND CHANGE HALT INSTRUCTION TO JUMPA .+1>
 
 ; SFLAG - USED TO CLEAR ALL FLAGS THEN TO SET REQUESTED FLAG
 
-DEFINE	SFLAG	(A)<
+DEFINE	SFLAG	(A)<
 	MOVSI	1,A
 	JFCL	17,.+1		;RESET ALL FLAGS
-	JRST	2,.+1(1)	;SET A FLAG>
+	JRST	2,.+1(1)	;SET A FLAG>
 SUBTTL	DIAGNOSTIC SECTION
 
 START:	SETZM	USER#		;CLEAR USER CONTROL WORD
@@ -134,12 +138,12 @@ SN=500
 ;IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS
 
 C500:	REPEAT	^D16,
-<	ZZ=ZZ+1
-	MOVEI	ZZ,ZZ		;PRELOAD EACH AC WITH ITS ADDR>
+<	ZZ=ZZ+1
+	MOVEI	ZZ,ZZ		;PRELOAD EACH AC WITH ITS ADDR>
 PAGE
 	ZZ=20
 
-	REPEAT	^D16,<
+	REPEAT	^D16,<
 ;THIS TEST VERIFIES THAT ALL ACS EXIST.
 ;FIRST, EACH AC IS PRELOADED WITH ITS OWN ADDRESS;
 ;THEN, THE CONTENTS OF EACH AC IS CHECKED FOR ITS ADDRESS.
@@ -152,7 +156,7 @@ SN=SN+1
 				;IN CASE OF FAILURE, LOOP TO C500 ADDRESS
 
 ;**********
->
+>
 SN=600
 	ZZ=0
 
@@ -162,13 +166,13 @@ SN=600
 ;AC IS CHECKED FOR ITS ADDRESS.  IF ANY AC DOES NOT CONTAIN ITS ADDRESS, THIS TEST FAILS.
 
 C600:	REPEAT	^D15,
-<	ZZ=ZZ+1
+<	ZZ=ZZ+1
 	MOVEI	ZZ		;PRELOAD EACH AC WITH ITS ADDRESS
-	MOVEM	ZZ		;BY REFERENCING EACH AC AS MEMORY.>
+	MOVEM	ZZ		;BY REFERENCING EACH AC AS MEMORY.>
 
 	ZZ=20
 
-	REPEAT	^D15,<
+	REPEAT	^D15,<
 ;THIS TEST VERIFIES THAT AN ADDRESS WITHIN THE AC RANGE MAY BE ACCESSED AS
 ;EITHER AN AC OR A MEMORY LOCATION AND THAT EITHER REFERENCE REFERS TO THE
 ;SAME HARDWARE.  EACH AC IS PRELOADED WITH ITS ADDRESS
@@ -182,11 +186,11 @@ SN=SN+1
 				;IN CASE OF FAILURE, LOOP TO C600 ADDRESS
 
 ;**********
->
+>
 SN=700
 	ZZ=0
 
-C700:	REPEAT	^D15,<
+C700:	REPEAT	^D15,<
 ;THIS TEST VERIFIES THAT THE INDEX REGISTERS ARE ACCESSABLE.
 ;FIRST, AN INDEX REGISTER IS PRELOADED WITH ITS ADDRESS; THEN,
 ;IT IS REFERENCED AS AN INDEX REGISTER.  IF IT CONTAINS ITS ADDRESS, THIS TEST PASSES.
@@ -199,11 +203,11 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 SN=1000
 	ZZ=0
 
-C1000:	REPEAT	^D15,<
+C1000:	REPEAT	^D15,<
 ;THIS TEST VERIFIES THAT ALL INDEX REGISTERS INDEX CORRECTLY.
 ;FIRST, BOTH HALVES OF THE INDEX REGISTER ARE PRELOADED WITH ITS ADDRESS.
 ;THEN, THE INDEX REGISTER IS REFERENCED.  IT IS THEN CHECKED FOR ITS ADDRESS IN BOTH HALVES.
@@ -218,7 +222,7 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 SUBTTL	TEST OF INDEX REGISTER ADDRESSING
 
 ;**********
@@ -241,7 +245,7 @@ C1100:	SETOM	3		;PRELOAD AC3 WITH -1,,1
 SN=1200
 	ZZ=0
 
-C1200:	REPEAT	^D18,<
+C1200:	REPEAT	^D18,<
 ;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY.
 ;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED.  THE MOVE INSTRUCTION
 ;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3.
@@ -251,7 +255,7 @@ C1200:	REPEAT	^D18,<
 
 SN=SN+1
 	ZZ=ZZ+ZZ
-	IFE	ZZ,<ZZ=1>
+	IFE	ZZ,
 	SETOM	3		;PRELOAD AC3 WITH -1,,-1
 	MOVEI	1,ZZ		;PRELOAD AC1 WITH FLOATING 1
 	MOVEI	2,1		;SETUP INDEX REGISTER
@@ -260,11 +264,11 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 SN=1300
 	ZZ=0
 
-C1300:	REPEAT	^D18,<
+C1300:	REPEAT	^D18,<
 ;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY.
 ;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED.  THE MOVE INSTRUCTION
 ;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3.
@@ -274,7 +278,7 @@ C1300:	REPEAT	^D18,<
 
 SN=SN+1
 	ZZ=ZZ+ZZ
-	IFE	ZZ,<ZZ=1>
+	IFE	ZZ,
 	SETOM	3		;PRELOAD AC3 WITH -1,,-1
 	MOVSI	1,ZZ		;PRELOAD AC1 WITH FLOATING 1
 	MOVEI	2,1		;SETUP INDEX REGISTER
@@ -283,7 +287,7 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 ;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY.
 ;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED.  THE MOVE INSTRUCTION
 ;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3.
@@ -302,7 +306,7 @@ C1400:	SETZM	3		;PRELOAD AC3 WITH 0
 SN=1500
 	ZZ=0
 
-C1500:	REPEAT	^D18,<
+C1500:	REPEAT	^D18,<
 ;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY.
 ;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED.  THE MOVE INSTRUCTION
 ;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3.
@@ -311,8 +315,8 @@ C1500:	REPEAT	^D18,<
 ;IF C(AC3)=A FLOATING 0, THIS TEST PASSES.
 
 SN=SN+1
-	ZZ=<ZZ+ZZ+1>&777777
-	IFE	<ZZ-1>,<ZZ=777776>
+	ZZ=&777777
+	IFE	,
 	SETZM	3		;PRELOAD AC3 WITH 0
 	HRROI	1,ZZ		;PRELOAD AC1 WITH FLOATING 0
 	MOVEI	2,1		;SETUP INDEX REGISTER
@@ -321,11 +325,11 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 SN=1600
 	ZZ=0 
 
-C1600:	REPEAT	^D18,<
+C1600:	REPEAT	^D18,<
 ;THIS TEST VERIFIES THAT INDEX REGISTER ADDRESSING FUNCTIONS CORRECTLY.
 ;IN THIS TEST, A MOVE INSTRUCTION USING INDEXING IS EXECUTED.  THE MOVE INSTRUCTION
 ;SHOULD PLACE THE CONTENTS OF THE LOCATION SPECIFIED BY INDEX REGISTER 2 INTO AC3.
@@ -334,8 +338,8 @@ C1600:	REPEAT	^D18,<
 ;IF C(AC3)=A FLOATING 0, THIS TEST PASSES.
 
 SN=SN+1
-	ZZ=<ZZ+ZZ+1>&777777
-	IFE	<ZZ-1>,<ZZ=777776>
+	ZZ=&777777
+	IFE	,
 	SETZM	3		;PRELOAD AC3 WITH 0
 	HRLOI	1,ZZ		;PRELOAD AC1 WITH FLOATING 0
 	MOVEI	2,1		;SETUP INDEX REGISTER
@@ -344,7 +348,7 @@ SN=SN+1
 	STOP
 
 ;**********
->
+>
 ;VERIFY INDEXING WHERE 'E' IS NON-ZERO
 
 SN=1700
@@ -359,7 +363,7 @@ SN=1700
 ;XX+C(ZZ+1 - RIGHT) SHOULD = ZZ.
 
 C1700:	REPEAT	^D15,
-<SN=SN+1
+
 PAGE
 SN=2000
 	ZZ=-1
@@ -381,7 +385,7 @@ SN=2000
 ;IF THE RESULT IN THE AC EQUALS 0,,ZZ, THIS TEST PASSES.
 
 C2000:	REPEAT	^D15,
-<SN=SN+1
+
 SUBTTL	TEST OF EXCH INSTRUCTION
 
 ;**********
@@ -457,7 +461,7 @@ C2710:	CAME	,[XWD -1,0]	;PASS IF C(AC)=-1,,0
 
 C3000:	MOVE	[252525252525]	;PRELOAD AC,E WITH 252525,,252525
 	REPEAT	7,
-<	EXCH			;*EXCH SHOULD PLACE 252525,,252525 INTO AC0>
+<	EXCH			;*EXCH SHOULD PLACE 252525,,252525 INTO AC0>
 	CAME	[252525252525]	;PASS IF C(AC0)=252525,,252525
 	STOP
 
@@ -471,7 +475,7 @@ PAGE
 C3100:	SETZ			;PRELOAD AC WITH 0
 	SETO	1,0		;PRELOAD E WITH -1,,-1
 	REPEAT	7,
-<	EXCH	1		;*EXCH SHOULD EXCHANGE C(AC) AND C(E)>
+<	EXCH	1		;*EXCH SHOULD EXCHANGE C(AC) AND C(E)>
 	CAME	[-1]		;PASS IF C(AC)=-1,,-1
 	STOP
 C3110:	CAME	1,[0]		;PASS IF C(E)=0
@@ -1525,9 +1529,9 @@ C16100:	MOVEI	1		;PRELOAD AC WITH 1
 
 C16200:	AC=17
 	SETZ	AC,		;PRELOAD AC WITH 0
-	REPEAT	^D10,<
+	REPEAT	^D10,<
 	SOJ	AC,.		;*SOJ SHOULD SUBTRACT 1 FROM THE AC
-	AOJ	AC,.		;*AOJ SHOULD ADD 1 TO THE AC>
+	AOJ	AC,.		;*AOJ SHOULD ADD 1 TO THE AC>
 	SKIPE	AC		;PASS IF C(AC) IS UNCHANGED. I.E. C(AC)=0
 	STOP
 
diff --git a/modules/pdp10/lib/macro10.js b/modules/pdp10/lib/macro10.js
index ea7ed4d6d..468a8a74f 100644
--- a/modules/pdp10/lib/macro10.js
+++ b/modules/pdp10/lib/macro10.js
@@ -65,46 +65,126 @@ class Macro10 {
     {
         this.sURL = sURL;
         this.nAddr = nAddr;
-        this.dbg = dbg;
         this.done = done;
+
+        /*
+         * Set up all the services we need to use.
+         */
+        this.println = dbg && dbg.println || console.log;
+
+        /*
+         * Initialize all the tables that MACRO-10 uses.
+         */
+        this.tblMacros = {};
+        this.tblSymbols = {};
+
         var macro10 = this;
         Web.getResource(sURL, null, true, function(sURL, sResource, nErrorCode) {
             if (!nErrorCode) {
-                nErrorCode = macro10.parse(sURL, sResource);
+                nErrorCode = macro10.parseFile(sURL, sResource);
             }
             macro10.done(macro10, sURL, nErrorCode);
         });
     }
 
     /**
-     * parse(sURL, sResource)
+     * parseFile(sPath, sContents)
      *
      * Begin the assembly process.
      *
      * @this {Macro10}
-     * @param {string} sURL
-     * @param {string} sResource
+     * @param {string} sPath
+     * @param {string} sContents
      * @return {number}
      */
-    parse(sURL, sResource)
+    parseFile(sPath, sContents)
     {
-        var match, re;
-        var sText = sResource;
-        if (Str.endsWith(sURL, ".html")) {
+        var sText = sContents;
+        if (Str.endsWith(sPath, ".html")) {
             /*
-             * We want to parse ONLY text between 
...
tags. + * We want to parse ONLY the text between
...
tags, and eliminate any HTML entities. */ sText = ""; - re = /
([\s\S]*?)<\/pre>/gi;
-            while (match = re.exec(sResource)) {
-                sText += match[1];
+            var match, re = /
([\s\S]*?)<\/pre>/gi;
+            while (match = re.exec(sContents)) {
+                var s = match[1];
+                if (s.indexOf('&') >= 0) s = s.replace(/</gi, '<').replace(/>/gi, '>').replace(/&/gi, '&');
+                sText += s;
             }
+            match = sText.match(/&[a-z]+;/i);
+            if (match) this.warning("unrecognized HTML entity: " + match[0]);
         }
         var i;
         var asLines = sText.split(/\r?\n/);
         for (i = 0; i < asLines.length; i++) {
-            //this.dbg.println(asLines[i]);
+            if (!this.parseLine(i + 1, asLines[i])) break;
         }
         return 0;
     }
+
+    /**
+     * parseLine(nLine, sLine)
+     *
+     * @this {Macro10}
+     * @param {number} nLine (line number)
+     * @param {string} sLine (line contents)
+     * @return {boolean}
+     */
+    parseLine(nLine, sLine)
+    {
+        var reLine = /([A-Z$%.][0-9A-Z$%.]*[:=]|)\s*([^\s;]+|)\s*([^;]+|)\s*(;?.*)/i;
+        var match = sLine.match(reLine);
+        if (!match || match[4] && match[4].slice(0, 1) != ';') {
+            this.warning("failed to parse line " + nLine + ": " + sLine);
+            return false;
+        }
+        var sLabel = match[1];
+        var sOperator = match[2];
+        var sOperands = match[3].trim();
+        var sComment = match[4].slice(1);
+        if (sLabel) {
+            var chSep = sLabel.slice(-1);
+            sLabel = sLabel.slice(0, -1);
+            if (chSep == ':') {
+                this.addLabel(sLabel);
+            } else {
+                this.addVariable(sLabel, sOperands = sOperator + sOperands);
+                sOperator = chSep;
+            }
+        }
+        if (DEBUG) this.println(Str.toDec(nLine, 5) + ": label(" + sLabel + ") operator(" + sOperator + ") operands(" + sOperands + ") comment(" + sComment + ")");
+        return true;
+    }
+
+    /**
+     * warning(sWarning)
+     *
+     * @this {Macro10}
+     * @param {string} sWarning
+     */
+    warning(sWarning)
+    {
+        this.println("warning: " + sWarning);
+    }
+
+    /**
+     * addLabel(sLabel)
+     *
+     * @this {Macro10}
+     * @param {string} sLabel
+     */
+    addLabel(sLabel)
+    {
+    }
+
+    /**
+     * addVariable(sVar, sExp)
+     *
+     * @this {Macro10}
+     * @param {string} sVar
+     * @param {string} sExp
+     */
+    addVariable(sVar, sExp)
+    {
+    }
 }

From d4411dfea19a5d4737cfdb7c29b2d2e93d3d8355 Mon Sep 17 00:00:00 2001
From: Jeff 
Date: Fri, 10 Mar 2017 15:42:52 -0800
Subject: [PATCH 6/6] Started work on MACRO-10 parsing

---
 versions/pdpjs/1.34.2/pdp10-dbg.js | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/versions/pdpjs/1.34.2/pdp10-dbg.js b/versions/pdpjs/1.34.2/pdp10-dbg.js
index a2fa3afd7..d82f9fd97 100644
--- a/versions/pdpjs/1.34.2/pdp10-dbg.js
+++ b/versions/pdpjs/1.34.2/pdp10-dbg.js
@@ -161,8 +161,10 @@ l.ja=function(a,b,c){var d=this;switch(b){case Ce:return this.J[b]=c,c.onkeydown
 a.preventDefault&&a.preventDefault();(a=a.clipboardData||window.clipboardData)&&d.Ua(a.getData("Text"))},c.removeAttribute("readonly"),!0}return!1};l.Ca=function(a,b,c,d){this.G=a;this.H=b;this.v=c;this.D=d;Jb(this)};
 l.wb=function(a){if(!this.b){var b=Xc(this.G,"connection");if(b){var c=b.split("->");if(2==c.length){var d=Ca(c[0]);if(d!=this.Pa)return;c=Ca(c[1]);if(this.b=pb(c)){var e=this.b.exports;if(e){var f=e.connect;f&&f.call(this.b,this.u);if(this.B=e.receiveData){this.u=a;this.status("Connected "+this.Qa+"."+d+" to "+c);return}}}}this.status("Unable to establish connection: "+b)}}};l.ua=function(a,b){if(!b)if(this.wb(this.u),!a)this.reset();else if(!this.restore(a))return!1;return!0};
 l.ia=function(a){return a?this.save():!0};l.reset=function(){};l.save=function(){var a=new G(this);a.set(0,[]);return a.data()};l.restore=function(){return!0};l.Ua=function(a){if("number"==typeof a)this.i.push(a);else if("string"==typeof a)for(var b=0,c,d=0;d([\s\S]*?)<\/pre>/gi;f=d.exec(b);)e+=f[1];f=e.split(/\r?\n/);for(b=0;ba.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Ca(b.substring(c,f))),c=f+1}}return a}
+Xa(function(){for(var a=x(document,w,"serial"),b=0;b([\s\S]*?)<\/pre>/gi;e=f.exec(b);)e=e[1],0<=e.indexOf("&")&&(e=e.replace(/</gi,"<").replace(/>/gi,">").replace(/&/gi,"&")),c+=e;(e=c.match(/&[a-z]+;/i))&&d.j("warning: unrecognized HTML entity: "+e[0])}c=c.split(/\r?\n/);for(b=0;ba.w&&a.u.length&&(a.w=0);if(0>a.w||b!=a.u[a.w])a.u.splice(0,0,b),a.w=0;a.w--}else a.P?b="end":b=a.u[a.w+1];a=[];if(b){b=b.replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var g=b.charAt(f);if('"'==g||"'"==g)e?g==e&&(e=null):e=g;else if(g==d&&!e||!g)a.push(Ca(b.substring(c,f))),c=f+1}}return a}
 function Ge(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
 case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
 function He(a,b,c){var d;if(b){b=Ie(a,b);for(var e=0,f=!1,g=b,h=[],k=[],n=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);ed;d++){!d||d&3||(c+="\n");var e=a,f=ta(d,2);Se(e.xa,d);f+="="+J(e,e.Da(e.xa),36)+" ";c+=f}if(b){b="";for(d=0;d<$e.length;d++)(e=$e[d]||"")&&(e+="="+J(a,a.hb(d),d>=df?1:d==bf?23:18)+" "),b+=e;c+="\n"+b}return c}l.tb=function(a,b){return a[0]>b[0]?1:a[0]>>0,g],t=Da(p,k,a.tb);0>t&&p.splice(-(t+1),0,k)}n&&(h.a=n.replace(/''/g,'"'))}a.F.push({hd:b,C:c,Hb:d,U:e,pb:f})}function ig(a,b,c){var d=[],e=Re(b)>>>0;for(b=0;b>>0,h=f.Hb;if(e>=g&&eb){a.j("unknown register: "+f);return}var f=0,h=a.v;switch(b){case af:H(h,